integra-ng 21.1.0 → 21.1.2

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":"integra-ng.mjs","sources":["../../../projects/integra-ng/src/lib/utils/uniquecomponentid.ts","../../../projects/integra-ng/src/lib/components/accordion/accordion.component.ts","../../../projects/integra-ng/src/lib/components/accordion/accordion.component.html","../../../projects/integra-ng/src/lib/components/accordion-list/accordion-list.component.ts","../../../projects/integra-ng/src/lib/components/accordion-list/accordion-list.component.html","../../../projects/integra-ng/src/lib/components/progress-spinner/progress-spinner.component.ts","../../../projects/integra-ng/src/lib/components/progress-spinner/progress-spinner.component.html","../../../projects/integra-ng/src/lib/components/button/button.component.ts","../../../projects/integra-ng/src/lib/components/button/button.component.html","../../../projects/integra-ng/src/lib/directives/tooltip/tooltip.component.ts","../../../projects/integra-ng/src/lib/directives/tooltip/tooltip.directive.ts","../../../projects/integra-ng/src/lib/components/input-text/input-text.component.ts","../../../projects/integra-ng/src/lib/components/input-text/input-text.component.html","../../../projects/integra-ng/src/lib/components/calendar/calendar.component.ts","../../../projects/integra-ng/src/lib/components/calendar/calendar.component.html","../../../projects/integra-ng/src/lib/components/card/card.component.ts","../../../projects/integra-ng/src/lib/components/card/card.component.html","../../../projects/integra-ng/src/lib/components/checkbox/checkbox.component.ts","../../../projects/integra-ng/src/lib/components/checkbox/checkbox.component.html","../../../projects/integra-ng/src/lib/components/chip/chip.component.ts","../../../projects/integra-ng/src/lib/components/chip/chip.component.html","../../../projects/integra-ng/src/lib/components/chips/chips.component.ts","../../../projects/integra-ng/src/lib/components/chips/chips.component.html","../../../projects/integra-ng/src/lib/components/dialog/inner/dialog-actions/dialog-actions.component.ts","../../../projects/integra-ng/src/lib/components/dialog/inner/dialog-actions/dialog-actions.component.html","../../../projects/integra-ng/src/lib/components/confirmation-dialog/confirmation-dialog.component.ts","../../../projects/integra-ng/src/lib/components/confirmation-dialog/confirmation-dialog.component.html","../../../projects/integra-ng/src/lib/components/dialog/dialog-base.ts","../../../projects/integra-ng/src/lib/components/dialog/dialog.component.ts","../../../projects/integra-ng/src/lib/components/dialog/dialog.component.html","../../../projects/integra-ng/src/lib/components/dialog/services/dialog.service.ts","../../../projects/integra-ng/src/lib/components/confirmation-dialog/services/confirmation-dialog.service.ts","../../../projects/integra-ng/src/lib/components/dialog/base-dialog.component.ts","../../../projects/integra-ng/src/lib/components/empty-state/empty-state.component.ts","../../../projects/integra-ng/src/lib/components/empty-state/empty-state.component.html","../../../projects/integra-ng/src/lib/components/textarea/textarea.component.ts","../../../projects/integra-ng/src/lib/components/textarea/textarea.component.html","../../../projects/integra-ng/src/lib/components/tag/tag.component.ts","../../../projects/integra-ng/src/lib/components/tag/tag.component.html","../../../projects/integra-ng/src/lib/components/placeholder/placeholder.component.ts","../../../projects/integra-ng/src/lib/components/placeholder/placeholder.component.html","../../../projects/integra-ng/src/lib/components/no-content/no-content.component.ts","../../../projects/integra-ng/src/lib/components/no-content/no-content.component.html","../../../projects/integra-ng/src/lib/components/layout/services/layout.service.ts","../../../projects/integra-ng/src/lib/components/layout/topbar/topbar.component.ts","../../../projects/integra-ng/src/lib/components/layout/topbar/topbar.component.html","../../../projects/integra-ng/src/lib/components/layout/services/claims-checker.token.ts","../../../projects/integra-ng/src/lib/components/layout/menu/menu.component.ts","../../../projects/integra-ng/src/lib/components/layout/menu/menu.component.html","../../../projects/integra-ng/src/lib/components/layout/sidebar/sidebar.component.ts","../../../projects/integra-ng/src/lib/components/layout/sidebar/sidebar.component.html","../../../projects/integra-ng/src/lib/components/layout/layout.component.ts","../../../projects/integra-ng/src/lib/components/layout/layout.component.html","../../../projects/integra-ng/src/lib/components/listbox/listbox.component.ts","../../../projects/integra-ng/src/lib/components/listbox/listbox.component.html","../../../projects/integra-ng/src/lib/components/radio-button/radio-button.component.ts","../../../projects/integra-ng/src/lib/components/radio-button/radio-button.component.html","../../../projects/integra-ng/src/lib/components/message/message.component.ts","../../../projects/integra-ng/src/lib/components/message/message.component.html","../../../projects/integra-ng/src/lib/components/multi-select/multi-select.component.ts","../../../projects/integra-ng/src/lib/components/multi-select/multi-select.component.html","../../../projects/integra-ng/src/lib/utils/zindexutils.ts","../../../projects/integra-ng/src/lib/components/overlay-panel/overlay-panel.component.ts","../../../projects/integra-ng/src/lib/components/overlay-panel/overlay-panel.component.html","../../../projects/integra-ng/src/lib/components/panel/panel.component.ts","../../../projects/integra-ng/src/lib/components/panel/panel.component.html","../../../projects/integra-ng/src/lib/components/select/select.component.ts","../../../projects/integra-ng/src/lib/components/select/select.component.html","../../../projects/integra-ng/src/lib/components/tabs/tab-panel.component.ts","../../../projects/integra-ng/src/lib/components/tabs/tabs.component.ts","../../../projects/integra-ng/src/lib/components/tabs/tabs.component.html","../../../projects/integra-ng/src/lib/components/tree-view/tree-view.component.ts","../../../projects/integra-ng/src/lib/components/tree-view/tree-view.component.html","../../../projects/integra-ng/src/lib/components/whisper/services/whisper.service.ts","../../../projects/integra-ng/src/lib/components/whisper/whisper.component.ts","../../../projects/integra-ng/src/lib/components/whisper/whisper.component.html","../../../projects/integra-ng/src/lib/components/table/table.component.ts","../../../projects/integra-ng/src/lib/components/table/table.component.html","../../../projects/integra-ng/src/lib/components/chart/chart.component.ts","../../../projects/integra-ng/src/lib/components/chart/chart.component.html","../../../projects/integra-ng/src/lib/services/data-update-event/data-update-event.service.ts","../../../projects/integra-ng/src/lib/services/seo/seo.service.ts","../../../projects/integra-ng/src/lib/services/seo/structured-data.service.ts","../../../projects/integra-ng/src/public-api.ts","../../../projects/integra-ng/src/integra-ng.ts"],"sourcesContent":["export var lastId = 0;\n\nexport function UniqueComponentId(prefix = 'i_id_') {\n lastId++;\n\n return `${prefix}${lastId}`;\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Accordion Component\n *\n * An expandable/collapsible container component that displays content with a header.\n * Supports animations and can be controlled programmatically.\n *\n * @example\n * ```html\n * <!-- Basic accordion -->\n * <i-accordion header=\"Section Title\">\n * <p>Content goes here</p>\n * </i-accordion>\n *\n * <!-- Accordion with icon -->\n * <i-accordion header=\"Info Section\" icon=\"pi pi-info-circle\">\n * <p>Informational content</p>\n * </i-accordion>\n *\n * <!-- Initially expanded accordion -->\n * <i-accordion header=\"Expanded Section\" [expanded]=\"true\">\n * <p>This section starts expanded</p>\n * </i-accordion>\n *\n * <!-- Disabled accordion -->\n * <i-accordion header=\"Disabled Section\" [disabled]=\"true\">\n * <p>Cannot be toggled</p>\n * </i-accordion>\n * ```\n *\n * @remarks\n * Use content projection to add any content inside the accordion body.\n * The accordion can be used standalone or within an i-accordion-list for group behavior.\n */\n@Component({\n selector: 'i-accordion',\n templateUrl: './accordion.component.html',\n styleUrl: './accordion.component.scss',\n})\nexport class IAccordion {\n /**\n * The header/title text displayed in the accordion\n */\n @Input() header: string = '';\n\n /**\n * Whether the accordion is expanded\n * @default false\n */\n @Input() expanded: boolean = false;\n\n /**\n * Whether the accordion is disabled\n * @default false\n */\n @Input() disabled: boolean = false;\n\n /**\n * Optional icon class (PrimeIcons format like 'pi pi-info-circle')\n */\n @Input() icon?: string;\n\n /**\n * Event emitted when expanded state changes\n */\n @Output() expandedChange = new EventEmitter<boolean>();\n\n /**\n * Event emitted when accordion is toggled\n */\n @Output() onToggle = new EventEmitter<boolean>();\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-accordion-');\n\n /**\n * Toggles the accordion expanded state\n * @internal\n */\n toggle(): void {\n if (this.disabled) {\n return;\n }\n this.expanded = !this.expanded;\n this.expandedChange.emit(this.expanded);\n this.onToggle.emit(this.expanded);\n }\n}\n","<div\n class=\"i-accordion\"\n [class.expanded]=\"expanded\"\n [class.disabled]=\"disabled\"\n [attr.id]=\"componentId\"\n>\n <div\n class=\"i-accordion-header\"\n (click)=\"toggle()\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-disabled]=\"disabled\"\n role=\"button\"\n tabindex=\"0\"\n (keydown.enter)=\"toggle()\"\n (keydown.space)=\"toggle(); $event.preventDefault()\"\n >\n <div class=\"i-accordion-header-content\">\n @if (icon) {\n <i [class]=\"icon\" class=\"i-accordion-icon\"></i>\n }\n <span class=\"i-accordion-title\">{{ header }}</span>\n </div>\n <i class=\"pi i-accordion-toggle-icon\" [class.pi-chevron-down]=\"!expanded\" [class.pi-chevron-up]=\"expanded\"></i>\n </div>\n <div class=\"i-accordion-content-wrapper\" [class.collapsed]=\"!expanded\">\n <div class=\"i-accordion-content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n","import {\n Component,\n Input,\n ContentChildren,\n QueryList,\n AfterContentInit,\n OnDestroy,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { IAccordion } from '../accordion/accordion.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Accordion List Component\n *\n * A container component that groups multiple accordion components.\n * Supports single or multiple expansion modes.\n *\n * @example\n * ```html\n * <!-- Single expansion mode (only one open at a time) -->\n * <i-accordion-list [multiple]=\"false\">\n * <i-accordion header=\"Section 1\">\n * <p>Content 1</p>\n * </i-accordion>\n * <i-accordion header=\"Section 2\">\n * <p>Content 2</p>\n * </i-accordion>\n * </i-accordion-list>\n *\n * <!-- Multiple expansion mode -->\n * <i-accordion-list [multiple]=\"true\">\n * <i-accordion header=\"Section 1\">\n * <p>Content 1</p>\n * </i-accordion>\n * <i-accordion header=\"Section 2\">\n * <p>Content 2</p>\n * </i-accordion>\n * </i-accordion-list>\n * ```\n *\n * @remarks\n * When multiple is false (default), expanding one accordion will collapse others.\n * When multiple is true, any number of accordions can be expanded simultaneously.\n */\n@Component({\n selector: 'i-accordion-list',\n templateUrl: './accordion-list.component.html',\n styleUrl: './accordion-list.component.scss',\n})\nexport class IAccordionList implements AfterContentInit, OnDestroy {\n /**\n * Whether multiple accordions can be expanded at the same time\n * @default false\n */\n @Input() multiple: boolean = false;\n\n /**\n * Query list of child accordion components\n * @internal\n */\n @ContentChildren(IAccordion) accordions!: QueryList<IAccordion>;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-accordion-list-');\n\n /**\n * Subscriptions for cleanup\n * @internal\n */\n private subscriptions: Subscription[] = [];\n\n /**\n * Subscription for accordion list changes\n * @internal\n */\n private accordionsChangesSub?: Subscription;\n\n ngAfterContentInit(): void {\n this.setupAccordionListeners();\n\n // Listen for changes to the accordion list\n this.accordionsChangesSub = this.accordions.changes.subscribe(() => {\n this.cleanupSubscriptions();\n this.setupAccordionListeners();\n });\n }\n\n ngOnDestroy(): void {\n this.cleanupSubscriptions();\n this.accordionsChangesSub?.unsubscribe();\n }\n\n /**\n * Cleans up all accordion toggle subscriptions\n * @internal\n */\n private cleanupSubscriptions(): void {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n this.subscriptions = [];\n }\n\n /**\n * Sets up toggle listeners for all child accordions\n * @internal\n */\n private setupAccordionListeners(): void {\n this.accordions.forEach((accordion) => {\n // Subscribe to toggle events\n const sub = accordion.onToggle.subscribe((expanded: boolean) => {\n if (expanded && !this.multiple) {\n this.collapseOthers(accordion);\n }\n });\n this.subscriptions.push(sub);\n });\n }\n\n /**\n * Collapses all accordions except the specified one\n * @internal\n */\n private collapseOthers(expandedAccordion: IAccordion): void {\n this.accordions.forEach((accordion) => {\n if (accordion !== expandedAccordion && accordion.expanded) {\n accordion.expanded = false;\n accordion.expandedChange.emit(false);\n }\n });\n }\n}\n","<div class=\"i-accordion-list\" [attr.id]=\"componentId\">\n <ng-content></ng-content>\n</div>\n","import { NgClass } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ISeverity } from '../../enums/IButtonSeverity';\n\n@Component({\n selector: 'i-progress-spinner',\n imports: [NgClass],\n templateUrl: './progress-spinner.component.html',\n styleUrls: ['./progress-spinner.component.scss'],\n})\nexport class IProgressSpinner {\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\n @Input() strokeWidth = 4;\n @Input() ariaLabel = 'Loading';\n @Input() severity?: ISeverity;\n @Input() colorMode: 'accent' | 'text' = 'accent';\n\n get sizeClass(): string {\n return `spinner-${this.size}`;\n }\n\n get severityClass(): string {\n if (!this.severity) return '';\n if (this.colorMode === 'text') return `spinner--${this.severity}--text`;\n return `spinner--${this.severity}`;\n }\n}\n","<div\n class=\"spinner-container\"\n [class]=\"sizeClass\"\n [ngClass]=\"severityClass\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"status\"\n>\n <div class=\"spinner-rings\">\n <div class=\"spinner-ring spinner-ring-1\"></div>\n <div class=\"spinner-ring spinner-ring-2\"></div>\n <div class=\"spinner-ring spinner-ring-3\"></div>\n </div>\n</div>\n","import { NgClass } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n AfterViewInit,\n ElementRef,\n ViewChild,\n ChangeDetectorRef,\n HostBinding,\n} from '@angular/core';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { ISeverity } from '@shared/enums/IButtonSeverity';\nimport { IProgressSpinner } from '../progress-spinner/progress-spinner.component';\n\n/**\n * Supported button sizes\n */\nexport type IButtonSize = 'xtra-small' | 'small' | 'medium' | 'large';\n\n/**\n * Button Component\n *\n * A customizable button component with multiple styles and sizes.\n * Supports icons, different severity levels, and various visual states.\n *\n * @example\n * ```html\n * <!-- Basic button -->\n * <i-button>Click Me</i-button>\n *\n * <!-- Button with icon and severity -->\n * <i-button\n * severity=\"primary\"\n * icon=\"pi pi-check\"\n * (clicked)=\"onSave()\">\n * Save\n * </i-button>\n *\n * <!-- Icon-only button -->\n * <i-button\n * icon=\"pi pi-trash\"\n * severity=\"danger\"\n * [outlined]=\"true\">\n * </i-button>\n *\n * <!-- Fluid button (full width) -->\n * <i-button [fluid]=\"true\">Full Width Button</i-button>\n * ```\n *\n * @remarks\n * The button automatically detects if it's icon-only and adjusts its styling accordingly.\n */\n@Component({\n selector: 'i-button',\n standalone: true,\n imports: [NgClass, IProgressSpinner],\n templateUrl: './button.component.html',\n styleUrl: './button.component.scss',\n})\nexport class IButton implements AfterViewInit {\n @HostBinding('class.i-button-fluid') get fluidClass() {\n return this.fluid;\n }\n /**\n * Visual severity/style of the button\n * @default 'primary'\n */\n @Input() severity: ISeverity = 'primary';\n\n /**\n * Size of the button\n * @default 'medium'\n */\n @Input() size: IButtonSize = 'medium';\n\n /**\n * HTML button type attribute\n * @default 'button'\n */\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n\n /**\n * Whether the button is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Whether to display outlined style\n * @default false\n */\n @Input() outlined = false;\n\n /**\n * Whether to display raised (elevated) style\n * @default false\n */\n @Input() raised = false;\n\n /**\n * Whether to display text-only style (no background)\n * @default false\n */\n @Input() text = false;\n\n /**\n * Icon class name (e.g., 'pi pi-check')\n */\n @Input() icon?: string;\n\n /**\n * Whether the button should take full width of its container\n * @default false\n */\n @Input() fluid = false;\n\n /**\n * Whether the button is in a loading state\n * Shows a spinner and hides button content\n * @default false\n */\n @Input() loading = false;\n\n /**\n * Event emitted when the button is clicked\n */\n @Output() clicked = new EventEmitter<Event>();\n\n /**\n * Reference to the projected content element\n * @internal\n */\n @ViewChild('projected', { read: ElementRef })\n projected?: ElementRef<HTMLElement>;\n\n /**\n * Reference to the native button element\n * @internal\n */\n @ViewChild('buttonElement', { read: ElementRef })\n private buttonElement?: ElementRef<HTMLButtonElement>;\n\n /**\n * Whether the button is icon-only (no text content)\n * @internal\n */\n iconOnly = false;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-button-');\n\n constructor(private cdr: ChangeDetectorRef, public el: ElementRef) {}\n\n ngAfterViewInit(): void {\n const text = this.projected?.nativeElement?.textContent;\n const hasProjected = text && text.trim()?.length > 0;\n this.iconOnly = !!this.icon && !hasProjected;\n this.cdr.detectChanges();\n }\n\n /**\n * Focuses the underlying native button element.\n * Use this instead of accessing `nativeElement` directly.\n */\n focus(): void {\n this.buttonElement?.nativeElement?.focus();\n }\n}\n","<div class=\"i-button-wrapper\">\n <button\n #buttonElement\n primary\n [attr.id]=\"componentId\"\n class=\"i-button\"\n [ngClass]=\"[\n 'i-button--' + severity,\n 'i-button--' + size,\n outlined && !text ? 'i-button--outlined' : '',\n text ? 'i-button--text' : '',\n fluid ? 'i-button--fluid' : '',\n raised && !text ? 'i-button--raised' : '',\n iconOnly ? 'icon-only' : '',\n iconOnly && !text ? 'icon-only-text' : '',\n loading ? 'i-button--loading' : ''\n ]\"\n [disabled]=\"disabled || loading\"\n [attr.type]=\"type\"\n (click)=\"clicked.emit($event)\"\n >\n @if (loading) {\n <div class=\"button-loading-spinner\">\n <i-progress-spinner\n size=\"small\"\n [severity]=\"severity\"\n [colorMode]=\"outlined || text ? 'text' : 'accent'\"\n ></i-progress-spinner>\n </div>\n }\n <div\n [ngClass]=\"[\n 'button-content',\n iconOnly ? 'icon-only' : '',\n loading ? 'button-content--hidden' : ''\n ]\"\n >\n @if (icon) {\n <i [ngClass]=\"[icon, 'i-button__icon', iconOnly ? 'icon-only' : '']\"></i>\n }\n <span class=\"projected-content\" #projected>\n <ng-content></ng-content>\n </span>\n </div>\n </button>\n</div>\n","import { Component, Input } from '@angular/core';\n\n\nexport type TooltipPosition = 'above' | 'below' | 'left' | 'right';\n\n@Component({\n selector: 'i-tooltip',\n standalone: true,\n imports: [],\n template: `\n <div\n class=\"i-tooltip\"\n [class.i-tooltip--above]=\"position === 'above'\"\n [class.i-tooltip--below]=\"position === 'below'\"\n [class.i-tooltip--left]=\"position === 'left'\"\n [class.i-tooltip--right]=\"position === 'right'\"\n >\n {{ text }}\n <div class=\"i-tooltip__arrow\"></div>\n </div>\n `,\n styleUrl: './tooltip.component.scss',\n})\nexport class TooltipComponent {\n @Input() text: string = '';\n @Input() position: TooltipPosition = 'above';\n}\n","import {\n Directive,\n Input,\n ElementRef,\n Renderer2,\n OnDestroy,\n ViewContainerRef,\n ComponentRef,\n createComponent,\n ApplicationRef,\n Injector,\n EnvironmentInjector,\n} from '@angular/core';\nimport { TooltipComponent, TooltipPosition } from './tooltip.component';\n\n/**\n * Tooltip Directive\n *\n * Displays contextual tooltips on hover or focus.\n * Tooltips are appended to document.body with z-index: 10000 to ensure\n * they appear above all other elements including dialogs (z-index: 1000).\n *\n * @example\n * <button iTooltip=\"Click to save\" tooltipPosition=\"above\">Save</button>\n */\n@Directive({\n selector: '[iTooltip]',\n standalone: true,\n})\nexport class TooltipDirective implements OnDestroy {\n @Input('iTooltip') tooltipText: string = '';\n @Input() tooltipPosition: TooltipPosition = 'above';\n @Input() tooltipDelay: number = 500; // milliseconds\n\n private tooltipComponent: ComponentRef<TooltipComponent> | null = null;\n private showTimeout: any;\n private hideTimeout: any;\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2,\n private applicationRef: ApplicationRef,\n private injector: Injector,\n private environmentInjector: EnvironmentInjector,\n ) {\n this.setupEventListeners();\n }\n\n private setupEventListeners(): void {\n this.renderer.listen(this.elementRef.nativeElement, 'mouseenter', () => {\n this.showTooltip();\n });\n\n this.renderer.listen(this.elementRef.nativeElement, 'mouseleave', () => {\n this.hideTooltip();\n });\n\n this.renderer.listen(this.elementRef.nativeElement, 'focus', () => {\n this.showTooltip();\n });\n\n this.renderer.listen(this.elementRef.nativeElement, 'blur', () => {\n this.hideTooltip();\n });\n }\n\n private showTooltip(): void {\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n }\n\n // Check for empty, null, or whitespace-only tooltip text\n if (\n !this.tooltipText ||\n !this.tooltipText.trim() ||\n this.tooltipComponent\n ) {\n return;\n }\n\n this.showTimeout = setTimeout(() => {\n this.createTooltip();\n }, this.tooltipDelay);\n }\n\n private hideTooltip(): void {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n }\n\n this.hideTimeout = setTimeout(() => {\n this.destroyTooltip();\n }, 100);\n }\n\n private createTooltip(): void {\n if (this.tooltipComponent) {\n return;\n }\n\n // Create the tooltip component\n this.tooltipComponent = createComponent(TooltipComponent, {\n environmentInjector: this.environmentInjector,\n });\n\n // Set the tooltip properties\n this.tooltipComponent.instance.text = this.tooltipText;\n this.tooltipComponent.instance.position = this.tooltipPosition;\n\n // Add a unique identifier to the tooltip element to avoid conflicts\n const tooltipId = `tooltip-${Math.random().toString(36).substr(2, 9)}`;\n this.renderer.setAttribute(\n this.tooltipComponent.location.nativeElement,\n 'id',\n tooltipId,\n );\n this.renderer.setAttribute(\n this.tooltipComponent.location.nativeElement,\n 'data-tooltip-for',\n this.elementRef.nativeElement.id || 'unknown',\n );\n\n // Register with ApplicationRef for change detection first\n this.applicationRef.attachView(this.tooltipComponent.hostView);\n\n // Append to body\n document.body.appendChild(this.tooltipComponent.location.nativeElement);\n\n // Position the tooltip after a brief delay to ensure rendering\n requestAnimationFrame(() => {\n this.positionTooltip();\n });\n }\n\n private positionTooltip(): void {\n if (!this.tooltipComponent) return;\n\n const hostElement = this.elementRef.nativeElement;\n const tooltipElement = this.tooltipComponent.location.nativeElement;\n\n // Ensure we're working with the correct tooltip instance\n if (!tooltipElement || !document.body.contains(tooltipElement)) {\n return;\n }\n\n // Make tooltip visible but off-screen to measure its dimensions\n this.renderer.setStyle(tooltipElement, 'position', 'absolute');\n this.renderer.setStyle(tooltipElement, 'visibility', 'hidden');\n this.renderer.setStyle(tooltipElement, 'top', '-9999px');\n this.renderer.setStyle(tooltipElement, 'left', '-9999px');\n this.renderer.setStyle(tooltipElement, 'z-index', '9999');\n\n // Force a layout to get accurate measurements\n tooltipElement.offsetHeight;\n\n const hostRect = hostElement.getBoundingClientRect();\n const tooltipRect = tooltipElement.getBoundingClientRect();\n\n let top = 0;\n let left = 0;\n const gap = 8; // Gap between host and tooltip\n\n switch (this.tooltipPosition) {\n case 'above':\n top = hostRect.top - tooltipRect.height - gap + window.scrollY;\n left =\n hostRect.left +\n (hostRect.width - tooltipRect.width) / 2 +\n window.scrollX;\n break;\n case 'below':\n top = hostRect.bottom + gap + window.scrollY;\n left =\n hostRect.left +\n (hostRect.width - tooltipRect.width) / 2 +\n window.scrollX;\n break;\n case 'left':\n top =\n hostRect.top +\n (hostRect.height - tooltipRect.height) / 2 +\n window.scrollY;\n left = hostRect.left - tooltipRect.width - gap + window.scrollX;\n break;\n case 'right':\n top =\n hostRect.top +\n (hostRect.height - tooltipRect.height) / 2 +\n window.scrollY;\n left = hostRect.right + gap + window.scrollX;\n break;\n }\n\n // Ensure tooltip stays within viewport (using fixed positioning)\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const scrollX = window.scrollX;\n const scrollY = window.scrollY;\n\n // Convert back to viewport coordinates for boundary checking\n const viewportLeft = left - scrollX;\n const viewportTop = top - scrollY;\n\n // Adjust horizontal position if tooltip goes outside viewport\n if (viewportLeft < gap) {\n left = gap + scrollX;\n } else if (viewportLeft + tooltipRect.width > viewportWidth - gap) {\n left = viewportWidth - tooltipRect.width - gap + scrollX;\n }\n\n // Adjust vertical position if tooltip goes outside viewport\n if (viewportTop < gap) {\n top = gap + scrollY;\n } else if (viewportTop + tooltipRect.height > viewportHeight - gap) {\n top = viewportHeight - tooltipRect.height - gap + scrollY;\n }\n\n // Apply final position and make visible\n // Use z-index 10000 to ensure tooltips appear above dialogs (z-index: 1000)\n this.renderer.setStyle(tooltipElement, 'position', 'absolute');\n this.renderer.setStyle(tooltipElement, 'top', `${top}px`);\n this.renderer.setStyle(tooltipElement, 'left', `${left}px`);\n this.renderer.setStyle(tooltipElement, 'z-index', '10000');\n this.renderer.setStyle(tooltipElement, 'visibility', 'visible');\n }\n\n private destroyTooltip(): void {\n if (this.tooltipComponent) {\n const tooltipElement = this.tooltipComponent.location.nativeElement;\n\n // Remove from DOM first\n if (tooltipElement && document.body.contains(tooltipElement)) {\n document.body.removeChild(tooltipElement);\n }\n\n // Then cleanup Angular references\n this.applicationRef.detachView(this.tooltipComponent.hostView);\n this.tooltipComponent.destroy();\n this.tooltipComponent = null;\n }\n }\n\n ngOnDestroy(): void {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n }\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n }\n this.destroyTooltip();\n }\n}\n","import { Component, Input, Optional, Self } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ControlValueAccessor,\n NgControl,\n AbstractControl,\n} from '@angular/forms';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { TooltipDirective } from '../../directives/tooltip/tooltip.directive';\n\n/**\n * Supported background style options for the input\n */\nexport type IInputBackgroundStyle = 'surface' | 'component';\n\n/**\n * Input Text Component\n *\n * A form control text input component with floating labels, icons, and validation support.\n * Fully compatible with Angular Reactive Forms and Template-driven Forms.\n *\n * @example\n * ```html\n * <!-- Basic input -->\n * <i-input-text label=\"Username\"></i-input-text>\n *\n * <!-- Input with reactive form -->\n * <i-input-text\n * label=\"Email\"\n * type=\"email\"\n * formControlName=\"email\">\n * </i-input-text>\n *\n * <!-- Input with icon -->\n * <i-input-text\n * label=\"Search\"\n * icon=\"pi pi-search\"\n * [(ngModel)]=\"searchTerm\">\n * </i-input-text>\n *\n * <!-- Password input -->\n * <i-input-text\n * label=\"Password\"\n * type=\"password\"\n * formControlName=\"password\">\n * </i-input-text>\n *\n * <!-- Full width input -->\n * <i-input-text\n * label=\"Address\"\n * [fluid]=\"true\"\n * formControlName=\"address\">\n * </i-input-text>\n *\n * <!-- Input with custom error messages -->\n * <i-input-text\n * label=\"Phone\"\n * formControlName=\"phone\"\n * [errorMessages]=\"{pattern: 'Please enter a valid phone number'}\">\n * </i-input-text>\n * ```\n *\n * @remarks\n * This component implements ControlValueAccessor for seamless integration with Angular Forms.\n * Supports floating labels, custom validation messages, and external validation state.\n */\n@Component({\n selector: 'i-input-text',\n standalone: true,\n imports: [CommonModule, TooltipDirective],\n templateUrl: './input-text.component.html',\n styleUrls: ['./input-text.component.scss'],\n})\nexport class IInputText implements ControlValueAccessor {\n /**\n * Label text displayed for the input\n * @default 'Label'\n */\n @Input() label = 'Label';\n\n /**\n * HTML input type attribute\n * @default 'text'\n */\n @Input() type: string = 'text';\n\n /**\n * HTML id attribute for the input element\n */\n @Input() id?: string;\n\n /**\n * Whether the input should take full width of its container\n * @default false\n */\n @Input() fluid = false;\n\n /**\n * Forces the label to stay in floated position\n * @default false\n */\n @Input() forceFloated = false;\n\n /**\n * Hides the input text (useful for password fields with toggle)\n * @default false\n */\n @Input() hideText = false;\n\n /**\n * Enables floating label animation\n * @default true\n */\n @Input() useFloatLabel = true;\n\n /**\n * Placeholder text for the input\n */\n @Input() placeholder?: string;\n\n /**\n * Allows external control to override validation state\n * @default false\n */\n @Input() externalInvalid = false;\n\n /**\n * External error message to display (overrides internal validation)\n */\n @Input() externalErrorMessage?: string;\n\n /**\n * Background style of the input\n * @default 'surface'\n */\n @Input() backgroundStyle: IInputBackgroundStyle = 'surface';\n\n /**\n * Icon class name to display (e.g., 'pi pi-search')\n */\n @Input() icon?: string;\n\n /**\n * Whether the input is readonly\n * @default false\n */\n @Input() readonly = false;\n\n /**\n * Whether the input is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Custom error messages for validation rules\n * @default {}\n */\n @Input() errorMessages: { [key: string]: string } = {};\n\n /**\n * Current input value\n * @internal\n */\n value: string | null = null;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-input-text-');\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChange: (v: string | null) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouched: () => void = () => {};\n\n constructor(@Optional() @Self() public ngControl: NgControl | null) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * Writes a value to the input (ControlValueAccessor)\n * @internal\n */\n writeValue(obj: string | null): void {\n this.value = obj == null ? null : obj;\n }\n\n /**\n * Registers the onChange callback (ControlValueAccessor)\n * @internal\n */\n registerOnChange(fn: (v: string | null) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Registers the onTouched callback (ControlValueAccessor)\n * @internal\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Sets the disabled state (ControlValueAccessor)\n * @internal\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**\n * Handles input event and updates value\n * @internal\n */\n handleInput(event: Event) {\n const v = (event.target as HTMLInputElement).value;\n this.value = v;\n this.onChange(v);\n }\n\n /**\n * Marks the input as touched\n * @internal\n */\n touch() {\n this.onTouched();\n }\n\n /**\n * Gets the form control instance\n * @internal\n */\n get control(): AbstractControl | null {\n return this.ngControl ? this.ngControl.control : null;\n }\n\n /**\n * Determines if validation errors should be shown\n * @internal\n */\n get showErrors(): boolean {\n if (this.externalInvalid) return true;\n const c = this.control;\n return !!(c && c.invalid && c.dirty);\n }\n\n /**\n * Gets the first validation error key\n * @internal\n */\n get firstErrorKey(): string | null {\n const c = this.control;\n if (!c || !c.errors) return null;\n return Object.keys(c.errors)[0] || null;\n }\n\n /**\n * Gets the error message to display\n * @internal\n */\n getErrorMessage(): string | null {\n if (this.externalInvalid && this.externalErrorMessage) {\n return this.externalErrorMessage;\n }\n\n const key = this.firstErrorKey;\n if (!key) return null;\n const c = this.control;\n if (this.errorMessages && this.errorMessages[key])\n return this.errorMessages[key];\n const err = c?.errors || {};\n switch (key) {\n case 'required':\n return `${this.label} is required`;\n case 'minlength':\n return `Minimum ${err['minlength']?.requiredLength} characters required`;\n case 'maxlength':\n return `Maximum ${err['maxlength']?.requiredLength} characters allowed`;\n case 'pattern':\n return `${this.label} is not valid`;\n default:\n return err[key] && typeof err[key] === 'string'\n ? err[key]\n : 'Invalid value';\n }\n }\n\n /**\n * Checks if the input has a value (works for all input types including number)\n * @internal\n */\n get hasValue(): boolean {\n if (this.value === null || this.value === undefined) return false;\n if (typeof this.value === 'string') return this.value.length > 0;\n return true; // For numbers including 0\n }\n\n /**\n * Increment number input value\n * @internal\n */\n incrementNumber(inputElement: HTMLInputElement) {\n const step = parseFloat(inputElement.step) || 1;\n const currentValue = parseFloat(this.value || '0');\n const newValue = currentValue + step;\n\n // Check max constraint if exists\n if (inputElement.max && newValue > parseFloat(inputElement.max)) {\n return;\n }\n\n this.value = newValue.toString();\n this.onChange(this.value);\n inputElement.value = this.value;\n }\n\n /**\n * Decrement number input value\n * @internal\n */\n decrementNumber(inputElement: HTMLInputElement) {\n const step = parseFloat(inputElement.step) || 1;\n const currentValue = parseFloat(this.value || '0');\n const newValue = currentValue - step;\n\n // Check min constraint if exists\n if (inputElement.min && newValue < parseFloat(inputElement.min)) {\n return;\n }\n\n this.value = newValue.toString();\n this.onChange(this.value);\n inputElement.value = this.value;\n }\n}\n","<div\n class=\"i-input-wrapper\"\n [class.invalid]=\"showErrors\"\n [class.i-input--fluid]=\"fluid\"\n [class.i-input--no-float]=\"!useFloatLabel\"\n [attr.id]=\"componentId\"\n>\n <div\n [ngClass]=\"useFloatLabel ? 'float-label' : 'normal-input'\"\n class=\"i-input-container\"\n [class.has-icon]=\"icon\"\n >\n <div class=\"i-input-icon-wrapper\">\n @if (icon) {\n <span class=\"i-input-icon\" [attr.aria-hidden]=\"true\">\n <i [class]=\"icon\" [attr.aria-hidden]=\"true\"></i>\n </span>\n }\n <input\n #inputElement\n [id]=\"id || componentId\"\n [type]=\"type\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [value]=\"hideText ? '' : value || ''\"\n (input)=\"handleInput($event)\"\n (blur)=\"touch()\"\n [placeholder]=\"useFloatLabel ? ' ' : placeholder || label\"\n class=\"i-input\"\n [class.has-icon]=\"icon\"\n [class.hide-text]=\"hideText\"\n [class.readonly]=\"readonly\"\n [class.component-border]=\"backgroundStyle === 'component'\"\n [iTooltip]=\"showErrors ? getErrorMessage() || '' : ''\"\n tooltipPosition=\"below\"\n [tooltipDelay]=\"100\"\n />\n @if (type === \"number\" && !disabled && !readonly) {\n <div class=\"i-input-spinners\">\n <button\n type=\"button\"\n class=\"i-input-spinner-button i-input-spinner-up\"\n (click)=\"incrementNumber(inputElement)\"\n [attr.aria-label]=\"'Increment ' + label\"\n tabindex=\"-1\"\n >\n <i class=\"pi pi-chevron-up\"></i>\n </button>\n <button\n type=\"button\"\n class=\"i-input-spinner-button i-input-spinner-down\"\n (click)=\"decrementNumber(inputElement)\"\n [attr.aria-label]=\"'Decrement ' + label\"\n tabindex=\"-1\"\n >\n <i class=\"pi pi-chevron-down\"></i>\n </button>\n </div>\n }\n </div>\n @if (useFloatLabel) {\n <label\n [for]=\"id || componentId\"\n class=\"i-label\"\n [class.floated]=\"forceFloated || hasValue\"\n >{{ label }}</label\n >\n }\n <ng-content></ng-content>\n </div>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n HostListener,\n ElementRef,\n ViewChild,\n AfterViewInit,\n} from '@angular/core';\n\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n FormsModule,\n} from '@angular/forms';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { IInputText } from '../input-text/input-text.component';\nimport { IButton } from '../button/button.component';\n\n/**\n * Supported calendar view types\n */\nexport type CalendarView = 'date' | 'month' | 'year';\n\n/**\n * Calendar Component\n *\n * A customizable date picker component that replaces PrimeNG's p-calendar.\n * Supports date, month, and year selection with flexible formatting.\n * Fully compatible with Angular Reactive Forms and Template-driven Forms.\n *\n * @example\n * ```html\n * <!-- Basic date picker -->\n * <i-calendar [(ngModel)]=\"selectedDate\"></i-calendar>\n *\n * <!-- Month picker -->\n * <i-calendar\n * [(ngModel)]=\"selectedMonth\"\n * [view]=\"'month'\"\n * [dateFormat]=\"'mm-yy'\"\n * placeholder=\"Select Month\">\n * </i-calendar>\n *\n * <!-- Year picker -->\n * <i-calendar\n * [(ngModel)]=\"selectedYear\"\n * [view]=\"'year'\"\n * [dateFormat]=\"'yy'\"\n * placeholder=\"Select Year\">\n * </i-calendar>\n *\n * <!-- With event handling -->\n * <i-calendar\n * [(ngModel)]=\"date\"\n * (onSelect)=\"handleDateSelection($event)\">\n * </i-calendar>\n *\n * <!-- Readonly input -->\n * <i-calendar\n * [(ngModel)]=\"date\"\n * [readonlyInput]=\"true\">\n * </i-calendar>\n * ```\n */\n@Component({\n selector: 'i-calendar',\n standalone: true,\n imports: [FormsModule, IInputText, IButton],\n templateUrl: './calendar.component.html',\n styleUrls: ['./calendar.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ICalendar),\n multi: true,\n },\n ],\n})\nexport class ICalendar implements ControlValueAccessor, AfterViewInit {\n /**\n * Placeholder text for the input\n * @default 'Select Date'\n */\n @Input() placeholder = 'Select Date';\n\n /**\n * Whether the input field is readonly\n * @default false\n */\n @Input() readonlyInput = false;\n\n /**\n * Calendar view mode\n * @default 'date'\n */\n @Input() view: CalendarView = 'date';\n\n /**\n * Date format string\n * Supported tokens:\n * - dd: day (01-31)\n * - mm: month (01-12)\n * - yy: 4-digit year\n * - MMM: short month name\n * - MMMM: full month name\n * @default 'dd/mm/yy'\n */\n @Input() dateFormat = 'dd/mm/yy';\n\n /**\n * Label for the input field\n * @default 'Date'\n */\n @Input() label = 'Date';\n\n /**\n * Whether the calendar is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Whether to use floating label\n * @default true\n */\n @Input() useFloatLabel = true;\n\n /**\n * Icon to display in the input\n * @default 'pi pi-calendar'\n */\n @Input() icon = 'pi pi-calendar';\n\n /**\n * Event emitted when a date is selected\n */\n @Output() onSelect = new EventEmitter<Date>();\n\n /**\n * Selected date value (the actual form control value)\n * @internal\n */\n value: Date | null = null;\n\n /**\n * Formatted date string for display in i-input-text (internal ngModel)\n * @internal\n */\n inputDisplayValue = '';\n\n /**\n * Whether the calendar panel is visible\n * @internal\n */\n isOpen = false;\n\n /**\n * Current view date (for navigation)\n * @internal\n */\n viewDate = new Date();\n\n /**\n * Currently displayed view mode\n * @internal\n */\n currentView: CalendarView = 'date';\n\n /**\n * Calendar days grid\n * @internal\n */\n calendarDays: (Date | null)[][] = [];\n\n /**\n * Months array for month view\n * @internal\n */\n months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n\n /**\n * Short month names\n * @internal\n */\n monthsShort = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ];\n\n /**\n * Weekday names\n * @internal\n */\n weekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n /**\n * Years array for year view\n * @internal\n */\n years: number[] = [];\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-calendar-');\n\n /**\n * Reference to the calendar panel element\n * @internal\n */\n @ViewChild('calendarPanel', { read: ElementRef }) calendarPanel?: ElementRef;\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChange: (v: Date | null) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouched: () => void = () => {};\n\n constructor(private elementRef: ElementRef) {}\n\n ngAfterViewInit(): void {\n this.currentView = this.view;\n }\n\n /**\n * Writes a value to the component (ControlValueAccessor)\n * @internal\n */\n writeValue(date: Date | null): void {\n this.value = date;\n if (date) {\n this.viewDate = new Date(date);\n this.inputDisplayValue = this.formatDate(date);\n } else {\n this.inputDisplayValue = '';\n }\n }\n\n /**\n * Registers the onChange callback (ControlValueAccessor)\n * @internal\n */\n registerOnChange(fn: (v: Date | null) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Registers the onTouched callback (ControlValueAccessor)\n * @internal\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Sets the disabled state (ControlValueAccessor)\n * @internal\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**\n * Toggles the calendar panel\n * @internal\n */\n toggleCalendar(): void {\n if (this.disabled) return;\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.currentView = this.view;\n if (this.value) {\n this.viewDate = new Date(this.value);\n }\n this.updateCalendar();\n }\n }\n\n /**\n * Updates the calendar view based on current view mode\n * @internal\n */\n updateCalendar(): void {\n if (this.currentView === 'date') {\n this.generateCalendarDays();\n } else if (this.currentView === 'year') {\n this.generateYears();\n }\n }\n\n /**\n * Generates the calendar days grid\n * @internal\n */\n generateCalendarDays(): void {\n const year = this.viewDate.getFullYear();\n const month = this.viewDate.getMonth();\n\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const prevLastDay = new Date(year, month, 0);\n\n const firstDayOfWeek = firstDay.getDay();\n const lastDate = lastDay.getDate();\n const prevLastDate = prevLastDay.getDate();\n\n const weeks: (Date | null)[][] = [];\n let week: (Date | null)[] = [];\n\n // Previous month days\n for (let i = firstDayOfWeek - 1; i >= 0; i--) {\n week.push(new Date(year, month - 1, prevLastDate - i));\n }\n\n // Current month days\n for (let day = 1; day <= lastDate; day++) {\n if (week.length === 7) {\n weeks.push(week);\n week = [];\n }\n week.push(new Date(year, month, day));\n }\n\n // Next month days\n const remainingDays = 7 - week.length;\n for (let day = 1; day <= remainingDays; day++) {\n week.push(new Date(year, month + 1, day));\n }\n\n if (week.length > 0) {\n weeks.push(week);\n }\n\n this.calendarDays = weeks;\n }\n\n /**\n * Generates the years array for year view\n * @internal\n */\n generateYears(): void {\n const currentYear = this.viewDate.getFullYear();\n const startYear = Math.floor(currentYear / 10) * 10;\n this.years = Array.from({ length: 12 }, (_, i) => startYear + i);\n }\n\n /**\n * Selects a date\n * @internal\n */\n selectDate(date: Date): void {\n if (!this.isDateInCurrentMonth(date)) {\n return;\n }\n\n if (this.view === 'date') {\n this.value = date;\n this.inputDisplayValue = this.formatDate(date);\n this.onChange(date);\n this.onTouched();\n this.onSelect.emit(date);\n this.isOpen = false;\n }\n }\n\n /**\n * Selects a month\n * @internal\n */\n selectMonth(monthIndex: number): void {\n if (this.view === 'month') {\n const date = new Date(this.viewDate.getFullYear(), monthIndex, 1);\n this.value = date;\n this.inputDisplayValue = this.formatDate(date);\n this.onChange(date);\n this.onTouched();\n this.onSelect.emit(date);\n this.isOpen = false;\n } else {\n // Navigate to month in date view\n this.viewDate = new Date(this.viewDate.getFullYear(), monthIndex, 1);\n this.currentView = 'date';\n this.updateCalendar();\n }\n }\n\n /**\n * Selects a year\n * @internal\n */\n selectYear(year: number): void {\n if (this.view === 'year') {\n const date = new Date(year, 0, 1);\n this.value = date;\n this.inputDisplayValue = this.formatDate(date);\n this.onChange(date);\n this.onTouched();\n this.onSelect.emit(date);\n this.isOpen = false;\n } else {\n // Navigate to year in month or date view\n this.viewDate = new Date(year, this.viewDate.getMonth(), 1);\n this.currentView = this.view === 'month' ? 'month' : 'date';\n this.updateCalendar();\n }\n }\n\n /**\n * Navigates to previous period\n * @internal\n */\n navigatePrevious(): void {\n if (this.currentView === 'date') {\n this.viewDate = new Date(\n this.viewDate.getFullYear(),\n this.viewDate.getMonth() - 1,\n 1\n );\n } else if (this.currentView === 'month') {\n this.viewDate = new Date(\n this.viewDate.getFullYear() - 1,\n this.viewDate.getMonth(),\n 1\n );\n } else if (this.currentView === 'year') {\n const startYear = Math.floor(this.viewDate.getFullYear() / 10) * 10;\n this.viewDate = new Date(startYear - 10, 0, 1);\n }\n this.updateCalendar();\n }\n\n /**\n * Navigates to next period\n * @internal\n */\n navigateNext(): void {\n if (this.currentView === 'date') {\n this.viewDate = new Date(\n this.viewDate.getFullYear(),\n this.viewDate.getMonth() + 1,\n 1\n );\n } else if (this.currentView === 'month') {\n this.viewDate = new Date(\n this.viewDate.getFullYear() + 1,\n this.viewDate.getMonth(),\n 1\n );\n } else if (this.currentView === 'year') {\n const startYear = Math.floor(this.viewDate.getFullYear() / 10) * 10;\n this.viewDate = new Date(startYear + 10, 0, 1);\n }\n this.updateCalendar();\n }\n\n /**\n * Shows month view\n * @internal\n */\n showMonthView(): void {\n this.currentView = 'month';\n this.updateCalendar();\n }\n\n /**\n * Shows year view\n * @internal\n */\n showYearView(): void {\n this.currentView = 'year';\n this.updateCalendar();\n }\n\n /**\n * Gets the header title based on current view\n * @internal\n */\n getHeaderTitle(): string {\n if (this.currentView === 'date') {\n return `${\n this.months[this.viewDate.getMonth()]\n } ${this.viewDate.getFullYear()}`;\n } else if (this.currentView === 'month') {\n return this.viewDate.getFullYear().toString();\n } else {\n const startYear = Math.floor(this.viewDate.getFullYear() / 10) * 10;\n return `${startYear} - ${startYear + 9}`;\n }\n }\n\n /**\n * Checks if a date is the selected date\n * @internal\n */\n isSelectedDate(date: Date): boolean {\n if (!this.value) return false;\n\n if (this.view === 'date') {\n return (\n date.getDate() === this.value.getDate() &&\n date.getMonth() === this.value.getMonth() &&\n date.getFullYear() === this.value.getFullYear()\n );\n }\n return false;\n }\n\n /**\n * Checks if a month is the selected month\n * @internal\n */\n isSelectedMonth(monthIndex: number): boolean {\n if (!this.value) return false;\n return (\n monthIndex === this.value.getMonth() &&\n this.viewDate.getFullYear() === this.value.getFullYear()\n );\n }\n\n /**\n * Checks if a year is the selected year\n * @internal\n */\n isSelectedYear(year: number): boolean {\n if (!this.value) return false;\n return year === this.value.getFullYear();\n }\n\n /**\n * Checks if a date is today\n * @internal\n */\n isToday(date: Date): boolean {\n const today = new Date();\n return (\n date.getDate() === today.getDate() &&\n date.getMonth() === today.getMonth() &&\n date.getFullYear() === today.getFullYear()\n );\n }\n\n /**\n * Checks if a date is in the current view month\n * @internal\n */\n isDateInCurrentMonth(date: Date): boolean {\n return date.getMonth() === this.viewDate.getMonth();\n }\n\n /**\n * Formats a date according to the dateFormat input\n * @internal\n */\n formatDate(date: Date): string {\n if (!date) return '';\n\n let formatted = this.dateFormat;\n\n // Day\n formatted = formatted.replace(\n 'dd',\n date.getDate().toString().padStart(2, '0')\n );\n\n // Month\n formatted = formatted.replace('MMMM', this.months[date.getMonth()]);\n formatted = formatted.replace('MMM', this.monthsShort[date.getMonth()]);\n formatted = formatted.replace(\n 'mm',\n (date.getMonth() + 1).toString().padStart(2, '0')\n );\n\n // Year\n formatted = formatted.replace('yy', date.getFullYear().toString());\n\n return formatted;\n }\n\n /**\n * Closes the calendar when clicking outside\n * @internal\n */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.elementRef.nativeElement.contains(event.target)) {\n this.isOpen = false;\n }\n }\n}\n","<div class=\"i-calendar-container\" [attr.id]=\"componentId\">\n <!-- Input field using i-input-text component -->\n <div class=\"i-calendar-input-wrapper\" (click)=\"toggleCalendar()\">\n <i-input-text\n [id]=\"componentId\"\n [label]=\"label\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"true\"\n [icon]=\"icon\"\n [useFloatLabel]=\"useFloatLabel\"\n [(ngModel)]=\"inputDisplayValue\"\n [forceFloated]=\"!!(inputDisplayValue && inputDisplayValue.length > 0)\"\n />\n </div>\n\n <!-- Calendar Panel -->\n @if (isOpen) {\n <div\n #calendarPanel\n class=\"i-calendar-panel\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- Header -->\n <div class=\"i-calendar-header\">\n <i-button\n [size]=\"'small'\"\n [severity]=\"'primary'\"\n [text]=\"true\"\n icon=\"pi pi-chevron-left\"\n (clicked)=\"navigatePrevious()\"\n aria-label=\"Previous\"\n >\n </i-button>\n\n <div class=\"i-calendar-header-title\">\n @if (currentView === 'date') {\n <i-button\n [severity]=\"'contrast'\"\n [text]=\"true\"\n (clicked)=\"showMonthView()\"\n >\n {{ getHeaderTitle() }}\n </i-button>\n } @else if (currentView === 'month') {\n <i-button\n [severity]=\"'contrast'\"\n [text]=\"true\"\n (clicked)=\"showYearView()\"\n >\n {{ getHeaderTitle() }}\n </i-button>\n } @else {\n <span class=\"i-calendar-title-text\">{{ getHeaderTitle() }}</span>\n }\n </div>\n\n <i-button\n [size]=\"'small'\"\n [severity]=\"'primary'\"\n [text]=\"true\"\n icon=\"pi pi-chevron-right\"\n (clicked)=\"navigateNext()\"\n aria-label=\"Next\"\n >\n </i-button>\n </div>\n\n <!-- Calendar Body -->\n <div class=\"i-calendar-body\">\n <!-- Date View -->\n @if (currentView === 'date') {\n <div class=\"i-calendar-date-view\">\n <!-- Weekday headers -->\n <div class=\"i-calendar-weekdays\">\n @for (day of weekDays; track day) {\n <div class=\"i-calendar-weekday\">{{ day }}</div>\n }\n </div>\n\n <!-- Calendar days -->\n <div class=\"i-calendar-days\">\n @for (week of calendarDays; track week) { @for (date of week; track\n date) { @if (date) {\n <i-button\n [size]=\"'small'\"\n [severity]=\"'contrast'\"\n [text]=\"true\"\n [fluid]=\"true\"\n class=\"i-calendar-selection\"\n [class.selected]=\"isSelectedDate(date)\"\n [class.today]=\"isToday(date)\"\n [disabled]=\"!isDateInCurrentMonth(date)\"\n (clicked)=\"selectDate(date)\"\n >\n {{ date.getDate() }}\n </i-button>\n } } }\n </div>\n </div>\n }\n\n <!-- Month View -->\n @if (currentView === 'month') {\n <div class=\"i-calendar-month-view\">\n @for (month of months; track month; let i = $index) {\n <i-button\n [size]=\"'small'\"\n [severity]=\"'contrast'\"\n [text]=\"true\"\n [fluid]=\"true\"\n class=\"i-calendar-selection\"\n [class.selected]=\"isSelectedMonth(i)\"\n (clicked)=\"selectMonth(i)\"\n >\n {{ monthsShort[i] }}\n </i-button>\n }\n </div>\n }\n\n <!-- Year View -->\n @if (currentView === 'year') {\n <div class=\"i-calendar-year-view\">\n @for (year of years; track year) {\n <i-button\n [size]=\"'small'\"\n [severity]=\"'contrast'\"\n [text]=\"true\"\n [fluid]=\"true\"\n class=\"i-calendar-selection\"\n [text]=\"true\"\n [class.selected]=\"isSelectedYear(year)\"\n (clicked)=\"selectYear(year)\"\n >\n {{ year }}\n </i-button>\n }\n </div>\n }\n </div>\n </div>\n }\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n HostBinding,\n} from '@angular/core';\nimport { IButton } from '../button/button.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Card Component\n *\n * A container component that displays content in a styled card layout.\n * Optionally includes a header title and a close button.\n *\n * @example\n * ```html\n * <!-- Basic card with content -->\n * <i-card>\n * <p>Card content goes here</p>\n * </i-card>\n *\n * <!-- Card with title -->\n * <i-card title=\"My Card Title\">\n * <p>Card content</p>\n * </i-card>\n *\n * <!-- Closable card -->\n * <i-card\n * title=\"Closable Card\"\n * [closable]=\"true\"\n * (closeCard)=\"onCardClose()\">\n * <p>This card can be closed</p>\n * </i-card>\n * ```\n *\n * @remarks\n * Use content projection to add any content inside the card body.\n * The card automatically handles header rendering when a title is provided.\n */\n@Component({\n selector: 'i-card',\n imports: [IButton],\n templateUrl: './card.component.html',\n styleUrl: './card.component.scss',\n})\nexport class ICard {\n /**\n * Optional title displayed in the card header\n */\n @Input() title?: string;\n\n /**\n * Whether the card can be closed (shows close button)\n * @default false\n */\n @Input() closable: boolean = false;\n\n /**\n * Whether the card should fill the height of its container\n * @default false\n */\n @Input() fullHeight: boolean = false;\n\n /**\n * Host binding for full-height class\n * @internal\n */\n @HostBinding('class.i-card--full-height') get isFullHeight() {\n return this.fullHeight;\n }\n\n /**\n * Event emitted when the close button is clicked\n */\n @Output() closeCard = new EventEmitter<void>();\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-card-');\n\n /**\n * Handles the close button click event\n * @internal\n */\n onCloseCard(): void {\n this.closeCard.emit();\n }\n}\n","<div class=\"i-card\" [attr.id]=\"componentId\">\n <!-- Header Section -->\n <div class=\"i-card-header\">\n <ng-content select=\"[slot=header]\">\n @if (title) {\n <span class=\"i-card-title\">{{ title }}</span>\n }\n </ng-content>\n @if (closable) {\n <i-button\n [severity]=\"'contrast'\"\n [text]=\"true\"\n [icon]=\"'pi pi-times'\"\n [size]=\"'small'\"\n (click)=\"onCloseCard()\"\n />\n }\n </div>\n\n <!-- Content Section -->\n <div class=\"i-card-body\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer Section -->\n <div class=\"i-card-footer\">\n <ng-content select=\"[slot=footer]\"></ng-content>\n </div>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n} from '@angular/core';\n\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Supported checkbox sizes\n */\nexport type ICheckboxSize = 'small' | 'medium' | 'large';\n\n/**\n * Checkbox Component\n *\n * A form control checkbox component with multiple sizes and states.\n * Supports indeterminate state and is fully compatible with Angular Reactive Forms.\n *\n * @example\n * ```html\n * <!-- Basic checkbox -->\n * <i-checkbox label=\"Accept terms\"></i-checkbox>\n *\n * <!-- Checkbox with ngModel -->\n * <i-checkbox\n * label=\"Subscribe to newsletter\"\n * [(ngModel)]=\"subscribed\">\n * </i-checkbox>\n *\n * <!-- Checkbox in reactive form -->\n * <i-checkbox\n * label=\"Agree to privacy policy\"\n * formControlName=\"agreedToPolicy\">\n * </i-checkbox>\n *\n * <!-- Disabled checkbox -->\n * <i-checkbox\n * label=\"Disabled option\"\n * [disabled]=\"true\">\n * </i-checkbox>\n *\n * <!-- Indeterminate checkbox (e.g., for \"select all\") -->\n * <i-checkbox\n * label=\"Select All\"\n * [indeterminate]=\"someSelected\">\n * </i-checkbox>\n *\n * <!-- Different sizes -->\n * <i-checkbox label=\"Small\" size=\"small\"></i-checkbox>\n * <i-checkbox label=\"Medium\" size=\"medium\"></i-checkbox>\n * <i-checkbox label=\"Large\" size=\"large\"></i-checkbox>\n * ```\n *\n * @remarks\n * This component implements ControlValueAccessor for seamless integration with Angular Forms.\n * The indeterminate state is useful for parent checkboxes in hierarchical selections.\n */\n@Component({\n selector: 'i-checkbox',\n standalone: true,\n imports: [],\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ICheckbox),\n multi: true,\n },\n ],\n})\nexport class ICheckbox implements ControlValueAccessor {\n /**\n * Label text displayed next to the checkbox\n */\n @Input() label?: string;\n\n /**\n * HTML id attribute for the checkbox input element\n */\n @Input() id?: string;\n\n /**\n * Whether the checkbox is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Whether the checkbox is readonly (cannot be changed by user)\n * @default false\n */\n @Input() readonly = false;\n\n /**\n * Size of the checkbox\n * @default 'medium'\n */\n @Input() size: ICheckboxSize = 'medium';\n\n /**\n * Whether the checkbox is in indeterminate state\n * @default false\n */\n @Input() indeterminate = false;\n\n /**\n * Checked state of the checkbox\n */\n @Input()\n set checked(value: boolean) {\n this._checked = !!value;\n }\n get checked(): boolean {\n return this._checked;\n }\n\n /**\n * Event emitted when checkbox state changes\n */\n @Output() onChange = new EventEmitter<boolean>();\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-checkbox-');\n\n /**\n * Internal checked state\n * @internal\n */\n private _checked = false;\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChangeCallback: (value: boolean) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouchedCallback: () => void = () => {};\n\n /**\n * Toggles the checkbox state\n * @internal\n */\n toggle(): void {\n if (this.disabled || this.readonly) return;\n\n if (this.indeterminate) {\n this.indeterminate = false;\n this._checked = false;\n } else {\n this._checked = !this._checked;\n }\n\n this.onChangeCallback(this._checked);\n this.onTouchedCallback();\n\n setTimeout(() => {\n this.onChange.emit(this._checked);\n }, 0);\n }\n\n /**\n * Writes a value to the checkbox (ControlValueAccessor)\n * @internal\n */\n writeValue(value: boolean): void {\n this._checked = !!value;\n }\n\n /**\n * Registers the onChange callback (ControlValueAccessor)\n * @internal\n */\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChangeCallback = fn;\n }\n\n /**\n * Registers the onTouched callback (ControlValueAccessor)\n * @internal\n */\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n /**\n * Sets the disabled state (ControlValueAccessor)\n * @internal\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","<div\n class=\"i-checkbox-wrapper\"\n [class.i-checkbox--disabled]=\"disabled\"\n [class.i-checkbox--readonly]=\"readonly\"\n [class.i-checkbox--small]=\"size === 'small'\"\n [class.i-checkbox--medium]=\"size === 'medium'\"\n [class.i-checkbox--large]=\"size === 'large'\"\n>\n <div\n class=\"i-checkbox\"\n [class.i-checkbox--checked]=\"checked\"\n (click)=\"toggle()\"\n [attr.id]=\"id || componentId\"\n role=\"checkbox\"\n [attr.aria-checked]=\"indeterminate ? 'mixed' : checked\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-readonly]=\"readonly\"\n [attr.aria-labelledby]=\"label ? (id || componentId) + '-label' : null\"\n tabindex=\"0\"\n (keydown.space)=\"$event.preventDefault(); toggle()\"\n (keydown.enter)=\"$event.preventDefault(); toggle()\"\n >\n @if (!checked && indeterminate) {\n <i class=\"pi pi-minus i-checkbox-icon\"></i>\n } @if (!indeterminate) {\n <i\n class=\"pi pi-check i-checkbox-icon\"\n [style.opacity]=\"checked ? '1' : '0'\"\n ></i>\n }\n </div>\n @if (label) {\n <label\n [id]=\"(id || componentId) + '-label'\"\n class=\"i-checkbox-label\"\n (click)=\"toggle()\"\n >\n {{ label }}\n </label>\n }\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Chip Component\n *\n * A component for displaying removable tags, labels, or compact information.\n * Supports icons, images, and removal functionality.\n *\n * @example\n * ```html\n * <!-- Basic chip -->\n * <i-chip label=\"Angular\"></i-chip>\n *\n * <!-- Chip with icon -->\n * <i-chip label=\"John Doe\" icon=\"pi pi-user\"></i-chip>\n *\n * <!-- Chip with image -->\n * <i-chip label=\"Jane Smith\" image=\"assets/avatar.jpg\"></i-chip>\n *\n * <!-- Removable chip -->\n * <i-chip\n * label=\"TypeScript\"\n * [removable]=\"true\"\n * (onRemove)=\"handleRemove($event)\">\n * </i-chip>\n *\n * <!-- Custom style -->\n * <i-chip\n * label=\"Premium\"\n * styleClass=\"chip-premium\">\n * </i-chip>\n * ```\n *\n * @remarks\n * This component uses OnPush change detection for optimal performance.\n */\n@Component({\n selector: 'i-chip',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './chip.component.html',\n styleUrls: ['./chip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IChip {\n /**\n * Text label displayed on the chip\n */\n @Input() label?: string;\n\n /**\n * Icon class name to display (e.g., 'pi pi-user')\n */\n @Input() icon?: string;\n\n /**\n * Image URL to display (e.g., avatar)\n */\n @Input() image?: string;\n\n /**\n * Whether the chip can be removed\n * @default false\n */\n @Input() removable = false;\n\n /**\n * Icon class for the remove button\n * @default 'pi pi-times-circle'\n */\n @Input() removeIcon = 'pi pi-times-circle';\n\n /**\n * Additional CSS classes to apply\n */\n @Input() styleClass?: string;\n\n /**\n * Whether the chip is disabled (prevents removal)\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Event emitted when the remove icon is clicked\n */\n @Output() onRemove = new EventEmitter<Event>();\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-chip-');\n\n /**\n * Handles remove icon click\n * @internal\n */\n onRemoveClick(event: Event): void {\n if (!this.disabled) {\n this.onRemove.emit(event);\n }\n }\n}\n","<div class=\"i-chip\" [class.i-chip-disabled]=\"disabled\" [ngClass]=\"styleClass\">\n @if (icon) {\n <i [class]=\"icon\" class=\"i-chip-icon\"></i>\n } @if (image) {\n <img [src]=\"image\" [alt]=\"label\" class=\"i-chip-image\" />\n } @if (label) {\n <span class=\"i-chip-text\">{{ label }}</span>\n }\n <ng-content></ng-content>\n @if (removable && !disabled) {\n <i\n [class]=\"removeIcon\"\n class=\"i-chip-remove-icon\"\n (click)=\"onRemoveClick($event)\"\n ></i>\n }\n</div>\n","\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { IChip } from '../chip/chip.component';\nimport { IButton } from '../button/button.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\nexport interface ChipItem {\n label: string;\n value: unknown;\n icon?: string;\n removable?: boolean;\n disabled?: boolean;\n}\n\nexport interface ChipRemoveEvent {\n chip: ChipItem;\n originalEvent: Event;\n}\n\n@Component({\n selector: 'i-chips',\n standalone: true,\n imports: [IChip, IButton],\n templateUrl: './chips.component.html',\n styleUrls: ['./chips.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IChipsComponent implements OnChanges, AfterViewInit, OnDestroy {\n @Input() chips: ChipItem[] = [];\n @Input() removable = true;\n @Input() disabled = false;\n @Input() collapseOnOverflow = false;\n @Input() overflowLabel?: string;\n /** Render chips inside a boxed input-like container */\n @Input() boxed = false;\n @Input() allowCloseAll = false;\n\n /** Label text for float label */\n @Input() label?: string;\n /** Whether to use floating label style */\n @Input() useFloatLabel = false;\n /** Show error state styling */\n @Input() showError = false;\n\n @Output() closedAll = new EventEmitter<void>();\n\n @Output() removeChip = new EventEmitter<ChipRemoveEvent>();\n\n @ViewChild('chipsViewport', { static: false })\n chipsViewportRef?: ElementRef<HTMLDivElement>;\n\n @ViewChild('chipsList', { static: false })\n chipsListRef?: ElementRef<HTMLDivElement>;\n\n chipsOverflow = false;\n private resizeObserver?: ResizeObserver;\n private overflowRafId?: number;\n\n /** Unique component identifier */\n componentId = UniqueComponentId('i-chips-');\n\n constructor(private cdr: ChangeDetectorRef, private ngZone: NgZone) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['collapseOnOverflow']) {\n if (this.collapseOnOverflow) {\n this.setupOverflowHandling();\n } else {\n this.teardownOverflowHandling();\n }\n }\n\n if (changes['chips']) {\n this.queueOverflowCheck();\n }\n }\n\n ngAfterViewInit(): void {\n if (this.collapseOnOverflow) {\n this.setupOverflowHandling();\n }\n }\n\n ngOnDestroy(): void {\n this.teardownOverflowHandling();\n }\n\n trackByValue(index: number, chip: ChipItem): unknown {\n return chip.value ?? index;\n }\n\n onChipRemove(chip: ChipItem, event: Event): void {\n if (this.disabled || chip.disabled || !(chip.removable ?? this.removable)) {\n return;\n }\n\n event.stopPropagation();\n this.removeChip.emit({ chip, originalEvent: event });\n }\n\n get overflowText(): string {\n if (this.overflowLabel && this.overflowLabel.trim().length) {\n return this.overflowLabel;\n }\n\n const count = this.chips?.length ?? 0;\n return count === 1 ? '1 item selected' : `${count} items selected`;\n }\n\n private setupOverflowHandling(): void {\n if (!this.collapseOnOverflow) return;\n if (!this.chipsViewportRef?.nativeElement) return;\n\n this.resizeObserver?.disconnect();\n this.ngZone.runOutsideAngular(() => {\n this.resizeObserver = new ResizeObserver(() => this.queueOverflowCheck());\n this.resizeObserver.observe(this.chipsViewportRef!.nativeElement);\n });\n\n this.queueOverflowCheck();\n }\n\n private teardownOverflowHandling(): void {\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n\n if (this.overflowRafId) {\n cancelAnimationFrame(this.overflowRafId);\n this.overflowRafId = undefined;\n }\n\n if (this.chipsOverflow) {\n this.chipsOverflow = false;\n this.cdr.markForCheck();\n }\n }\n\n private queueOverflowCheck(): void {\n if (!this.collapseOnOverflow) return;\n if (!this.chipsViewportRef?.nativeElement) return;\n\n if (this.overflowRafId) {\n cancelAnimationFrame(this.overflowRafId);\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.overflowRafId = requestAnimationFrame(() => {\n this.overflowRafId = undefined;\n this.checkOverflow();\n });\n });\n }\n\n private checkOverflow(): void {\n if (!this.collapseOnOverflow) return;\n if (!this.chipsViewportRef?.nativeElement) return;\n if (!this.chipsListRef?.nativeElement) return;\n\n const viewport = this.chipsViewportRef.nativeElement;\n const chipsList = this.chipsListRef.nativeElement;\n\n // Compare the chips list scroll width against the viewport's client width\n const isOverflowing = chipsList.scrollWidth > viewport.clientWidth + 1;\n\n if (this.chipsOverflow !== isOverflowing) {\n this.ngZone.run(() => {\n this.chipsOverflow = isOverflowing;\n this.cdr.markForCheck();\n });\n }\n }\n\n // NOTE: removal of all chips is handled by parent via the `closedAll` event.\n\n /** Handle click on the internal close-all button. */\n onCloseAllClicked(event: Event): void {\n event.stopPropagation();\n // Emit a single event for parents to clear their data source\n this.closedAll.emit();\n }\n}\n","<div\n class=\"i-chips-wrapper\"\n [class.i-chips-wrapper--float]=\"useFloatLabel\"\n [class.i-chips-wrapper--error]=\"showError\"\n [attr.id]=\"componentId\"\n>\n <div\n class=\"i-chips-container\"\n #chipsViewport\n [class.i-chips-container--collapse]=\"collapseOnOverflow\"\n [class.i-chips-container--overflow]=\"collapseOnOverflow && chipsOverflow\"\n [class.i-chips-box]=\"boxed\"\n [class.i-chips--disabled]=\"disabled\"\n [class.i-chips--empty]=\"!chips || chips.length === 0\"\n [attr.tabindex]=\"boxed && !disabled ? 0 : null\"\n >\n <div class=\"i-chips-list\" #chipsList>\n @for (chip of chips; track trackByValue($index, chip)) {\n <i-chip\n [label]=\"chip.label\"\n [icon]=\"chip.icon\"\n [removable]=\"chip.removable ?? removable\"\n [disabled]=\"disabled || !!chip.disabled\"\n (onRemove)=\"onChipRemove(chip, $event)\"\n ></i-chip>\n }\n </div>\n\n @if (allowCloseAll && chips && chips.length > 0) {\n <div class=\"i-chips-actions\">\n <i-button\n [text]=\"true\"\n [size]=\"'xtra-small'\"\n [severity]=\"'contrast'\"\n [icon]=\"'pi pi-times'\"\n (clicked)=\"onCloseAllClicked($event)\"\n ></i-button>\n </div>\n } @if (collapseOnOverflow && chipsOverflow) {\n <div class=\"i-chips-summary\">\n {{ overflowText }}\n </div>\n }\n </div>\n\n @if (useFloatLabel && label) {\n <label\n class=\"i-chips-label\"\n [class.i-chips-label--floated]=\"chips && chips.length > 0\"\n [class.i-chips-label--error]=\"showError\"\n >\n {{ label }}\n </label>\n }\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IButton } from '../../../button/button.component';\nimport { ISeverity } from '../../../../enums/IButtonSeverity';\n\n@Component({\n selector: 'i-dialog-actions',\n imports: [IButton],\n templateUrl: './dialog-actions.component.html',\n styleUrl: './dialog-actions.component.scss',\n})\nexport class IDialogActions {\n @Input() submitLabel = 'Submit';\n @Input() cancelLabel = 'Cancel';\n @Input() severity: ISeverity = 'primary';\n @Input() showCancel = true;\n @Input() showSubmit = true;\n @Input() submitDisabled = false;\n @Output() cancelEvent = new EventEmitter<void>();\n @Output() submitEvent = new EventEmitter<void>();\n\n onCancel() {\n this.cancelEvent.emit();\n }\n\n onSubmit() {\n this.submitEvent.emit();\n }\n}\n","<div class=\"dialog-actions\">\n @if (showCancel) {\n <i-button [text]=\"true\" severity=\"secondary\" (click)=\"onCancel()\">{{\n cancelLabel\n }}</i-button>\n }\n @if (showSubmit) {\n <i-button\n [outlined]=\"true\"\n [severity]=\"severity\"\n [disabled]=\"submitDisabled\"\n type=\"submit\"\n (click)=\"onSubmit()\"\n >{{ submitLabel }}</i-button\n >\n }\n</div>\n","import { Component, signal, OnInit } from '@angular/core';\nimport {\n IDynamicDialogConfig,\n IDynamicDialogRef,\n} from '../dialog/services/dialog.interfaces';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { IDialogActions } from '../dialog/inner/dialog-actions/dialog-actions.component';\nimport { ISeverity } from '@shared/enums/IButtonSeverity';\n\n/**\n * Confirmation Dialog Component\n *\n * A pre-built dialog component for confirmation prompts.\n * Uses signals for reactive state management and is typically opened via the dialog service.\n *\n * @example\n * ```typescript\n * // In your component:\n * constructor(private confirmationService: ConfirmationDialogService) {}\n *\n * deleteItem() {\n * this.confirmationService.confirm({\n * message: 'Are you sure you want to delete this item?',\n * header: 'Confirm Delete',\n * severity: 'danger',\n * acceptLabel: 'Delete',\n * rejectLabel: 'Cancel',\n * accept: () => {\n * // User confirmed\n * this.performDelete();\n * },\n * reject: () => {\n * // User cancelled\n * }\n * });\n * }\n * ```\n *\n * @remarks\n * This component is designed to be used with the dialog service\n * and should not typically be instantiated directly.\n * Uses Angular signals for efficient change detection.\n */\n@Component({\n selector: 'i-confirmation-dialog',\n standalone: true,\n imports: [IDialogActions],\n templateUrl: './confirmation-dialog.component.html',\n styleUrl: './confirmation-dialog.component.scss',\n})\nexport class ConfirmationDialogComponent implements OnInit {\n /**\n * Reference to the dialog instance\n * Injected by the dialog service\n * @internal\n */\n public dialogRef?: IDynamicDialogRef;\n\n /**\n * Dialog configuration containing data passed from the service\n * @internal\n */\n public config: IDynamicDialogConfig = {};\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-confirmation-dialog-');\n\n /**\n * Visual severity/style of the dialog\n * @default 'primary'\n */\n severity = signal<ISeverity>('primary');\n\n /**\n * Main message text displayed in the dialog body\n * @default ''\n */\n message = signal('');\n\n /**\n * Dialog header text\n * @default 'Are you sure?'\n */\n header = signal('Are you sure?');\n\n /**\n * Label for the accept/confirm button\n * @default 'Confirm'\n */\n acceptLabel: string = 'Confirm';\n\n /**\n * Label for the reject/cancel button\n * @default 'Cancel'\n */\n rejectLabel: string = 'Cancel';\n\n ngOnInit(): void {\n this.message.set(this.config.data?.message || '');\n this.header.set(this.config.data?.header || 'Are you sure?');\n this.severity.set(this.config.data?.severity || 'primary');\n }\n\n /**\n * Handles confirm button click\n * Closes dialog with true result\n * @internal\n */\n onConfirm(): void {\n this.dialogRef?.close(true);\n }\n\n /**\n * Handles cancel button click\n * Closes dialog with false result\n * @internal\n */\n onCancel(): void {\n this.dialogRef?.close(false);\n }\n}\n","<div class=\"confirmation-dialog\" [attr.id]=\"componentId\">\n <div class=\"confirmation-content\">\n <p class=\"confirmation-message\">{{ message() }}</p>\n </div>\n <i-dialog-actions\n [title]=\"header()\"\n [submitLabel]=\"acceptLabel\"\n [cancelLabel]=\"rejectLabel\"\n [severity]=\"severity()\"\n (cancelEvent)=\"onCancel()\"\n (submitEvent)=\"onConfirm()\"\n ></i-dialog-actions>\n</div>\n","import { Input, Output, EventEmitter, Directive } from '@angular/core';\n\nexport type DialogBreakpoints = Record<\n string,\n { width?: string; height?: string }\n>;\nexport type DialogContentStyle = Record<string, string | number>;\n\n@Directive()\nexport abstract class AbstractDialog {\n @Input() header?: string;\n @Input() width: string = '800px';\n @Input() height?: string;\n @Input() closable: boolean = true;\n @Input() modal: boolean = true;\n /**\n * When true, clicking the overlay backdrop will close the dialog.\n * Defaults to false — the dialog must be closed via the close button or ESC key,\n * or programmatically.\n */\n @Input() dismissableMask: boolean = false;\n @Input() contentStyle?: DialogContentStyle;\n @Input() breakpoints?: DialogBreakpoints;\n @Input() visible: boolean = false;\n @Output() visibleChange = new EventEmitter<boolean>();\n}\n","import {\n Component,\n HostListener,\n ElementRef,\n ViewChild,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ICard } from '../card/card.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { AbstractDialog } from './dialog-base';\n\n/**\n * Dialog Component\n *\n * A modal dialog component for displaying content in an overlay.\n * Supports customizable header, dimensions, and close behavior.\n *\n * @example\n * ```html\n * <!-- Basic dialog -->\n * <i-dialog\n * [(visible)]=\"displayDialog\"\n * header=\"Dialog Title\">\n * <p>Dialog content goes here</p>\n * </i-dialog>\n *\n * <!-- Dialog with custom width -->\n * <i-dialog\n * [(visible)]=\"showDialog\"\n * header=\"Custom Size\"\n * width=\"480px\"\n * height=\"320px\">\n * <p>Content</p>\n * </i-dialog>\n *\n * <!-- Non-modal dialog -->\n * <i-dialog\n * [(visible)]=\"displayDialog\"\n * [modal]=\"false\"\n * header=\"Non-Modal\">\n * <p>Click outside won't close this</p>\n * </i-dialog>\n *\n * <!-- Non-closable dialog -->\n * <i-dialog\n * [(visible)]=\"displayDialog\"\n * [closable]=\"false\"\n * header=\"Cannot Close\">\n * <p>Must interact with dialog to close</p>\n * <button (click)=\"displayDialog = false\">OK</button>\n * </i-dialog>\n * ```\n *\n * @remarks\n * The dialog automatically manages body scroll lock when visible.\n * Press Escape to close if closable is true.\n */\n@Component({\n selector: 'i-dialog',\n imports: [CommonModule, ICard],\n templateUrl: './dialog.component.html',\n styleUrl: './dialog.component.scss',\n})\nexport class IDialog extends AbstractDialog implements OnInit, OnDestroy {\n /**\n * Reference to the dialog element for positioning and styling\n * @internal\n */\n @ViewChild('dialogElement', { static: false }) dialogElement?: ElementRef;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-dialog-');\n\n /**\n * Current applied width from breakpoints\n * @internal\n */\n currentWidth: string = '';\n\n /**\n * Current applied height from breakpoints\n * @internal\n */\n currentHeight: string = '';\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {\n if (this.visible) {\n this.show();\n }\n this.applyBreakpoints();\n }\n\n ngOnDestroy(): void {\n this.hide();\n }\n\n /**\n * Shows the dialog and locks body scroll\n */\n show(): void {\n this.visible = true;\n this.visibleChange.emit(true);\n document.body.style.overflow = 'hidden';\n this.cdr.detectChanges();\n }\n\n /**\n * Hides the dialog and unlocks body scroll\n */\n hide(): void {\n this.visible = false;\n this.visibleChange.emit(false);\n document.body.style.overflow = '';\n }\n\n /**\n * Handles Escape key press to close dialog\n * @internal\n */\n @HostListener('document:keydown.escape')\n onEscapeKey(): void {\n if (this.closable && this.visible) {\n this.hide();\n }\n }\n\n /**\n * Handles overlay click to close modal dialog.\n * Only fires when [dismissableMask]=\"true\" is set — by default dialogs\n * are not closed by clicking the backdrop.\n * @internal\n */\n onOverlayClick(event: Event): void {\n // Check if click was directly on overlay (not on dialog container or its children)\n const target = event.target as HTMLElement;\n const overlay = event.currentTarget as HTMLElement;\n\n if (\n this.modal &&\n this.closable &&\n this.dismissableMask &&\n target === overlay\n ) {\n this.hide();\n }\n }\n\n /**\n * Handles close button click\n * @internal\n */\n onCloseClick(): void {\n if (this.closable) {\n this.hide();\n }\n }\n\n /**\n * Handles window resize to apply responsive breakpoints\n * @internal\n */\n @HostListener('window:resize')\n onWindowResize(): void {\n this.applyBreakpoints();\n }\n\n /**\n * Applies responsive breakpoints based on current window width\n * @internal\n */\n private applyBreakpoints(): void {\n if (!this.breakpoints) {\n this.currentWidth = this.width;\n this.currentHeight = this.height || '';\n return;\n }\n\n const windowWidth = window.innerWidth;\n const sortedBreakpoints = Object.keys(this.breakpoints)\n .map((key) => ({\n breakpoint: parseInt(key),\n value: this.breakpoints![key],\n }))\n .sort((a, b) => b.breakpoint - a.breakpoint);\n\n // Find the first matching breakpoint\n const match = sortedBreakpoints.find((bp) => windowWidth <= bp.breakpoint);\n\n if (match) {\n // Object format with width and/or height\n this.currentWidth = match.value.width || this.width;\n this.currentHeight = match.value.height || this.height || '';\n } else {\n // No breakpoint matched, use default values\n this.currentWidth = this.width;\n this.currentHeight = this.height || '';\n }\n\n this.cdr.detectChanges();\n }\n}\n","@if (visible) {\n <div\n class=\"i-dialog-overlay\"\n (click)=\"onOverlayClick($event)\"\n [attr.id]=\"componentId\"\n >\n <div\n #dialogElement\n class=\"i-dialog-container\"\n [style.width]=\"currentWidth || width\"\n [style.height]=\"currentHeight || height\"\n >\n <i-card\n [title]=\"header\"\n [closable]=\"closable\"\n [fullHeight]=\"true\"\n (closeCard)=\"onCloseClick()\"\n >\n <!-- Main content -->\n <div class=\"i-dialog-content\" [ngStyle]=\"contentStyle\">\n <ng-content></ng-content>\n </div>\n <!-- Footer content -->\n <ng-content slot=\"footer\" select=\"[slot='footer']\"></ng-content>\n </i-card>\n </div>\n </div>\n}\n","import {\n Injectable,\n ComponentRef,\n ViewContainerRef,\n Injector,\n Type,\n createComponent,\n EnvironmentInjector,\n inject,\n ApplicationRef,\n} from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { IDialog } from '../dialog.component';\nimport { IDynamicDialogConfig, IDynamicDialogRef } from './dialog.interfaces';\n\n/**\n * Service for dynamically creating and managing dialog components.\n *\n * This service provides a programmatic way to open dialogs with custom components,\n * handling the component lifecycle, DOM attachment, change detection, and cleanup\n * automatically. It creates a dialog wrapper and injects the specified component\n * into it with optional configuration and data.\n *\n * @example\n * ```typescript\n * // Basic usage\n * constructor(private dialogService: DialogService) {}\n *\n * openDialog() {\n * const ref = this.dialogService.open(MyCustomComponent, {\n * header: 'Edit User',\n * width: '500px',\n * data: { userId: 123 }\n * });\n *\n * ref.onClose.subscribe(result => {\n * if (result) {\n * console.log('Dialog closed with result:', result);\n * }\n * });\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Responsive dialog with custom styles\n * openResponsiveDialog() {\n * this.dialogService.open(FormComponent, {\n * header: 'Create New Item',\n * width: '600px',\n * contentStyle: { overflow: 'auto', padding: '20px' },\n * breakpoints: {\n * '960px': '75vw',\n * '640px': '90vw'\n * },\n * data: { mode: 'create' }\n * });\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DialogService {\n /**\n * Angular's environment injector for creating components.\n * @internal\n */\n private environmentInjector = inject(EnvironmentInjector);\n\n /**\n * Application reference for managing component views in Angular's change detection.\n * @internal\n */\n private appRef = inject(ApplicationRef);\n\n /**\n * Opens a dialog with the specified component and configuration.\n *\n * Creates a dialog wrapper component, instantiates the provided component inside it,\n * and handles all necessary setup including change detection, DOM attachment, and\n * event subscriptions. The component instance will receive `config`, `dialogRef`,\n * and `data` properties if they are defined on the component.\n *\n * @template T The type of the component to display in the dialog\n * @param component The component class to render inside the dialog\n * @param config Configuration options for the dialog appearance and behavior\n * @returns A reference object that can be used to control the dialog and subscribe to close events\n *\n * @example\n * ```typescript\n * const ref = this.dialogService.open(UserFormComponent, {\n * header: 'Edit User',\n * width: '500px',\n * height: '600px',\n * closable: true,\n * modal: true,\n * data: {\n * user: this.selectedUser,\n * mode: 'edit'\n * }\n * });\n *\n * // Handle dialog close\n * ref.onClose.subscribe(savedUser => {\n * if (savedUser) {\n * this.updateUserList(savedUser);\n * }\n * });\n *\n * // Programmatically close the dialog\n * setTimeout(() => {\n * ref.close();\n * }, 5000);\n * ```\n */\n open<T>(\n component: Type<T>,\n config: IDynamicDialogConfig = {}\n ): IDynamicDialogRef {\n // Create the dialog wrapper component\n const dialogRef = createComponent(IDialog, {\n environmentInjector: this.environmentInjector,\n });\n\n // Create the dynamic component to be displayed inside the dialog\n const componentRef = createComponent(component, {\n environmentInjector: this.environmentInjector,\n });\n\n // Set dialog properties\n dialogRef.instance.header = config.header;\n dialogRef.instance.width = config.width || '300px';\n dialogRef.instance.height = config.height;\n dialogRef.instance.contentStyle = config.contentStyle;\n dialogRef.instance.breakpoints = config.breakpoints;\n dialogRef.instance.closable = config.closable !== false;\n dialogRef.instance.modal = config.modal !== false;\n dialogRef.instance.dismissableMask = config.dismissableMask ?? false;\n\n // Create the dialog reference first so we can pass it to the component\n const closeSubject = new Subject<any>();\n let isClosing = false; // Flag to prevent circular calls\n\n const ref: IDynamicDialogRef = {\n close: (result?: any) => {\n if (isClosing) return; // Prevent circular calls\n isClosing = true;\n\n dialogRef.instance.hide();\n\n // Properly detach views from Angular's change detection before destroying\n this.appRef.detachView(componentRef.hostView);\n this.appRef.detachView(dialogRef.hostView);\n\n if (dialogRef.location.nativeElement.parentNode) {\n dialogRef.location.nativeElement.parentNode.removeChild(\n dialogRef.location.nativeElement\n );\n }\n componentRef.destroy();\n dialogRef.destroy();\n closeSubject.next(result);\n closeSubject.complete();\n },\n onClose: closeSubject.asObservable(),\n instance: dialogRef.instance,\n };\n\n // Inject data and dialog reference into the dynamic component\n if (componentRef.instance && typeof componentRef.instance === 'object') {\n // Always set config if the property exists\n if ('config' in componentRef.instance) {\n (componentRef.instance as any).config = config;\n }\n // Always set dialogRef if the property exists\n if ('dialogRef' in componentRef.instance) {\n (componentRef.instance as any).dialogRef = ref;\n }\n // Set data from config if it exists and the property exists on the component\n if ('data' in componentRef.instance) {\n (componentRef.instance as any).data = config.data || {};\n }\n }\n\n // Attach both components to Angular's change detection cycle\n // This is critical for proper change detection in dynamic components\n this.appRef.attachView(dialogRef.hostView);\n this.appRef.attachView(componentRef.hostView);\n\n // Trigger change detection to ensure ngOnInit is called with the injected data\n componentRef.changeDetectorRef.detectChanges();\n\n document.body.appendChild(dialogRef.location.nativeElement);\n\n // Subscribe to dialog visibility changes to handle close button, ESC key, and overlay clicks\n dialogRef.instance.visibleChange.subscribe((visible: boolean) => {\n if (!visible && !isClosing) {\n // Dialog was closed via close button, ESC, or overlay click\n ref.close();\n }\n });\n\n // Show the dialog and wait for the next tick to ensure DOM is rendered\n dialogRef.instance.show();\n\n // Insert the dynamic component into the dialog content\n const dialogContent =\n dialogRef.location.nativeElement.querySelector('.i-dialog-content');\n if (dialogContent) {\n dialogContent.appendChild(componentRef.location.nativeElement);\n }\n\n return ref;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { take } from 'rxjs/operators';\nimport { DialogService } from '../../dialog/services/dialog.service';\nimport { IDynamicDialogRef } from '../../dialog/services/dialog.interfaces';\nimport { ISeverity } from '@shared/enums/IButtonSeverity';\n\n/**\n * Configuration options for confirmation dialogs.\n */\nexport interface ConfirmationDialogConfig {\n /** The visual severity/style of the confirmation dialog (e.g., 'primary', 'danger', 'warning'). Defaults to 'primary' */\n severity?: ISeverity;\n\n /** The confirmation message to display to the user */\n message: string;\n\n /** Optional header text for the dialog title bar */\n header?: string;\n\n /** Custom label for the accept/confirm button. Defaults to 'Confirm' */\n acceptLabel?: string;\n\n /** Custom label for the reject/cancel button. Defaults to 'Cancel' */\n rejectLabel?: string;\n\n /** Callback function executed when the user accepts/confirms the dialog */\n accept?: () => void;\n\n /** Callback function executed when the user rejects/cancels the dialog */\n reject?: () => void;\n}\n\n/**\n * Service for displaying confirmation dialogs to users.\n *\n * This service provides a simplified API for showing confirmation dialogs with\n * accept/reject actions. It automatically handles dialog creation, button labels,\n * and callback execution based on user choice.\n *\n * @example\n * ```typescript\n * constructor(private confirmationService: ConfirmationDialogService) {}\n *\n * deleteItem() {\n * this.confirmationService.confirm({\n * header: 'Delete Confirmation',\n * message: 'Are you sure you want to delete this item?',\n * severity: 'danger',\n * acceptLabel: 'Delete',\n * rejectLabel: 'Cancel',\n * accept: () => {\n * this.performDelete();\n * },\n * reject: () => {\n * console.log('Delete cancelled');\n * }\n * });\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Simple confirmation without callbacks\n * async confirmAction() {\n * const ref = await this.confirmationService.confirm({\n * message: 'Proceed with this action?',\n * header: 'Confirm Action'\n * });\n *\n * ref.onClose.subscribe(result => {\n * if (result === true) {\n * // User accepted\n * this.performAction();\n * }\n * });\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ConfirmationDialogService {\n constructor(private dialogService: DialogService) {}\n\n /** Label for the accept button. Set internally based on config */\n acceptLabel?: string;\n\n /** Label for the reject button. Set internally based on config */\n rejectLabel?: string;\n\n /**\n * Displays a confirmation dialog and handles user response.\n *\n * Opens a modal confirmation dialog with the specified message and options.\n * The dialog shows two buttons (accept and reject) and executes the appropriate\n * callback based on user choice. The confirmation component is lazy-loaded for\n * better performance.\n *\n * @param config Configuration object defining the dialog appearance and behavior\n * @returns A Promise that resolves to a dialog reference for programmatic control\n *\n * @example\n * ```typescript\n * // Basic confirmation\n * this.confirmationService.confirm({\n * message: 'Delete this record?',\n * header: 'Confirm Delete',\n * accept: () => this.delete()\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Confirmation with custom styling and labels\n * await this.confirmationService.confirm({\n * header: 'Warning',\n * message: 'This action cannot be undone. Continue?',\n * severity: 'danger',\n * acceptLabel: 'Yes, Continue',\n * rejectLabel: 'No, Go Back',\n * accept: () => {\n * this.performIrreversibleAction();\n * },\n * reject: () => {\n * this.logCancellation();\n * }\n * });\n * ```\n */\n async confirm(config: ConfirmationDialogConfig): Promise<IDynamicDialogRef> {\n const { ConfirmationDialogComponent } =\n await import('../confirmation-dialog.component');\n\n this.acceptLabel = config.acceptLabel || 'Confirm';\n this.rejectLabel = config.rejectLabel || 'Cancel';\n\n const ref = this.dialogService.open(ConfirmationDialogComponent, {\n header: config.header,\n width: '400px',\n contentStyle: { overflow: 'auto' },\n breakpoints: {\n '960px': { width: '720px' },\n '640px': { width: '576px' },\n },\n data: {\n message: config.message,\n header: config.header,\n severity: config.severity || 'primary',\n },\n });\n\n // Subscribe to dialog close event to execute callbacks\n ref.onClose.pipe(take(1)).subscribe((result: boolean) => {\n if (result === true && config.accept) {\n config.accept();\n } else if (result === false && config.reject) {\n config.reject();\n }\n });\n\n return ref;\n }\n}\n","import { Component, OnInit, AfterViewInit } from '@angular/core';\nimport {\n IDynamicDialogConfig,\n IDynamicDialogRef,\n} from './services/dialog.interfaces';\n\n@Component({\n template: '',\n})\nexport abstract class IDialogBase implements OnInit, AfterViewInit {\n public dialogRef?: IDynamicDialogRef;\n public config: IDynamicDialogConfig = {};\n\n constructor() {}\n\n ngOnInit(): void {\n this.initializeDialogProperties();\n }\n\n ngAfterViewInit(): void {\n this.initializeDialogProperties();\n }\n\n private initializeDialogProperties(): void {\n if (!this.config) {\n this.config = {};\n }\n\n if (!this.dialogRef && typeof window !== 'undefined') {\n setTimeout(() => {\n if (!this.dialogRef) {\n console.warn(\n 'BaseDialogComponent: dialogRef is not available. Dialog may not close properly.'\n );\n }\n }, 100);\n }\n }\n\n protected close(result?: any): void {\n if (this.dialogRef) {\n this.dialogRef.close(result);\n } else {\n console.error(\n 'BaseDialogComponent: Cannot close dialog - dialogRef is not available'\n );\n }\n }\n\n protected getData<T = any>(): T | undefined {\n return this.config?.data as T;\n }\n\n protected getDataProperty<T = any>(key: string): T | undefined {\n return this.config?.data?.[key] as T;\n }\n\n protected hasData(key?: string): boolean {\n if (!this.config?.data) {\n return false;\n }\n\n if (key) {\n return key in this.config.data;\n }\n\n return true;\n }\n}\n","import { Component, Input, signal } from '@angular/core';\n\n/**\n * Empty State Component\n *\n * Displays an illustration and message when no content is available.\n * Useful for empty lists, search results, or initial states.\n *\n * @example\n * ```html\n * <!-- Basic empty state -->\n * <i-empty-state></i-empty-state>\n *\n * <!-- Fixed position (doesn't scroll with content) -->\n * <i-empty-state [fixed]=\"true\"></i-empty-state>\n *\n * <!-- With dark color scheme -->\n * <i-empty-state [colorScheme]=\"colorSchemeSignal\"></i-empty-state>\n * ```\n *\n * @remarks\n * Use the fixed property when you want the empty state to remain\n * centered regardless of scroll position.\n */\n@Component({\n selector: 'i-empty-state',\n standalone: true,\n templateUrl: './empty-state.component.html',\n styleUrl: './empty-state.component.scss',\n})\nexport class EmptyStateComponent {\n /**\n * Whether the empty state should be fixed position\n * @default false\n */\n @Input() fixed: boolean = false;\n\n /**\n * Color scheme signal for theming\n * @default signal('light')\n */\n @Input() colorScheme = signal<string>('light');\n\n /**\n * Tracks whether the illustration image has loaded\n * @internal\n */\n imageLoaded: boolean = false;\n\n /**\n * Handles image load with a slight delay for smooth appearance\n * @internal\n */\n onImageLoad(): void {\n setTimeout(() => {\n this.imageLoaded = true;\n }, 200);\n }\n}\n","<div class=\"flex justify-contents no-results-container\">\n <img\n [src]=\"\n 'assets/images/' +\n (colorScheme() === 'light' ? 'no-results-light' : 'no-results-dark') +\n '.png'\n \"\n alt=\"No Results\"\n class=\"no-results-image\"\n [class.loaded]=\"imageLoaded\"\n [class.fixed]=\"fixed\"\n [class.dynamic]=\"!fixed\"\n (load)=\"onImageLoad()\"\n />\n</div>\n","import { Component, Input, Optional, Self } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ControlValueAccessor,\n NgControl,\n AbstractControl,\n} from '@angular/forms';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { TooltipDirective } from '../../directives/tooltip/tooltip.directive';\n\n/**\n * Supported background style options for the textarea\n */\nexport type ITextareaBackgroundStyle = 'surface' | 'component';\n\n/**\n * Textarea Component\n *\n * A form control multi-line text input component with floating labels and validation support.\n * Fully compatible with Angular Reactive Forms and Template-driven Forms.\n * Supports character counting, auto-resize, and custom error messages.\n *\n * @example\n * ```html\n * <!-- Basic textarea -->\n * <i-textarea label=\"Description\"></i-textarea>\n *\n * <!-- Textarea with reactive form -->\n * <i-textarea\n * label=\"Bio\"\n * formControlName=\"bio\"\n * [rows]=\"5\">\n * </i-textarea>\n *\n * <!-- Textarea with character limit -->\n * <i-textarea\n * label=\"Comment\"\n * [(ngModel)]=\"comment\"\n * [maxLength]=\"200\">\n * </i-textarea>\n *\n * <!-- Full width textarea -->\n * <i-textarea\n * label=\"Notes\"\n * [fluid]=\"true\"\n * [rows]=\"6\"\n * formControlName=\"notes\">\n * </i-textarea>\n * ```\n *\n * @remarks\n * This component implements ControlValueAccessor for seamless integration with Angular Forms.\n * Supports floating labels, character counting, and custom validation messages.\n */\n@Component({\n selector: 'i-textarea',\n standalone: true,\n imports: [CommonModule, TooltipDirective],\n templateUrl: './textarea.component.html',\n styleUrls: ['./textarea.component.scss'],\n})\nexport class ITextarea implements ControlValueAccessor {\n /**\n * Label text displayed for the textarea\n * @default 'Label'\n */\n @Input() label = 'Label';\n\n /**\n * HTML id attribute for the textarea element\n */\n @Input() id?: string;\n\n /**\n * Whether the textarea should take full width of its container\n * @default false\n */\n @Input() fluid = false;\n\n /**\n * Forces the label to stay in floated position\n * @default false\n */\n @Input() forceFloated = false;\n\n /**\n * Enables floating label animation\n * @default true\n */\n @Input() useFloatLabel = true;\n\n /**\n * Placeholder text for the textarea\n */\n @Input() placeholder?: string;\n\n /**\n * Number of visible text rows\n * @default 4\n */\n @Input() rows = 4;\n\n /**\n * Maximum number of characters allowed (also shows character counter)\n */\n @Input() maxLength?: number;\n\n /**\n * Whether the textarea can be resized by the user\n * @default true\n */\n @Input() resizable = true;\n\n /**\n * Whether the textarea is readonly\n * @default false\n */\n @Input() readonly = false;\n\n /**\n * Whether the textarea is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Allows external control to override validation state\n * @default false\n */\n @Input() externalInvalid = false;\n\n /**\n * External error message to display (overrides internal validation)\n */\n @Input() externalErrorMessage?: string;\n\n /**\n * Background style of the textarea\n * @default 'surface'\n */\n @Input() backgroundStyle: ITextareaBackgroundStyle = 'surface';\n\n /**\n * Custom error messages for validation rules\n * @default {}\n */\n @Input() errorMessages: { [key: string]: string } = {};\n\n /**\n * Percentage threshold (0–100) at which to show the character count warning colour\n * @default 80\n */\n @Input() charCountWarnAt = 80;\n\n /**\n * Current textarea value\n * @internal\n */\n value: string | null = null;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-textarea-');\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChange: (v: string | null) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouched: () => void = () => {};\n\n constructor(@Optional() @Self() public ngControl: NgControl | null) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * Writes a value to the textarea (ControlValueAccessor)\n * @internal\n */\n writeValue(obj: string | null): void {\n this.value = obj == null ? null : obj;\n }\n\n /**\n * Registers the onChange callback (ControlValueAccessor)\n * @internal\n */\n registerOnChange(fn: (v: string | null) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Registers the onTouched callback (ControlValueAccessor)\n * @internal\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Sets the disabled state (ControlValueAccessor)\n * @internal\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**\n * Handles input event and updates value\n * @internal\n */\n handleInput(event: Event) {\n const v = (event.target as HTMLTextAreaElement).value;\n this.value = v;\n this.onChange(v);\n }\n\n /**\n * Marks the textarea as touched\n * @internal\n */\n touch() {\n this.onTouched();\n }\n\n /**\n * Gets the form control instance\n * @internal\n */\n get control(): AbstractControl | null {\n return this.ngControl ? this.ngControl.control : null;\n }\n\n /**\n * Determines if validation errors should be shown\n * @internal\n */\n get showErrors(): boolean {\n if (this.externalInvalid) return true;\n const c = this.control;\n return !!(c && c.invalid && c.dirty);\n }\n\n /**\n * Gets the first validation error key\n * @internal\n */\n get firstErrorKey(): string | null {\n const c = this.control;\n if (!c || !c.errors) return null;\n return Object.keys(c.errors)[0] || null;\n }\n\n /**\n * Gets the error message to display\n * @internal\n */\n getErrorMessage(): string | null {\n if (this.externalInvalid && this.externalErrorMessage) {\n return this.externalErrorMessage;\n }\n\n const key = this.firstErrorKey;\n if (!key) return null;\n const c = this.control;\n if (this.errorMessages && this.errorMessages[key])\n return this.errorMessages[key];\n const err = c?.errors || {};\n switch (key) {\n case 'required':\n return `${this.label} is required`;\n case 'minlength':\n return `Minimum ${err['minlength']?.requiredLength} characters required`;\n case 'maxlength':\n return `Maximum ${err['maxlength']?.requiredLength} characters allowed`;\n case 'pattern':\n return `${this.label} is not valid`;\n default:\n return err[key] && typeof err[key] === 'string'\n ? err[key]\n : 'Invalid value';\n }\n }\n\n /**\n * Whether the textarea has a non-empty value\n * @internal\n */\n get hasValue(): boolean {\n if (this.value === null || this.value === undefined) return false;\n return this.value.length > 0;\n }\n\n /**\n * Current character count\n * @internal\n */\n get currentLength(): number {\n return this.value?.length ?? 0;\n }\n\n /**\n * Whether the character count is in the warning range\n * @internal\n */\n get charCountWarning(): boolean {\n if (!this.maxLength) return false;\n const pct = (this.currentLength / this.maxLength) * 100;\n return pct >= this.charCountWarnAt && pct < 100;\n }\n\n /**\n * Whether the character count has exceeded the limit\n * @internal\n */\n get charCountOver(): boolean {\n if (!this.maxLength) return false;\n return this.currentLength >= this.maxLength;\n }\n}\n","<div\n class=\"i-textarea-wrapper\"\n [class.invalid]=\"showErrors\"\n [class.i-textarea--fluid]=\"fluid\"\n [class.i-textarea--no-float]=\"!useFloatLabel\"\n [attr.id]=\"componentId\"\n>\n <div\n [ngClass]=\"useFloatLabel ? 'float-label' : 'normal-input'\"\n class=\"i-textarea-container\"\n >\n <div class=\"i-textarea-icon-wrapper\">\n <textarea\n #textareaElement\n [id]=\"id || componentId\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [rows]=\"rows\"\n [attr.maxlength]=\"maxLength || null\"\n [value]=\"value || ''\"\n (input)=\"handleInput($event)\"\n (blur)=\"touch()\"\n [placeholder]=\"useFloatLabel ? ' ' : placeholder || label\"\n class=\"i-textarea\"\n [class.readonly]=\"readonly\"\n [class.no-resize]=\"!resizable\"\n [class.component-border]=\"backgroundStyle === 'component'\"\n [iTooltip]=\"showErrors ? (getErrorMessage() || '') : ''\"\n tooltipPosition=\"below\"\n [tooltipDelay]=\"100\"\n ></textarea>\n @if (useFloatLabel) {\n <label\n [for]=\"id || componentId\"\n class=\"i-textarea-label\"\n [class.floated]=\"forceFloated || hasValue\"\n >{{ label }}</label\n >\n }\n <ng-content></ng-content>\n </div>\n </div>\n\n <div class=\"i-textarea-footer\">\n @if (showErrors && getErrorMessage()) {\n <span class=\"i-error\">{{ getErrorMessage() }}</span>\n }\n @if (maxLength) {\n <span\n class=\"i-char-count\"\n [class.i-char-count--warn]=\"charCountWarning\"\n [class.i-char-count--over]=\"charCountOver\"\n >\n {{ currentLength }}/{{ maxLength }}\n </span>\n }\n </div>\n</div>\n","import { Component, Input, ChangeDetectionStrategy, booleanAttribute } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ISeverity } from '../../enums/IButtonSeverity';\n\nexport type ITagSize = 'sm' | 'md' | 'lg';\n\n/**\n * Tag Component\n *\n * A compact badge/label component for categorisation, status indicators,\n * and metadata display. Supports all design-system severity colours,\n * optional icons, pill shape, and three sizes.\n *\n * @example\n * ```html\n * <!-- Basic tag -->\n * <i-tag value=\"New\" />\n *\n * <!-- Severity tag -->\n * <i-tag value=\"Saved\" severity=\"success\" />\n *\n * <!-- Rounded pill -->\n * <i-tag value=\"Beta\" severity=\"info\" [rounded]=\"true\" />\n *\n * <!-- With icon -->\n * <i-tag value=\"Error\" severity=\"danger\" icon=\"pi pi-times-circle\" />\n *\n * <!-- Different sizes -->\n * <i-tag value=\"Small\" severity=\"warning\" size=\"sm\" />\n * <i-tag value=\"Large\" severity=\"primary\" size=\"lg\" />\n * ```\n */\n@Component({\n selector: 'i-tag',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './tag.component.html',\n styleUrls: ['./tag.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ITag {\n /**\n * Text content of the tag\n */\n @Input() value = '';\n\n /**\n * Colour severity following the design-system palette.\n * When omitted the tag renders with a neutral surface style.\n */\n @Input() severity?: ISeverity;\n\n /**\n * Renders the tag as a pill (fully rounded corners)\n * @default false\n */\n @Input({ transform: booleanAttribute }) rounded = false;\n\n /**\n * Icon class name to display before the value (e.g. 'pi pi-check')\n */\n @Input() icon?: string;\n\n /**\n * Visual size of the tag\n * @default 'md'\n */\n @Input() size: ITagSize = 'md';\n}\n","<span\n class=\"i-tag\"\n [ngClass]=\"[\n severity ? 'i-tag-' + severity : '',\n rounded ? 'i-tag-rounded' : '',\n size === 'lg' ? 'i-tag-lg' : size === 'sm' ? 'i-tag-sm' : ''\n ]\"\n>\n @if (icon) {\n <i [class]=\"icon\" class=\"i-tag-icon\" aria-hidden=\"true\"></i>\n }\n <span class=\"i-tag-value\">{{ value }}</span>\n</span>\n","import { Component, Input } from '@angular/core';\n\n\n/**\n * Arrow direction options for the placeholder icon\n */\nexport type PlaceholderArrowDirection =\n | 'left'\n | 'right'\n | 'up'\n | 'down'\n | 'none';\n\n/**\n * Placeholder Component\n *\n * Displays a centered placeholder area with an optional arrow icon and custom content.\n * Useful for empty selection states, drop zones, or instructional placeholders.\n *\n * @example\n * ```html\n * <!-- Basic placeholder with left arrow -->\n * <i-placeholder arrowDirection=\"left\">\n * Select an item from the list\n * </i-placeholder>\n *\n * <!-- Placeholder with no icon -->\n * <i-placeholder arrowDirection=\"none\">\n * <h3>No items found</h3>\n * <p>Try adjusting your search criteria</p>\n * </i-placeholder>\n *\n * <!-- Placeholder with custom icon -->\n * <i-placeholder [customIcon]=\"'pi pi-inbox'\">\n * Your inbox is empty\n * </i-placeholder>\n * ```\n */\n@Component({\n selector: 'i-placeholder',\n standalone: true,\n imports: [],\n templateUrl: './placeholder.component.html',\n styleUrl: './placeholder.component.scss',\n})\nexport class IPlaceholder {\n /**\n * Direction of the arrow icon.\n * Use 'none' to hide the icon completely.\n * @default 'left'\n */\n @Input() arrowDirection: PlaceholderArrowDirection = 'left';\n\n /**\n * Custom icon class to use instead of an arrow.\n * When set, this overrides arrowDirection.\n * @example 'pi pi-inbox', 'pi pi-search'\n */\n @Input() customIcon: string | null = null;\n\n /**\n * Whether to show a subtle background pattern\n * @default false\n */\n @Input() showPattern: boolean = false;\n\n /**\n * Gets the icon class based on configuration\n */\n get iconClass(): string | null {\n if (this.customIcon) {\n return this.customIcon;\n }\n\n if (this.arrowDirection === 'none') {\n return null;\n }\n\n const arrowMap: Record<PlaceholderArrowDirection, string> = {\n left: 'pi pi-arrow-left',\n right: 'pi pi-arrow-right',\n up: 'pi pi-arrow-up',\n down: 'pi pi-arrow-down',\n none: '',\n };\n\n return arrowMap[this.arrowDirection];\n }\n}\n","<div class=\"i-placeholder\" [class.has-pattern]=\"showPattern\">\n <div class=\"i-placeholder-content\">\n @if (iconClass) {\n <i [class]=\"iconClass\"></i>\n }\n <ng-content></ng-content>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { IPlaceholder } from '../placeholder/placeholder.component';\n\n/**\n * No Content Component\n *\n * A versatile empty state component that can be used anywhere in the application\n * when there is no data to display. Perfect for tables, lists, search results, etc.\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <i-no-content></i-no-content>\n *\n * <!-- With custom message -->\n * <i-no-content [message]=\"'No products found'\"></i-no-content>\n *\n * <!-- With custom icon -->\n * <i-no-content\n * [icon]=\"'pi pi-search'\"\n * [message]=\"'No search results'\">\n * </i-no-content>\n *\n * <!-- In a table when no data -->\n * <table>\n * <tbody>\n * @if (data.length === 0) {\n * <tr>\n * <td colspan=\"100%\">\n * <i-no-content></i-no-content>\n * </td>\n * </tr>\n * }\n * </tbody>\n * </table>\n * ```\n *\n * @remarks\n * This component provides a consistent empty state experience across the application.\n */\n@Component({\n selector: 'i-no-content',\n standalone: true,\n imports: [IPlaceholder],\n templateUrl: './no-content.component.html',\n styleUrl: './no-content.component.scss',\n})\nexport class NoContentComponent {\n /**\n * Icon class to display (PrimeIcons format)\n * @default 'pi pi-inbox'\n */\n @Input() icon: string = 'pi pi-inbox';\n\n /**\n * Message to display below the icon\n * @default 'No content available'\n */\n @Input() message: string = 'No content available';\n}\n","<i-placeholder [customIcon]=\"icon\" arrowDirection=\"none\">\n <p class=\"no-content-message\">{{ message }}</p>\n</i-placeholder>\n","import { Injectable, effect, signal, WritableSignal } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport const LocalStorageColorSchemeKey = 'viewModeColorScheme';\n\nconst MOBILE_BREAKPOINT = 991;\n\nexport interface AppConfig {\n inputStyle: string;\n colorScheme: string;\n ripple: boolean;\n scale: number;\n}\n\ninterface LayoutState {\n isSidebarOpen: boolean;\n isMobileViewport: boolean;\n profileSidebarVisible: boolean;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LayoutService {\n private readonly mobileBreakpoint = MOBILE_BREAKPOINT;\n\n _config: AppConfig = {\n ripple: true,\n inputStyle: 'outlined',\n colorScheme: localStorage.getItem(LocalStorageColorSchemeKey) || 'light',\n scale: 12,\n };\n\n config: WritableSignal<AppConfig> = signal<AppConfig>(this._config);\n\n public colorScheme = signal(this.config().colorScheme);\n\n state: WritableSignal<LayoutState> = signal<LayoutState>(\n this.createInitialLayoutState()\n );\n\n private configUpdate = new Subject<AppConfig>();\n\n configUpdate$ = this.configUpdate.asObservable();\n\n constructor() {\n effect(() => {\n const config = this.config();\n this.changeScale(config.scale);\n this.onConfigUpdate();\n });\n }\n\n private createInitialLayoutState(): LayoutState {\n const isMobileViewport = this.isMobileViewport();\n return {\n isSidebarOpen: !isMobileViewport,\n isMobileViewport,\n profileSidebarVisible: false,\n };\n }\n\n updateStyle(config: AppConfig) {\n return config.colorScheme !== this._config.colorScheme;\n }\n\n toggleSidebar() {\n this.state.update((currentState) => ({\n ...currentState,\n isSidebarOpen: !currentState.isSidebarOpen,\n }));\n }\n\n closeSidebar() {\n this.state.update((currentState) =>\n currentState.isSidebarOpen\n ? { ...currentState, isSidebarOpen: false }\n : currentState\n );\n }\n\n syncViewport(width: number) {\n const isMobileViewport = this.isMobileViewport(width);\n this.state.update((currentState) => {\n if (currentState.isMobileViewport === isMobileViewport) {\n return currentState;\n }\n\n return {\n ...currentState,\n isMobileViewport,\n isSidebarOpen: isMobileViewport ? false : true,\n };\n });\n }\n\n showProfileSidebar() {\n this.state.update((currentState) => ({\n ...currentState,\n profileSidebarVisible: !currentState.profileSidebarVisible,\n }));\n }\n\n private isMobileViewport(width: number = this.getViewportWidth()) {\n return width <= this.mobileBreakpoint;\n }\n\n private getViewportWidth(): number {\n if (typeof window !== 'undefined' && window?.innerWidth) {\n return window.innerWidth;\n }\n\n return 0;\n }\n\n onConfigUpdate() {\n this._config = { ...this.config() };\n this.configUpdate.next(this.config());\n }\n\n changeScale(value: number) {\n document.documentElement.style.fontSize = `${value}px`;\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport {\n LayoutService,\n LocalStorageColorSchemeKey,\n} from '../services/layout.service';\nimport { NgClass } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport { IButton } from '../../button/button.component';\nimport { LayoutConfig } from '../models/layout-config.model';\n\n@Component({\n selector: 'i-topbar',\n templateUrl: './topbar.component.html',\n styleUrls: ['./topbar.component.scss'],\n imports: [RouterLink, NgClass, IButton],\n})\nexport class TopbarComponent implements OnInit {\n @Input() config!: LayoutConfig;\n isDark: boolean = false;\n\n constructor(public layoutService: LayoutService) {}\n\n ngOnInit(): void {\n this.isDark = this.colorScheme === 'dark';\n }\n\n set colorScheme(val: string) {\n this.layoutService.config.update((config) => ({\n ...config,\n colorScheme: val,\n }));\n }\n\n get colorScheme(): string {\n return this.layoutService.config().colorScheme;\n }\n\n changeTheme() {\n this.isDark = !this.isDark;\n if (this.isDark) {\n this.colorScheme = 'dark';\n document.body.classList.add('dark');\n document.body.classList.remove('light');\n } else {\n this.colorScheme = 'light';\n document.body.classList.add('light');\n document.body.classList.remove('dark');\n }\n\n localStorage.setItem(LocalStorageColorSchemeKey, this.colorScheme);\n }\n\n get logo(): string {\n if (this.colorScheme === 'light' && this.config.logoLight) {\n return this.config.logoLight;\n } else if (this.colorScheme === 'dark' && this.config.logoDark) {\n return this.config.logoDark;\n }\n return this.config.logoLight || this.config.logoDark || '';\n }\n}\n","<div class=\"layout-topbar\">\n <a class=\"layout-topbar-logo\" routerLink=\"\">\n @if (logo) {\n <img [src]=\"logo\" [alt]=\"config.websiteName + ' logo'\" />\n }\n <span>{{ config.websiteName }}</span>\n </a>\n <i-button\n [severity]=\"'contrast'\"\n size=\"medium\"\n [text]=\"true\"\n [icon]=\"'pi pi-bars'\"\n (clicked)=\"layoutService.toggleSidebar()\"\n ></i-button>\n <i-button\n class=\"layout-topbar-menu-button\"\n [severity]=\"'contrast'\"\n size=\"medium\"\n [text]=\"true\"\n [icon]=\"'pi pi-ellipsis-v'\"\n (clicked)=\"layoutService.showProfileSidebar()\"\n ></i-button>\n\n <div\n class=\"layout-topbar-menu\"\n [ngClass]=\"{\n 'layout-topbar-menu-mobile-active':\n layoutService.state().profileSidebarVisible\n }\"\n >\n <ng-content />\n @if (config.showThemeToggle !== false) {\n <i-button\n [severity]=\"'contrast'\"\n size=\"medium\"\n [text]=\"true\"\n [icon]=\"isDark ? 'pi pi-moon' : 'pi pi-sun'\"\n (clicked)=\"changeTheme()\"\n />\n }\n </div>\n</div>\n","import { InjectionToken, Provider } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n/**\n * Interface for claims checking service.\n * Consuming applications should implement this interface and provide it\n * using the CLAIMS_CHECKER injection token.\n */\nexport interface ClaimsChecker {\n /**\n * Checks if the current user has the specified claim.\n * @param claim The claim to check\n * @returns Observable<boolean> indicating if the user has the claim\n */\n hasClaim(claim: string): Observable<boolean>;\n}\n\n/**\n * Injection token for providing a claims checking service.\n * Applications using claims-based menu filtering should provide\n * an implementation of ClaimsChecker using this token.\n * \n * @example\n * // In your app.config.ts or module:\n * providers: [\n * {\n * provide: CLAIMS_CHECKER,\n * useExisting: ClaimsClient // Your claims service\n * }\n * ]\n */\nexport const CLAIMS_CHECKER = new InjectionToken<ClaimsChecker>('ClaimsChecker');\n\n/**\n * Provides a claims checker service for menu item filtering.\n * This is the recommended way to configure claims-based access control in your application.\n * \n * @param claimsService The claims service instance that implements the ClaimsChecker interface\n * @returns Provider configuration for dependency injection\n * \n * @example\n * // In your app.config.ts:\n * import { provideMenuClaimsChecker } from 'integra-ng';\n * import { ClaimsService } from './services/claims.service';\n * \n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideMenuClaimsChecker(ClaimsService),\n * // ... other providers\n * ]\n * };\n * \n * @example\n * // Or provide an existing service instance:\n * providers: [\n * ClaimsService,\n * provideMenuClaimsChecker(ClaimsService)\n * ]\n */\nexport function provideMenuClaimsChecker(claimsService: any): Provider {\n return {\n provide: CLAIMS_CHECKER,\n useExisting: claimsService,\n };\n}\n","import { Component, Input, OnDestroy, OnInit, inject, signal } from '@angular/core';\nimport { MenuModel, MenuItem } from '../models/menu.model';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { CLAIMS_CHECKER, ClaimsChecker } from '../services/claims-checker.token';\nimport { Subject, BehaviorSubject, forkJoin, of, Observable } from 'rxjs';\nimport { takeUntil, switchMap, map } from 'rxjs/operators';\n\n@Component({\n selector: 'i-menu',\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.scss'],\n imports: [RouterLink, RouterLinkActive],\n})\nexport class MenuComponent implements OnInit, OnDestroy {\n private readonly claimsChecker = inject(CLAIMS_CHECKER, { optional: true });\n private readonly destroy$ = new Subject<void>();\n private readonly modelSubject$ = new BehaviorSubject<MenuModel[]>([]);\n \n filteredModel = signal<MenuModel[]>([]);\n\n @Input() set model(value: MenuModel[]) {\n this.modelSubject$.next(value);\n }\n\n ngOnInit(): void {\n this.modelSubject$\n .pipe(\n takeUntil(this.destroy$),\n switchMap((model) => this.filterModelByClaims(model))\n )\n .subscribe((filteredModel) => {\n this.filteredModel.set(filteredModel);\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private filterModelByClaims(model: MenuModel[]): Observable<MenuModel[]> {\n // If no claims checker is provided, return all menu items (backward compatible)\n if (!this.claimsChecker) {\n return of(model);\n }\n\n // Collect all unique claims from the model\n const claims = this.collectClaims(model);\n \n if (claims.size === 0) {\n return of(model);\n }\n\n // Check all claims in parallel using forkJoin\n const claimChecks: { [key: string]: Observable<boolean> } = {};\n claims.forEach((claim) => {\n claimChecks[claim] = this.claimsChecker!.hasClaim(claim);\n });\n\n if (Object.keys(claimChecks).length === 0) {\n return of(model);\n }\n\n return forkJoin(claimChecks).pipe(\n map((claimsMap) => this.filterModel(model, claimsMap))\n );\n }\n\n private collectClaims(model: MenuModel[]): Set<string> {\n const claims = new Set<string>();\n\n model.forEach((group) => {\n if (group.claim) {\n claims.add(group.claim);\n }\n \n group.items.forEach((item) => {\n this.collectItemClaims(item, claims);\n });\n });\n\n return claims;\n }\n\n private collectItemClaims(item: MenuItem, claims: Set<string>): void {\n if (item.claim) {\n claims.add(item.claim);\n }\n\n if (item.items) {\n item.items.forEach((subItem) => {\n this.collectItemClaims(subItem, claims);\n });\n }\n }\n\n private filterModel(model: MenuModel[], claimsMap: { [key: string]: boolean }): MenuModel[] {\n return model\n .filter((group) => {\n // If group has a claim, check if user has access\n if (group.claim && !claimsMap[group.claim]) {\n return false;\n }\n return true;\n })\n .map((group) => ({\n ...group,\n items: this.filterItems(group.items, claimsMap),\n }))\n .filter((group) => group.items.length > 0); // Remove groups with no visible items\n }\n\n private filterItems(items: MenuItem[], claimsMap: { [key: string]: boolean }): MenuItem[] {\n return items\n .filter((item) => {\n // If item has a claim, check if user has access\n if (item.claim && !claimsMap[item.claim]) {\n return false;\n }\n return true;\n })\n .map((item) => {\n // If item has nested items, filter them recursively\n if (item.items) {\n return {\n ...item,\n items: this.filterItems(item.items, claimsMap),\n };\n }\n return item;\n })\n .filter((item) => {\n // If item has nested items, keep it only if it has visible nested items\n if (item.items) {\n return item.items.length > 0;\n }\n return true;\n });\n }\n}\n","<ul class=\"menu\">\n @for(group of filteredModel(); track $index) {\n <li class=\"menu-group\">\n @if (group.label) {\n <div class=\"menu-group-label\">\n {{ group.label }}\n </div>\n }\n\n <ul class=\"menu-items\">\n @for(item of group.items; track $index) {\n <li class=\"menu-item\">\n <a\n [routerLink]=\"item.routerLink\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n >\n @if (item.icon) {\n <i class=\"{{ item.icon }}\"></i>\n }\n <span>{{ item.label }}</span>\n </a>\n\n @if (item.items) {\n <ul class=\"submenu\">\n @for(subItem of item.items; track $index) {\n <li class=\"submenu-item\">\n <a\n [routerLink]=\"subItem.routerLink\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n >\n @if (subItem.icon) {\n <i class=\"{{ subItem.icon }}\"></i>\n }\n <span>{{ subItem.label }}</span>\n </a>\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n\n @if (group.separator) {\n <hr class=\"separator\" />\n }\n </li>\n }\n</ul>\n","import { Component, ElementRef, Input } from '@angular/core';\nimport { MenuComponent } from '../menu/menu.component';\nimport { MenuModel } from '../models/menu.model';\nimport { LayoutService } from '../services/layout.service';\nimport { IButton } from '../../button/button.component';\n\n@Component({\n selector: 'i-sidebar',\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss'],\n imports: [MenuComponent, IButton],\n})\nexport class SidebarComponent {\n @Input() menuModel: MenuModel[] = [];\n\n constructor(public el: ElementRef, public layoutService: LayoutService) {}\n}\n","<div class=\"sidebar\">\n @if (layoutService.state().isMobileViewport &&\n layoutService.state().isSidebarOpen) {\n <div class=\"sidebar-mobile-header\">\n <div class=\"sidebar-mobile-header-inner\">\n <i-button\n [size]=\"'xtra-small'\"\n [text]=\"true\"\n [severity]=\"'contrast'\"\n [icon]=\"'pi pi-times'\"\n (clicked)=\"layoutService.closeSidebar()\"\n ></i-button>\n </div>\n </div>\n }\n\n <div class=\"sidebar-menu-wrapper\">\n <i-menu [model]=\"menuModel\" />\n </div>\n</div>\n","import {\n Component,\n HostListener,\n OnDestroy,\n OnInit,\n computed,\n effect,\n Input,\n signal,\n ElementRef,\n ViewChild,\n AfterViewInit,\n} from '@angular/core';\nimport { NavigationEnd, Router, RouterOutlet } from '@angular/router';\nimport { filter, Subscription } from 'rxjs';\nimport { NgClass } from '@angular/common';\nimport { TopbarComponent } from './topbar/topbar.component';\nimport { SidebarComponent } from './sidebar/sidebar.component';\nimport { LayoutService } from './services/layout.service';\nimport { LayoutConfig } from './models/layout-config.model';\nimport { MenuModel } from './models/menu.model';\n\n@Component({\n selector: 'i-layout',\n templateUrl: './layout.component.html',\n styleUrls: ['./layout.component.scss'],\n imports: [NgClass, TopbarComponent, SidebarComponent, RouterOutlet],\n})\nexport class LayoutComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() config!: LayoutConfig;\n @Input() menuModel: MenuModel[] = [];\n @ViewChild('mainContainer') mainContainer?: ElementRef<HTMLDivElement>;\n\n protected readonly Math = Math;\n\n private routerSubscription: Subscription;\n private touchStartY = 0;\n private touchCurrentY = 0;\n private isPulling = false;\n pullDistance = signal(0);\n isRefreshing = signal(false);\n\n protected readonly PULL_THRESHOLD = 80;\n private readonly MAX_PULL_DISTANCE = 150;\n protected readonly INDICATOR_OFFSET = 60;\n private readonly REFRESH_DELAY = 300;\n\n // Store bound event handlers for cleanup\n private boundHandleTouchStart?: (event: TouchEvent) => void;\n private boundHandleTouchMove?: (event: TouchEvent) => void;\n private boundHandleTouchEnd?: (event: TouchEvent) => void;\n private refreshTimeoutId?: number;\n private isPullToRefreshInitialized = false;\n\n constructor(\n public layoutService: LayoutService,\n public router: Router\n ) {\n effect(() => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const state = this.layoutService.state();\n const shouldBlockScroll = state.isMobileViewport && state.isSidebarOpen;\n document.body.classList.toggle('blocked-scroll', shouldBlockScroll);\n });\n\n this.routerSubscription = this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe(() => {\n const state = this.layoutService.state();\n if (state.isMobileViewport) {\n this.layoutService.closeSidebar();\n }\n });\n }\n\n ngOnInit(): void {\n this.syncViewportToCurrentWindow();\n }\n\n ngAfterViewInit(): void {\n this.setupPullToRefresh();\n }\n\n private setupPullToRefresh(): void {\n if (!this.config.enablePullToRefresh || typeof window === 'undefined') {\n return;\n }\n\n const container = this.mainContainer?.nativeElement;\n if (!container) {\n return;\n }\n\n // Bind event handlers and store references for cleanup\n this.boundHandleTouchStart = this.handleTouchStart.bind(this);\n this.boundHandleTouchMove = this.handleTouchMove.bind(this);\n this.boundHandleTouchEnd = this.handleTouchEnd.bind(this);\n\n // Use passive: true for touchstart for better scroll performance\n container.addEventListener('touchstart', this.boundHandleTouchStart, {\n passive: true,\n });\n // Use passive: false for touchmove where preventDefault() is needed\n container.addEventListener('touchmove', this.boundHandleTouchMove, {\n passive: false,\n });\n container.addEventListener('touchend', this.boundHandleTouchEnd);\n\n this.isPullToRefreshInitialized = true;\n }\n\n private handleTouchStart(event: TouchEvent): void {\n const state = this.layoutService.state();\n if (!state.isMobileViewport || event.touches.length === 0) {\n return;\n }\n\n const container = this.mainContainer?.nativeElement;\n if (!container || container.scrollTop > 0) {\n return;\n }\n\n this.touchStartY = event.touches[0].clientY;\n this.isPulling = true;\n }\n\n private handleTouchMove(event: TouchEvent): void {\n if (!this.isPulling || event.touches.length === 0) {\n return;\n }\n\n const container = this.mainContainer?.nativeElement;\n if (!container || container.scrollTop > 0) {\n this.isPulling = false;\n this.pullDistance.set(0);\n return;\n }\n\n this.touchCurrentY = event.touches[0].clientY;\n const pullDistance = Math.max(\n 0,\n Math.min(\n this.touchCurrentY - this.touchStartY,\n this.MAX_PULL_DISTANCE\n )\n );\n\n if (pullDistance > 0) {\n event.preventDefault();\n this.pullDistance.set(pullDistance);\n }\n }\n\n private handleTouchEnd(): void {\n if (!this.isPulling) {\n return;\n }\n\n this.isPulling = false;\n\n if (this.pullDistance() >= this.PULL_THRESHOLD) {\n this.refresh();\n } else {\n this.pullDistance.set(0);\n }\n }\n\n private refresh(): void {\n this.isRefreshing.set(true);\n this.pullDistance.set(0);\n \n // Delay reload slightly to show the refreshing state\n this.refreshTimeoutId = window.setTimeout(() => {\n if (typeof window !== 'undefined') {\n window.location.reload();\n }\n }, this.REFRESH_DELAY);\n }\n\n @HostListener('window:resize')\n onWindowResize() {\n this.syncViewportToCurrentWindow();\n }\n\n hideMenu() {\n this.layoutService.closeSidebar();\n }\n\n private syncViewportToCurrentWindow() {\n if (typeof window === 'undefined') {\n return;\n }\n\n this.layoutService.syncViewport(window.innerWidth);\n }\n\n containerClass = computed(() => {\n const layoutConfig = this.layoutService.config();\n const state = this.layoutService.state();\n return {\n 'layout-static': true,\n 'layout-static-inactive': !state.isMobileViewport && !state.isSidebarOpen,\n 'layout-mobile-active': state.isMobileViewport && state.isSidebarOpen,\n 'p-input-filled': layoutConfig.inputStyle === 'filled',\n 'p-ripple-disabled': !layoutConfig.ripple,\n };\n });\n\n ngOnDestroy() {\n if (this.routerSubscription) {\n this.routerSubscription.unsubscribe();\n }\n\n // Clear any pending refresh timeout\n if (this.refreshTimeoutId !== undefined) {\n window.clearTimeout(this.refreshTimeoutId);\n }\n\n // Clean up event listeners\n if (this.isPullToRefreshInitialized) {\n const container = this.mainContainer?.nativeElement;\n if (container && this.boundHandleTouchStart && this.boundHandleTouchMove && this.boundHandleTouchEnd) {\n container.removeEventListener('touchstart', this.boundHandleTouchStart);\n container.removeEventListener('touchmove', this.boundHandleTouchMove);\n container.removeEventListener('touchend', this.boundHandleTouchEnd);\n }\n }\n }\n}\n","<div class=\"layout\">\n <div class=\"layout-wrapper\" [ngClass]=\"containerClass()\">\n <i-topbar [config]=\"config\">\n <ng-content select=\"[topbarActions]\" />\n </i-topbar>\n <div class=\"layout-body\">\n <div\n class=\"layout-sidebar-container\"\n [ngClass]=\"{\n 'sidebar-open': layoutService.state().isSidebarOpen,\n 'sidebar-closed': !layoutService.state().isSidebarOpen\n }\"\n >\n <i-sidebar [menuModel]=\"menuModel\" />\n </div>\n <div class=\"layout-main-container\" #mainContainer>\n @if (config.enablePullToRefresh && layoutService.state().isMobileViewport) {\n <div \n class=\"pull-to-refresh-indicator\"\n [style.transform]=\"'translateY(' + Math.max(-INDICATOR_OFFSET, pullDistance() - INDICATOR_OFFSET) + 'px)'\"\n [style.opacity]=\"Math.min(1, pullDistance() / PULL_THRESHOLD)\"\n >\n <div class=\"refresh-icon\" [class.refreshing]=\"isRefreshing()\">\n <i class=\"pi pi-refresh\"></i>\n </div>\n <div class=\"refresh-text\">\n {{ isRefreshing() ? 'Refreshing...' : (pullDistance() >= PULL_THRESHOLD ? 'Release to refresh' : 'Pull to refresh') }}\n </div>\n </div>\n }\n <div class=\"layout-main\">\n <router-outlet />\n </div>\n </div>\n </div>\n <div class=\"layout-mask\" (click)=\"hideMenu()\"></div>\n </div>\n</div>\n","import {\n Component,\n Input,\n ElementRef,\n ViewChild,\n HostListener,\n Output,\n EventEmitter,\n forwardRef,\n Injector,\n signal,\n computed,\n InputSignal,\n input,\n} from '@angular/core';\n\nimport {\n FormsModule,\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n NgControl,\n AbstractControl,\n} from '@angular/forms';\nimport {\n IChipsComponent,\n ChipItem,\n ChipRemoveEvent,\n} from '../chips/chips.component';\nimport { ICheckbox } from '../checkbox/checkbox.component';\nimport { IInputText } from '../input-text/input-text.component';\nimport { IButton } from '../button/button.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Option data structure for the listbox component\n */\nexport interface ListboxOption {\n [key: string]: any;\n}\n\n/**\n * Listbox Component\n *\n * A versatile listbox component supporting both single and multiple selection modes.\n * Features filtering, chips display, and full form control integration.\n * Uses Angular signals for reactive state management.\n *\n * @example\n * ```html\n * <!-- Single selection listbox -->\n * <i-listbox\n * title=\"Choose One\"\n * [options]=\"items\"\n * optionLabel=\"name\"\n * [multiple]=\"false\"\n * formControlName=\"selectedItem\">\n * </i-listbox>\n *\n * <!-- Multiple selection listbox with action button -->\n * <i-listbox\n * title=\"Choose Multiple\"\n * [options]=\"items\"\n * optionLabel=\"name\"\n * [multiple]=\"true\"\n * actionIcon=\"pi pi-plus\"\n * actionTooltip=\"Add new item\"\n * (onAction)=\"addItem()\"\n * formControlName=\"selectedItems\">\n * </i-listbox>\n *\n * <!-- Listbox with option icons -->\n * <i-listbox\n * title=\"Select Items\"\n * [options]=\"items\"\n * optionLabel=\"name\"\n * optionIcon=\"icon\"\n * formControlName=\"selection\">\n * </i-listbox>\n *\n * <!-- Multiple selection without chips -->\n * <i-listbox\n * title=\"Choose Multiple\"\n * [options]=\"items\"\n * optionLabel=\"name\"\n * [multiple]=\"true\"\n * [showChips]=\"false\"\n * formControlName=\"selectedItems\">\n * </i-listbox>\n *\n * <!-- Display as menu -->\n * <i-listbox\n * title=\"Navigation\"\n * [options]=\"menuItems\"\n * optionLabel=\"name\"\n * [multiple]=\"false\"\n * [displayAsMenu]=\"true\"\n * [filter]=\"false\"\n * formControlName=\"selectedPage\">\n * </i-listbox>\n * ```\n *\n * @remarks\n * This component implements ControlValueAccessor for seamless integration with Angular Forms.\n * Supports both single and multiple selection modes.\n * Uses signals for efficient filtering and option management.\n */\n@Component({\n selector: 'i-listbox',\n standalone: true,\n imports: [FormsModule, IChipsComponent, ICheckbox, IInputText, IButton],\n templateUrl: './listbox.component.html',\n styleUrls: ['./listbox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => IListbox),\n multi: true,\n },\n ],\n})\nexport class IListbox implements ControlValueAccessor {\n /**\n * Title text displayed in the listbox header\n * @default 'List Box'\n */\n @Input() title = 'List Box';\n\n /**\n * @deprecated Use 'title' instead\n */\n @Input() label = '';\n\n /**\n * Icon class for the action button (e.g., 'pi pi-plus')\n * If provided, an action button will be shown in the header\n */\n @Input() actionIcon?: string;\n\n /**\n * Tooltip text for the action button\n */\n @Input() actionTooltip?: string;\n\n /**\n * Property name for icon on each option\n * The option object should have this property with an icon class string\n */\n @Input() optionIcon?: string;\n\n // Convert options to signal input\n options: InputSignal<ListboxOption[] | null | undefined> = input<\n ListboxOption[] | null | undefined\n >([]);\n @Input({ required: true }) optionLabel!: string;\n @Input() placeholder?: string;\n @Input() id?: string;\n @Input() fluid = false;\n @Input() showClear = false;\n @Input() filter = true;\n @Input() filterBy = 'label';\n @Input() maxSelectedLabels = 3;\n @Input() selectedItemsLabel = '{0} items selected';\n @Input() errorMessages: { [key: string]: string } = {};\n @Input() disabled = false;\n @Input() multiple = true;\n @Input() readonly = true;\n\n /**\n * Whether to show chips for selected items in multiple selection mode\n * @default true\n */\n @Input() showChips = true;\n\n /**\n * Display listbox as a menu with larger text and chevron icons\n * Selected item uses menu-style highlighting\n * @default false\n */\n @Input() displayAsMenu = false;\n\n @Output() onChange = new EventEmitter<any[] | any>();\n @Output() onClear = new EventEmitter<void>();\n\n /**\n * Event emitted when the action button is clicked\n */\n @Output() onAction = new EventEmitter<void>();\n\n @ViewChild('dropdown', { static: false }) dropdownRef!: ElementRef;\n @ViewChild('searchInput', { static: false }) searchInputRef!: ElementRef;\n\n // Convert filter value to signal\n filterValue = signal('');\n\n // Create computed signal for filtered options\n filteredOptions = computed(() => {\n const currentOptions = this.options() || [];\n const currentFilterValue = this.filterValue();\n\n if (!Array.isArray(currentOptions)) {\n return [];\n }\n\n if (!this.filter || !currentFilterValue.trim()) {\n return [...currentOptions];\n } else {\n const filterText = currentFilterValue.toLowerCase();\n return currentOptions.filter((option) => {\n const searchValue = this.getOptionSearchValue(option).toLowerCase();\n return searchValue.includes(filterText);\n });\n }\n });\n\n private _value: any[] | any = [];\n\n get value(): any[] | any {\n return this._value;\n }\n\n set value(val: any[] | any) {\n if (this.multiple) {\n this._value = val || [];\n } else {\n this._value = val;\n }\n }\n\n /**\n * Gets the effective title (supports legacy 'label' property)\n */\n get effectiveTitle(): string {\n return this.title || this.label || 'List Box';\n }\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChangeCallback: (value: any[] | any) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouchedCallback: () => void = () => {};\n\n /**\n * NgControl reference for form validation\n * @internal\n */\n public ngControl: NgControl | null = null;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-listbox-');\n\n constructor(private injector: Injector) {\n setTimeout(() => {\n this.ngControl = this.injector.get(NgControl, null);\n });\n }\n\n /**\n * Handles action button click\n */\n onActionClick(event: Event): void {\n event.stopPropagation();\n this.onAction.emit();\n }\n\n /**\n * Gets the icon for an option\n */\n getOptionIcon(option: ListboxOption): string | null {\n if (!this.optionIcon) return null;\n return option[this.optionIcon] || null;\n }\n\n toggleOption(option: ListboxOption) {\n const optionValue = this.getOptionValue(option);\n\n if (this.multiple) {\n const currentValues = Array.isArray(this.value) ? [...this.value] : [];\n const index = currentValues.findIndex(\n (val) => JSON.stringify(val) === JSON.stringify(optionValue)\n );\n\n if (index > -1) {\n currentValues.splice(index, 1);\n } else {\n currentValues.push(optionValue);\n }\n\n this.value = currentValues;\n this.onChange.emit(currentValues);\n this.onChangeCallback(currentValues);\n this.onTouchedCallback();\n } else {\n const newValue =\n JSON.stringify(this.value) === JSON.stringify(optionValue)\n ? null\n : optionValue;\n this.value = newValue;\n this.onChange.emit(newValue);\n this.onChangeCallback(newValue);\n this.onTouchedCallback();\n }\n }\n\n isOptionSelected(option: ListboxOption): boolean {\n const optionValue = this.getOptionValue(option);\n\n if (this.multiple) {\n return (\n Array.isArray(this.value) &&\n this.value.some(\n (val) => JSON.stringify(val) === JSON.stringify(optionValue)\n )\n );\n } else {\n return JSON.stringify(this.value) === JSON.stringify(optionValue);\n }\n }\n\n clearSelection() {\n const newValue = this.multiple ? [] : null;\n this.value = newValue;\n this.onClear.emit();\n this.onChangeCallback(newValue);\n this.onTouchedCallback();\n }\n\n removeSelectedItem(value: any, event: Event) {\n event.stopPropagation();\n\n if (this.multiple) {\n const currentValues = Array.isArray(this.value) ? [...this.value] : [];\n const index = currentValues.findIndex(\n (val) => JSON.stringify(val) === JSON.stringify(value)\n );\n if (index > -1) {\n currentValues.splice(index, 1);\n this.value = currentValues;\n this.onChange.emit(currentValues);\n this.onChangeCallback(currentValues);\n this.onTouchedCallback();\n }\n } else {\n if (JSON.stringify(this.value) === JSON.stringify(value)) {\n this.value = null;\n this.onChange.emit(null);\n this.onChangeCallback(null);\n this.onTouchedCallback();\n }\n }\n }\n\n getOptionLabel(option: ListboxOption): string {\n return option[this.optionLabel] || option['label'] || String(option);\n }\n\n getOptionValue(option: ListboxOption): any {\n return option;\n }\n\n getOptionSearchValue(option: ListboxOption): string {\n if (this.filterBy && option[this.filterBy]) {\n return String(option[this.filterBy]);\n }\n return this.getOptionLabel(option);\n }\n\n getSelectedLabels(): string[] {\n const currentOptions = this.options() || [];\n if (!Array.isArray(currentOptions)) {\n return [];\n }\n\n if (!this.multiple) {\n if (this.value === null || this.value === undefined) {\n return [];\n }\n const option = currentOptions.find(\n (opt: ListboxOption) =>\n JSON.stringify(this.getOptionValue(opt)) ===\n JSON.stringify(this.value)\n );\n return option ? [this.getOptionLabel(option)] : [String(this.value)];\n }\n\n const values = Array.isArray(this.value) ? this.value : [];\n return values.map((val: any) => {\n const option = currentOptions.find(\n (opt: ListboxOption) =>\n JSON.stringify(this.getOptionValue(opt)) === JSON.stringify(val)\n );\n return option ? this.getOptionLabel(option) : String(val);\n });\n }\n\n getSelectedChipItems(): ChipItem[] {\n const labels = this.getSelectedLabels();\n const values = this.getValueArray();\n\n return values.map((value, index) => ({\n label: labels[index] ?? String(value),\n value,\n removable: !this.disabled,\n }));\n }\n\n getDisplayLabel(): string {\n const currentOptions = this.options() || [];\n if (!Array.isArray(currentOptions)) {\n return '';\n }\n\n if (!this.multiple) {\n if (this.value === null || this.value === undefined) {\n return '';\n }\n const option = currentOptions.find(\n (opt: ListboxOption) =>\n JSON.stringify(this.getOptionValue(opt)) ===\n JSON.stringify(this.value)\n );\n return option ? this.getOptionLabel(option) : String(this.value);\n }\n\n if (!this.value || (Array.isArray(this.value) && this.value.length === 0)) {\n return '';\n }\n\n const selectedLabels = this.getSelectedLabels();\n\n if (selectedLabels.length <= this.maxSelectedLabels) {\n return selectedLabels.join(', ');\n } else {\n return this.selectedItemsLabel.replace(\n '{0}',\n selectedLabels.length.toString()\n );\n }\n }\n\n trackByValue(index: number, value: any): any {\n return value;\n }\n\n hasValue(): boolean {\n if (this.multiple) {\n return Array.isArray(this.value) && this.value.length > 0;\n } else {\n return this.value !== null && this.value !== undefined;\n }\n }\n\n getValueArray(): any[] {\n if (this.multiple) {\n return Array.isArray(this.value) ? this.value : [];\n } else {\n return this.value !== null && this.value !== undefined\n ? [this.value]\n : [];\n }\n }\n\n getPlaceholder(): string {\n return (\n this.placeholder ||\n (this.multiple ? 'Select options' : 'Select an option')\n );\n }\n\n onChipRemove(event: ChipRemoveEvent): void {\n this.removeSelectedItem(event.chip.value, event.originalEvent);\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event) {\n if (\n this.dropdownRef &&\n !this.dropdownRef.nativeElement.contains(event.target)\n ) {\n this.filterValue.set('');\n }\n }\n\n // ControlValueAccessor implementation\n writeValue(value: any[] | any): void {\n if (this.multiple) {\n this._value = value || [];\n } else {\n this._value = value;\n }\n }\n\n registerOnChange(fn: (value: any[] | any) => void): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n get control(): AbstractControl | null {\n return this.ngControl ? this.ngControl.control : null;\n }\n\n get showErrors(): boolean {\n const c = this.control;\n return !!(c && c.invalid && c.dirty);\n }\n\n get firstErrorKey(): string | null {\n const c = this.control;\n if (!c || !c.errors) return null;\n return Object.keys(c.errors)[0] || null;\n }\n\n getErrorMessage(): string | null {\n const key = this.firstErrorKey;\n if (!key) return null;\n const c = this.control;\n if (this.errorMessages && this.errorMessages[key])\n return this.errorMessages[key];\n const err = c?.errors || {};\n switch (key) {\n case 'required':\n return `${this.effectiveTitle} is required`;\n case 'minlength':\n return `Minimum ${err['minlength']?.requiredLength} items required`;\n case 'minArrayLength':\n return `Minimum ${err['minArrayLength']?.requiredLength} items required`;\n case 'maxlength':\n return `Maximum ${err['maxlength']?.requiredLength} items allowed`;\n default:\n return err[key] && typeof err[key] === 'string'\n ? err[key]\n : 'Invalid selection';\n }\n }\n}\n","<div\n class=\"i-listbox-wrapper\"\n [class.i-listbox--fluid]=\"fluid\"\n [class.i-listbox--disabled]=\"disabled\"\n [class.i-listbox--invalid]=\"showErrors\"\n [class.i-listbox--menu]=\"displayAsMenu\"\n #dropdown\n>\n <!-- Header -->\n <div class=\"i-listbox-header\">\n <div class=\"i-listbox-header-content\">\n <span class=\"i-listbox-title\">{{ effectiveTitle }}</span>\n @if (actionIcon) {\n <i-button\n [text]=\"true\"\n [size]=\"'small'\"\n [severity]=\"'contrast'\"\n [icon]=\"actionIcon\"\n [disabled]=\"disabled\"\n (clicked)=\"onActionClick($event)\"\n [attr.title]=\"actionTooltip\"\n ></i-button>\n }\n </div>\n\n <!-- Chips area for multiselect mode -->\n @if (multiple && showChips) {\n <div class=\"i-listbox-chips-wrapper\">\n <i-chips\n class=\"i-listbox-chips\"\n [chips]=\"getSelectedChipItems()\"\n [removable]=\"!disabled\"\n [disabled]=\"disabled\"\n [collapseOnOverflow]=\"true\"\n [overflowLabel]=\"getDisplayLabel()\"\n (removeChip)=\"onChipRemove($event)\"\n ></i-chips>\n </div>\n }\n </div>\n\n <!-- Dropdown content -->\n <div class=\"i-listbox-dropdown\">\n @if (filter) {\n <div class=\"i-listbox-filter\">\n <i-input-text\n #searchInput\n [useFloatLabel]=\"false\"\n placeholder=\"Search...\"\n [ngModel]=\"filterValue()\"\n (ngModelChange)=\"filterValue.set($event)\"\n [fluid]=\"true\"\n [icon]=\"'pi pi-search'\"\n >\n </i-input-text>\n </div>\n }\n\n <div class=\"i-listbox-options\">\n @for (option of filteredOptions(); track getOptionValue(option)) {\n <div\n class=\"i-listbox-option\"\n [class.selected]=\"isOptionSelected(option)\"\n [class.has-icon]=\"!multiple && getOptionIcon(option)\"\n (click)=\"toggleOption(option)\"\n >\n <!-- Checkbox only in multiple mode -->\n @if (multiple) {\n <i-checkbox\n [checked]=\"isOptionSelected(option)\"\n [readonly]=\"true\"\n size=\"small\"\n class=\"i-listbox-checkbox\"\n ></i-checkbox>\n }\n\n <!-- Left icon -->\n @if (getOptionIcon(option) && !displayAsMenu) {\n <i\n [class]=\"getOptionIcon(option)\"\n class=\"i-listbox-option-icon i-listbox-option-icon--left\"\n ></i>\n }\n\n <span class=\"i-listbox-option-label\">\n {{ getOptionLabel(option) }}\n </span>\n\n <!-- Right chevron for menu mode -->\n @if (displayAsMenu) {\n <i\n class=\"pi pi-chevron-right i-listbox-option-icon i-listbox-option-icon--chevron\"\n ></i>\n }\n </div>\n } @if (filteredOptions().length === 0) {\n <div class=\"i-listbox-no-options\">No options found</div>\n }\n </div>\n </div>\n\n <!-- Error message -->\n @if (showErrors) {\n <div class=\"i-listbox-error\">\n {{ getErrorMessage() }}\n </div>\n }\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n ElementRef,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n Injector,\n} from '@angular/core';\n\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n NgControl,\n} from '@angular/forms';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { Subject, Subscription } from 'rxjs';\n\n/**\n * RadioButton Component\n *\n * A form control radio button component for single selection within a group.\n * Fully compatible with Angular Reactive Forms and Template-driven Forms.\n *\n * @example\n * ```html\n * <!-- Basic radio button -->\n * <i-radio-button label=\"Option 1\" value=\"option1\" name=\"options\"></i-radio-button>\n *\n * <!-- Radio button with ngModel -->\n * <i-radio-button\n * label=\"Male\"\n * value=\"male\"\n * name=\"gender\"\n * [(ngModel)]=\"selectedGender\">\n * </i-radio-button>\n * <i-radio-button\n * label=\"Female\"\n * value=\"female\"\n * name=\"gender\"\n * [(ngModel)]=\"selectedGender\">\n * </i-radio-button>\n *\n * <!-- Radio button in reactive form -->\n * <i-radio-button\n * label=\"Yes\"\n * value=\"yes\"\n * name=\"confirmation\"\n * formControlName=\"confirmation\">\n * </i-radio-button>\n *\n * <!-- Disabled radio button -->\n * <i-radio-button\n * label=\"Unavailable\"\n * value=\"unavailable\"\n * name=\"options\"\n * [disabled]=\"true\">\n * </i-radio-button>\n * ```\n *\n * @remarks\n * This component implements ControlValueAccessor for seamless integration with Angular Forms.\n * Radio buttons with the same `name` attribute work as a group, allowing only one selection.\n *\n * Note: For Reactive Forms (formControlName), the component will attempt to infer the `name`\n * from the `formControlName` directive when `name` is not explicitly set, but it's still\n * recommended to set the `name` Input for clarity and group scoping.\n */\n@Component({\n selector: 'i-radio-button',\n standalone: true,\n imports: [],\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => IRadioButton),\n multi: true,\n },\n ],\n})\nexport class IRadioButton implements ControlValueAccessor, OnInit, OnDestroy {\n /**\n * Label text displayed next to the radio button\n */\n @Input() label?: string;\n\n /**\n * The value of this radio option\n */\n @Input() value: any;\n\n /**\n * Name attribute to group radio buttons\n */\n @Input() name?: string;\n\n /**\n * HTML id attribute for the radio input element\n */\n @Input() inputId?: string;\n\n /**\n * Whether the radio button is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Whether the radio button should take full width\n * @default false\n */\n @Input() fluid = false;\n\n /**\n * Event emitted when radio button is selected\n */\n @Output() onChange = new EventEmitter<any>();\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-radio-button-');\n\n /**\n * Internal model value (the selected value in the group)\n * @internal\n */\n private _modelValue: any;\n // Grouping state shared across instances (name + form scope)\n private static groupSubjects = new Map<string, Subject<any>>();\n private static groupValues = new Map<string, any>();\n private groupKey?: string;\n private subscription?: Subscription;\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChangeCallback: (value: any) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouchedCallback: () => void = () => {};\n\n constructor(\n private elementRef: ElementRef,\n private cdr: ChangeDetectorRef,\n private injector: Injector\n ) {}\n\n /**\n * Gets the effective input ID\n */\n get effectiveInputId(): string {\n return this.inputId || this.componentId;\n }\n\n /**\n * Checks if this radio button is currently selected\n */\n get checked(): boolean {\n return this._modelValue === this.value;\n }\n\n /**\n * Selects this radio button\n * @internal\n */\n select(): void {\n if (this.disabled) return;\n\n if (this._modelValue !== this.value) {\n this._modelValue = this.value;\n this.onChangeCallback(this.value);\n this.onTouchedCallback();\n\n // Emit after the current change detection cycle completes\n // This ensures Angular forms have processed the value change\n setTimeout(() => {\n this.onChange.emit(this.value);\n }, 0);\n\n // Notify group subscribers (if name is provided)\n if (this.groupKey) {\n const subject = IRadioButton.groupSubjects.get(this.groupKey);\n if (subject) {\n IRadioButton.groupValues.set(this.groupKey, this.value);\n subject.next(this.value);\n }\n }\n }\n }\n\n /**\n * Writes a value to the radio button (ControlValueAccessor)\n * @internal\n */\n writeValue(value: any): void {\n this._modelValue = value;\n\n // If the control receives a value, notify the group so all members update\n if (this.groupKey) {\n const current = IRadioButton.groupValues.get(this.groupKey);\n if (current !== value) {\n let subject = IRadioButton.groupSubjects.get(this.groupKey);\n if (!subject) {\n subject = new Subject<any>();\n IRadioButton.groupSubjects.set(this.groupKey, subject);\n }\n IRadioButton.groupValues.set(this.groupKey, value);\n subject.next(value);\n }\n }\n }\n\n ngOnInit(): void {\n // If the consumer used reactive forms but didn't provide a 'name' input,\n // try to use the NgControl name for grouping\n const ngControl = this.injector.get(NgControl, null as any);\n if (!this.name && ngControl?.name) {\n try {\n this.name = String(ngControl.name);\n } catch {}\n }\n\n // Only group radios when a common name is provided\n if (!this.name) return;\n\n // compute a form-scoped key: name@formId or name@root\n const form = this.elementRef.nativeElement.closest(\n 'form'\n ) as HTMLFormElement | null;\n let formKey = 'root';\n if (form) {\n formKey =\n form.id ||\n form.getAttribute('data-integrang-form-id') ||\n UniqueComponentId('i-radio-form-');\n if (!form.id && !form.getAttribute('data-integrang-form-id')) {\n form.setAttribute('data-integrang-form-id', formKey);\n }\n }\n this.groupKey = `${this.name}@${formKey}`;\n\n // ensure subject exists\n let subject = IRadioButton.groupSubjects.get(this.groupKey);\n if (!subject) {\n subject = new Subject<any>();\n IRadioButton.groupSubjects.set(this.groupKey, subject);\n }\n\n // subscribe to group changes\n this.subscription = subject.subscribe((value: any) => {\n // update model and view\n this._modelValue = value;\n // run change detection to update CSS classes\n this.cdr.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n\n // Cleanup: if there are no more observers for this group, remove the subject and value\n if (this.groupKey) {\n const subject = IRadioButton.groupSubjects.get(this.groupKey);\n if (subject && subject.observers && subject.observers.length === 0) {\n IRadioButton.groupSubjects.delete(this.groupKey);\n IRadioButton.groupValues.delete(this.groupKey);\n }\n }\n }\n\n /**\n * Registers the onChange callback (ControlValueAccessor)\n * @internal\n */\n registerOnChange(fn: (value: any) => void): void {\n this.onChangeCallback = fn;\n }\n\n /**\n * Registers the onTouched callback (ControlValueAccessor)\n * @internal\n */\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n /**\n * Sets the disabled state (ControlValueAccessor)\n * @internal\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","<div\n class=\"i-radio-button-wrapper\"\n [class.i-radio-button--disabled]=\"disabled\"\n [class.i-radio-button--fluid]=\"fluid\"\n>\n <div\n class=\"i-radio-button\"\n [class.i-radio-button--checked]=\"checked\"\n (click)=\"select()\"\n [attr.id]=\"effectiveInputId\"\n role=\"radio\"\n [attr.aria-checked]=\"checked\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-labelledby]=\"label ? effectiveInputId + '-label' : null\"\n tabindex=\"0\"\n (keydown.space)=\"$event.preventDefault(); select()\"\n >\n <span class=\"i-radio-button-icon\"></span>\n </div>\n @if (label) {\n <label\n [id]=\"effectiveInputId + '-label'\"\n class=\"i-radio-button-label\"\n (click)=\"select()\"\n >\n {{ label }}\n </label>\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\nimport { ISeverity } from '@shared/enums/IButtonSeverity';\n\nexport type MessageSize = 'small' | 'medium' | 'large';\n\n@Component({\n selector: 'i-message',\n imports: [],\n templateUrl: './message.component.html',\n styleUrl: './message.component.scss',\n})\nexport class IMessage {\n /**\n * Severity type of the message\n * @default 'info'\n */\n @Input() severity: ISeverity = 'info';\n\n /**\n * Size of the message\n * @default 'medium'\n */\n @Input() size: MessageSize = 'medium';\n\n /**\n * Icon to display (Material Icons)\n * If not provided, default icons based on severity will be used\n */\n @Input() icon?: string;\n\n /**\n * Whether the message can be closed\n * @default false\n */\n @Input() closable: boolean = false;\n\n /**\n * Whether the message is visible\n * @default true\n */\n @Input() visible: boolean = true;\n\n /**\n * Event emitted when visible changes (for two-way binding)\n */\n @Output() visibleChange = new EventEmitter<boolean>();\n\n /**\n * Get the default icon based on severity\n */\n getDefaultIcon(): string {\n if (this.icon) return this.icon;\n\n const iconMap: Record<ISeverity, string> = {\n success: 'pi pi-check-circle',\n info: 'pi pi-lightbulb',\n warning: 'pi pi-exclamation-triangle',\n danger: 'pi pi-times-circle',\n primary: 'pi pi-info-circle',\n secondary: 'pi pi-info-circle',\n tertiary: 'pi pi-info-circle',\n contrast: 'pi pi-info-circle',\n };\n\n return iconMap[this.severity] || 'pi pi-info-circle';\n }\n\n /**\n * Close the message\n */\n close(): void {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n}\n","@if (visible) {\n<div\n class=\"i-message i-message-{{ severity }} i-message--{{ size }}\"\n role=\"alert\"\n>\n <div class=\"i-message-content\">\n <div class=\"i-message-icon\">\n <i [class]=\"getDefaultIcon()\"></i>\n </div>\n <div class=\"i-message-text\">\n <ng-content></ng-content>\n </div>\n @if (closable) {\n <button\n class=\"i-message-close\"\n type=\"button\"\n (click)=\"close()\"\n aria-label=\"Close\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n }\n </div>\n</div>\n}\n","import {\n Component,\n Input,\n ElementRef,\n ViewChild,\n HostListener,\n Output,\n EventEmitter,\n forwardRef,\n Injector,\n signal,\n computed,\n InputSignal,\n input,\n WritableSignal,\n} from '@angular/core';\n\nimport {\n FormsModule,\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n NgControl,\n AbstractControl,\n} from '@angular/forms';\nimport { IChipsComponent, ChipItem } from '../chips/chips.component';\nimport { ICheckbox } from '../checkbox/checkbox.component';\nimport { IInputText } from '../input-text/input-text.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Option data structure for the multi-select component\n */\nexport interface MultiSelectOption {\n [key: string]: any;\n}\n\n/**\n * Multi-Select Component\n *\n * A multi-selection dropdown component with filtering, chips display, and form control support.\n * Uses Angular signals for reactive state management and is fully compatible with Angular Forms.\n *\n * @example\n * ```html\n * <!-- Basic multi-select -->\n * <i-multi-select\n * label=\"Skills\"\n * [options]=\"skills\"\n * optionLabel=\"name\"\n * formControlName=\"selectedSkills\">\n * </i-multi-select>\n *\n * <!-- Multi-select with filtering -->\n * <i-multi-select\n * label=\"Countries\"\n * [options]=\"countries\"\n * optionLabel=\"name\"\n * [filter]=\"true\"\n * filterBy=\"name\"\n * formControlName=\"countries\">\n * </i-multi-select>\n *\n * <!-- Multi-select with clear button -->\n * <i-multi-select\n * label=\"Tags\"\n * [options]=\"tags\"\n * optionLabel=\"label\"\n * [showClear]=\"true\"\n * [maxSelectedLabels]=\"5\"\n * (onClear)=\"handleClear()\"\n * formControlName=\"tags\">\n * </i-multi-select>\n *\n * <!-- Full width multi-select -->\n * <i-multi-select\n * label=\"Permissions\"\n * [options]=\"permissions\"\n * optionLabel=\"name\"\n * [fluid]=\"true\"\n * formControlName=\"permissions\">\n * </i-multi-select>\n * ```\n *\n * @remarks\n * This component implements ControlValueAccessor for seamless integration with Angular Forms.\n * Uses signals for efficient filtering and option management.\n * Selected items are displayed as chips when count is within maxSelectedLabels.\n */\n@Component({\n selector: 'i-multi-select',\n standalone: true,\n imports: [FormsModule, IChipsComponent, ICheckbox, IInputText],\n templateUrl: './multi-select.component.html',\n styleUrls: ['./multi-select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => IMultiSelect),\n multi: true,\n },\n ],\n})\nexport class IMultiSelect implements ControlValueAccessor {\n /**\n * Label text displayed for the multi-select\n * @default 'Multi Select'\n */\n @Input() label = 'Multi Select';\n\n /**\n * Array of options to display in the dropdown\n */\n options: InputSignal<MultiSelectOption[] | null | undefined> = input<\n MultiSelectOption[] | null | undefined\n >([]);\n\n /**\n * Property name to use as the display label for options\n */\n @Input({ required: true }) optionLabel!: string;\n\n /**\n * Placeholder text when no options are selected\n * @default 'Select options'\n */\n @Input() placeholder = 'Select options';\n\n /**\n * HTML id attribute for the multi-select element\n */\n @Input() id?: string;\n\n /**\n * Whether the multi-select should take full width of its container\n * @default false\n */\n @Input() fluid = false;\n\n /**\n * Whether to show a clear button to reset all selections\n * @default false\n */\n @Input() showClear = false;\n\n /**\n * Enables filtering/searching of options\n * @default true\n */\n @Input() filter = true;\n\n /**\n * Property name to use for filtering\n * @default 'label'\n */\n @Input() filterBy = 'label';\n\n /**\n * Maximum number of selected items to display as labels before showing count\n * @default 3\n */\n @Input() maxSelectedLabels = 3;\n\n /**\n * Template string for selected items count label (use {0} for count placeholder)\n * @default '{0} items selected'\n */\n @Input() selectedItemsLabel = '{0} items selected';\n\n /**\n * Custom error messages for validation rules\n * @default {}\n */\n @Input() errorMessages: { [key: string]: string } = {};\n\n /**\n * Whether the multi-select is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Whether the multi-select input is readonly\n * @default true\n */\n @Input() readonly = true;\n\n /**\n * Event emitted when selection changes\n */\n @Output() onChange = new EventEmitter<any[]>();\n\n /**\n * Event emitted when all selections are cleared\n */\n @Output() onClear = new EventEmitter<void>();\n\n /**\n * Reference to the dropdown element\n * @internal\n */\n @ViewChild('dropdown', { static: false }) dropdownRef!: ElementRef;\n\n /**\n * Reference to the search input element\n * @internal\n */\n @ViewChild('searchInput', { static: false }) searchInputRef!: ElementRef;\n\n /**\n * Whether the dropdown is currently open\n * @internal\n */\n isOpen = false;\n\n /**\n * Current filter/search value\n * @internal\n */\n filterValue = signal('');\n\n /**\n * Computed filtered options based on search value\n * @internal\n */\n filteredOptions = computed(() => {\n const currentOptions = this.options() || [];\n const currentFilterValue = this.filterValue();\n\n if (!Array.isArray(currentOptions)) {\n return [];\n }\n\n if (!this.filter || !currentFilterValue.trim()) {\n return [...currentOptions];\n } else {\n const filterText = currentFilterValue.toLowerCase();\n return currentOptions.filter((option) => {\n const searchValue = this.getOptionSearchValue(option).toLowerCase();\n return searchValue.includes(filterText);\n });\n }\n });\n\n /**\n * Computed chip items from selected values\n * @internal\n */\n selectedChips = computed<ChipItem[]>(() => {\n const currentValue = this._value();\n\n return currentValue.map((val) => {\n const label = this.getOptionLabel(val);\n\n return {\n label,\n value: val,\n removable: !this.disabled,\n };\n });\n });\n\n /**\n * Internal selected values storage as a signal\n * @internal\n */\n private _value: WritableSignal<any[]> = signal([]);\n\n /**\n * Gets the current selected values array\n * @internal\n */\n get value(): any[] {\n return this._value();\n }\n\n /**\n * Sets the selected values and updates the display\n * @internal\n */\n set value(val: any[]) {\n this._value.set(val || []);\n }\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChangeCallback: (value: any[]) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouchedCallback: () => void = () => {};\n\n /**\n * NgControl reference for form validation\n * @internal\n */\n public ngControl: NgControl | null = null;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-multi-select-');\n\n constructor(private injector: Injector) {\n setTimeout(() => {\n this.ngControl = this.injector.get(NgControl, null);\n });\n }\n\n /**\n * Toggles the dropdown open/closed state\n * @internal\n */\n toggleDropdown() {\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.filterValue.set('');\n setTimeout(() => {\n if (\n this.filter &&\n this.searchInputRef &&\n this.searchInputRef.nativeElement\n ) {\n this.searchInputRef.nativeElement.focus();\n }\n });\n }\n }\n\n /**\n * Toggles selection state of an option\n * @internal\n */\n toggleOption(option: MultiSelectOption) {\n const currentValues = [...this.value];\n const optionValue = this.getOptionValue(option);\n\n const index = currentValues.findIndex(\n (val) => JSON.stringify(val) === JSON.stringify(optionValue)\n );\n\n if (index > -1) {\n currentValues.splice(index, 1);\n } else {\n currentValues.push(optionValue);\n }\n\n this.value = currentValues;\n this.onChange.emit(currentValues);\n this.onChangeCallback(currentValues);\n this.onTouchedCallback();\n }\n\n /**\n * Checks if an option is currently selected\n * @internal\n */\n isOptionSelected(option: MultiSelectOption): boolean {\n const optionValue = this.getOptionValue(option);\n return this.value.some(\n (val) => JSON.stringify(val) === JSON.stringify(optionValue)\n );\n }\n\n /**\n * Clears all selections\n * @internal\n */\n clearSelection() {\n this.value = [];\n this.onClear.emit();\n this.onChangeCallback([]);\n this.onTouchedCallback();\n }\n\n /**\n * Removes a specific selected item from chips\n * @internal\n */\n onChipRemove(event: { chip: ChipItem; originalEvent: Event }) {\n event.originalEvent.stopPropagation();\n const currentValues = [...this.value];\n\n const index = currentValues.findIndex(\n (val) => JSON.stringify(val) === JSON.stringify(event.chip.value)\n );\n\n if (index > -1) {\n currentValues.splice(index, 1);\n this.value = currentValues;\n this.onChange.emit(currentValues);\n this.onChangeCallback(currentValues);\n this.onTouchedCallback();\n }\n }\n\n /**\n * Handles close all event from chips component\n * @internal\n */\n onChipsCloseAll() {\n this.clearSelection();\n }\n\n /**\n * Gets the display label for an option\n * @internal\n */\n getOptionLabel(option: MultiSelectOption): string {\n return option[this.optionLabel] || option['label'] || String(option);\n }\n\n /**\n * Gets the value for an option\n * @internal\n */\n getOptionValue(option: MultiSelectOption): any {\n return option;\n }\n\n /**\n * Gets the searchable value for filtering\n * @internal\n */\n getOptionSearchValue(option: MultiSelectOption): string {\n if (this.filterBy && option[this.filterBy]) {\n return String(option[this.filterBy]);\n }\n return this.getOptionLabel(option);\n }\n\n /**\n * Gets labels for all selected items\n * @internal\n */\n getSelectedLabels(): string[] {\n return this.value.map((val) => {\n return this.getOptionLabel(val);\n });\n }\n\n /**\n * Gets the display label for the input (shows labels or count)\n * @internal\n */\n getDisplayLabel(): string {\n if (!this.value || this.value.length === 0) {\n return '';\n }\n\n const selectedLabels = this.getSelectedLabels();\n\n if (selectedLabels.length <= this.maxSelectedLabels) {\n return selectedLabels.join(', ');\n } else {\n return this.selectedItemsLabel.replace(\n '{0}',\n selectedLabels.length.toString()\n );\n }\n }\n\n /**\n * TrackBy function for ngFor optimization\n * @internal\n */\n trackByValue(index: number, value: any): any {\n return value;\n }\n\n /**\n * Handles clicks outside the dropdown to close it\n * @internal\n */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event) {\n if (\n this.isOpen &&\n this.dropdownRef &&\n !this.dropdownRef.nativeElement.contains(event.target as Node)\n ) {\n this.isOpen = false;\n this.filterValue.set('');\n }\n }\n\n /**\n * Writes a value to the multi-select (ControlValueAccessor)\n * @internal\n */\n writeValue(value: any[]): void {\n this._value.set(value || []);\n }\n\n /**\n * Registers the onChange callback (ControlValueAccessor)\n * @internal\n */\n registerOnChange(fn: (value: any[]) => void): void {\n this.onChangeCallback = fn;\n }\n\n /**\n * Registers the onTouched callback (ControlValueAccessor)\n * @internal\n */\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n /**\n * Sets the disabled state (ControlValueAccessor)\n * @internal\n */\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**\n * Gets the form control instance\n * @internal\n */\n get control(): AbstractControl | null {\n return this.ngControl ? this.ngControl.control : null;\n }\n\n /**\n * Determines if validation errors should be shown\n * @internal\n */\n get showErrors(): boolean {\n const c = this.control;\n return !!(c && c.invalid && c.dirty);\n }\n\n /**\n * Gets the first validation error key\n * @internal\n */\n get firstErrorKey(): string | null {\n const c = this.control;\n if (!c || !c.errors) return null;\n return Object.keys(c.errors)[0] || null;\n }\n\n /**\n * Gets the error message to display\n * @internal\n */\n getErrorMessage(): string | null {\n const key = this.firstErrorKey;\n if (!key) return null;\n const c = this.control;\n if (this.errorMessages && this.errorMessages[key])\n return this.errorMessages[key];\n const err = c?.errors || {};\n switch (key) {\n case 'required':\n return `${this.label} is required`;\n case 'minlength':\n return `Minimum ${err['minlength']?.requiredLength} items required`;\n case 'minArrayLength':\n return `Minimum ${err['minArrayLength']?.requiredLength} items required`;\n case 'maxlength':\n return `Maximum ${err['maxlength']?.requiredLength} items allowed`;\n default:\n return err[key] && typeof err[key] === 'string'\n ? err[key]\n : 'Invalid selection';\n }\n }\n}\n","<div\n class=\"i-multi-select-wrapper\"\n [class.i-multi-select--fluid]=\"fluid\"\n #dropdown\n >\n <!-- Input container with click handler -->\n <div class=\"i-multi-select-input-container\" (click)=\"toggleDropdown()\">\n <!-- Chips component with float label -->\n <i-chips\n [chips]=\"selectedChips()\"\n [boxed]=\"true\"\n [collapseOnOverflow]=\"true\"\n [removable]=\"!disabled\"\n [disabled]=\"disabled\"\n [allowCloseAll]=\"showClear && value && value.length > 0\"\n [useFloatLabel]=\"true\"\n [label]=\"label\"\n [showError]=\"showErrors\"\n (removeChip)=\"onChipRemove($event)\"\n (closedAll)=\"onChipsCloseAll()\"\n class=\"i-multi-select-chips\"\n ></i-chips>\n\n <!-- Icons overlay -->\n <div class=\"i-multi-select-icons-overlay\">\n <span class=\"i-multi-select-arrow-wrapper\">\n <i\n class=\"pi pi-chevron-down i-multi-select-arrow\"\n [class.flipped]=\"isOpen\"\n ></i>\n </span>\n </div>\n\n <!-- Error message -->\n @if (showErrors) {\n <div class=\"i-multi-select-error\">\n {{ getErrorMessage() }}\n </div>\n }\n </div>\n\n @if (isOpen) {\n <div class=\"i-multi-select-dropdown\" [class.open]=\"isOpen\">\n @if (filter) {\n <div class=\"i-multi-select-filter\">\n <i-input-text\n #searchInput\n [useFloatLabel]=\"false\"\n placeholder=\"Search...\"\n [ngModel]=\"filterValue()\"\n (ngModelChange)=\"filterValue.set($event)\"\n [fluid]=\"true\"\n [icon]=\"'pi pi-search'\"\n >\n </i-input-text>\n </div>\n }\n\n <div class=\"i-multi-select-options\">\n @for (option of filteredOptions(); track option) {\n <div\n class=\"i-multi-select-option\"\n [class.selected]=\"isOptionSelected(option)\"\n (click)=\"toggleOption(option)\"\n >\n <i-checkbox\n [checked]=\"isOptionSelected(option)\"\n [readonly]=\"true\"\n size=\"small\"\n class=\"i-multi-select-checkbox\"\n ></i-checkbox>\n <span class=\"i-multi-select-option-label\">\n {{ getOptionLabel(option) }}\n </span>\n </div>\n }\n\n @if (filteredOptions().length === 0) {\n <div class=\"i-multi-select-no-options\">No options found</div>\n }\n </div>\n </div>\n }\n</div>\n","interface ZIndexUtilsInterface {\n get: (el: HTMLElement | null) => number;\n set: (key: string, el: HTMLElement | null, baseZIndex: number) => void;\n clear: (el: HTMLElement | null) => void;\n getCurrent: () => number;\n}\n\nexport function ZIndexUtils(): ZIndexUtilsInterface {\n interface ZIndexEntry {\n key: string;\n value: number;\n }\n\n let zIndexes: ZIndexEntry[] = [];\n\n const generateZIndex = (key: string, baseZIndex: number): number => {\n let lastZIndex =\n zIndexes.length > 0\n ? zIndexes[zIndexes.length - 1]\n : { key, value: baseZIndex };\n let newZIndex =\n lastZIndex.value + (lastZIndex.key === key ? 0 : baseZIndex) + 2;\n\n zIndexes.push({ key, value: newZIndex });\n\n return newZIndex;\n };\n\n const revertZIndex = (zIndex: number): void => {\n zIndexes = zIndexes.filter((obj: ZIndexEntry) => obj.value !== zIndex);\n };\n\n const getCurrentZIndex = (): number => {\n return zIndexes.length > 0 ? zIndexes[zIndexes.length - 1].value : 0;\n };\n\n const getZIndex = (el: HTMLElement | null): number => {\n return el ? parseInt(el.style.zIndex, 10) || 0 : 0;\n };\n\n return {\n get: getZIndex,\n set: (key: string, el: HTMLElement | null, baseZIndex: number): void => {\n if (el) {\n el.style.zIndex = String(generateZIndex(key, baseZIndex));\n }\n },\n clear: (el: HTMLElement | null): void => {\n if (el) {\n revertZIndex(getZIndex(el));\n el.style.zIndex = '';\n }\n },\n getCurrent: () => getCurrentZIndex(),\n };\n}\n\nexport default ZIndexUtils();\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n OnDestroy,\n Renderer2,\n NgZone,\n} from '@angular/core';\nimport {\n trigger,\n state,\n style,\n transition,\n animate,\n AnimationEvent,\n} from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { IButton } from '../button/button.component';\nimport { ZIndexUtils } from '../../utils/zindexutils';\n\n/**\n * Overlay Panel Component\n *\n * A floating panel that positions itself relative to a target element.\n * Modeled after PrimeNG's OverlayPanel with automatic positioning and collision detection.\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <i-button (clicked)=\"panel.toggle($event)\">Show Panel</i-button>\n * <i-overlay-panel #panel>\n * <p>Panel content goes here</p>\n * </i-overlay-panel>\n *\n * <!-- With custom position -->\n * <i-button (clicked)=\"panel2.toggle($event)\">Show Panel</i-button>\n * <i-overlay-panel #panel2 [appendTo]=\"'body'\">\n * <p>This panel is appended to body</p>\n * </i-overlay-panel>\n * ```\n */\n@Component({\n selector: 'i-overlay-panel',\n standalone: true,\n imports: [CommonModule, IButton],\n templateUrl: './overlay-panel.component.html',\n styleUrls: ['./overlay-panel.component.scss'],\n animations: [\n trigger('animation', [\n state(\n 'void',\n style({\n transform: 'scaleY(0.8)',\n opacity: 0,\n })\n ),\n state(\n 'open',\n style({\n transform: 'scaleY(1)',\n opacity: 1,\n })\n ),\n state(\n 'closed',\n style({\n transform: 'scaleY(0.8)',\n opacity: 0,\n })\n ),\n transition('void => open', animate('150ms ease-out')),\n transition('open => closed', animate('150ms ease-in')),\n ]),\n ],\n})\nexport class IOverlayPanel implements OnDestroy {\n /**\n * Whether clicking outside closes the panel\n * @default true\n */\n @Input() dismissable = true;\n\n /**\n * Where to append the panel ('body' or null for inline)\n * @default 'body'\n */\n @Input() appendTo: 'body' | null = 'body';\n\n /**\n * Base z-index value\n * @default 1000\n */\n @Input() baseZIndex = 1000;\n\n /**\n * Auto z-index layering\n * @default true\n */\n @Input() autoZIndex = true;\n\n /**\n * Event emitted when panel shows\n */\n @Output() onShow = new EventEmitter<void>();\n\n /**\n * Event emitted when panel hides\n */\n @Output() onHide = new EventEmitter<void>();\n\n @ViewChild('container') containerViewChild?: ElementRef;\n\n visible = false;\n private target?: HTMLElement;\n private documentClickListener?: () => void;\n private documentResizeListener?: () => void;\n private scrollHandler?: any;\n private selfClick = false;\n private targetClick = false;\n overlayVisible = false;\n render = false;\n\n constructor(\n public el: ElementRef,\n private renderer: Renderer2,\n private zone: NgZone\n ) {}\n\n ngOnDestroy() {\n this.unbindDocumentClickListener();\n this.unbindScrollListener();\n this.unbindResizeListener();\n if (this.appendTo === 'body' && this.containerViewChild) {\n this.renderer.removeChild(\n document.body,\n this.containerViewChild.nativeElement\n );\n }\n this.target = undefined;\n }\n\n toggle(event: Event, target?: HTMLElement) {\n if (this.visible) {\n this.hide();\n } else {\n this.show(event, target || (event.currentTarget as HTMLElement));\n }\n }\n\n show(event: Event, target?: HTMLElement) {\n this.target = target || (event.currentTarget as HTMLElement);\n this.targetClick = true;\n\n if (this.visible) {\n return;\n }\n\n this.visible = true;\n this.render = true;\n }\n\n hide() {\n this.visible = false;\n this.unbindDocumentClickListener();\n this.unbindScrollListener();\n this.unbindResizeListener();\n }\n\n onAnimationStart(event: any) {\n if (event.toState === 'open') {\n const zIndexUtils = ZIndexUtils();\n this.containerViewChild!.nativeElement.style.zIndex = String(\n this.autoZIndex\n ? this.baseZIndex + zIndexUtils.getCurrent() + 1\n : this.baseZIndex\n );\n this.appendContainer();\n this.align();\n this.bindDocumentClickListener();\n this.bindScrollListener();\n this.bindResizeListener();\n this.overlayVisible = true;\n this.onShow.emit();\n }\n }\n\n onAnimationEnd(event: any) {\n if (event.toState === 'closed') {\n if (this.appendTo === 'body' && this.containerViewChild) {\n this.renderer.removeChild(\n document.body,\n this.containerViewChild.nativeElement\n );\n }\n this.unbindDocumentClickListener();\n this.unbindScrollListener();\n this.unbindResizeListener();\n this.overlayVisible = false;\n this.onHide.emit();\n this.render = false;\n }\n }\n\n appendContainer() {\n if (this.appendTo === 'body') {\n this.renderer.appendChild(\n document.body,\n this.containerViewChild!.nativeElement\n );\n }\n }\n\n align() {\n if (!this.containerViewChild || !this.target) {\n return;\n }\n\n const container = this.containerViewChild.nativeElement;\n const target = this.target.getBoundingClientRect();\n const containerWidth = container.offsetWidth;\n const containerHeight = container.offsetHeight;\n const targetWidth = target.width;\n const targetHeight = target.height;\n const viewport = { width: window.innerWidth, height: window.innerHeight };\n const gap = 8;\n\n let top: number;\n let left: number;\n let arrowPosition: 'top' | 'bottom' | 'left' | 'right' = 'top';\n\n // Calculate best position\n const spaceBelow = viewport.height - (target.top + targetHeight);\n const spaceAbove = target.top;\n const spaceRight = viewport.width - (target.left + targetWidth);\n const spaceLeft = target.left;\n\n // Determine position based on available space\n if (spaceBelow >= containerHeight + gap) {\n // Position below\n top = target.top + targetHeight + gap;\n left = target.left + targetWidth / 2 - containerWidth / 2;\n arrowPosition = 'top';\n } else if (spaceAbove >= containerHeight + gap) {\n // Position above\n top = target.top - containerHeight - gap;\n left = target.left + targetWidth / 2 - containerWidth / 2;\n arrowPosition = 'bottom';\n } else if (spaceRight >= containerWidth + gap) {\n // Position right\n top = target.top + targetHeight / 2 - containerHeight / 2;\n left = target.left + targetWidth + gap;\n arrowPosition = 'left';\n } else if (spaceLeft >= containerWidth + gap) {\n // Position left\n top = target.top + targetHeight / 2 - containerHeight / 2;\n left = target.left - containerWidth - gap;\n arrowPosition = 'right';\n } else {\n // Default to below if no space\n top = target.top + targetHeight + gap;\n left = target.left + targetWidth / 2 - containerWidth / 2;\n arrowPosition = 'top';\n }\n\n // Keep within viewport bounds\n if (left < 10) {\n left = 10;\n } else if (left + containerWidth > viewport.width - 10) {\n left = viewport.width - containerWidth - 10;\n }\n\n if (top < 10) {\n top = 10;\n } else if (top + containerHeight > viewport.height - 10) {\n top = viewport.height - containerHeight - 10;\n }\n\n // Apply positioning\n container.style.top = top + 'px';\n container.style.left = left + 'px';\n container.className = `overlay-panel overlay-panel-${arrowPosition}`;\n }\n\n onContainerClick() {\n this.selfClick = true;\n }\n\n bindDocumentClickListener() {\n if (!this.documentClickListener && this.dismissable) {\n this.zone.runOutsideAngular(() => {\n this.documentClickListener = this.renderer.listen(\n 'document',\n 'click',\n () => {\n if (!this.selfClick && !this.targetClick && this.visible) {\n this.zone.run(() => {\n this.hide();\n });\n }\n this.selfClick = false;\n this.targetClick = false;\n }\n );\n });\n }\n }\n\n unbindDocumentClickListener() {\n if (this.documentClickListener) {\n this.documentClickListener();\n this.documentClickListener = undefined;\n }\n }\n\n bindScrollListener() {\n if (!this.scrollHandler) {\n this.scrollHandler = () => {\n if (this.visible) {\n this.zone.run(() => {\n this.align();\n });\n }\n };\n window.addEventListener('scroll', this.scrollHandler, true);\n }\n }\n\n unbindScrollListener() {\n if (this.scrollHandler) {\n window.removeEventListener('scroll', this.scrollHandler, true);\n this.scrollHandler = null;\n }\n }\n\n bindResizeListener() {\n if (!this.documentResizeListener) {\n this.zone.runOutsideAngular(() => {\n this.documentResizeListener = this.renderer.listen(\n 'window',\n 'resize',\n () => {\n if (this.visible) {\n this.zone.run(() => {\n this.align();\n });\n }\n }\n );\n });\n }\n }\n\n unbindResizeListener() {\n if (this.documentResizeListener) {\n this.documentResizeListener();\n this.documentResizeListener = undefined;\n }\n }\n\n onEscapeKey() {\n if (this.dismissable) {\n this.hide();\n }\n }\n}\n","@if (render) {\n<div\n #container\n class=\"overlay-panel\"\n [class.overlay-panel-visible]=\"overlayVisible\"\n (click)=\"onContainerClick()\"\n (keydown.escape)=\"onEscapeKey()\"\n [@animation]=\"visible ? 'open' : 'closed'\"\n (@animation.start)=\"onAnimationStart($event)\"\n (@animation.done)=\"onAnimationEnd($event)\"\n role=\"dialog\"\n [attr.aria-hidden]=\"!visible\"\n>\n <i-button\n class=\"overlay-panel-close\"\n size=\"xtra-small\"\n [icon]=\"'pi pi-times'\"\n [text]=\"true\"\n [severity]=\"'contrast'\"\n (clicked)=\"hide()\"\n ></i-button>\n <div class=\"overlay-panel-content\">\n <ng-content></ng-content>\n </div>\n</div>\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Panel Component\n *\n * A collapsible panel container with a header that can be toggled open/closed.\n * Displays a minus/plus icon to indicate the collapsed state.\n *\n * @example\n * ```html\n * <!-- Basic panel -->\n * <i-panel header=\"Options\">\n * <p>Content goes here</p>\n * </i-panel>\n *\n * <!-- Initially collapsed panel -->\n * <i-panel header=\"Settings\" [collapsed]=\"true\">\n * <p>Settings content</p>\n * </i-panel>\n *\n * <!-- Panel with toggle event -->\n * <i-panel header=\"Details\" (onToggle)=\"handleToggle($event)\">\n * <p>Detailed information</p>\n * </i-panel>\n *\n * <!-- Non-toggleable panel -->\n * <i-panel header=\"Fixed Section\" [toggleable]=\"false\">\n * <p>Always visible content</p>\n * </i-panel>\n * ```\n *\n * @remarks\n * Use content projection to add any content inside the panel body.\n * The panel header shows a minus icon when expanded and plus icon when collapsed.\n */\n@Component({\n selector: 'i-panel',\n templateUrl: './panel.component.html',\n styleUrl: './panel.component.scss',\n})\nexport class IPanel {\n /**\n * The header/title text displayed in the panel\n */\n @Input() header: string = '';\n\n /**\n * Whether the panel content is collapsed\n * @default false\n */\n @Input() collapsed: boolean = false;\n\n /**\n * Whether the panel can be toggled\n * @default true\n */\n @Input() toggleable: boolean = true;\n\n /**\n * Event emitted when collapsed state changes\n */\n @Output() collapsedChange = new EventEmitter<boolean>();\n\n /**\n * Event emitted when panel is toggled\n */\n @Output() onToggle = new EventEmitter<boolean>();\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-panel-');\n\n /**\n * Toggles the panel collapsed state\n * @internal\n */\n toggle(): void {\n if (!this.toggleable) {\n return;\n }\n this.collapsed = !this.collapsed;\n this.collapsedChange.emit(this.collapsed);\n this.onToggle.emit(this.collapsed);\n }\n}\n","<div\n class=\"i-panel\"\n [class.i-panel--collapsed]=\"collapsed\"\n [class.i-panel--toggleable]=\"toggleable\"\n [attr.id]=\"componentId\"\n>\n <div class=\"i-panel-header-wrap\">\n @if (toggleable) {\n <button\n class=\"i-panel-header\"\n type=\"button\"\n (click)=\"toggle()\"\n [attr.aria-expanded]=\"!collapsed\"\n >\n <i\n class=\"i-panel-toggle-icon pi\"\n [class.pi-minus]=\"!collapsed\"\n [class.pi-plus]=\"collapsed\"\n aria-hidden=\"true\"\n ></i>\n <span class=\"i-panel-title\">{{ header }}</span>\n </button>\n } @if (!toggleable) {\n <div class=\"i-panel-header\">\n <i class=\"i-panel-toggle-icon\" aria-hidden=\"true\"></i>\n <span class=\"i-panel-title\">{{ header }}</span>\n </div>\n }\n </div>\n <div\n class=\"i-panel-content-wrapper\"\n [class.i-panel-content-wrapper--collapsed]=\"collapsed\"\n >\n <div class=\"i-panel-content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n","import {\n Component,\n Input,\n ElementRef,\n ViewChild,\n HostListener,\n Output,\n EventEmitter,\n forwardRef,\n Injector,\n signal,\n computed,\n InputSignal,\n input,\n} from '@angular/core';\n\nimport {\n FormsModule,\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n NgControl,\n AbstractControl,\n} from '@angular/forms';\nimport { IInputText } from '../input-text/input-text.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Option data structure for the select component\n */\nexport interface SelectOption {\n [key: string]: any;\n}\n\n/**\n * Select Component\n *\n * A dropdown select component with filtering, searching, and form control support.\n * Uses Angular signals for reactive state management and is fully compatible with Angular Forms.\n *\n * @example\n * ```html\n * <!-- Basic select -->\n * <i-select\n * label=\"Country\"\n * [options]=\"countries\"\n * optionLabel=\"name\"\n * formControlName=\"country\">\n * </i-select>\n *\n * <!-- Select with filtering -->\n * <i-select\n * label=\"City\"\n * [options]=\"cities\"\n * optionLabel=\"name\"\n * [filter]=\"true\"\n * filterBy=\"name\"\n * formControlName=\"city\">\n * </i-select>\n *\n * <!-- Select with clear button -->\n * <i-select\n * label=\"Category\"\n * [options]=\"categories\"\n * optionLabel=\"label\"\n * [showClear]=\"true\"\n * (onClear)=\"handleClear()\"\n * formControlName=\"category\">\n * </i-select>\n *\n * <!-- Full width select -->\n * <i-select\n * label=\"Status\"\n * [options]=\"statuses\"\n * optionLabel=\"name\"\n * [fluid]=\"true\"\n * formControlName=\"status\">\n * </i-select>\n * ```\n *\n * @remarks\n * This component implements ControlValueAccessor for seamless integration with Angular Forms.\n * Uses signals for efficient filtering and option management.\n */\n@Component({\n selector: 'i-select',\n standalone: true,\n imports: [FormsModule, IInputText],\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ISelect),\n multi: true,\n },\n ],\n})\nexport class ISelect implements ControlValueAccessor {\n /**\n * Label text displayed for the select\n * @default 'Select'\n */\n @Input() label = 'Select';\n\n /**\n * Array of options to display in the dropdown\n */\n options: InputSignal<SelectOption[] | null | undefined> = input<\n SelectOption[] | null | undefined\n >([]);\n\n /**\n * Property name to use as the display label for options\n */\n @Input({ required: true }) optionLabel!: string;\n\n /**\n * Placeholder text when no option is selected\n * @default 'Select an option'\n */\n @Input() placeholder = 'Select an option';\n\n /**\n * Whether the internal input should use float label style\n * @default true\n */\n @Input() useFloatLabel = true;\n\n /**\n * HTML id attribute for the select element\n */\n @Input() id?: string;\n\n /**\n * Whether the select should take full width of its container\n * @default false\n */\n @Input() fluid = false;\n\n /**\n * Whether to show a clear button to reset selection\n * @default false\n */\n @Input() showClear = false;\n\n /**\n * Enables filtering/searching of options\n * @default true\n */\n @Input() filter = true;\n\n /**\n * Property name to use for filtering\n * @default 'label'\n */\n @Input() filterBy = 'label';\n\n /**\n * Custom error messages for validation rules\n * @default {}\n */\n @Input() errorMessages: { [key: string]: string } = {};\n\n /**\n * Whether the select input is readonly\n * @default true\n */\n @Input() readonly = true;\n\n /**\n * Event emitted when selection changes\n */\n @Output() onChange = new EventEmitter<any>();\n\n /**\n * Event emitted when selection is cleared\n */\n @Output() onClear = new EventEmitter<void>();\n\n /**\n * Reference to the input text component\n * @internal\n */\n @ViewChild('inputText') inputTextRef!: IInputText;\n\n /**\n * Reference to the dropdown element\n * @internal\n */\n @ViewChild('dropdown', { static: false }) dropdownRef!: ElementRef;\n\n /**\n * Reference to the search input element\n * @internal\n */\n @ViewChild('searchInput', { static: false }) searchInputRef!: ElementRef;\n\n /**\n * Whether the dropdown is currently open\n * @internal\n */\n isOpen = false;\n\n /**\n * Current filter/search value\n * @internal\n */\n filterValue = signal('');\n\n /**\n * Computed filtered options based on search value\n * @internal\n */\n filteredOptions = computed(() => {\n const currentOptions = this.options() || [];\n const currentFilterValue = this.filterValue();\n\n if (!Array.isArray(currentOptions)) {\n return [];\n }\n\n if (!this.filter || !currentFilterValue.trim()) {\n return [...currentOptions];\n } else {\n const filterText = currentFilterValue.toLowerCase();\n return currentOptions.filter((option) => {\n const searchValue = this.getOptionSearchValue(option).toLowerCase();\n return searchValue.includes(filterText);\n });\n }\n });\n\n /**\n * Display value for the input text component\n * @internal\n */\n get inputValue(): string {\n return this.getSelectedLabel() || '';\n }\n\n set inputValue(value: string) {\n // Setter required for binding, but value is managed internally\n }\n\n /**\n * Internal selected value storage\n * @internal\n */\n private _value: any = null;\n\n /**\n * Gets the current selected value\n * @internal\n */\n get value(): any {\n return this._value;\n }\n\n /**\n * Sets the selected value and updates the display\n * @internal\n */\n set value(val: any) {\n this._value = val;\n if (this.inputTextRef) {\n this.inputTextRef.value = this.getSelectedLabel() || null;\n }\n }\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChangeCallback: (value: any) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouchedCallback: () => void = () => {};\n\n /**\n * NgControl reference for form validation\n * @internal\n */\n public ngControl: NgControl | null = null;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-select-');\n\n constructor(private injector: Injector) {\n setTimeout(() => {\n this.ngControl = this.injector.get(NgControl, null);\n });\n }\n\n /**\n * Toggles the dropdown open/closed state\n * @internal\n */\n toggleDropdown() {\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.filterValue.set('');\n setTimeout(() => {\n if (\n this.filter &&\n this.searchInputRef &&\n this.searchInputRef.nativeElement\n ) {\n this.searchInputRef.nativeElement.focus();\n }\n });\n }\n }\n\n /**\n * Selects an option from the dropdown\n * @internal\n */\n selectOption(option: SelectOption) {\n const newValue = this.getOptionValue(option);\n this.value = newValue;\n this.onChange.emit(newValue);\n this.onChangeCallback(newValue);\n this.onTouchedCallback();\n this.isOpen = false;\n this.filterValue.set('');\n }\n\n /**\n * Clears the current selection\n * @internal\n */\n clearSelection() {\n this.value = null;\n this.onClear.emit();\n this.onChangeCallback(null);\n this.onTouchedCallback();\n }\n\n /**\n * Gets the display label for an option\n * @internal\n */\n getOptionLabel(option: SelectOption): string {\n return option[this.optionLabel] || option['label'] || String(option);\n }\n\n /**\n * Gets the value for an option\n * @internal\n */\n getOptionValue(option: SelectOption): any {\n return option;\n }\n\n /**\n * Checks if an option is currently selected\n * @internal\n */\n isOptionSelected(option: SelectOption): boolean {\n if (this.value === null || this.value === undefined) {\n return false;\n }\n\n return JSON.stringify(option) === JSON.stringify(this.value);\n }\n\n /**\n * Gets the searchable value for filtering\n * @internal\n */\n getOptionSearchValue(option: SelectOption): string {\n if (this.filterBy && option[this.filterBy]) {\n return String(option[this.filterBy]);\n }\n return this.getOptionLabel(option);\n }\n\n /**\n * Gets the label of the currently selected option\n * @internal\n */\n getSelectedLabel(): string {\n if (this.value === null || this.value === undefined) {\n return '';\n }\n\n const currentOptions = this.options() || [];\n if (!Array.isArray(currentOptions)) {\n return String(this.value);\n }\n\n const selectedOption = currentOptions.find((option: SelectOption) =>\n this.isOptionSelected(option)\n );\n\n return selectedOption\n ? this.getOptionLabel(selectedOption)\n : String(this.value);\n }\n\n /**\n * Handles clicks outside the dropdown to close it\n * @internal\n */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event) {\n if (\n this.isOpen &&\n this.dropdownRef &&\n !this.dropdownRef.nativeElement.contains(event.target as Node)\n ) {\n this.isOpen = false;\n this.filterValue.set('');\n }\n }\n\n /**\n * Writes a value to the select (ControlValueAccessor)\n * @internal\n */\n writeValue(value: any): void {\n this._value = value;\n if (this.inputTextRef) {\n this.inputTextRef.value = this.getSelectedLabel() || null;\n }\n }\n\n /**\n * Registers the onChange callback (ControlValueAccessor)\n * @internal\n */\n registerOnChange(fn: (value: any) => void): void {\n this.onChangeCallback = fn;\n }\n\n /**\n * Registers the onTouched callback (ControlValueAccessor)\n * @internal\n */\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n /**\n * Sets the disabled state (ControlValueAccessor)\n * @internal\n */\n setDisabledState?(isDisabled: boolean): void {\n // Not implemented - can be added if needed\n }\n\n /**\n * Gets the form control instance\n * @internal\n */\n get control(): AbstractControl | null {\n return this.ngControl ? this.ngControl.control : null;\n }\n\n /**\n * Determines if validation errors should be shown\n * @internal\n */\n get showErrors(): boolean {\n const c = this.control;\n return !!(c && c.invalid && c.dirty);\n }\n\n /**\n * Gets the first validation error key\n * @internal\n */\n get firstErrorKey(): string | null {\n const c = this.control;\n if (!c || !c.errors) return null;\n return Object.keys(c.errors)[0] || null;\n }\n\n /**\n * Gets the error message to display\n * @internal\n */\n getErrorMessage(): string | null {\n const key = this.firstErrorKey;\n if (!key) return null;\n const c = this.control;\n if (this.errorMessages && this.errorMessages[key])\n return this.errorMessages[key];\n const err = c?.errors || {};\n switch (key) {\n case 'required':\n return `${this.label} is required`;\n default:\n return err[key] && typeof err[key] === 'string'\n ? err[key]\n : 'Invalid selection';\n }\n }\n}\n","<div class=\"i-select-wrapper\" [class.i-select--fluid]=\"fluid\" #dropdown>\n <!-- Reuse the input-text component for consistent styling and form integration -->\n <div class=\"i-select-input-container\" (click)=\"toggleDropdown()\">\n <i-input-text\n #inputText\n [label]=\"label\"\n [useFloatLabel]=\"useFloatLabel\"\n [id]=\"id\"\n [fluid]=\"fluid\"\n [errorMessages]=\"errorMessages\"\n [(ngModel)]=\"inputValue\"\n [type]=\"'text'\"\n [externalInvalid]=\"showErrors\"\n [externalErrorMessage]=\"showErrors ? getErrorMessage() || '' : ''\"\n [readonly]=\"readonly\"\n >\n <!-- Icons overlay on the input -->\n <div class=\"i-select-icons\">\n @if (showClear && value !== null && value !== undefined) {\n <i\n class=\"pi pi-times i-select-clear\"\n (click)=\"clearSelection(); $event.stopPropagation()\"\n ></i>\n }\n <i\n class=\"pi pi-chevron-down i-multi-select-arrow\"\n [class.flipped]=\"isOpen\"\n ></i>\n </div>\n </i-input-text>\n </div>\n\n <!-- Dropdown overlay -->\n @if (isOpen) {\n <div class=\"i-select-dropdown\">\n @if (filter) {\n <div class=\"i-select-filter\">\n <i-input-text\n #searchInput\n [useFloatLabel]=\"false\"\n placeholder=\"Search...\"\n [ngModel]=\"filterValue()\"\n (ngModelChange)=\"filterValue.set($event)\"\n [fluid]=\"true\"\n [icon]=\"'pi pi-search'\"\n >\n </i-input-text>\n </div>\n }\n\n <div class=\"i-select-options\">\n @for (option of filteredOptions(); track option) {\n <div\n class=\"i-select-option\"\n [class.selected]=\"isOptionSelected(option)\"\n (click)=\"selectOption(option)\"\n >\n {{ getOptionLabel(option) }}\n </div>\n }\n\n @if (filteredOptions().length === 0) {\n <div class=\"i-select-no-options\">No options found</div>\n }\n </div>\n </div>\n }\n</div>\n","import { Component, Input, TemplateRef, ViewChild } from '@angular/core';\n\n/**\n * Tab Panel Component\n *\n * Individual tab panel used inside the ITabs container.\n * Supports text-only, icon-only, and combined icon + text labels.\n *\n * @example\n * ```html\n * <!-- Text only -->\n * <i-tab-panel header=\"Home\">Content here</i-tab-panel>\n *\n * <!-- Icon only -->\n * <i-tab-panel icon=\"pi pi-home\">Content here</i-tab-panel>\n *\n * <!-- Icon and text -->\n * <i-tab-panel header=\"Home\" icon=\"pi pi-home\">Content here</i-tab-panel>\n * ```\n */\n@Component({\n selector: 'i-tab-panel',\n standalone: true,\n template: `\n <ng-template #contentTemplate>\n <ng-content></ng-content>\n </ng-template>\n `,\n})\nexport class ITabPanel {\n /**\n * Text label for the tab header\n */\n @Input() header?: string;\n\n /**\n * Icon class for the tab header (e.g., 'pi pi-home')\n */\n @Input() icon?: string;\n\n /**\n * Whether the tab is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Whether the tab can be closed\n * @default false\n */\n @Input() closable = false;\n\n /**\n * Reference to the content template\n * @internal\n */\n @ViewChild('contentTemplate', { static: true })\n contentTemplate!: TemplateRef<unknown>;\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n ContentChildren,\n EventEmitter,\n Input,\n Output,\n QueryList,\n AfterContentInit,\n} from '@angular/core';\nimport { ITabPanel } from './tab-panel.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Tabs Component\n *\n * A container component for tabbed navigation.\n * Supports icon-only, text-only, and combined icon + text tabs.\n *\n * @example\n * ```html\n * <!-- Text only tabs -->\n * <i-tabs [(activeIndex)]=\"activeTab\">\n * <i-tab-panel header=\"Home\">Home content</i-tab-panel>\n * <i-tab-panel header=\"Profile\">Profile content</i-tab-panel>\n * </i-tabs>\n *\n * <!-- Icon only tabs -->\n * <i-tabs [(activeIndex)]=\"activeTab\">\n * <i-tab-panel icon=\"pi pi-home\"></i-tab-panel>\n * <i-tab-panel icon=\"pi pi-user\"></i-tab-panel>\n * </i-tabs>\n *\n * <!-- Icon and text tabs -->\n * <i-tabs [(activeIndex)]=\"activeTab\">\n * <i-tab-panel header=\"Home\" icon=\"pi pi-home\">Home content</i-tab-panel>\n * <i-tab-panel header=\"Profile\" icon=\"pi pi-user\">Profile content</i-tab-panel>\n * </i-tabs>\n * ```\n */\n@Component({\n selector: 'i-tabs',\n standalone: true,\n imports: [NgClass, NgTemplateOutlet],\n templateUrl: './tabs.component.html',\n styleUrl: './tabs.component.scss',\n})\nexport class ITabs implements AfterContentInit {\n /**\n * Index of the currently active tab\n * @default 0\n */\n @Input() activeIndex = 0;\n\n /**\n * Event emitted when the active tab index changes (for two-way binding)\n */\n @Output() activeIndexChange = new EventEmitter<number>();\n\n /**\n * Event emitted when a tab is selected\n */\n @Output() onChange = new EventEmitter<{\n originalEvent: Event;\n index: number;\n }>();\n\n /**\n * Event emitted when a tab is closed\n */\n @Output() onClose = new EventEmitter<{\n originalEvent: Event;\n index: number;\n }>();\n\n /**\n * Collection of tab panels\n * @internal\n */\n @ContentChildren(ITabPanel) tabPanels!: QueryList<ITabPanel>;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-tabs-');\n\n /**\n * Array of tabs for template iteration\n * @internal\n */\n tabs: ITabPanel[] = [];\n\n ngAfterContentInit(): void {\n this.tabs = this.tabPanels.toArray();\n this.tabPanels.changes.subscribe(() => {\n this.tabs = this.tabPanels.toArray();\n });\n }\n\n /**\n * Selects a tab by index\n * @param event - The click event\n * @param index - The index of the tab to select\n * @internal\n */\n selectTab(event: Event, index: number): void {\n const tab = this.tabs[index];\n if (tab && !tab.disabled) {\n this.activeIndex = index;\n this.activeIndexChange.emit(index);\n this.onChange.emit({ originalEvent: event, index });\n }\n }\n\n /**\n * Closes a tab by index\n * @param event - The click event\n * @param index - The index of the tab to close\n * @internal\n */\n closeTab(event: Event, index: number): void {\n event.stopPropagation();\n this.onClose.emit({ originalEvent: event, index });\n }\n\n /**\n * Handles keyboard navigation for accessibility\n * @param event - The keyboard event\n * @param index - The current tab index\n * @internal\n */\n onKeyDown(event: KeyboardEvent, index: number): void {\n switch (event.key) {\n case 'ArrowLeft':\n this.navigateTabs(index, -1);\n event.preventDefault();\n break;\n case 'ArrowRight':\n this.navigateTabs(index, 1);\n event.preventDefault();\n break;\n case 'Home':\n this.navigateToFirstTab();\n event.preventDefault();\n break;\n case 'End':\n this.navigateToLastTab();\n event.preventDefault();\n break;\n case 'Enter':\n case ' ':\n this.selectTab(event, index);\n event.preventDefault();\n break;\n }\n }\n\n /**\n * Navigates to adjacent tabs\n * @param currentIndex - The current tab index\n * @param direction - The direction to navigate (-1 or 1)\n * @internal\n */\n private navigateTabs(currentIndex: number, direction: number): void {\n let nextIndex = currentIndex + direction;\n const tabsLength = this.tabs.length;\n\n while (nextIndex >= 0 && nextIndex < tabsLength) {\n if (!this.tabs[nextIndex].disabled) {\n this.focusTab(nextIndex);\n break;\n }\n nextIndex += direction;\n }\n }\n\n /**\n * Navigates to the first non-disabled tab\n * @internal\n */\n private navigateToFirstTab(): void {\n for (let i = 0; i < this.tabs.length; i++) {\n if (!this.tabs[i].disabled) {\n this.focusTab(i);\n break;\n }\n }\n }\n\n /**\n * Navigates to the last non-disabled tab\n * @internal\n */\n private navigateToLastTab(): void {\n for (let i = this.tabs.length - 1; i >= 0; i--) {\n if (!this.tabs[i].disabled) {\n this.focusTab(i);\n break;\n }\n }\n }\n\n /**\n * Focuses a tab by index\n * @param index - The index of the tab to focus\n * @internal\n */\n private focusTab(index: number): void {\n const tabElement = document.getElementById(\n `${this.componentId}-tab-${index}`\n );\n tabElement?.focus();\n }\n}\n","<div class=\"i-tabs\" [attr.id]=\"componentId\">\n <!-- Tab Headers -->\n <div class=\"i-tabs__header\" role=\"tablist\">\n @for (tab of tabs; track $index) {\n <button\n [attr.id]=\"componentId + '-tab-' + $index\"\n class=\"i-tabs__tab\"\n [ngClass]=\"{\n 'i-tabs__tab--active': activeIndex === $index,\n 'i-tabs__tab--disabled': tab.disabled,\n 'i-tabs__tab--icon-only': tab.icon && !tab.header\n }\"\n role=\"tab\"\n [attr.aria-selected]=\"activeIndex === $index\"\n [attr.aria-controls]=\"componentId + '-panel-' + $index\"\n [attr.tabindex]=\"activeIndex === $index ? 0 : -1\"\n [disabled]=\"tab.disabled\"\n (click)=\"selectTab($event, $index)\"\n (keydown)=\"onKeyDown($event, $index)\"\n >\n @if (tab.icon) {\n <i [ngClass]=\"tab.icon\" class=\"i-tabs__tab-icon\"></i>\n }\n @if (tab.header) {\n <span class=\"i-tabs__tab-label\">{{ tab.header }}</span>\n }\n @if (tab.closable && !tab.disabled) {\n <button\n class=\"i-tabs__tab-close\"\n type=\"button\"\n aria-label=\"Close tab\"\n (click)=\"closeTab($event, $index)\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n }\n </button>\n }\n </div>\n\n <!-- Tab Panels -->\n <div class=\"i-tabs__panels\">\n @for (tab of tabs; track $index) {\n <div\n [attr.id]=\"componentId + '-panel-' + $index\"\n class=\"i-tabs__panel\"\n [ngClass]=\"{ 'i-tabs__panel--active': activeIndex === $index }\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"componentId + '-tab-' + $index\"\n [attr.hidden]=\"activeIndex !== $index || null\"\n >\n @if (activeIndex === $index) {\n <ng-container [ngTemplateOutlet]=\"tab.contentTemplate\"></ng-container>\n }\n </div>\n }\n </div>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnChanges,\n SimpleChanges,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { ICheckbox } from '../checkbox/checkbox.component';\nimport { IInputText } from '../input-text/input-text.component';\n\n/**\n * Tree node data structure\n */\nexport interface ITreeNode {\n key?: string;\n label?: string;\n data?: any;\n icon?: string;\n expandedIcon?: string;\n collapsedIcon?: string;\n children?: ITreeNode[];\n leaf?: boolean;\n expanded?: boolean;\n type?: string;\n parent?: ITreeNode;\n partialSelected?: boolean;\n styleClass?: string;\n draggable?: boolean;\n droppable?: boolean;\n selectable?: boolean;\n loading?: boolean;\n}\n\n/**\n * Supported tree selection modes\n */\nexport type TreeSelectionMode = 'single' | 'multiple' | 'checkbox';\n\n/**\n * Tree View Component\n *\n * A hierarchical tree component with support for single/multiple/checkbox selection modes.\n * Features filtering, expand/collapse functionality, and parent-child selection propagation.\n *\n * @example\n * ```html\n * <!-- Basic tree view -->\n * <i-tree-view\n * [value]=\"treeData\"\n * selectionMode=\"single\"\n * [(selection)]=\"selectedNode\">\n * </i-tree-view>\n *\n * <!-- Tree with checkbox selection -->\n * <i-tree-view\n * [value]=\"treeData\"\n * selectionMode=\"checkbox\"\n * [(selection)]=\"selectedNodes\"\n * [propagateSelectionUp]=\"true\"\n * [propagateSelectionDown]=\"true\">\n * </i-tree-view>\n *\n * <!-- Tree with filtering -->\n * <i-tree-view\n * [value]=\"treeData\"\n * [filter]=\"true\"\n * filterBy=\"label\"\n * filterPlaceholder=\"Search tree...\"\n * [(selection)]=\"selectedNode\">\n * </i-tree-view>\n *\n * <!-- Tree with select all (checkbox mode) -->\n * <i-tree-view\n * [value]=\"treeData\"\n * selectionMode=\"checkbox\"\n * [selectAll]=\"true\"\n * [(selection)]=\"selectedNodes\">\n * </i-tree-view>\n * ```\n *\n * @remarks\n * Supports three selection modes: single, multiple, and checkbox.\n * In checkbox mode, supports selection propagation to parent and child nodes.\n * Includes filtering capability to search through tree nodes.\n */\n@Component({\n selector: 'i-tree-view',\n standalone: true,\n imports: [CommonModule, FormsModule, ICheckbox, IInputText],\n templateUrl: './tree-view.component.html',\n styleUrl: './tree-view.component.scss',\n})\nexport class ITreeView implements OnInit, OnChanges {\n /**\n * Array of tree nodes to display\n * @default []\n */\n @Input() value: ITreeNode[] = [];\n\n /**\n * Selection mode for the tree\n * @default 'single'\n */\n @Input() selectionMode: TreeSelectionMode = 'single';\n\n /**\n * Currently selected node(s)\n */\n @Input() selection: ITreeNode | ITreeNode[] | null = null;\n\n /**\n * Fixed scroll height for the tree container\n */\n @Input() scrollHeight?: string;\n\n /**\n * Whether the tree is in loading state\n * @default false\n */\n @Input() loading = false;\n\n /**\n * Message to display when tree is empty\n * @default 'No data found'\n */\n @Input() emptyMessage = 'No data found';\n\n /**\n * Custom template for the expand/collapse toggler\n */\n @Input() togglerTemplate?: string;\n\n /**\n * Enables filtering of tree nodes\n * @default false\n */\n @Input() filter = false;\n\n /**\n * Property name to use for filtering\n * @default 'label'\n */\n @Input() filterBy = 'label';\n\n /**\n * Filter matching mode\n * @default 'lenient'\n */\n @Input() filterMode = 'lenient';\n\n /**\n * Placeholder text for the filter input\n * @default 'Search'\n */\n @Input() filterPlaceholder = 'Search';\n\n /**\n * Filtered nodes array (for internal use)\n * @default []\n */\n @Input() filteredNodes: ITreeNode[] = [];\n\n /**\n * Validates drop operations (for drag and drop)\n * @default false\n */\n @Input() validateDrop = false;\n\n /**\n * Whether selecting a child node should propagate selection up to parents\n * @default true\n */\n @Input() propagateSelectionUp = true;\n\n /**\n * Whether selecting a parent node should propagate selection down to children\n * @default true\n */\n @Input() propagateSelectionDown = true;\n\n /**\n * Shows a \"select all\" checkbox for checkbox selection mode\n * @default false\n */\n @Input() selectAll = false;\n\n /**\n * Event emitted when a node is selected\n */\n @Output() onNodeSelect = new EventEmitter<{\n originalEvent: Event;\n node: ITreeNode;\n }>();\n\n /**\n * Event emitted when a node is unselected\n */\n @Output() onNodeUnselect = new EventEmitter<{\n originalEvent: Event;\n node: ITreeNode;\n }>();\n\n /**\n * Event emitted when a node is expanded\n */\n @Output() onNodeExpand = new EventEmitter<{\n originalEvent: Event;\n node: ITreeNode;\n }>();\n\n /**\n * Event emitted when a node is collapsed\n */\n @Output() onNodeCollapse = new EventEmitter<{\n originalEvent: Event;\n node: ITreeNode;\n }>();\n\n /**\n * Event emitted when selection changes\n */\n @Output() selectionChange = new EventEmitter<ITreeNode | ITreeNode[]>();\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-tree-view-');\n\n /**\n * Filtered tree nodes after applying search\n * @internal\n */\n filteredValue: ITreeNode[] = [];\n\n /**\n * Current filter/search value\n * @internal\n */\n filterValue = '';\n\n /**\n * State of the \"select all\" checkbox\n * @internal\n */\n selectAllChecked = false;\n\n /**\n * Set of temporarily highlighted nodes (for visual feedback)\n * @internal\n */\n private temporaryHighlighted = new Set<ITreeNode>();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.updateSerializedValue();\n this.updateSelectAllState();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['value']) {\n this.updateSerializedValue();\n this.updateSelectAllState();\n }\n if (changes['selection']) {\n this.updateSelectAllState();\n }\n }\n\n updateSerializedValue() {\n this.filteredValue = this.value || [];\n this.initializeParentReferences(this.filteredValue);\n if (this.filter && this.filterValue) {\n this.applyFilter();\n }\n }\n\n initializeParentReferences(nodes: ITreeNode[], parent?: ITreeNode) {\n if (!nodes) return;\n\n for (let node of nodes) {\n node.parent = parent;\n if (node.children) {\n this.initializeParentReferences(node.children, node);\n }\n }\n }\n\n onFilterKeyup(event: Event) {\n const target = event.target as HTMLInputElement;\n this.filterValue = target.value;\n this.applyFilter();\n }\n\n applyFilter() {\n if (!this.filterValue.trim()) {\n this.filteredValue = this.value;\n return;\n }\n\n this.filteredValue = this.filterNodes(\n this.value,\n this.filterValue.toLowerCase()\n );\n }\n\n filterNodes(nodes: ITreeNode[], filterValue: string): ITreeNode[] {\n const filteredNodes: ITreeNode[] = [];\n\n for (let node of nodes) {\n const nodeMatches = this.isNodeMatch(node, filterValue);\n const filteredChildren = node.children\n ? this.filterNodes(node.children, filterValue)\n : [];\n\n if (nodeMatches || filteredChildren.length > 0) {\n const clonedNode = { ...node };\n if (filteredChildren.length > 0) {\n clonedNode.children = filteredChildren;\n clonedNode.expanded = true;\n }\n filteredNodes.push(clonedNode);\n }\n }\n\n return filteredNodes;\n }\n\n isNodeMatch(node: ITreeNode, filterValue: string): boolean {\n const nodeValue = (node.label || '').toLowerCase();\n return nodeValue.includes(filterValue);\n }\n\n isSelected(node: ITreeNode): boolean {\n if (this.selectionMode === 'single') {\n return this.selection === node;\n } else if (\n this.selectionMode === 'multiple' ||\n this.selectionMode === 'checkbox'\n ) {\n return Array.isArray(this.selection)\n ? this.selection.includes(node)\n : false;\n }\n return false;\n }\n\n isNodeHighlighted(node: ITreeNode): boolean {\n if (this.selectionMode === 'checkbox') {\n return this.temporaryHighlighted.has(node);\n }\n return this.isSelected(node);\n }\n\n isTemporarilyHighlighted(node: ITreeNode): boolean {\n return this.temporaryHighlighted.has(node);\n }\n\n private addTemporaryHighlight(node: ITreeNode) {\n this.temporaryHighlighted.add(node);\n setTimeout(() => {\n this.temporaryHighlighted.delete(node);\n this.cdr.detectChanges();\n }, 400);\n }\n\n isPartiallySelected(node: ITreeNode): boolean {\n if (this.selectionMode !== 'checkbox' || !node.children) {\n return false;\n }\n\n const selection = Array.isArray(this.selection) ? this.selection : [];\n const selectedChildren = node.children.filter((child) =>\n selection.includes(child)\n );\n const totalChildren = node.children.length;\n\n return (\n selectedChildren.length > 0 && selectedChildren.length < totalChildren\n );\n }\n\n onNodeClick(event: Event, node: ITreeNode) {\n if (node.selectable === false) {\n return;\n }\n\n if (this.selectionMode === 'checkbox') {\n return;\n }\n\n if (this.selectionMode === 'single') {\n this.selectSingleNode(event, node);\n } else if (this.selectionMode === 'multiple') {\n this.selectMultipleNode(event, node);\n }\n }\n\n selectSingleNode(event: Event, node: ITreeNode) {\n if (this.selection === node) {\n this.selection = null;\n this.onNodeUnselect.emit({ originalEvent: event, node });\n } else {\n this.selection = node;\n this.onNodeSelect.emit({ originalEvent: event, node });\n }\n this.selectionChange.emit(this.selection || undefined);\n }\n\n selectMultipleNode(event: Event, node: ITreeNode) {\n const selection = Array.isArray(this.selection) ? [...this.selection] : [];\n this.selection = selection;\n const index = selection.indexOf(node);\n\n if (index >= 0) {\n selection.splice(index, 1);\n this.onNodeUnselect.emit({ originalEvent: event, node });\n } else {\n selection.push(node);\n this.onNodeSelect.emit({ originalEvent: event, node });\n }\n this.selectionChange.emit(this.selection);\n }\n\n selectCheckboxNode(event: Event, node: ITreeNode) {\n const selection = Array.isArray(this.selection) ? [...this.selection] : [];\n const selected = this.isSelected(node);\n\n if (selected) {\n this.unselectNode(node, selection);\n } else {\n this.selectNode(node, selection);\n }\n\n if (this.propagateSelectionDown && node.children) {\n this.propagateDown(node, !selected, selection);\n }\n\n if (this.propagateSelectionUp && node.parent) {\n this.propagateUp(node.parent, selection);\n }\n\n this.selection = selection;\n this.selectionChange.emit(this.selection);\n this.updateSelectAllState();\n\n setTimeout(() => {\n if (selected) {\n this.onNodeUnselect.emit({ originalEvent: event, node });\n } else {\n this.onNodeSelect.emit({ originalEvent: event, node });\n }\n }, 0);\n }\n\n onCheckboxChange(checked: boolean, node: ITreeNode) {\n this.addTemporaryHighlight(node);\n\n const fakeEvent = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n });\n\n this.selectCheckboxNode(fakeEvent, node);\n }\n\n selectNode(node: ITreeNode, selection: ITreeNode[]) {\n if (!selection.includes(node)) {\n selection.push(node);\n }\n }\n\n unselectNode(node: ITreeNode, selection: ITreeNode[]) {\n const index = selection.indexOf(node);\n if (index >= 0) {\n selection.splice(index, 1);\n }\n }\n\n propagateDown(node: ITreeNode, select: boolean, selection: ITreeNode[]) {\n if (node.children) {\n for (let child of node.children) {\n if (select) {\n this.selectNode(child, selection);\n } else {\n this.unselectNode(child, selection);\n }\n\n if (child.children) {\n this.propagateDown(child, select, selection);\n }\n }\n }\n }\n\n propagateUp(node: ITreeNode, selection: ITreeNode[]) {\n if (node.children) {\n const selectedChildren = node.children.filter((child) =>\n selection.includes(child)\n );\n const totalChildren = node.children.length;\n\n if (selectedChildren.length === totalChildren) {\n this.selectNode(node, selection);\n } else if (selectedChildren.length > 0) {\n this.selectNode(node, selection);\n } else {\n this.unselectNode(node, selection);\n }\n\n if (node.parent) {\n this.propagateUp(node.parent, selection);\n }\n }\n }\n\n toggleNode(event: Event, node: ITreeNode) {\n if (node.expanded) {\n this.collapseNode(event, node);\n } else {\n this.expandNode(event, node);\n }\n }\n\n expandNode(event: Event, node: ITreeNode) {\n node.expanded = true;\n this.onNodeExpand.emit({ originalEvent: event, node });\n }\n\n collapseNode(event: Event, node: ITreeNode) {\n node.expanded = false;\n this.onNodeCollapse.emit({ originalEvent: event, node });\n }\n\n hasChildren(node: ITreeNode): boolean {\n return !!(node.children && node.children.length > 0);\n }\n\n getToggleIcon(node: ITreeNode): string {\n if (node.loading) {\n return 'pi pi-spin pi-spinner';\n }\n\n const expanded = node.expanded;\n\n if (node.expandedIcon && node.collapsedIcon) {\n return expanded ? node.expandedIcon : node.collapsedIcon;\n }\n\n return expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right';\n }\n\n getNodeIcon(node: ITreeNode): string {\n if (node.icon) {\n return node.icon;\n }\n\n if (this.hasChildren(node)) {\n return node.expanded ? 'pi pi-folder-open' : 'pi pi-folder';\n }\n\n return 'pi pi-file';\n }\n\n getCheckboxId(node: ITreeNode): string {\n const safeKey = (node.key || node.label || 'node')\n .replace(/[^a-zA-Z0-9\\-_]/g, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n return `${this.componentId}-checkbox-${safeKey}`;\n }\n\n // Select All functionality\n onSelectAllChange() {\n if (this.selectionMode !== 'checkbox') return;\n\n const allNodes = this.flattenNodes(this.filteredValue);\n const previousSelection = Array.isArray(this.selection)\n ? this.selection\n : [];\n\n const fakeEvent = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n });\n\n if (this.selectAllChecked) {\n this.selection = allNodes;\n\n allNodes.forEach((node) => {\n if (!previousSelection.includes(node)) {\n this.onNodeSelect.emit({ originalEvent: fakeEvent, node });\n }\n });\n } else {\n this.selection = [];\n\n previousSelection.forEach((node) => {\n this.onNodeUnselect.emit({ originalEvent: fakeEvent, node });\n });\n }\n\n this.selectionChange.emit(this.selection);\n }\n\n private flattenNodes(nodes: ITreeNode[]): ITreeNode[] {\n let result: ITreeNode[] = [];\n nodes.forEach((node) => {\n result.push(node);\n if (node.children) {\n result = result.concat(this.flattenNodes(node.children));\n }\n });\n return result;\n }\n\n updateSelectAllState() {\n if (this.selectionMode !== 'checkbox' || !this.selectAll) return;\n\n const allNodes = this.flattenNodes(this.filteredValue);\n const selectedNodes = Array.isArray(this.selection) ? this.selection : [];\n this.selectAllChecked =\n allNodes.length > 0 && selectedNodes.length === allNodes.length;\n }\n}\n","<div class=\"i-tree-view-wrapper\" [style.height]=\"scrollHeight\">\n @if (filter) {\n <div class=\"i-tree-view-filter-container\">\n <i-input-text\n [(ngModel)]=\"filterValue\"\n [placeholder]=\"filterPlaceholder\"\n [icon]=\"'pi pi-search'\"\n [useFloatLabel]=\"false\"\n [fluid]=\"true\"\n (input)=\"onFilterKeyup($event)\"\n class=\"i-tree-view-filter\"\n >\n </i-input-text>\n </div>\n } @if (selectAll && selectionMode === 'checkbox') {\n <div class=\"i-tree-view-select-all-container\">\n <div class=\"select-box\">\n <i-checkbox\n [(ngModel)]=\"selectAllChecked\"\n [id]=\"componentId + '-select-all'\"\n [label]=\"'Select All'\"\n (ngModelChange)=\"onSelectAllChange()\"\n />\n </div>\n </div>\n }\n\n <div class=\"i-tree-view-container\">\n @if (loading) {\n <div class=\"i-tree-view-loading\">\n <i class=\"pi pi-spin pi-spinner\"></i>\n <span>Loading...</span>\n </div>\n } @else if (filteredValue.length === 0) {\n <div class=\"i-tree-view-empty\">\n <span>{{ emptyMessage }}</span>\n </div>\n } @else {\n <ul class=\"i-tree-view-root\" [attr.id]=\"componentId\" role=\"tree\">\n @for (node of filteredValue; track node.key || $index) {\n <li>\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: node, level: 0 }\"\n ></ng-container>\n </li>\n }\n </ul>\n }\n </div>\n</div>\n\n<ng-template #nodeTemplate let-node let-level=\"level\">\n <div\n class=\"i-tree-view-node\"\n [class.i-tree-view-node--selected]=\"isNodeHighlighted(node)\"\n [class.i-tree-view-node--leaf]=\"!hasChildren(node)\"\n [class.i-tree-view-node--expanded]=\"node.expanded\"\n [class.i-tree-view-node--collapsed]=\"!node.expanded && hasChildren(node)\"\n [class.i-tree-view-node--temporary-highlight]=\"\n isTemporarilyHighlighted(node)\n \"\n [class]=\"node.styleClass\"\n [style.padding-left.rem]=\"level * 1\"\n role=\"treeitem\"\n [attr.aria-expanded]=\"hasChildren(node) ? node.expanded : null\"\n [attr.aria-selected]=\"isSelected(node)\"\n [attr.aria-level]=\"level + 1\"\n tabindex=\"0\"\n (click)=\"onNodeClick($event, node)\"\n (keydown.enter)=\"onNodeClick($event, node)\"\n (keydown.space)=\"$event.preventDefault(); onNodeClick($event, node)\"\n >\n <div class=\"i-tree-view-node-content\">\n @if (hasChildren(node)) {\n <button\n type=\"button\"\n class=\"i-tree-view-toggler\"\n (click)=\"$event.stopPropagation(); toggleNode($event, node)\"\n [attr.aria-label]=\"node.expanded ? 'Collapse' : 'Expand'\"\n tabindex=\"-1\"\n >\n <i [class]=\"getToggleIcon(node)\"></i>\n </button>\n } @else {\n <span class=\"i-tree-view-toggler-spacer\"></span>\n } @if (selectionMode === 'checkbox') {\n <div class=\"i-tree-view-checkbox-container\">\n <i-checkbox\n [checked]=\"isSelected(node) && !isPartiallySelected(node)\"\n [indeterminate]=\"isPartiallySelected(node)\"\n (onChange)=\"onCheckboxChange($event, node)\"\n [id]=\"getCheckboxId(node)\"\n size=\"small\"\n tabindex=\"-1\"\n >\n </i-checkbox>\n </div>\n }\n\n <i [class]=\"getNodeIcon(node)\" class=\"i-tree-view-node-icon\"></i>\n\n <span class=\"i-tree-view-node-label\">{{ node.label }}</span>\n </div>\n </div>\n\n @if (hasChildren(node) && node.expanded) {\n <ul class=\"i-tree-view-children\" role=\"group\">\n @for (child of node.children; track child.key || $index) {\n <li>\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: child, level: level + 1 }\"\n ></ng-container>\n </li>\n }\n </ul>\n }\n</ng-template>\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { IWhisperMessage, IWhisperOptions } from './whisper.interfaces';\n\n/**\n * Service for displaying whisper (toast/notification) messages to users.\n *\n * This service provides a centralized way to show temporary notification messages\n * across the application. Messages can be customized with different severities,\n * durations, and positions. The service supports auto-dismissing messages, sticky\n * messages, and grouping related notifications.\n *\n * @example\n * ```typescript\n * // Basic success message\n * constructor(private whisperService: WhisperService) {}\n *\n * saveData() {\n * this.apiService.save(data).subscribe(() => {\n * this.whisperService.add({\n * severity: 'success',\n * summary: 'Success',\n * detail: 'Data saved successfully'\n * });\n * });\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Error message with custom duration\n * this.whisperService.add({\n * severity: 'danger',\n * summary: 'Error',\n * detail: 'Failed to load data',\n * life: 5000,\n * closable: true\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Sticky message that requires manual close\n * this.whisperService.add({\n * severity: 'warning',\n * summary: 'Important Notice',\n * detail: 'Please review these changes carefully',\n * sticky: true\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Configure global options\n * this.whisperService.setOptions({\n * position: 'bottom-right',\n * preventDuplicates: true\n * });\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class WhisperService {\n /**\n * Internal subject for publishing new messages.\n * @internal\n */\n private messageSource = new Subject<IWhisperMessage>();\n\n /**\n * Internal subject for publishing clear commands.\n * @internal\n */\n private clearSource = new Subject<string | null>();\n\n /**\n * Observable stream of whisper messages. Subscribe to this to display messages in the UI.\n */\n messageObserver = this.messageSource.asObservable();\n\n /**\n * Observable stream of clear commands. Emits when messages should be cleared.\n */\n clearObserver = this.clearSource.asObservable();\n\n /**\n * Default configuration options for the whisper service.\n * @internal\n */\n private defaultOptions: IWhisperOptions = {\n position: 'top-right',\n preventOpenDuplicates: false,\n preventDuplicates: false,\n };\n\n /**\n * Current active configuration options.\n * @internal\n */\n private options: IWhisperOptions = { ...this.defaultOptions };\n\n /**\n * Adds a new whisper message to display.\n *\n * Creates and displays a notification message with auto-generated ID if not provided.\n * Sets default values for life (3000ms), closable (true), and severity (info) if not specified.\n *\n * @param message The message configuration object\n *\n * @example\n * ```typescript\n * // Simple info message\n * this.whisperService.add({\n * severity: 'info',\n * summary: 'Information',\n * detail: 'This is an info message'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Custom duration and grouped message\n * this.whisperService.add({\n * severity: 'success',\n * summary: 'Upload Complete',\n * detail: 'File uploaded successfully',\n * key: 'upload-notifications',\n * life: 5000\n * });\n * ```\n */\n add(message: IWhisperMessage): void {\n if (message) {\n // Generate a unique ID if not provided\n if (!message.id) {\n message.id = this.generateId();\n }\n\n // Set default values\n message.life = message.life ?? 3000;\n message.closable = message.closable ?? true;\n message.severity = message.severity ?? 'info';\n\n this.messageSource.next(message);\n }\n }\n\n /**\n * Adds multiple whisper messages at once.\n *\n * Convenience method for displaying multiple notification messages.\n * Each message is processed individually through the add() method.\n *\n * @param messages Array of message configuration objects to display\n *\n * @example\n * ```typescript\n * this.whisperService.addAll([\n * { severity: 'success', summary: 'Task 1', detail: 'Completed' },\n * { severity: 'success', summary: 'Task 2', detail: 'Completed' },\n * { severity: 'info', summary: 'Task 3', detail: 'In progress' }\n * ]);\n * ```\n */\n addAll(messages: IWhisperMessage[]): void {\n if (messages && messages.length) {\n messages.forEach(message => this.add(message));\n }\n }\n\n /**\n * Clears whisper messages from the display.\n *\n * When called without a key, clears all visible messages.\n * When called with a key, clears only messages matching that key.\n *\n * @param key Optional key to clear only specific grouped messages\n *\n * @example\n * ```typescript\n * // Clear all messages\n * this.whisperService.clear();\n * ```\n *\n * @example\n * ```typescript\n * // Clear only messages with a specific key\n * this.whisperService.clear('upload-notifications');\n * ```\n */\n clear(key?: string): void {\n this.clearSource.next(key || null);\n }\n\n /**\n * Sets global configuration options for the whisper service.\n *\n * Updates the service configuration by merging provided options with defaults.\n * This affects all future messages displayed by the service.\n *\n * @param options Configuration options to apply\n *\n * @example\n * ```typescript\n * // Change position and enable duplicate prevention\n * this.whisperService.setOptions({\n * position: 'bottom-left',\n * preventDuplicates: true,\n * preventOpenDuplicates: true\n * });\n * ```\n */\n setOptions(options: IWhisperOptions): void {\n this.options = { ...this.defaultOptions, ...options };\n }\n\n /**\n * Gets the current global configuration options.\n *\n * Returns a copy of the current options to prevent external modifications.\n *\n * @returns A copy of the current configuration options\n *\n * @example\n * ```typescript\n * const currentOptions = this.whisperService.getOptions();\n * console.log('Current position:', currentOptions.position);\n * ```\n */\n getOptions(): IWhisperOptions {\n return { ...this.options };\n }\n\n /**\n * Generates a unique identifier for messages.\n * @internal\n */\n private generateId(): string {\n return Math.random().toString(36).substr(2, 9);\n }\n}","import { NgClass, NgStyle } from '@angular/common';\nimport {\n Component,\n OnInit,\n OnDestroy,\n Input,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { WhisperService } from './services/whisper.service';\nimport {\n IWhisperMessage,\n IWhisperOptions,\n} from './services/whisper.interfaces';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { ZIndexUtils } from '../../utils/zindexutils';\nimport { IButton } from '../button/button.component';\nimport { ISeverity } from '@shared/enums/IButtonSeverity';\n\n/**\n * Supported whisper/toast positions\n */\nexport type IWhisperPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\n/**\n * Whisper (Toast Notification) Component\n *\n * A notification/toast component that displays temporary messages.\n * Supports multiple positions, severities, and automatic dismissal.\n *\n * @example\n * ```html\n * <!-- Basic whisper container (place in app root) -->\n * <i-whisper></i-whisper>\n *\n * <!-- Whisper with custom position -->\n * <i-whisper position=\"bottom-right\"></i-whisper>\n *\n * <!-- Keyed whisper for specific notifications -->\n * <i-whisper key=\"global-notifications\"></i-whisper>\n * ```\n *\n * ```typescript\n * // In your component:\n * constructor(private whisperService: WhisperService) {}\n *\n * showSuccess() {\n * this.whisperService.add({\n * severity: 'success',\n * summary: 'Success',\n * detail: 'Operation completed successfully',\n * life: 3000\n * });\n * }\n *\n * showError() {\n * this.whisperService.add({\n * severity: 'danger',\n * summary: 'Error',\n * detail: 'An error occurred',\n * life: 5000\n * });\n * }\n * ```\n *\n * @remarks\n * This component uses OnPush change detection for optimal performance.\n * Works with WhisperService to display notifications.\n * Supports auto-dismissal with configurable life time.\n */\n@Component({\n selector: 'i-whisper',\n standalone: true,\n imports: [NgClass, NgStyle, IButton],\n templateUrl: './whisper.component.html',\n styleUrl: './whisper.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IWhisper implements OnInit, OnDestroy {\n /**\n * Key to filter which messages this whisper container displays\n * If set, only messages with matching key will be shown\n */\n @Input() key?: string;\n\n /**\n * Whether to automatically manage z-index\n * @default true\n */\n @Input() autoZIndex = true;\n\n /**\n * Base z-index value for the whisper container\n * @default 0\n */\n @Input() baseZIndex = 0;\n\n /**\n * Custom inline styles to apply to the container\n */\n @Input() style?: { [key: string]: any };\n\n /**\n * Position of the whisper container on screen\n * @default 'top-right'\n */\n @Input() position: IWhisperPosition = 'top-right';\n\n /**\n * Prevents duplicate messages from being shown at the same time\n * Removes existing message before showing the duplicate\n * @default false\n */\n @Input() preventOpenDuplicates = false;\n\n /**\n * Prevents duplicate messages from being added at all\n * @default false\n */\n @Input() preventDuplicates = false;\n\n /**\n * Array of current whisper messages\n * @internal\n */\n messages: IWhisperMessage[] = [];\n\n /**\n * Subscription to message events from the service\n * @internal\n */\n messageSubscription?: Subscription;\n\n /**\n * Subscription to clear events from the service\n * @internal\n */\n clearSubscription?: Subscription;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-whisper-');\n\n constructor(\n private whisperService: WhisperService,\n private cd: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.messageSubscription = this.whisperService.messageObserver.subscribe(\n (message) => {\n if (message) {\n if (this.key) {\n if (message.key !== this.key) {\n return;\n }\n } else {\n if (message.key) {\n return;\n }\n }\n\n if (this.preventDuplicates) {\n const isDuplicate = this.messages.some(\n (m) =>\n m.summary === message.summary &&\n m.detail === message.detail &&\n m.severity === message.severity\n );\n if (isDuplicate) return;\n }\n\n if (this.preventOpenDuplicates) {\n this.messages = this.messages.filter(\n (m) =>\n !(\n m.summary === message.summary &&\n m.detail === message.detail &&\n m.severity === message.severity\n )\n );\n }\n\n this.messages = [...this.messages, message];\n\n if (message.life && message.life > 0) {\n setTimeout(() => {\n this.remove(message);\n }, message.life);\n }\n\n this.cd.markForCheck();\n }\n }\n );\n\n this.clearSubscription = this.whisperService.clearObserver.subscribe(\n (key) => {\n if (key) {\n this.messages = this.messages.filter((m) => m.key !== key);\n } else {\n this.messages = [];\n }\n this.cd.markForCheck();\n }\n );\n }\n\n ngOnDestroy(): void {\n if (this.messageSubscription) {\n this.messageSubscription.unsubscribe();\n }\n\n if (this.clearSubscription) {\n this.clearSubscription.unsubscribe();\n }\n }\n\n /**\n * Removes a specific message from the display\n * @internal\n */\n remove(message: IWhisperMessage): void {\n this.messages = this.messages.filter((m) => m.id !== message.id);\n this.cd.markForCheck();\n }\n\n /**\n * Removes all messages from the display\n * @internal\n */\n removeAll(): void {\n this.messages = [];\n this.cd.markForCheck();\n }\n\n /**\n * Handles the close button click for a message\n * @internal\n */\n onClose(message: IWhisperMessage): void {\n this.remove(message);\n }\n\n /**\n * Gets the appropriate icon class for a message severity\n * @internal\n */\n getMessageIcon(severity: ISeverity): string {\n switch (severity) {\n case 'success':\n return 'pi-check-circle';\n case 'info':\n return 'pi-info-circle';\n case 'warning':\n return 'pi-exclamation-triangle';\n case 'danger':\n return 'pi-times-circle';\n default:\n return 'pi-info-circle';\n }\n }\n\n /**\n * Gets CSS classes for the whisper container\n * @internal\n */\n getContainerClass(): string {\n return `i-whisper i-whisper-${this.position}`;\n }\n\n /**\n * Gets CSS classes for a specific message\n * @internal\n */\n getMessageClass(message: IWhisperMessage): string {\n let classes = 'i-whisper-message';\n if (message.severity) {\n classes += ` i-whisper-message-${message.severity}`;\n }\n return classes;\n }\n\n /**\n * TrackBy function for ngFor optimization\n * @internal\n */\n trackByMessage(index: number, message: IWhisperMessage): any {\n return message.id;\n }\n}\n","@if (messages && messages.length > 0) {\n <div\n [ngClass]=\"getContainerClass()\"\n [ngStyle]=\"style\"\n [attr.id]=\"componentId\"\n >\n @for (message of messages; track trackByMessage($index, message)) {\n <div\n [ngClass]=\"getMessageClass(message)\"\n [attr.data-whisper-key]=\"message.key\"\n [attr.aria-live]=\"'polite'\"\n [attr.aria-atomic]=\"'true'\"\n role=\"alert\"\n >\n <div class=\"i-whisper-message-content\">\n <div class=\"i-whisper-message-icon\">\n <i [ngClass]=\"['pi', getMessageIcon(message.severity)]\"> </i>\n </div>\n <div class=\"i-whisper-message-text\">\n @if (message.summary) {\n <div class=\"i-whisper-message-summary\">\n {{ message.summary }}\n </div>\n }\n @if (message.detail) {\n <div class=\"i-whisper-message-detail\">\n {{ message.detail }}\n </div>\n }\n </div>\n @if (message.closable === true) {\n <i-button\n [severity]=\"message.severity\"\n size=\"small\"\n [text]=\"true\"\n icon=\"pi pi-times\"\n (click)=\"onClose(message)\"\n [attr.aria-label]=\"'Close'\"\n />\n }\n </div>\n </div>\n }\n </div>\n }\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n Output,\n EventEmitter,\n signal,\n computed,\n InputSignal,\n input,\n HostListener,\n ElementRef,\n effect,\n ViewChild,\n forwardRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n CdkVirtualScrollViewport,\n CdkVirtualForOf,\n CdkFixedSizeVirtualScroll,\n} from '@angular/cdk/scrolling';\nimport { IInputText } from '../input-text/input-text.component';\nimport { IButton } from '../button/button.component';\nimport { ICheckbox } from '../checkbox/checkbox.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { ISeverity } from '@shared/enums/IButtonSeverity';\nimport { NoContentComponent } from '../no-content/no-content.component';\nimport { TooltipDirective } from '../../directives/tooltip/tooltip.directive';\nimport { IChip } from '../chip/chip.component';\n\n/**\n * Column definition for the table\n */\nexport interface TableColumn {\n /** Field name in the data object */\n field: string;\n /** Header text displayed for this column */\n header: string;\n /** Whether this column is sortable */\n sortable?: boolean;\n /** Whether this column is filterable */\n filterable?: boolean;\n /** Column width (e.g., '100px', '20%') */\n width?: string;\n /** Text alignment within the column */\n align?: 'left' | 'center' | 'right';\n /** Data type for formatting */\n type?: 'text' | 'number' | 'date' | 'boolean' | 'currency' | 'icon' | 'list';\n /** Format string for date/currency formatting */\n format?: string;\n /** Icon class for 'icon' type - can be a field name or a function that returns the icon class */\n iconClass?: string | ((row: any) => string);\n /** Severity/color for content - applies to text and icons, can be a field name or a function */\n severity?: ISeverity | string | ((row: any) => ISeverity | string);\n /** Icon size for 'icon' type */\n iconSize?: string;\n}\n\n/**\n * Action button with an embedded per-action click handler.\n * No shared dispatcher is needed — each action calls its own `handler`.\n *\n * @typeParam T - The row type this action operates on.\n */\nexport interface GridAction<T = any> {\n /** Unique identifier for the action */\n id: string;\n /** Icon class (e.g., 'pi pi-edit') */\n icon?: string;\n /** Button label text */\n label?: string;\n /** Button severity/style */\n severity?: ISeverity;\n /** Whether the action is disabled */\n disabled?: boolean | ((row: T) => boolean);\n /** Tooltip text to display on hover */\n tooltip?: string | ((row: T) => string);\n /** Whether the action is visible */\n visible?: boolean | ((row: T) => boolean);\n /** Called when this action button is clicked for a row */\n handler: (row: T) => void;\n}\n\n/**\n * Defines the expandable detail sub-table rendered below each parent row.\n *\n * @typeParam TRow - The parent row type.\n * @typeParam TDetail - The detail row type.\n */\nexport interface GridDetails<TRow = any, TDetail = any> {\n /** Column definitions for the detail sub-table */\n columns: TableColumn[];\n /** Returns the detail rows for a given parent row */\n rows: (parentRow: TRow) => TDetail[];\n /** Optional actions on the detail rows */\n actions?: GridAction<TDetail>[];\n}\n\n/**\n * Single data object passed to `<i-table>`.\n * Bundles columns, rows, per-row actions, and an optional detail expansion\n * — eliminating the need for separate `[columns]`, `[actions]`, `[groupedData]` inputs.\n *\n * @typeParam TRow - The main row type.\n * @typeParam TDetail - The detail row type (defaults to `any`).\n *\n * @example\n * ```typescript\n * // Flat table\n * grid: GridData<Product> = { columns, rows: products };\n *\n * // With actions — each action carries its own handler\n * grid: GridData<Product> = {\n * columns,\n * rows: products,\n * actions: [\n * { id: 'edit', icon: 'pi pi-pencil', handler: p => this.edit(p) },\n * { id: 'delete', icon: 'pi pi-trash', handler: p => this.delete(p) },\n * ],\n * };\n *\n * // With expandable detail sub-table (replaces grouped mode)\n * grid: GridData<CategorySummary, Product> = {\n * columns: categoryColumns,\n * rows: categories,\n * actions: [{ id: 'view', icon: 'pi pi-eye', handler: c => this.view(c) }],\n * details: {\n * columns: productColumns,\n * rows: cat => products.filter(p => p.category === cat.name),\n * actions: [{ id: 'edit', icon: 'pi pi-pencil', handler: p => this.edit(p) }],\n * },\n * };\n * ```\n */\nexport interface GridData<TRow = any, TDetail = any> {\n /** Column definitions for this table level */\n columns: TableColumn[];\n /** Data rows */\n rows: TRow[];\n /** Per-row actions — each action carries its own click handler */\n actions?: GridAction<TRow>[];\n /** Optional expandable detail sub-table rendered below each expanded row */\n details?: GridDetails<TRow, TDetail>;\n}\n\n/**\n * Sort event emitted when sorting changes\n */\nexport interface SortEvent {\n /** Field being sorted */\n field: string;\n /** Sort direction */\n order: 'asc' | 'desc';\n}\n\n/**\n * Filter event emitted when filtering changes\n */\nexport interface FilterEvent {\n /** Column filters keyed by field name */\n filters: { [field: string]: string };\n /** Global filter value */\n globalFilter?: string;\n}\n\n/**\n * Download event configuration\n */\nexport interface TableDownloadEvent {\n /** Download format */\n format: 'csv' | 'excel' | 'json';\n /** Filtered data to download */\n data: any[];\n /** Columns to include in download */\n columns: TableColumn[];\n}\n\n/**\n * Table Component\n *\n * A comprehensive table component with sorting, filtering, pagination, selection,\n * and row actions. All features are configurable via props.\n * Uses Angular signals for reactive state management.\n *\n * @example\n * ```html\n * <!-- Flat table -->\n * <i-table [grid]=\"productGrid\" [sortable]=\"true\"></i-table>\n *\n * <!-- Table with selection -->\n * <i-table\n * [grid]=\"productGrid\"\n * selectionMode=\"multiple\"\n * [(selection)]=\"selectedProducts\"\n * (onSelectionChange)=\"onSelect($event)\">\n * </i-table>\n *\n * <!-- Expandable detail (replaces grouped mode) -->\n * <i-table [grid]=\"categoryGrid\" [sortable]=\"true\"></i-table>\n * ```\n *\n * @remarks\n * This component provides a feature-rich table implementation similar to\n * PrimeNG's table but configured entirely via props without templating.\n */\n@Component({\n selector: 'i-table',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n CdkVirtualScrollViewport,\n CdkVirtualForOf,\n CdkFixedSizeVirtualScroll,\n IInputText,\n IButton,\n ICheckbox,\n IChip,\n NoContentComponent,\n TooltipDirective,\n forwardRef(() => ITable),\n ],\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n})\nexport class ITable {\n // ===== DATA =====\n\n /**\n * All table data in one object: columns, rows, optional per-row actions, and\n * an optional `details` spec for expandable sub-tables (replaces grouped mode).\n *\n * @see GridData\n */\n grid: InputSignal<GridData> = input<GridData>({ columns: [], rows: [] });\n\n /**\n * Message displayed when table has no data\n * @default 'No data available'\n */\n @Input() emptyMessage = 'No data available';\n\n // ===== SORTING =====\n\n /**\n * Enable/disable sorting globally\n * @default false\n */\n @Input() sortable = false;\n\n /**\n * Current sort field (backed by a signal so computed can track changes)\n */\n private _sortField = signal('');\n @Input()\n set sortField(val: string) {\n this._sortField.set(val ?? '');\n }\n get sortField(): string {\n return this._sortField();\n }\n\n /**\n * Sort direction (backed by a signal)\n * @default 'asc'\n */\n private _sortOrder = signal<'asc' | 'desc'>('asc');\n @Input()\n set sortOrder(val: 'asc' | 'desc') {\n this._sortOrder.set(val === 'desc' ? 'desc' : 'asc');\n }\n get sortOrder(): 'asc' | 'desc' {\n return this._sortOrder();\n }\n\n /**\n * Event emitted when sort changes\n */\n @Output() onSort = new EventEmitter<SortEvent>();\n\n // ===== FILTERING =====\n\n /**\n * Enable column filtering\n * @default false\n */\n @Input() filterable = false;\n\n /**\n * Enable global search\n * @default false\n */\n @Input() globalFilter = false;\n\n /**\n * Debounce delay for filtering in milliseconds\n * @default 300\n */\n @Input() filterDelay = 300;\n\n /**\n * Event emitted when filter changes\n */\n @Output() onFilter = new EventEmitter<FilterEvent>();\n\n // ===== SELECTION =====\n\n /**\n * Selection mode\n */\n @Input() selectionMode: 'single' | 'multiple' | null = null;\n\n /**\n * Selected rows\n */\n @Input() selection: any[] = [];\n\n /**\n * Property name to uniquely identify rows (improves selection performance)\n * When provided, uses this property for row comparison instead of JSON.stringify\n */\n @Input() dataKey?: string;\n\n /**\n * Event emitted when selection changes\n */\n @Output() selectionChange = new EventEmitter<any[]>();\n\n /**\n * Event emitted when selection changes (alias for two-way binding)\n */\n @Output() onSelectionChange = new EventEmitter<any[]>();\n\n /**\n * Event emitted when a row is selected\n */\n @Output() onRowSelect = new EventEmitter<any>();\n\n /**\n * Event emitted when a row is unselected\n */\n @Output() onRowUnselect = new EventEmitter<any>();\n\n // ===== ROW ACTIONS =====\n // Actions are embedded inside GridData.actions — each action has its own handler.\n // No separate @Input or @Output is needed.\n\n // ===== VISUAL FEATURES =====\n\n /**\n * Show striped rows\n * @default false\n */\n @Input() striped = false;\n\n /**\n * Enable row hover effect\n * @default true\n */\n @Input() hoverable = true;\n\n /**\n * Show borders\n * @default false\n */\n @Input() bordered = false;\n\n /**\n * Table size\n * @default 'medium'\n */\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Show loading state\n * @default false\n */\n @Input() loading = false;\n\n /**\n * Enable horizontal scrolling\n * @default false\n */\n @Input() scrollable = false;\n\n /**\n * Container height (also controls virtual scroll viewport height).\n * @example '400px'\n */\n @Input() height?: string;\n\n /**\n * Enable CDK virtual scroll for large datasets.\n * Leave `false` (default) for small/medium tables — rows are rendered with\n * a regular `@for` loop inside a scrollable container.\n * Set to `true` only when the row count is large enough (≥ ~500 rows) to\n * benefit from virtual rendering.\n * @default false\n */\n @Input() virtualScroll = false;\n\n /**\n * Item size for virtual scroll (height of each row in pixels)\n * @default 48\n */\n @Input() virtualScrollItemSize = 48;\n\n /**\n * Minimum buffer size in pixels for virtual scroll\n * @default 200\n */\n @Input() virtualScrollMinBufferPx = 200;\n\n /**\n * Maximum buffer size in pixels for virtual scroll\n * @default 400\n */\n @Input() virtualScrollMaxBufferPx = 400;\n\n /**\n * Reference to the virtual scroll viewport\n * @internal\n */\n @ViewChild(CdkVirtualScrollViewport)\n virtualScrollViewport?: CdkVirtualScrollViewport;\n\n // ===== ADDITIONAL FEATURES =====\n\n /**\n * Allow column resizing\n * @default false\n */\n @Input() resizableColumns = false;\n\n /**\n * Event emitted when a row is expanded\n */\n @Output() onRowExpand = new EventEmitter<any>();\n\n /**\n * Event emitted when a row is collapsed\n */\n @Output() onRowCollapse = new EventEmitter<any>();\n\n // ===== DOWNLOAD FEATURES =====\n\n /**\n * Enable download functionality\n * @default false\n */\n @Input() downloadable = false;\n\n /**\n * Download mode - 'direct' for client-side download, 'api' for server-side\n * @default 'direct'\n */\n @Input() downloadMode: 'direct' | 'api' = 'direct';\n\n /**\n * Default download format\n * @default 'csv'\n */\n @Input() downloadFormat: 'csv' | 'excel' | 'json' = 'csv';\n\n /**\n * Custom download filename (without extension)\n */\n @Input() downloadFilename?: string;\n\n /**\n * Event emitted when download is triggered in 'api' mode\n */\n @Output() onDownload = new EventEmitter<TableDownloadEvent>();\n\n // ===== INTERNAL STATE =====\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-table-');\n\n /**\n * Global filter value signal\n * @internal\n */\n globalFilterValue = signal('');\n\n /**\n * Column filter values signal\n * @internal\n */\n columnFilters = signal<{ [field: string]: string }>({});\n\n /**\n * Expanded rows\n * @internal\n */\n expandedRows = signal<Set<any>>(new Set());\n\n /**\n * Filter debounce timer\n * @internal\n */\n private filterTimer: ReturnType<typeof setTimeout> | null = null;\n\n /**\n * Column being resized\n * @internal\n */\n private resizingColumn: TableColumn | null = null;\n\n /**\n * Starting X position for resize\n * @internal\n */\n private resizeStartX = 0;\n\n /**\n * Starting width for resize\n * @internal\n */\n private resizeStartWidth = 0;\n\n /**\n * Column widths (for resizing)\n * @internal\n */\n columnWidths = signal<{ [field: string]: number }>({});\n\n constructor(private el: ElementRef) {}\n\n // ===== DERIVED DATA =====\n\n /** Columns for the current table level. @internal */\n gridColumns = computed<TableColumn[]>(() => this.grid().columns ?? []);\n\n /** Data rows for the current table level. @internal */\n gridRows = computed<any[]>(() => this.grid().rows ?? []);\n\n /** Per-row actions for the current table level. @internal */\n gridActions = computed<GridAction[]>(() => this.grid().actions ?? []);\n\n /** Whether this table level has an expandable detail sub-table. @internal */\n hasDetails = computed<boolean>(() => !!this.grid().details);\n\n /**\n * Computed filtered and sorted data.\n * @internal\n */\n processedData = computed(() => {\n let result = [...this.gridRows()];\n\n // Apply global filter\n const globalFilter = this.globalFilterValue();\n if (globalFilter) {\n const cols = this.gridColumns();\n result = result.filter((row) =>\n cols.some((col) => {\n const value = this.getCellValue(row, col.field);\n return String(value)\n .toLowerCase()\n .includes(globalFilter.toLowerCase());\n }),\n );\n }\n\n // Apply column filters\n const filters = this.columnFilters();\n Object.keys(filters).forEach((field) => {\n const filterValue = filters[field];\n if (filterValue) {\n result = result.filter((row) => {\n const value = this.getCellValue(row, field);\n return String(value)\n .toLowerCase()\n .includes(filterValue.toLowerCase());\n });\n }\n });\n\n // Apply sorting\n if (this.sortField) {\n result.sort((a, b) => {\n const aValue = this.getCellValue(a, this.sortField);\n const bValue = this.getCellValue(b, this.sortField);\n let comparison = 0;\n if (aValue < bValue) comparison = -1;\n if (aValue > bValue) comparison = 1;\n return this.sortOrder === 'asc' ? comparison : -comparison;\n });\n }\n\n return result;\n });\n\n /**\n * Gets a cell value from a row\n * @internal\n */\n getCellValue(row: any, field: string): any {\n if (!row || !field) return '';\n // Support nested properties with dot notation\n const parts = field.split('.');\n let value = row;\n for (const part of parts) {\n if (value === null || value === undefined) return '';\n value = value[part];\n }\n return value ?? '';\n }\n\n /**\n * Formats a cell value based on column type\n * @internal\n */\n formatCellValue(value: any, column: TableColumn): string {\n if (value === null || value === undefined) return '';\n\n switch (column.type) {\n case 'date':\n try {\n const date = new Date(value);\n return column.format\n ? this.formatDate(date, column.format)\n : date.toLocaleDateString();\n } catch {\n return String(value);\n }\n case 'currency':\n try {\n const num = Number(value);\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: column.format || 'USD',\n }).format(num);\n } catch {\n return String(value);\n }\n case 'number':\n return Number(value).toLocaleString();\n case 'boolean':\n return value ? 'Yes' : 'No';\n case 'icon':\n // Icons are rendered in the template, not as text\n return '';\n case 'list':\n // Lists are rendered in the template as chips, not as text\n return '';\n default:\n return String(value);\n }\n }\n\n /**\n * Checks if a column should render a list of chips\n * @internal\n */\n isListColumn(column: TableColumn): boolean {\n return column.type === 'list';\n }\n\n /**\n * Gets the list items for a cell\n * @internal\n */\n getCellListItems(row: any, column: TableColumn): string[] {\n if (column.type !== 'list') return [];\n const value = this.getCellValue(row, column.field);\n if (Array.isArray(value)) {\n return value.map((item) => String(item));\n }\n return [];\n }\n\n /**\n * Gets the icon class for a cell\n * @internal\n */\n getCellIcon(row: any, column: TableColumn): string {\n if (column.type !== 'icon') return '';\n\n if (typeof column.iconClass === 'function') {\n return column.iconClass(row);\n } else if (typeof column.iconClass === 'string') {\n // Check if it's a field reference or a direct icon class\n const fieldValue = this.getCellValue(row, column.iconClass);\n return fieldValue || column.iconClass;\n }\n\n // Fallback to field value\n return this.getCellValue(row, column.field) || '';\n }\n\n /**\n * Gets the severity/color for a cell (applies to text and icons)\n * @internal\n */\n getCellSeverity(row: any, column: TableColumn): string {\n if (!column.severity) return '';\n\n if (typeof column.severity === 'function') {\n return String(column.severity(row));\n } else if (typeof column.severity === 'string') {\n // Check if it's a field reference or a direct severity value\n const fieldValue = this.getCellValue(row, column.severity);\n return fieldValue || column.severity;\n }\n\n return '';\n }\n\n /**\n * Returns the combined CSS classes for an icon cell: the icon class itself,\n * the `i-severity-icon` marker (for scoped colour styles), and the severity\n * token (e.g. `success`, `danger`) needed by the sibling CSS rule.\n * @internal\n */\n getIconClasses(row: any, column: TableColumn): string {\n const icon = this.getCellIcon(row, column);\n const severity = this.getCellSeverity(row, column);\n return severity ? `${icon} i-severity-icon ${severity}` : icon;\n }\n\n /**\n * Checks if a column should render an icon\n * @internal\n */\n isIconColumn(column: TableColumn): boolean {\n return column.type === 'icon';\n }\n\n /**\n * Simple date formatter\n * @internal\n */\n private formatDate(date: Date, format: string): string {\n const pad = (n: number) => n.toString().padStart(2, '0');\n return format\n .replace('yyyy', date.getFullYear().toString())\n .replace('MM', pad(date.getMonth() + 1))\n .replace('dd', pad(date.getDate()))\n .replace('HH', pad(date.getHours()))\n .replace('mm', pad(date.getMinutes()))\n .replace('ss', pad(date.getSeconds()));\n }\n\n // ===== SORTING METHODS =====\n\n /**\n * Handles column sort click\n * @internal\n */\n onSortColumn(column: TableColumn): void {\n if (!this.sortable || !column.sortable) return;\n\n if (this.sortField === column.field) {\n this.sortOrder = this.sortOrder === 'asc' ? 'desc' : 'asc';\n } else {\n this.sortField = column.field;\n this.sortOrder = 'asc';\n }\n\n this.onSort.emit({\n field: this.sortField,\n order: this.sortOrder,\n });\n }\n\n /**\n * Gets the sort icon for a column\n * @internal\n */\n getSortIcon(column: TableColumn): string {\n if (this.sortField !== column.field) {\n return 'pi pi-sort-alt';\n }\n return this.sortOrder === 'asc'\n ? 'pi pi-sort-amount-up'\n : 'pi pi-sort-amount-down';\n }\n\n // ===== FILTERING METHODS =====\n\n /**\n * Handles global filter input\n * @internal\n */\n onGlobalFilterInput(value: string): void {\n if (this.filterTimer) {\n clearTimeout(this.filterTimer);\n }\n\n this.filterTimer = setTimeout(() => {\n this.globalFilterValue.set(value);\n this.emitFilterEvent();\n }, this.filterDelay);\n }\n\n /**\n * Handles column filter input\n * @internal\n */\n onColumnFilterInput(field: string, value: string): void {\n if (this.filterTimer) {\n clearTimeout(this.filterTimer);\n }\n\n this.filterTimer = setTimeout(() => {\n this.columnFilters.update((filters) => ({\n ...filters,\n [field]: value,\n }));\n this.emitFilterEvent();\n }, this.filterDelay);\n }\n\n /**\n * Emits filter event\n * @internal\n */\n private emitFilterEvent(): void {\n this.onFilter.emit({\n filters: this.columnFilters(),\n globalFilter: this.globalFilterValue(),\n });\n }\n\n // ===== SELECTION METHODS =====\n\n /**\n * Checks if a row is selected\n * @internal\n */\n isRowSelected(row: any): boolean {\n if (!this.selectionMode) return false;\n return this.selection?.some((s) => this.compareObjects(s, row)) ?? false;\n }\n\n /**\n * Toggles row selection\n * @internal\n */\n toggleRowSelection(row: any, event?: Event): void {\n if (!this.selectionMode) return;\n\n // Prevent checkbox from triggering twice\n if (event) {\n event.stopPropagation();\n }\n\n const isSelected = this.isRowSelected(row);\n\n if (this.selectionMode === 'single') {\n if (isSelected) {\n this.selection = [];\n this.onRowUnselect.emit(row);\n } else {\n this.selection = [row];\n this.onRowSelect.emit(row);\n }\n } else if (this.selectionMode === 'multiple') {\n if (isSelected) {\n this.selection = this.selection.filter(\n (s) => !this.compareObjects(s, row),\n );\n this.onRowUnselect.emit(row);\n } else {\n this.selection = [...this.selection, row];\n this.onRowSelect.emit(row);\n }\n }\n\n this.selectionChange.emit(this.selection);\n this.onSelectionChange.emit(this.selection);\n }\n\n /**\n * Toggles all rows selection\n * @internal\n */\n toggleAllSelection(): void {\n if (this.selectionMode !== 'multiple') return;\n\n const data = this.processedData();\n const allSelected = this.areAllRowsSelected();\n\n if (allSelected) {\n // Deselect all visible rows\n this.selection = this.selection.filter(\n (s: any) => !data.some((d: any) => this.compareObjects(s, d)),\n );\n } else {\n // Select all visible rows\n const newSelections = data.filter(\n (d: any) => !this.selection.some((s: any) => this.compareObjects(s, d)),\n );\n this.selection = [...this.selection, ...newSelections];\n }\n\n this.selectionChange.emit(this.selection);\n this.onSelectionChange.emit(this.selection);\n }\n\n /**\n * Checks if all visible rows are selected\n * @internal\n */\n areAllRowsSelected(): boolean {\n const data = this.processedData();\n if (data.length === 0) return false;\n return data.every((d: any) =>\n this.selection?.some((s: any) => this.compareObjects(s, d)),\n );\n }\n\n /**\n * Checks if some (but not all) rows are selected\n * @internal\n */\n areSomeRowsSelected(): boolean {\n const data = this.processedData();\n const selectedCount = data.filter((d: any) =>\n this.selection?.some((s: any) => this.compareObjects(s, d)),\n ).length;\n return selectedCount > 0 && selectedCount < data.length;\n }\n\n /**\n * Compares two objects for equality using dataKey if provided,\n * otherwise falls back to JSON.stringify comparison\n * @internal\n */\n private compareObjects(obj1: any, obj2: any): boolean {\n if (this.dataKey) {\n return obj1?.[this.dataKey] === obj2?.[this.dataKey];\n }\n return JSON.stringify(obj1) === JSON.stringify(obj2);\n }\n\n // ===== ACTION METHODS =====\n\n /**\n * Dispatches a grid action by calling the action's own embedded handler.\n * @internal\n */\n triggerAction(action: GridAction, row: any, event: Event): void {\n event.stopPropagation();\n action.handler(row);\n }\n\n /**\n * Checks if an action is disabled for a row.\n * @internal\n */\n isActionDisabled(action: GridAction, row: any): boolean {\n if (typeof action.disabled === 'function') {\n return action.disabled(row);\n }\n return action.disabled ?? false;\n }\n\n /**\n * Checks if an action is visible for a row.\n * @internal\n */\n isActionVisible(action: GridAction, row: any): boolean {\n if (action.visible === undefined) return true;\n if (typeof action.visible === 'function') {\n return action.visible(row);\n }\n return action.visible;\n }\n\n /**\n * Gets the tooltip text for an action.\n * @internal\n */\n getActionTooltip(action: GridAction, row: any): string {\n if (!action.tooltip) return '';\n if (typeof action.tooltip === 'function') {\n return action.tooltip(row);\n }\n return action.tooltip;\n }\n\n // ===== ROW EXPANSION METHODS =====\n\n /**\n * Toggles row expansion\n * @internal\n */\n toggleRowExpansion(row: any, event: Event): void {\n event.stopPropagation();\n if (!this.hasDetails()) return;\n\n const expanded = this.expandedRows();\n const isExpanded = expanded.has(row);\n\n if (isExpanded) {\n expanded.delete(row);\n this.onRowCollapse.emit(row);\n } else {\n expanded.add(row);\n this.onRowExpand.emit(row);\n }\n\n this.expandedRows.set(new Set(expanded));\n }\n\n /**\n * Checks if a row is expanded\n * @internal\n */\n isRowExpanded(row: any): boolean {\n return this.expandedRows().has(row);\n }\n\n // ===== DOWNLOAD METHODS =====\n\n /**\n * Handles download button click\n * @internal\n */\n handleDownload(): void {\n if (this.downloadMode === 'api') {\n this.onDownload.emit({\n format: this.downloadFormat,\n data: this.processedData(),\n columns: this.gridColumns(),\n });\n } else {\n this.downloadData();\n }\n }\n\n /**\n * Downloads table data directly (client-side)\n * @internal\n */\n private downloadData(): void {\n const data = this.processedData();\n const columns = this.gridColumns();\n const filename = this.downloadFilename || 'table-data';\n\n switch (this.downloadFormat) {\n case 'csv':\n this.downloadCSV(data, columns, filename);\n break;\n case 'json':\n this.downloadJSON(data, filename);\n break;\n case 'excel':\n // For Excel, we'll fall back to CSV with .xls extension\n // A full Excel implementation would require a library like xlsx\n this.downloadCSV(data, columns, filename, 'xls');\n break;\n }\n }\n\n /**\n * Downloads data as CSV\n * @internal\n */\n private downloadCSV(\n data: any[],\n columns: TableColumn[],\n filename: string,\n extension: string = 'csv',\n ): void {\n // Create CSV header\n const headers = columns\n .map((col) => {\n const escaped = String(col.header).replace(/\"/g, '\"\"');\n return escaped.includes(',') ||\n escaped.includes('\"') ||\n escaped.includes('\\n')\n ? `\"${escaped}\"`\n : escaped;\n })\n .join(',');\n\n // Create CSV rows\n const rows = data.map((row) => {\n return columns\n .map((col) => {\n const value = this.getCellValue(row, col.field);\n const formatted = this.formatCellValue(value, col);\n // Escape quotes and wrap in quotes if contains comma or quote\n const escaped = String(formatted).replace(/\"/g, '\"\"');\n return escaped.includes(',') ||\n escaped.includes('\"') ||\n escaped.includes('\\n')\n ? `\"${escaped}\"`\n : escaped;\n })\n .join(',');\n });\n\n // Combine header and rows\n const csv = [headers, ...rows].join('\\n');\n\n // Create and download file\n this.downloadFile(csv, `${filename}.${extension}`, 'text/csv');\n }\n\n /**\n * Downloads data as JSON\n * @internal\n */\n private downloadJSON(data: any[], filename: string): void {\n const json = JSON.stringify(data, null, 2);\n this.downloadFile(json, `${filename}.json`, 'application/json');\n }\n\n /**\n * Creates and triggers file download\n * @internal\n */\n private downloadFile(\n content: string,\n filename: string,\n mimeType: string,\n ): void {\n const blob = new Blob([content], { type: mimeType });\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n link.click();\n window.URL.revokeObjectURL(url);\n }\n\n // ===== COLUMN RESIZE METHODS =====\n\n /**\n * Starts column resize\n * @internal\n */\n onColumnResizeStart(event: MouseEvent, column: TableColumn): void {\n if (!this.resizableColumns) return;\n\n event.preventDefault();\n this.resizingColumn = column;\n this.resizeStartX = event.pageX;\n\n const widths = this.columnWidths();\n this.resizeStartWidth =\n widths[column.field] || this.getColumnDefaultWidth(column);\n }\n\n /**\n * Gets default column width\n * @internal\n */\n private getColumnDefaultWidth(column: TableColumn): number {\n if (column.width) {\n const match = column.width.match(/^(\\d+)px$/);\n if (match) return parseInt(match[1], 10);\n }\n return 150;\n }\n\n /**\n * Handles document mouse move for column resize\n * @internal\n */\n @HostListener('document:mousemove', ['$event'])\n onColumnResize(event: MouseEvent): void {\n if (!this.resizingColumn) return;\n\n const delta = event.pageX - this.resizeStartX;\n const newWidth = Math.max(50, this.resizeStartWidth + delta);\n\n this.columnWidths.update((widths) => ({\n ...widths,\n [this.resizingColumn!.field]: newWidth,\n }));\n }\n\n /**\n * Handles document mouse up to end column resize\n * @internal\n */\n @HostListener('document:mouseup')\n onColumnResizeEnd(): void {\n this.resizingColumn = null;\n }\n\n /**\n * Gets the width style for a column\n * @internal\n */\n getColumnWidth(column: TableColumn): string {\n const widths = this.columnWidths();\n if (widths[column.field]) {\n return `${widths[column.field]}px`;\n }\n return column.width || 'auto';\n }\n\n // ===== UTILITY METHODS =====\n\n /**\n * Gets CSS classes for the table\n * @internal\n */\n getTableClasses(): { [key: string]: boolean } {\n return {\n 'i-table': true,\n 'i-table--striped': this.striped,\n 'i-table--hoverable': this.hoverable,\n 'i-table--bordered': this.bordered,\n 'i-table--small': this.size === 'small',\n 'i-table--medium': this.size === 'medium',\n 'i-table--large': this.size === 'large',\n 'i-table--scrollable': this.scrollable || !!this.height,\n 'i-table--loading': this.loading,\n };\n }\n\n /**\n * Track by function for rows.\n * Must be an arrow property so that CDK virtual-scroll can call it as a\n * plain function reference without losing the component's `this` context.\n * @internal\n */\n trackByRow = (index: number, row: any): any => {\n if (this.dataKey) return row[this.dataKey];\n return row?.id ?? index;\n };\n\n /**\n * Track by function for columns\n * @internal\n */\n trackByColumn(index: number, column: TableColumn): string {\n return column.field;\n }\n\n // ===== COMPUTED LAYOUT HELPERS =====\n\n /**\n * Effective container height for the virtual scroll viewport.\n * Falls back to '400px' when no height is provided.\n * @internal\n */\n effectiveHeight = computed<string>(() => this.height || '400px');\n\n /**\n * Total column span used for empty-state and detail expansion cells.\n * @internal\n */\n totalColspan = computed<number>(() => {\n return (\n this.gridColumns().length +\n (this.selectionMode === 'multiple' ? 1 : 0) +\n (this.hasDetails() ? 2 : 0) + // expand column + detail-count column\n (this.gridActions().length > 0 ? 1 : 0)\n );\n });\n\n /**\n * Returns the number of detail rows for a given parent row.\n * Used to render the `(n)` count badge in the expand table.\n * @internal\n */\n getDetailRowCount(row: any): number {\n const details = this.grid().details;\n if (!details) return 0;\n return details.rows(row).length;\n }\n\n /**\n * Builds a `GridData` for the nested detail `<i-table>` of an expanded row.\n * @internal\n */\n getDetailGrid(row: any): GridData {\n const details = this.grid().details;\n if (!details) return { columns: [], rows: [] };\n return {\n columns: details.columns,\n rows: details.rows(row),\n actions: details.actions,\n };\n }\n\n /**\n * Scrolls to a specific index in the virtual scroll viewport\n * @param index - The index to scroll to\n * @param behavior - Scroll behavior ('auto' or 'smooth')\n */\n scrollToIndex(index: number, behavior: ScrollBehavior = 'auto'): void {\n this.virtualScrollViewport?.scrollToIndex(index, behavior);\n }\n\n /**\n * Scrolls to a specific offset in the virtual scroll viewport\n * @param offset - The offset in pixels to scroll to\n * @param behavior - Scroll behavior ('auto' or 'smooth')\n */\n scrollToOffset(offset: number, behavior: ScrollBehavior = 'auto'): void {\n this.virtualScrollViewport?.scrollToOffset(offset, behavior);\n }\n\n /**\n * Gets the total content size of the virtual scroll viewport\n * @returns The total content size in pixels\n */\n getVirtualScrollContentSize(): number {\n return this.virtualScrollViewport?.measureScrollOffset('bottom') ?? 0;\n }\n\n /**\n * Gets the current scroll offset of the virtual scroll viewport\n * @returns The current scroll offset in pixels\n */\n getVirtualScrollOffset(): number {\n return this.virtualScrollViewport?.measureScrollOffset() ?? 0;\n }\n}\n","<div class=\"i-table-wrapper\" [ngClass]=\"getTableClasses()\">\n <!-- Table Header: global filter + download -->\n @if (globalFilter || downloadable) {\n <div class=\"i-table-header\">\n <div class=\"i-table-header-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n <div class=\"i-table-header-end\">\n @if (globalFilter) {\n <div class=\"i-table-global-filter\">\n <i-input-text\n [useFloatLabel]=\"false\"\n placeholder=\"Search...\"\n [ngModel]=\"globalFilterValue()\"\n (ngModelChange)=\"onGlobalFilterInput($event)\"\n [fluid]=\"false\"\n [icon]=\"'pi pi-search'\"\n ></i-input-text>\n </div>\n }\n @if (downloadable) {\n <div class=\"i-table-download\">\n <i-button\n severity=\"secondary\"\n [text]=\"true\"\n size=\"small\"\n icon=\"pi pi-download\"\n label=\"Download\"\n (clicked)=\"handleDownload()\"\n ></i-button>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Loading Overlay -->\n @if (loading) {\n <div class=\"i-table-loading-overlay\">\n <i class=\"pi pi-spin pi-spinner i-table-loading-icon\"></i>\n </div>\n }\n\n <!-- ================================================================\n PATH A — Detail-expandable table\n Uses a standard scrollable container so that nested <i-table>\n components can expand inline below their parent rows.\n ================================================================ -->\n @if (hasDetails()) {\n <div\n class=\"i-table-container i-table-container--scrollable\"\n [style.max-height]=\"effectiveHeight()\"\n >\n <table class=\"i-table\">\n <thead>\n <!-- Column Filter Row -->\n @if (filterable) {\n <tr class=\"i-table-filter-row\">\n @if (selectionMode === \"multiple\") {\n <th class=\"i-table-selection-header\"></th>\n }\n <th class=\"i-table-expand-header\"></th>\n @for (\n column of gridColumns();\n track trackByColumn($index, column)\n ) {\n @if (column.filterable !== false) {\n <th [style.width]=\"getColumnWidth(column)\">\n <input\n type=\"text\"\n class=\"i-table-column-filter\"\n placeholder=\"Filter...\"\n [ngModel]=\"columnFilters()[column.field] || ''\"\n (ngModelChange)=\"\n onColumnFilterInput(column.field, $event)\n \"\n />\n </th>\n } @else {\n <th [style.width]=\"getColumnWidth(column)\"></th>\n }\n }\n <th class=\"i-table-detail-count-header\"></th>\n @if (gridActions().length > 0) {\n <th class=\"i-table-actions-header\"></th>\n }\n </tr>\n }\n\n <!-- Column Headers -->\n <tr>\n @if (selectionMode === \"multiple\") {\n <th class=\"i-table-selection-header\">\n <i-checkbox\n [checked]=\"areAllRowsSelected()\"\n [indeterminate]=\"areSomeRowsSelected()\"\n (onChange)=\"toggleAllSelection()\"\n ></i-checkbox>\n </th>\n }\n <th class=\"i-table-expand-header\"></th>\n @for (\n column of gridColumns();\n track trackByColumn($index, column)\n ) {\n <th\n [style.width]=\"getColumnWidth(column)\"\n [style.text-align]=\"column.align || 'left'\"\n [class.i-table-sortable-column]=\"sortable && column.sortable\"\n [class.i-table-sorted]=\"sortField === column.field\"\n (click)=\"onSortColumn(column)\"\n >\n <div class=\"i-table-header-content\">\n <span class=\"i-table-header-text\">{{ column.header }}</span>\n @if (sortable && column.sortable) {\n <i\n [class]=\"getSortIcon(column)\"\n class=\"i-table-sort-icon\"\n ></i>\n }\n </div>\n @if (resizableColumns) {\n <span\n class=\"i-table-column-resizer\"\n (mousedown)=\"onColumnResizeStart($event, column)\"\n ></span>\n }\n </th>\n }\n <th class=\"i-table-detail-count-header\"></th>\n @if (gridActions().length > 0) {\n <th class=\"i-table-actions-header\">Actions</th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (processedData().length === 0) {\n <tr class=\"i-table-empty-row\">\n <td [attr.colspan]=\"totalColspan()\">\n <i-no-content />\n </td>\n </tr>\n }\n @for (row of processedData(); track trackByRow($index, row)) {\n <!-- Parent row -->\n <tr\n [class.i-table-row-odd]=\"$odd\"\n [class.i-table-row-selected]=\"isRowSelected(row)\"\n (click)=\"toggleRowSelection(row)\"\n >\n @if (selectionMode === \"multiple\") {\n <td class=\"i-table-selection-cell\">\n <i-checkbox\n [checked]=\"isRowSelected(row)\"\n (onChange)=\"toggleRowSelection(row)\"\n (click)=\"$event.stopPropagation()\"\n ></i-checkbox>\n </td>\n }\n <td class=\"i-table-expand-cell\">\n <i-button\n severity=\"secondary\"\n [text]=\"true\"\n size=\"xtra-small\"\n [icon]=\"\n isRowExpanded(row)\n ? 'pi pi-chevron-down'\n : 'pi pi-chevron-right'\n \"\n (clicked)=\"toggleRowExpansion(row, $event)\"\n ></i-button>\n </td>\n @for (\n column of gridColumns();\n track trackByColumn($index, column)\n ) {\n <td\n [style.text-align]=\"column.align || 'left'\"\n [style.width]=\"getColumnWidth(column)\"\n [class]=\"\n getCellSeverity(row, column)\n ? 'i-table-cell-' + getCellSeverity(row, column)\n : ''\n \"\n >\n @if (isIconColumn(column)) {\n <i\n [class]=\"getCellIcon(row, column)\"\n [class.i-severity-icon]=\"getCellSeverity(row, column)\"\n [style.font-size]=\"column.iconSize || '1rem'\"\n ></i>\n } @else if (isListColumn(column)) {\n <div class=\"i-table-list-cell\">\n @for (item of getCellListItems(row, column); track item) {\n <i-chip [label]=\"item\"></i-chip>\n }\n </div>\n } @else {\n <span\n [class.i-severity-text]=\"getCellSeverity(row, column)\"\n >\n {{\n formatCellValue(getCellValue(row, column.field), column)\n }}\n </span>\n }\n </td>\n }\n <td class=\"i-table-detail-count-cell\">\n ({{ getDetailRowCount(row) }})\n </td>\n @if (gridActions().length > 0) {\n <td class=\"i-table-actions-cell\">\n <div class=\"i-table-actions\">\n @for (action of gridActions(); track action.id) {\n <i-button\n [severity]=\"action.severity || 'secondary'\"\n [text]=\"true\"\n size=\"small\"\n [icon]=\"action.icon || ''\"\n [disabled]=\"isActionDisabled(action, row)\"\n [iTooltip]=\"getActionTooltip(action, row)\"\n [class.i-action-hidden]=\"!isActionVisible(action, row)\"\n (clicked)=\"triggerAction(action, row, $event)\"\n >\n @if (action.label) {\n {{ action.label }}\n }\n </i-button>\n }\n </div>\n </td>\n }\n </tr>\n\n <!-- Detail expansion row -->\n @if (isRowExpanded(row)) {\n <tr class=\"i-table-expanded-row\">\n <td\n [attr.colspan]=\"totalColspan()\"\n class=\"i-table-expanded-cell\"\n >\n <div class=\"i-table-expanded-content\">\n <i-table\n [grid]=\"getDetailGrid(row)\"\n [sortable]=\"sortable\"\n [filterable]=\"filterable\"\n [selectionMode]=\"selectionMode\"\n [selection]=\"selection\"\n [striped]=\"striped\"\n [hoverable]=\"hoverable\"\n [bordered]=\"bordered\"\n [size]=\"size\"\n [dataKey]=\"dataKey\"\n [resizableColumns]=\"resizableColumns\"\n (onSort)=\"onSort.emit($event)\"\n (onFilter)=\"onFilter.emit($event)\"\n (onSelectionChange)=\"onSelectionChange.emit($event)\"\n (selectionChange)=\"selectionChange.emit($event)\"\n (onRowSelect)=\"onRowSelect.emit($event)\"\n (onRowUnselect)=\"onRowUnselect.emit($event)\"\n ></i-table>\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n } @else if (virtualScroll) {\n <!-- ================================================================\n PATH B — CDK Virtual Scroll (div-based rows)\n Use only for large row counts (≥ ~500 rows). Uses flex <div> rows\n so CDK's wrapper <div> does not end up inside <tbody> (invalid HTML).\n ================================================================ -->\n <div\n class=\"i-table-container i-table-container--scrollable i-table-container--virtual-scroll\"\n [style.height]=\"effectiveHeight()\"\n >\n <!-- Sticky header — flex rows that mirror the virtual body rows -->\n <div class=\"i-table-virtual-header\">\n @if (filterable) {\n <div class=\"i-table-virtual-row i-table-filter-row\">\n @if (selectionMode === \"multiple\") {\n <div class=\"i-table-virtual-cell i-table-selection-header\"></div>\n }\n @for (\n column of gridColumns();\n track trackByColumn($index, column)\n ) {\n @if (column.filterable !== false) {\n <div\n class=\"i-table-virtual-cell\"\n [style.width]=\"\n getColumnWidth(column) !== 'auto'\n ? getColumnWidth(column)\n : null\n \"\n [style.flex]=\"getColumnWidth(column) === 'auto' ? '1' : null\"\n >\n <input\n type=\"text\"\n class=\"i-table-column-filter\"\n placeholder=\"Filter...\"\n [ngModel]=\"columnFilters()[column.field] || ''\"\n (ngModelChange)=\"onColumnFilterInput(column.field, $event)\"\n />\n </div>\n } @else {\n <div\n class=\"i-table-virtual-cell\"\n [style.width]=\"\n getColumnWidth(column) !== 'auto'\n ? getColumnWidth(column)\n : null\n \"\n [style.flex]=\"getColumnWidth(column) === 'auto' ? '1' : null\"\n ></div>\n }\n }\n @if (gridActions().length > 0) {\n <div class=\"i-table-virtual-cell i-table-actions-header\"></div>\n }\n </div>\n }\n <div class=\"i-table-virtual-row i-table-header-row\">\n @if (selectionMode === \"multiple\") {\n <div class=\"i-table-virtual-cell i-table-selection-header\">\n <i-checkbox\n [checked]=\"areAllRowsSelected()\"\n [indeterminate]=\"areSomeRowsSelected()\"\n (onChange)=\"toggleAllSelection()\"\n ></i-checkbox>\n </div>\n }\n @for (column of gridColumns(); track trackByColumn($index, column)) {\n <div\n class=\"i-table-virtual-cell i-table-header-cell\"\n [style.width]=\"\n getColumnWidth(column) !== 'auto'\n ? getColumnWidth(column)\n : null\n \"\n [style.flex]=\"getColumnWidth(column) === 'auto' ? '1' : null\"\n [style.text-align]=\"column.align || 'left'\"\n [class.i-table-sortable-column]=\"sortable && column.sortable\"\n [class.i-table-sorted]=\"sortField === column.field\"\n (click)=\"onSortColumn(column)\"\n >\n <div class=\"i-table-header-content\">\n <span class=\"i-table-header-text\">{{ column.header }}</span>\n @if (sortable && column.sortable) {\n <i\n [class]=\"getSortIcon(column)\"\n class=\"i-table-sort-icon\"\n ></i>\n }\n </div>\n </div>\n }\n @if (gridActions().length > 0) {\n <div class=\"i-table-virtual-cell i-table-actions-header\">\n Actions\n </div>\n }\n </div>\n </div>\n\n <!-- Virtual Scroll Viewport — *cdkVirtualFor on <div>, not <tr> -->\n <cdk-virtual-scroll-viewport\n [itemSize]=\"virtualScrollItemSize\"\n [minBufferPx]=\"virtualScrollMinBufferPx\"\n [maxBufferPx]=\"virtualScrollMaxBufferPx\"\n class=\"i-table-virtual-viewport\"\n >\n @if (processedData().length === 0) {\n <div class=\"i-table-virtual-row i-table-empty-row\">\n <div\n class=\"i-table-virtual-cell\"\n style=\"flex: 1; text-align: center; padding: 40px 16px\"\n >\n <i-no-content />\n </div>\n </div>\n }\n <div\n *cdkVirtualFor=\"\n let row of processedData();\n let rowIndex = index;\n trackBy: trackByRow\n \"\n class=\"i-table-virtual-row\"\n [style.height.px]=\"virtualScrollItemSize\"\n [class.i-table-row-odd]=\"rowIndex % 2 !== 0\"\n [class.i-table-row-selected]=\"isRowSelected(row)\"\n (click)=\"toggleRowSelection(row)\"\n >\n @if (selectionMode === \"multiple\") {\n <div class=\"i-table-virtual-cell i-table-selection-cell\">\n <i-checkbox\n [checked]=\"isRowSelected(row)\"\n (onChange)=\"toggleRowSelection(row)\"\n (click)=\"$event.stopPropagation()\"\n ></i-checkbox>\n </div>\n }\n @for (column of gridColumns(); track trackByColumn($index, column)) {\n <div\n class=\"i-table-virtual-cell\"\n [style.width]=\"\n getColumnWidth(column) !== 'auto'\n ? getColumnWidth(column)\n : null\n \"\n [style.flex]=\"getColumnWidth(column) === 'auto' ? '1' : null\"\n [style.text-align]=\"column.align || 'left'\"\n [ngClass]=\"\n getCellSeverity(row, column)\n ? 'i-table-cell-' + getCellSeverity(row, column)\n : ''\n \"\n >\n @if (isIconColumn(column)) {\n <i\n [class]=\"getIconClasses(row, column)\"\n [style.font-size]=\"column.iconSize || '1rem'\"\n ></i>\n } @else if (isListColumn(column)) {\n <div class=\"i-table-list-cell\">\n @for (item of getCellListItems(row, column); track item) {\n <i-chip [label]=\"item\"></i-chip>\n }\n </div>\n } @else {\n <span [class.i-severity-text]=\"getCellSeverity(row, column)\">\n {{ formatCellValue(getCellValue(row, column.field), column) }}\n </span>\n }\n </div>\n }\n @if (gridActions().length > 0) {\n <div class=\"i-table-virtual-cell i-table-actions-cell\">\n <div class=\"i-table-actions\">\n @for (action of gridActions(); track action.id) {\n <i-button\n [severity]=\"action.severity || 'secondary'\"\n [text]=\"true\"\n size=\"small\"\n [icon]=\"action.icon || ''\"\n [disabled]=\"isActionDisabled(action, row)\"\n [iTooltip]=\"getActionTooltip(action, row)\"\n [class.i-action-hidden]=\"!isActionVisible(action, row)\"\n (clicked)=\"triggerAction(action, row, $event)\"\n >\n @if (action.label) {\n {{ action.label }}\n }\n </i-button>\n }\n </div>\n </div>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n </div>\n } @else {\n <!-- ================================================================\n PATH C — Regular scrollable table\n Default for small/medium datasets and nested detail tables.\n Uses a plain overflow container with a @for loop — no CDK needed.\n ================================================================ -->\n <div\n class=\"i-table-container i-table-container--scrollable\"\n [style.max-height]=\"effectiveHeight()\"\n >\n <table class=\"i-table\">\n <thead>\n <!-- Column Filter Row -->\n @if (filterable) {\n <tr class=\"i-table-filter-row\">\n @if (selectionMode === \"multiple\") {\n <th class=\"i-table-selection-header\"></th>\n }\n @for (\n column of gridColumns();\n track trackByColumn($index, column)\n ) {\n @if (column.filterable !== false) {\n <th [style.width]=\"getColumnWidth(column)\">\n <input\n type=\"text\"\n class=\"i-table-column-filter\"\n placeholder=\"Filter...\"\n [ngModel]=\"columnFilters()[column.field] || ''\"\n (ngModelChange)=\"\n onColumnFilterInput(column.field, $event)\n \"\n />\n </th>\n } @else {\n <th [style.width]=\"getColumnWidth(column)\"></th>\n }\n }\n @if (gridActions().length > 0) {\n <th class=\"i-table-actions-header\"></th>\n }\n </tr>\n }\n\n <!-- Column Headers -->\n <tr>\n @if (selectionMode === \"multiple\") {\n <th class=\"i-table-selection-header\">\n <i-checkbox\n [checked]=\"areAllRowsSelected()\"\n [indeterminate]=\"areSomeRowsSelected()\"\n (onChange)=\"toggleAllSelection()\"\n ></i-checkbox>\n </th>\n }\n @for (\n column of gridColumns();\n track trackByColumn($index, column)\n ) {\n <th\n [style.width]=\"getColumnWidth(column)\"\n [style.text-align]=\"column.align || 'left'\"\n [class.i-table-sortable-column]=\"sortable && column.sortable\"\n [class.i-table-sorted]=\"sortField === column.field\"\n (click)=\"onSortColumn(column)\"\n >\n <div class=\"i-table-header-content\">\n <span class=\"i-table-header-text\">{{ column.header }}</span>\n @if (sortable && column.sortable) {\n <i\n [class]=\"getSortIcon(column)\"\n class=\"i-table-sort-icon\"\n ></i>\n }\n </div>\n @if (resizableColumns) {\n <span\n class=\"i-table-column-resizer\"\n (mousedown)=\"onColumnResizeStart($event, column)\"\n ></span>\n }\n </th>\n }\n @if (gridActions().length > 0) {\n <th class=\"i-table-actions-header\">Actions</th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (processedData().length === 0) {\n <tr class=\"i-table-empty-row\">\n <td [attr.colspan]=\"totalColspan()\">\n <i-no-content />\n </td>\n </tr>\n }\n @for (row of processedData(); track trackByRow($index, row)) {\n <tr\n [class.i-table-row-odd]=\"$odd\"\n [class.i-table-row-selected]=\"isRowSelected(row)\"\n (click)=\"toggleRowSelection(row)\"\n >\n @if (selectionMode === \"multiple\") {\n <td class=\"i-table-selection-cell\">\n <i-checkbox\n [checked]=\"isRowSelected(row)\"\n (onChange)=\"toggleRowSelection(row)\"\n (click)=\"$event.stopPropagation()\"\n ></i-checkbox>\n </td>\n }\n @for (\n column of gridColumns();\n track trackByColumn($index, column)\n ) {\n <td\n [style.text-align]=\"column.align || 'left'\"\n [style.width]=\"getColumnWidth(column)\"\n [class]=\"\n getCellSeverity(row, column)\n ? 'i-table-cell-' + getCellSeverity(row, column)\n : ''\n \"\n >\n @if (isIconColumn(column)) {\n <i\n [class]=\"getIconClasses(row, column)\"\n [style.font-size]=\"column.iconSize || '1rem'\"\n ></i>\n } @else if (isListColumn(column)) {\n <div class=\"i-table-list-cell\">\n @for (item of getCellListItems(row, column); track item) {\n <i-chip [label]=\"item\"></i-chip>\n }\n </div>\n } @else {\n <span\n [class.i-severity-text]=\"getCellSeverity(row, column)\"\n >\n {{\n formatCellValue(getCellValue(row, column.field), column)\n }}\n </span>\n }\n </td>\n }\n @if (gridActions().length > 0) {\n <td class=\"i-table-actions-cell\">\n <div class=\"i-table-actions\">\n @for (action of gridActions(); track action.id) {\n <i-button\n [severity]=\"action.severity || 'secondary'\"\n [text]=\"true\"\n size=\"small\"\n [icon]=\"action.icon || ''\"\n [disabled]=\"isActionDisabled(action, row)\"\n [iTooltip]=\"getActionTooltip(action, row)\"\n [class.i-action-hidden]=\"!isActionVisible(action, row)\"\n (clicked)=\"triggerAction(action, row, $event)\"\n >\n @if (action.label) {\n {{ action.label }}\n }\n </i-button>\n }\n </div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n</div>\n","import {\n Component,\n Input,\n AfterViewInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ViewChildren,\n ElementRef,\n QueryList,\n ChangeDetectorRef,\n inject,\n} from '@angular/core';\nimport { Chart, ChartConfiguration, registerables } from 'chart.js';\nimport {\n IChartData,\n IChartDataSet,\n IChartDisplay,\n IChartType,\n IChartTypeExtended,\n} from './chart.interfaces';\n\n// Register all Chart.js components\nChart.register(...registerables);\n\n/**\n * Built-in color palette for chart colors.\n * Users can reference these colors using shorthand like '--blue-500' or direct hex values.\n * @internal\n */\nconst CHART_COLOR_PALETTE: Record<string, Record<string | number, string>> = {\n blue: {\n 50: '#f5f9ff',\n 100: '#d0e1fd',\n 200: '#abc9fb',\n 300: '#85b2f9',\n 400: '#609af8',\n 500: '#3b82f6',\n 600: '#326fd1',\n 700: '#295bac',\n 800: '#204887',\n 900: '#183462',\n },\n green: {\n 50: '#f4fcf7',\n 100: '#caf1d8',\n 200: '#a0e6ba',\n 300: '#76db9b',\n 400: '#4cd07d',\n 500: '#22c55e',\n 600: '#1da750',\n 700: '#188a42',\n 800: '#136c34',\n 900: '#0e4f26',\n },\n yellow: {\n 50: '#fefbf3',\n 100: '#faedc4',\n 200: '#f6de95',\n 300: '#f2d066',\n 400: '#eec137',\n 500: '#eab308',\n 600: '#c79807',\n 700: '#a47d06',\n 800: '#816204',\n 900: '#5e4803',\n },\n cyan: {\n 50: '#f3fbfd',\n 100: '#c3edf5',\n 200: '#94e0ed',\n 300: '#65d2e4',\n 400: '#35c4dc',\n 500: '#06b6d4',\n 600: '#059bb4',\n 700: '#047f94',\n 800: '#036475',\n 900: '#024955',\n },\n pink: {\n 50: '#fef6fa',\n 100: '#fad3e7',\n 200: '#f7b0d3',\n 300: '#f38ec0',\n 400: '#f06bac',\n 500: '#ec4899',\n 600: '#c93d82',\n 700: '#a5326b',\n 800: '#822854',\n 900: '#5e1d3d',\n },\n indigo: {\n 50: '#f7f7fe',\n 100: '#dadafc',\n 200: '#bcbdf9',\n 300: '#9ea0f6',\n 400: '#8183f4',\n 500: '#6366f1',\n 600: '#5457cd',\n 700: '#4547a9',\n 800: '#363885',\n 900: '#282960',\n },\n teal: {\n 50: '#f3fbfb',\n 100: '#c7eeea',\n 200: '#9ae0d9',\n 300: '#6dd3c8',\n 400: '#41c5b7',\n 500: '#14b8a6',\n 600: '#119c8d',\n 700: '#0e8174',\n 800: '#0b655b',\n 900: '#084a42',\n },\n orange: {\n 50: '#fff7ed',\n 100: '#ffedd5',\n 200: '#fed7aa',\n 300: '#fdba74',\n 400: '#fb923c',\n 500: '#f59e0b',\n 600: '#d97706',\n 700: '#b45309',\n 800: '#92400e',\n 900: '#78350f',\n },\n bluegray: {\n 50: '#f7f8f9',\n 100: '#dadee3',\n 200: '#bcc3cd',\n 300: '#9fa9b7',\n 400: '#818ea1',\n 500: '#64748b',\n 600: '#556376',\n 700: '#465161',\n 800: '#37404c',\n 900: '#282e38',\n },\n purple: {\n 50: '#fbf7ff',\n 100: '#ead6fd',\n 200: '#dab6fc',\n 300: '#c996fa',\n 400: '#b975f9',\n 500: '#a855f7',\n 600: '#8f48d2',\n 700: '#763cad',\n 800: '#5c2f88',\n 900: '#432263',\n },\n red: {\n 50: '#fff5f5',\n 100: '#ffd0ce',\n 200: '#ffaca7',\n 300: '#ff8780',\n 400: '#ff6259',\n 500: '#ff3d32',\n 600: '#d9342b',\n 700: '#b32b23',\n 800: '#8c221c',\n 900: '#661814',\n },\n gray: {\n 0: '#ffffff',\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#111827',\n 950: '#020617',\n },\n};\n\n/**\n * Chart Component\n *\n * A Chart.js-based chart component for displaying various chart types.\n * Supports multiple charts in a responsive grid layout.\n *\n * @example\n * ```html\n * <i-chart\n * [charts]=\"myCharts\"\n * height=\"25rem\">\n * </i-chart>\n * ```\n *\n * @example\n * ```typescript\n * myCharts: IChartData[] = [\n * {\n * chartId: 'sales-chart',\n * chartType: 'bar',\n * labels: ['Jan', 'Feb', 'Mar'],\n * dataSets: [{\n * label: 'Sales',\n * data: [100, 200, 150],\n * backgroundColors: ['--blue-500', '--green-500', '--orange-500']\n * }]\n * }\n * ];\n * ```\n */\n@Component({\n selector: 'i-chart',\n standalone: true,\n imports: [],\n templateUrl: './chart.component.html',\n styleUrl: './chart.component.scss',\n})\nexport class IChart implements AfterViewInit, OnDestroy, OnChanges {\n /**\n * Array of chart data objects to render\n */\n @Input() charts: IChartData[] = [];\n\n /**\n * Default height for charts\n * @default '20rem'\n */\n @Input() height = '20rem';\n\n /**\n * Whether charts should be responsive\n * @default true\n */\n @Input() responsive = true;\n\n /**\n * Reference to all canvas elements\n * @internal\n */\n @ViewChildren('chartCanvas')\n canvasElements!: QueryList<ElementRef<HTMLCanvasElement>>;\n\n /**\n * Array of display configurations for each chart\n * @internal\n */\n chartDisplays: IChartDisplay[] = [];\n\n /**\n * Chart.js instances for cleanup\n * @internal\n */\n private chartInstances: Chart[] = [];\n\n /**\n * Flag to track if component has initialized\n * @internal\n */\n private initialized = false;\n\n /**\n * Reference to pending animation frame for cleanup\n * @internal\n */\n private pendingAnimationFrame: number | null = null;\n\n /**\n * Change detector reference for manual change detection\n * @internal\n */\n private cdr = inject(ChangeDetectorRef);\n\n /**\n * Reference to the host element\n * @internal\n */\n private el = inject(ElementRef);\n\n ngAfterViewInit(): void {\n this.initialized = true;\n this.initializeCharts();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['charts'] && this.initialized) {\n this.destroyCharts();\n this.initializeCharts();\n }\n }\n\n ngOnDestroy(): void {\n this.cancelPendingInitialization();\n this.destroyCharts();\n }\n\n /**\n * Cancel any pending chart initialization\n * @internal\n */\n private cancelPendingInitialization(): void {\n if (this.pendingAnimationFrame !== null) {\n cancelAnimationFrame(this.pendingAnimationFrame);\n this.pendingAnimationFrame = null;\n }\n }\n\n /**\n * Initialize all charts\n * @internal\n */\n private initializeCharts(): void {\n this.chartDisplays = this.charts.map((chart, index) =>\n this.transformToChartDisplay(chart, index)\n );\n\n // Cancel any pending initialization\n this.cancelPendingInitialization();\n\n // Trigger change detection to ensure DOM is updated with canvas elements\n this.cdr.detectChanges();\n\n // Use requestAnimationFrame for proper timing after view update\n this.pendingAnimationFrame = requestAnimationFrame(() => {\n this.pendingAnimationFrame = null;\n this.createChartInstances();\n });\n }\n\n /**\n * Create Chart.js instances for all canvas elements\n * @internal\n */\n private createChartInstances(): void {\n this.canvasElements.forEach((canvasRef, index) => {\n const chartDisplay = this.chartDisplays[index];\n if (chartDisplay && canvasRef?.nativeElement) {\n const chartInstance = this.createChartInstance(\n canvasRef.nativeElement,\n chartDisplay\n );\n this.chartInstances.push(chartInstance);\n }\n });\n }\n\n /**\n * Destroy all chart instances\n * @internal\n */\n private destroyCharts(): void {\n this.chartInstances.forEach((chart) => {\n chart.destroy();\n });\n this.chartInstances = [];\n this.chartDisplays = [];\n }\n\n /**\n * Create a Chart.js instance\n * @internal\n */\n private createChartInstance(\n canvas: HTMLCanvasElement,\n display: IChartDisplay\n ): Chart {\n const config: ChartConfiguration = {\n type: display.type,\n data: display.data as ChartConfiguration['data'],\n options: display.options as ChartConfiguration['options'],\n };\n\n return new Chart(canvas, config);\n }\n\n /**\n * Transform IChartData to IChartDisplay\n * @internal\n */\n private transformToChartDisplay(\n chart: IChartData,\n index: number\n ): IChartDisplay {\n // Read resolved CSS variables from the host element\n // This picks up the values defined in chart.component.scss which map to the global theme\n const computedStyle = getComputedStyle(this.el.nativeElement);\n const documentStyle = getComputedStyle(document.documentElement);\n\n const getStyle = (name: string, fallback: string) => {\n const value = computedStyle.getPropertyValue(name).trim();\n return value && !value.startsWith('var(') ? value : fallback;\n };\n\n // Use the chart-specific variables defined in SCSS\n const textColor = getStyle('--chart-text-color', '#334155');\n const textColorSecondary = getStyle('--chart-text-secondary', '#64748b');\n const surfaceBorder = getStyle('--chart-grid-color', '#e2e8f0');\n\n const chartType = this.mapChartType(chart.chartType);\n const height = this.getChartHeight(chart.chartType);\n const options = this.getChartOptions(\n chart.chartType,\n textColor,\n textColorSecondary,\n surfaceBorder\n );\n\n const data = {\n labels: chart.labels,\n datasets: chart.dataSets.map((dataset) =>\n this.transformDataset(dataset, documentStyle)\n ),\n };\n\n return {\n id: chart.chartId || `chart-${index}`,\n type: chartType,\n data,\n options,\n height,\n };\n }\n\n /**\n * Map custom chart type strings to Chart.js types\n * @internal\n */\n private mapChartType(chartType: IChartTypeExtended): IChartType {\n const typeMap: Record<IChartTypeExtended, IChartType> = {\n bar: 'bar',\n 'bar-stack': 'bar',\n 'bar-large': 'bar',\n 'bar-horizontal': 'bar',\n pie: 'pie',\n doughnut: 'doughnut',\n line: 'line',\n scatter: 'scatter',\n bubble: 'bubble',\n polarArea: 'polarArea',\n radar: 'radar',\n };\n\n return typeMap[chartType] || 'bar';\n }\n\n /**\n * Get chart height based on chart type\n * @internal\n */\n private getChartHeight(chartType: IChartTypeExtended): string {\n if (chartType === 'bar-large') {\n return '40rem';\n }\n return this.height;\n }\n\n /**\n * Get chart options based on chart type\n * @internal\n */\n private getChartOptions(\n chartType: IChartTypeExtended,\n textColor: string,\n textColorSecondary: string,\n surfaceBorder: string\n ): unknown {\n const baseOptions = {\n maintainAspectRatio: false,\n responsive: this.responsive,\n plugins: {\n legend: {\n labels: {\n color: textColor,\n },\n },\n },\n };\n\n switch (chartType) {\n case 'bar':\n return {\n ...baseOptions,\n scales: this.getBarScales(textColorSecondary, surfaceBorder),\n };\n\n case 'bar-stack':\n return {\n ...baseOptions,\n scales: this.getStackedBarScales(textColorSecondary, surfaceBorder),\n };\n\n case 'bar-large':\n return {\n ...baseOptions,\n scales: this.getBarScales(textColorSecondary, surfaceBorder),\n };\n\n case 'bar-horizontal':\n return {\n ...baseOptions,\n indexAxis: 'y' as const,\n scales: this.getBarScales(textColorSecondary, surfaceBorder),\n };\n\n case 'pie':\n case 'doughnut':\n return {\n ...baseOptions,\n plugins: {\n legend: {\n labels: {\n color: textColor,\n },\n position: 'bottom' as const,\n },\n },\n };\n\n case 'line':\n return {\n ...baseOptions,\n scales: this.getBarScales(textColorSecondary, surfaceBorder),\n };\n\n case 'radar':\n return {\n ...baseOptions,\n plugins: {\n legend: {\n labels: {\n color: textColor,\n },\n },\n },\n scales: {\n r: {\n grid: {\n color: surfaceBorder,\n },\n pointLabels: {\n color: textColorSecondary,\n },\n },\n },\n };\n\n case 'polarArea':\n return {\n ...baseOptions,\n scales: {\n r: {\n grid: {\n color: surfaceBorder,\n },\n },\n },\n };\n\n default:\n return baseOptions;\n }\n }\n\n /**\n * Get scales configuration for bar charts\n * @internal\n */\n private getBarScales(textColorSecondary: string, surfaceBorder: string) {\n return {\n x: {\n ticks: {\n color: textColorSecondary,\n },\n grid: {\n color: surfaceBorder,\n },\n },\n y: {\n ticks: {\n color: textColorSecondary,\n },\n grid: {\n color: surfaceBorder,\n },\n },\n };\n }\n\n /**\n * Get scales configuration for stacked bar charts\n * @internal\n */\n private getStackedBarScales(\n textColorSecondary: string,\n surfaceBorder: string\n ) {\n return {\n x: {\n stacked: true,\n ticks: {\n color: textColorSecondary,\n },\n grid: {\n color: surfaceBorder,\n },\n },\n y: {\n stacked: true,\n ticks: {\n color: textColorSecondary,\n },\n grid: {\n color: surfaceBorder,\n },\n },\n };\n }\n\n /**\n * Transform dataset with resolved colors\n * @internal\n */\n private transformDataset(\n dataset: IChartDataSet,\n documentStyle: CSSStyleDeclaration\n ) {\n return {\n label: dataset.label,\n data: dataset.data,\n backgroundColor: dataset.backgroundColors.map((color) => {\n const resolvedColor = this.resolveColor(color, documentStyle);\n return this.addTransparency(resolvedColor);\n }),\n borderColor: dataset.backgroundColors.map((color) =>\n this.resolveColor(color, documentStyle)\n ),\n borderWidth: 1,\n };\n }\n\n /**\n * Resolve color to hex value. Supports:\n * - Direct hex colors (e.g., '#ff0000')\n * - RGB/RGBA colors (e.g., 'rgb(255, 0, 0)', 'rgba(255, 0, 0, 0.5)')\n * - Built-in palette shorthand (e.g., '--blue-500', '--green-400')\n * - CSS custom properties (e.g., '--my-custom-color')\n * @internal\n */\n private resolveColor(\n color: string,\n documentStyle: CSSStyleDeclaration\n ): string {\n // If it's already a hex color or rgb/rgba, return as-is\n if (\n color.startsWith('#') ||\n color.startsWith('rgb(') ||\n color.startsWith('rgba(')\n ) {\n return color;\n }\n\n // Handle CSS variable format (--color-name or --color-shade)\n if (color.startsWith('--')) {\n // Try to resolve from built-in palette first (e.g., --blue-500)\n const paletteColor = this.resolveFromPalette(color);\n if (paletteColor) {\n return paletteColor;\n }\n\n // Fall back to CSS custom property lookup\n const cssValue = documentStyle.getPropertyValue(color).trim();\n if (cssValue) {\n return cssValue;\n }\n\n // If CSS variable is not found, return a fallback color\n return '#64748b'; // Default gray-500\n }\n\n return color;\n }\n\n /**\n * Resolve color from built-in palette using shorthand format (e.g., '--blue-500')\n * @internal\n */\n private resolveFromPalette(colorVar: string): string | null {\n // Remove leading '--' and split by '-'\n const colorName = colorVar.substring(2); // Remove '--'\n const lastDashIndex = colorName.lastIndexOf('-');\n\n if (lastDashIndex === -1) {\n return null;\n }\n\n const name = colorName.substring(0, lastDashIndex);\n const shade = colorName.substring(lastDashIndex + 1);\n\n const colorGroup = CHART_COLOR_PALETTE[name];\n if (colorGroup) {\n // Try as string key first, then as number for numeric shades like 500\n if (colorGroup[shade]) {\n return colorGroup[shade];\n }\n const numericShade = parseInt(shade, 10);\n if (!isNaN(numericShade) && colorGroup[numericShade]) {\n return colorGroup[numericShade];\n }\n }\n\n return null;\n }\n\n /**\n * Add transparency to a color. Supports hex and rgb/rgba formats.\n * @internal\n */\n private addTransparency(color: string): string {\n // If it's a hex color, add transparency\n if (color.startsWith('#')) {\n return color + 'bf'; // ~75% opacity\n }\n // If it's an rgb color, convert to rgba with transparency\n if (color.startsWith('rgb(')) {\n // Extract the rgb values and convert to rgba\n const rgbMatch = color.match(\n /rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/\n );\n if (rgbMatch) {\n return `rgba(${rgbMatch[1]}, ${rgbMatch[2]}, ${rgbMatch[3]}, 0.75)`;\n }\n }\n // If it's already rgba, leave as-is (user specified their own alpha)\n return color;\n }\n\n /**\n * Get the height style for a chart display\n * @param display - The chart display configuration\n * @returns The height CSS value\n */\n getChartHeightStyle(display: IChartDisplay): string {\n return display.height || this.height;\n }\n\n /**\n * Get the number of active chart instances (for testing)\n * @returns The count of active chart instances\n */\n getChartInstanceCount(): number {\n return this.chartInstances.length;\n }\n}\n","<div class=\"i-charts-container\">\n @for (chartDisplay of chartDisplays; track chartDisplay.id) {\n <div class=\"i-chart-item\" [style.height]=\"getChartHeightStyle(chartDisplay)\">\n <canvas #chartCanvas></canvas>\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n/**\n * Service for broadcasting data update events across the application.\n *\n * This service provides a centralized mechanism for components to notify other parts\n * of the application when data has been updated, enabling reactive UI updates without\n * tight coupling between components.\n *\n * @example\n * ```typescript\n * // In a component that updates data\n * constructor(private dataUpdateService: DataUpdateEventService) {}\n *\n * saveData() {\n * this.apiService.save(this.data).subscribe(() => {\n * this.dataUpdateService.notifyDataUpdated();\n * });\n * }\n *\n * // In a component that needs to react to updates\n * ngOnInit() {\n * this.dataUpdateService.dataUpdated$.subscribe(() => {\n * this.loadFreshData();\n * });\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DataUpdateEventService {\n /**\n * Internal subject for managing data update events.\n * @internal\n */\n private dataUpdatedSource = new BehaviorSubject<void>(undefined);\n\n /**\n * Observable stream that emits when data has been updated.\n * Subscribe to this observable to react to data changes in the application.\n */\n dataUpdated$ = this.dataUpdatedSource.asObservable();\n\n /**\n * Notifies all subscribers that data has been updated.\n * Call this method after performing any data modification operation\n * to trigger reactive updates across the application.\n *\n * @example\n * ```typescript\n * this.dataUpdateService.notifyDataUpdated();\n * ```\n */\n notifyDataUpdated() {\n this.dataUpdatedSource.next();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\n\n/**\n * Configuration interface for SEO meta tags\n */\nexport interface SeoConfig {\n /** Page title - will be set as the document title */\n title: string;\n /** Meta description - should be 150-160 characters for optimal SEO */\n description: string;\n /** Meta keywords - comma-separated list of keywords */\n keywords?: string;\n /** Canonical URL of the page */\n url?: string;\n /** Image URL for social sharing (og:image, twitter:image) */\n image?: string;\n /** Type of content (website, article, product, etc.) */\n type?: string;\n /** Site name for Open Graph */\n siteName?: string;\n /** Twitter card type (summary, summary_large_image, app, player) */\n twitterCard?: 'summary' | 'summary_large_image' | 'app' | 'player';\n}\n\n/**\n * Service for managing SEO meta tags dynamically.\n *\n * This service provides methods to update page titles, meta descriptions,\n * Open Graph tags, Twitter Cards, and other SEO-related meta tags.\n *\n * @example\n * ```typescript\n * import { SeoService } from 'integra-ng';\n *\n * export class MyComponent {\n * constructor(private seoService: SeoService) {\n * this.seoService.updateMetaTags({\n * title: 'My Page Title | My Site',\n * description: 'Description of my page for search engines.',\n * keywords: 'keyword1, keyword2, keyword3',\n * url: 'https://example.com/my-page',\n * image: 'https://example.com/og-image.png'\n * });\n * }\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class SeoService {\n constructor(\n private meta: Meta,\n private title: Title\n ) {}\n\n /**\n * Updates all SEO-related meta tags based on the provided configuration.\n *\n * @param config - The SEO configuration object\n */\n updateMetaTags(config: SeoConfig): void {\n // Set document title\n this.title.setTitle(config.title);\n\n // Basic meta tags\n this.meta.updateTag({ name: 'description', content: config.description });\n\n if (config.keywords) {\n this.meta.updateTag({ name: 'keywords', content: config.keywords });\n }\n\n // Open Graph tags\n this.meta.updateTag({ property: 'og:title', content: config.title });\n this.meta.updateTag({\n property: 'og:description',\n content: config.description,\n });\n this.meta.updateTag({\n property: 'og:type',\n content: config.type || 'website',\n });\n\n if (config.url) {\n this.meta.updateTag({ property: 'og:url', content: config.url });\n // Also update canonical link\n this.updateCanonicalUrl(config.url);\n }\n\n if (config.image) {\n this.meta.updateTag({ property: 'og:image', content: config.image });\n }\n\n if (config.siteName) {\n this.meta.updateTag({\n property: 'og:site_name',\n content: config.siteName,\n });\n }\n\n // Twitter Card tags\n this.meta.updateTag({\n name: 'twitter:card',\n content: config.twitterCard || 'summary_large_image',\n });\n this.meta.updateTag({ name: 'twitter:title', content: config.title });\n this.meta.updateTag({\n name: 'twitter:description',\n content: config.description,\n });\n\n if (config.image) {\n this.meta.updateTag({ name: 'twitter:image', content: config.image });\n }\n\n if (config.url) {\n this.meta.updateTag({ property: 'twitter:url', content: config.url });\n }\n }\n\n /**\n * Sets only the page title.\n *\n * @param title - The title to set\n */\n setTitle(title: string): void {\n this.title.setTitle(title);\n }\n\n /**\n * Gets the current page title.\n *\n * @returns The current document title\n */\n getTitle(): string {\n return this.title.getTitle();\n }\n\n /**\n * Sets only the meta description.\n *\n * @param description - The description to set (recommended: 150-160 characters)\n */\n setDescription(description: string): void {\n this.meta.updateTag({ name: 'description', content: description });\n }\n\n /**\n * Sets robots meta tag directives.\n *\n * @param content - The robots directive (e.g., 'index, follow', 'noindex, nofollow')\n */\n setRobots(content: string): void {\n this.meta.updateTag({ name: 'robots', content });\n }\n\n /**\n * Updates or creates the canonical URL link element.\n *\n * @param url - The canonical URL\n */\n updateCanonicalUrl(url: string): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n let link: HTMLLinkElement | null =\n document.querySelector('link[rel=\"canonical\"]');\n\n if (!link) {\n link = document.createElement('link');\n link.setAttribute('rel', 'canonical');\n document.head.appendChild(link);\n }\n\n link.setAttribute('href', url);\n }\n\n /**\n * Removes a specific meta tag by name or property.\n *\n * @param attrSelector - The attribute selector (e.g., \"name='description'\" or \"property='og:title'\")\n */\n removeTag(attrSelector: string): void {\n this.meta.removeTag(attrSelector);\n }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * Organization schema configuration\n */\nexport interface OrganizationSchema {\n name: string;\n url: string;\n logo?: string;\n sameAs?: string[];\n contactPoint?: {\n telephone: string;\n contactType: string;\n areaServed?: string;\n availableLanguage?: string[];\n };\n}\n\n/**\n * WebSite schema configuration\n */\nexport interface WebSiteSchema {\n name: string;\n url: string;\n description?: string;\n potentialAction?: {\n queryInput: string;\n target: string;\n };\n}\n\n/**\n * BreadcrumbList item configuration\n */\nexport interface BreadcrumbItem {\n name: string;\n url: string;\n}\n\n/**\n * Article schema configuration\n */\nexport interface ArticleSchema {\n headline: string;\n description: string;\n image?: string;\n datePublished: string;\n dateModified?: string;\n author: {\n name: string;\n url?: string;\n };\n}\n\n/**\n * Service for managing structured data (JSON-LD) for SEO.\n *\n * This service provides methods to insert and manage schema.org\n * structured data in the document head for improved search engine\n * visibility and rich search results.\n *\n * @example\n * ```typescript\n * import { StructuredDataService } from 'integra-ng';\n *\n * export class AppComponent {\n * constructor(private structuredDataService: StructuredDataService) {\n * // Insert organization schema\n * const orgSchema = this.structuredDataService.createOrganizationSchema({\n * name: 'My Company',\n * url: 'https://example.com',\n * logo: 'https://example.com/logo.png'\n * });\n * this.structuredDataService.insertSchema(orgSchema, 'organization-schema');\n * }\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class StructuredDataService {\n constructor(@Inject(DOCUMENT) private document: Document) {}\n\n /**\n * Inserts or updates a JSON-LD schema script in the document head.\n *\n * @param schema - The schema object to insert\n * @param id - Unique identifier for the script element (default: 'structured-data')\n */\n insertSchema(schema: object, id: string = 'structured-data'): void {\n if (typeof this.document === 'undefined') {\n return;\n }\n\n let script = this.document.getElementById(id) as HTMLScriptElement | null;\n\n if (!script) {\n script = this.document.createElement('script');\n script.id = id;\n script.type = 'application/ld+json';\n this.document.head.appendChild(script);\n }\n\n script.textContent = JSON.stringify(schema);\n }\n\n /**\n * Removes a schema script from the document.\n *\n * @param id - The identifier of the script element to remove\n */\n removeSchema(id: string): void {\n if (typeof this.document === 'undefined') {\n return;\n }\n\n const script = this.document.getElementById(id);\n if (script) {\n script.remove();\n }\n }\n\n /**\n * Creates an Organization schema object.\n *\n * @param config - Organization configuration\n * @returns A schema.org Organization object\n */\n createOrganizationSchema(config: OrganizationSchema): object {\n const schema: Record<string, unknown> = {\n '@context': 'https://schema.org',\n '@type': 'Organization',\n name: config.name,\n url: config.url,\n };\n\n if (config.logo) {\n schema['logo'] = config.logo;\n }\n\n if (config.sameAs && config.sameAs.length > 0) {\n schema['sameAs'] = config.sameAs;\n }\n\n if (config.contactPoint) {\n schema['contactPoint'] = {\n '@type': 'ContactPoint',\n telephone: config.contactPoint.telephone,\n contactType: config.contactPoint.contactType,\n ...(config.contactPoint.areaServed && {\n areaServed: config.contactPoint.areaServed,\n }),\n ...(config.contactPoint.availableLanguage && {\n availableLanguage: config.contactPoint.availableLanguage,\n }),\n };\n }\n\n return schema;\n }\n\n /**\n * Creates a WebSite schema object.\n *\n * @param config - WebSite configuration\n * @returns A schema.org WebSite object\n */\n createWebSiteSchema(config: WebSiteSchema): object {\n const schema: Record<string, unknown> = {\n '@context': 'https://schema.org',\n '@type': 'WebSite',\n name: config.name,\n url: config.url,\n };\n\n if (config.description) {\n schema['description'] = config.description;\n }\n\n if (config.potentialAction) {\n schema['potentialAction'] = {\n '@type': 'SearchAction',\n target: config.potentialAction.target,\n 'query-input': config.potentialAction.queryInput,\n };\n }\n\n return schema;\n }\n\n /**\n * Creates a BreadcrumbList schema object.\n *\n * @param items - Array of breadcrumb items\n * @returns A schema.org BreadcrumbList object\n */\n createBreadcrumbSchema(items: BreadcrumbItem[]): object {\n return {\n '@context': 'https://schema.org',\n '@type': 'BreadcrumbList',\n itemListElement: items.map((item, index) => ({\n '@type': 'ListItem',\n position: index + 1,\n name: item.name,\n item: item.url,\n })),\n };\n }\n\n /**\n * Creates an Article schema object.\n *\n * @param config - Article configuration\n * @returns A schema.org Article object\n */\n createArticleSchema(config: ArticleSchema): object {\n const schema: Record<string, unknown> = {\n '@context': 'https://schema.org',\n '@type': 'Article',\n headline: config.headline,\n description: config.description,\n datePublished: config.datePublished,\n author: {\n '@type': 'Person',\n name: config.author.name,\n ...(config.author.url && { url: config.author.url }),\n },\n };\n\n if (config.image) {\n schema['image'] = config.image;\n }\n\n if (config.dateModified) {\n schema['dateModified'] = config.dateModified;\n }\n\n return schema;\n }\n\n /**\n * Creates a SoftwareApplication schema object for the library.\n *\n * @param config - Application configuration\n * @returns A schema.org SoftwareApplication object\n */\n createSoftwareApplicationSchema(config: {\n name: string;\n description: string;\n applicationCategory: string;\n operatingSystem?: string;\n offers?: {\n price: string;\n priceCurrency: string;\n };\n }): object {\n const schema: Record<string, unknown> = {\n '@context': 'https://schema.org',\n '@type': 'SoftwareApplication',\n name: config.name,\n description: config.description,\n applicationCategory: config.applicationCategory,\n };\n\n if (config.operatingSystem) {\n schema['operatingSystem'] = config.operatingSystem;\n }\n\n if (config.offers) {\n schema['offers'] = {\n '@type': 'Offer',\n price: config.offers.price,\n priceCurrency: config.offers.priceCurrency,\n };\n }\n\n return schema;\n }\n}\n","/*\n * Public API Surface of integra-ng\n */\n\n/* Components - organized by folder structure */\nexport * from './lib/components/accordion/accordion.component';\nexport * from './lib/components/accordion-list/accordion-list.component';\nexport * from './lib/components/button/button.component';\nexport * from './lib/components/calendar/calendar.component';\nexport * from './lib/components/card/card.component';\nexport * from './lib/components/checkbox/checkbox.component';\nexport * from './lib/components/chip/chip.component';\nexport * from './lib/components/chips/chips.component';\nexport * from './lib/components/confirmation-dialog/confirmation-dialog.component';\nexport * from './lib/components/confirmation-dialog/services/confirmation-dialog.service';\nexport * from './lib/components/dialog/dialog.component';\nexport * from './lib/components/dialog/dialog-base';\nexport * from './lib/components/dialog/base-dialog.component';\nexport * from './lib/components/dialog/inner/dialog-actions/dialog-actions.component';\nexport * from './lib/components/dialog/services/dialog.service';\nexport * from './lib/components/dialog/services/dialog.interfaces';\nexport * from './lib/components/empty-state/empty-state.component';\nexport * from './lib/components/input-text/input-text.component';\nexport * from './lib/components/textarea/textarea.component';\nexport * from './lib/components/tag/tag.component';\nexport * from './lib/components/placeholder/placeholder.component';\nexport * from './lib/components/no-content/no-content.component';\nexport * from './lib/components/layout/layout.component';\nexport * from './lib/components/layout/topbar/topbar.component';\nexport * from './lib/components/layout/sidebar/sidebar.component';\nexport * from './lib/components/layout/menu/menu.component';\nexport * from './lib/components/layout/models/menu.model';\nexport * from './lib/components/layout/models/layout-config.model';\nexport * from './lib/components/layout/services/layout.service';\nexport { CLAIMS_CHECKER, provideMenuClaimsChecker } from './lib/components/layout/services/claims-checker.token';\nexport type { ClaimsChecker } from './lib/components/layout/services/claims-checker.token';\nexport * from './lib/components/listbox/listbox.component';\nexport * from './lib/components/radio-button/radio-button.component';\nexport * from './lib/components/message/message.component';\nexport * from './lib/components/multi-select/multi-select.component';\nexport * from './lib/components/overlay-panel/overlay-panel.component';\nexport * from './lib/components/panel/panel.component';\nexport * from './lib/components/placeholder/placeholder.component';\nexport * from './lib/components/progress-spinner/progress-spinner.component';\nexport * from './lib/components/select/select.component';\nexport * from './lib/components/tabs/tabs.component';\nexport * from './lib/components/tabs/tab-panel.component';\nexport * from './lib/components/tree-view/tree-view.component';\nexport * from './lib/components/whisper/whisper.component';\nexport * from './lib/components/whisper/services/whisper.service';\nexport * from './lib/components/whisper/services/whisper.interfaces';\nexport * from './lib/components/table/table.component';\nexport * from './lib/components/chart/chart.component';\nexport * from './lib/components/chart/chart.interfaces';\n\n/* Directives */\nexport * from './lib/directives/tooltip/tooltip.component';\nexport * from './lib/directives/tooltip/tooltip.directive';\n\n/* Services */\nexport * from './lib/services/data-update-event/data-update-event.service';\nexport * from './lib/services/seo/seo.service';\nexport * from './lib/services/seo/structured-data.service';\n\n/* Utils */\nexport * from './lib/utils/uniquecomponentid';\nexport * from './lib/utils/zindexutils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.DialogService","i1.LayoutService","i2","i1.WhisperService"],"mappings":"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"}
1
+ {"version":3,"file":"integra-ng.mjs","sources":["../../../projects/integra-ng/src/lib/utils/uniquecomponentid.ts","../../../projects/integra-ng/src/lib/components/accordion/accordion.component.ts","../../../projects/integra-ng/src/lib/components/accordion/accordion.component.html","../../../projects/integra-ng/src/lib/components/accordion-list/accordion-list.component.ts","../../../projects/integra-ng/src/lib/components/accordion-list/accordion-list.component.html","../../../projects/integra-ng/src/lib/components/progress-spinner/progress-spinner.component.ts","../../../projects/integra-ng/src/lib/components/progress-spinner/progress-spinner.component.html","../../../projects/integra-ng/src/lib/components/button/button.component.ts","../../../projects/integra-ng/src/lib/components/button/button.component.html","../../../projects/integra-ng/src/lib/directives/tooltip/tooltip.component.ts","../../../projects/integra-ng/src/lib/directives/tooltip/tooltip.directive.ts","../../../projects/integra-ng/src/lib/components/input-text/input-text.component.ts","../../../projects/integra-ng/src/lib/components/input-text/input-text.component.html","../../../projects/integra-ng/src/lib/components/calendar/calendar.component.ts","../../../projects/integra-ng/src/lib/components/calendar/calendar.component.html","../../../projects/integra-ng/src/lib/components/card/card.component.ts","../../../projects/integra-ng/src/lib/components/card/card.component.html","../../../projects/integra-ng/src/lib/components/checkbox/checkbox.component.ts","../../../projects/integra-ng/src/lib/components/checkbox/checkbox.component.html","../../../projects/integra-ng/src/lib/components/chip/chip.component.ts","../../../projects/integra-ng/src/lib/components/chip/chip.component.html","../../../projects/integra-ng/src/lib/components/chips/chips.component.ts","../../../projects/integra-ng/src/lib/components/chips/chips.component.html","../../../projects/integra-ng/src/lib/components/dialog/inner/dialog-actions/dialog-actions.component.ts","../../../projects/integra-ng/src/lib/components/dialog/inner/dialog-actions/dialog-actions.component.html","../../../projects/integra-ng/src/lib/components/confirmation-dialog/confirmation-dialog.component.ts","../../../projects/integra-ng/src/lib/components/confirmation-dialog/confirmation-dialog.component.html","../../../projects/integra-ng/src/lib/components/dialog/dialog-base.ts","../../../projects/integra-ng/src/lib/components/dialog/dialog.component.ts","../../../projects/integra-ng/src/lib/components/dialog/dialog.component.html","../../../projects/integra-ng/src/lib/components/dialog/services/dialog.service.ts","../../../projects/integra-ng/src/lib/components/confirmation-dialog/services/confirmation-dialog.service.ts","../../../projects/integra-ng/src/lib/components/dialog/base-dialog.component.ts","../../../projects/integra-ng/src/lib/components/empty-state/empty-state.component.ts","../../../projects/integra-ng/src/lib/components/empty-state/empty-state.component.html","../../../projects/integra-ng/src/lib/components/textarea/textarea.component.ts","../../../projects/integra-ng/src/lib/components/textarea/textarea.component.html","../../../projects/integra-ng/src/lib/components/tag/tag.component.ts","../../../projects/integra-ng/src/lib/components/tag/tag.component.html","../../../projects/integra-ng/src/lib/components/placeholder/placeholder.component.ts","../../../projects/integra-ng/src/lib/components/placeholder/placeholder.component.html","../../../projects/integra-ng/src/lib/components/no-content/no-content.component.ts","../../../projects/integra-ng/src/lib/components/no-content/no-content.component.html","../../../projects/integra-ng/src/lib/components/layout/services/layout.service.ts","../../../projects/integra-ng/src/lib/components/layout/topbar/topbar.component.ts","../../../projects/integra-ng/src/lib/components/layout/topbar/topbar.component.html","../../../projects/integra-ng/src/lib/components/layout/services/claims-checker.token.ts","../../../projects/integra-ng/src/lib/components/layout/menu/menu.component.ts","../../../projects/integra-ng/src/lib/components/layout/menu/menu.component.html","../../../projects/integra-ng/src/lib/components/layout/sidebar/sidebar.component.ts","../../../projects/integra-ng/src/lib/components/layout/sidebar/sidebar.component.html","../../../projects/integra-ng/src/lib/components/layout/layout.component.ts","../../../projects/integra-ng/src/lib/components/layout/layout.component.html","../../../projects/integra-ng/src/lib/components/listbox/listbox.component.ts","../../../projects/integra-ng/src/lib/components/listbox/listbox.component.html","../../../projects/integra-ng/src/lib/components/radio-button/radio-button.component.ts","../../../projects/integra-ng/src/lib/components/radio-button/radio-button.component.html","../../../projects/integra-ng/src/lib/components/message/message.component.ts","../../../projects/integra-ng/src/lib/components/message/message.component.html","../../../projects/integra-ng/src/lib/components/multi-select/multi-select.component.ts","../../../projects/integra-ng/src/lib/components/multi-select/multi-select.component.html","../../../projects/integra-ng/src/lib/utils/zindexutils.ts","../../../projects/integra-ng/src/lib/components/overlay-panel/overlay-panel.component.ts","../../../projects/integra-ng/src/lib/components/overlay-panel/overlay-panel.component.html","../../../projects/integra-ng/src/lib/components/panel/panel.component.ts","../../../projects/integra-ng/src/lib/components/panel/panel.component.html","../../../projects/integra-ng/src/lib/components/select/select.component.ts","../../../projects/integra-ng/src/lib/components/select/select.component.html","../../../projects/integra-ng/src/lib/components/tabs/tab-panel.component.ts","../../../projects/integra-ng/src/lib/components/tabs/tabs.component.ts","../../../projects/integra-ng/src/lib/components/tabs/tabs.component.html","../../../projects/integra-ng/src/lib/components/tree-view/tree-view.component.ts","../../../projects/integra-ng/src/lib/components/tree-view/tree-view.component.html","../../../projects/integra-ng/src/lib/components/whisper/services/whisper.service.ts","../../../projects/integra-ng/src/lib/components/whisper/whisper.component.ts","../../../projects/integra-ng/src/lib/components/whisper/whisper.component.html","../../../projects/integra-ng/src/lib/components/table/table.component.ts","../../../projects/integra-ng/src/lib/components/table/table.component.html","../../../projects/integra-ng/src/lib/components/chart/chart.component.ts","../../../projects/integra-ng/src/lib/components/chart/chart.component.html","../../../projects/integra-ng/src/lib/services/data-update-event/data-update-event.service.ts","../../../projects/integra-ng/src/lib/services/seo/seo.service.ts","../../../projects/integra-ng/src/lib/services/seo/structured-data.service.ts","../../../projects/integra-ng/src/public-api.ts","../../../projects/integra-ng/src/integra-ng.ts"],"sourcesContent":["export var lastId = 0;\n\nexport function UniqueComponentId(prefix = 'i_id_') {\n lastId++;\n\n return `${prefix}${lastId}`;\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Accordion Component\n *\n * An expandable/collapsible container component that displays content with a header.\n * Supports animations and can be controlled programmatically.\n *\n * @example\n * ```html\n * <!-- Basic accordion -->\n * <i-accordion header=\"Section Title\">\n * <p>Content goes here</p>\n * </i-accordion>\n *\n * <!-- Accordion with icon -->\n * <i-accordion header=\"Info Section\" icon=\"pi pi-info-circle\">\n * <p>Informational content</p>\n * </i-accordion>\n *\n * <!-- Initially expanded accordion -->\n * <i-accordion header=\"Expanded Section\" [expanded]=\"true\">\n * <p>This section starts expanded</p>\n * </i-accordion>\n *\n * <!-- Disabled accordion -->\n * <i-accordion header=\"Disabled Section\" [disabled]=\"true\">\n * <p>Cannot be toggled</p>\n * </i-accordion>\n * ```\n *\n * @remarks\n * Use content projection to add any content inside the accordion body.\n * The accordion can be used standalone or within an i-accordion-list for group behavior.\n */\n@Component({\n selector: 'i-accordion',\n templateUrl: './accordion.component.html',\n styleUrl: './accordion.component.scss',\n})\nexport class IAccordion {\n /**\n * The header/title text displayed in the accordion\n */\n @Input() header: string = '';\n\n /**\n * Whether the accordion is expanded\n * @default false\n */\n @Input() expanded: boolean = false;\n\n /**\n * Whether the accordion is disabled\n * @default false\n */\n @Input() disabled: boolean = false;\n\n /**\n * Optional icon class (PrimeIcons format like 'pi pi-info-circle')\n */\n @Input() icon?: string;\n\n /**\n * Event emitted when expanded state changes\n */\n @Output() expandedChange = new EventEmitter<boolean>();\n\n /**\n * Event emitted when accordion is toggled\n */\n @Output() onToggle = new EventEmitter<boolean>();\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-accordion-');\n\n /**\n * Toggles the accordion expanded state\n * @internal\n */\n toggle(): void {\n if (this.disabled) {\n return;\n }\n this.expanded = !this.expanded;\n this.expandedChange.emit(this.expanded);\n this.onToggle.emit(this.expanded);\n }\n}\n","<div\n class=\"i-accordion\"\n [class.expanded]=\"expanded\"\n [class.disabled]=\"disabled\"\n [attr.id]=\"componentId\"\n>\n <div\n class=\"i-accordion-header\"\n (click)=\"toggle()\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-disabled]=\"disabled\"\n role=\"button\"\n tabindex=\"0\"\n (keydown.enter)=\"toggle()\"\n (keydown.space)=\"toggle(); $event.preventDefault()\"\n >\n <div class=\"i-accordion-header-content\">\n @if (icon) {\n <i [class]=\"icon\" class=\"i-accordion-icon\"></i>\n }\n <span class=\"i-accordion-title\">{{ header }}</span>\n </div>\n <i class=\"pi i-accordion-toggle-icon\" [class.pi-chevron-down]=\"!expanded\" [class.pi-chevron-up]=\"expanded\"></i>\n </div>\n <div class=\"i-accordion-content-wrapper\" [class.collapsed]=\"!expanded\">\n <div class=\"i-accordion-content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n","import {\n Component,\n Input,\n ContentChildren,\n QueryList,\n AfterContentInit,\n OnDestroy,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { IAccordion } from '../accordion/accordion.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Accordion List Component\n *\n * A container component that groups multiple accordion components.\n * Supports single or multiple expansion modes.\n *\n * @example\n * ```html\n * <!-- Single expansion mode (only one open at a time) -->\n * <i-accordion-list [multiple]=\"false\">\n * <i-accordion header=\"Section 1\">\n * <p>Content 1</p>\n * </i-accordion>\n * <i-accordion header=\"Section 2\">\n * <p>Content 2</p>\n * </i-accordion>\n * </i-accordion-list>\n *\n * <!-- Multiple expansion mode -->\n * <i-accordion-list [multiple]=\"true\">\n * <i-accordion header=\"Section 1\">\n * <p>Content 1</p>\n * </i-accordion>\n * <i-accordion header=\"Section 2\">\n * <p>Content 2</p>\n * </i-accordion>\n * </i-accordion-list>\n * ```\n *\n * @remarks\n * When multiple is false (default), expanding one accordion will collapse others.\n * When multiple is true, any number of accordions can be expanded simultaneously.\n */\n@Component({\n selector: 'i-accordion-list',\n templateUrl: './accordion-list.component.html',\n styleUrl: './accordion-list.component.scss',\n})\nexport class IAccordionList implements AfterContentInit, OnDestroy {\n /**\n * Whether multiple accordions can be expanded at the same time\n * @default false\n */\n @Input() multiple: boolean = false;\n\n /**\n * Query list of child accordion components\n * @internal\n */\n @ContentChildren(IAccordion) accordions!: QueryList<IAccordion>;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-accordion-list-');\n\n /**\n * Subscriptions for cleanup\n * @internal\n */\n private subscriptions: Subscription[] = [];\n\n /**\n * Subscription for accordion list changes\n * @internal\n */\n private accordionsChangesSub?: Subscription;\n\n ngAfterContentInit(): void {\n this.setupAccordionListeners();\n\n // Listen for changes to the accordion list\n this.accordionsChangesSub = this.accordions.changes.subscribe(() => {\n this.cleanupSubscriptions();\n this.setupAccordionListeners();\n });\n }\n\n ngOnDestroy(): void {\n this.cleanupSubscriptions();\n this.accordionsChangesSub?.unsubscribe();\n }\n\n /**\n * Cleans up all accordion toggle subscriptions\n * @internal\n */\n private cleanupSubscriptions(): void {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n this.subscriptions = [];\n }\n\n /**\n * Sets up toggle listeners for all child accordions\n * @internal\n */\n private setupAccordionListeners(): void {\n this.accordions.forEach((accordion) => {\n // Subscribe to toggle events\n const sub = accordion.onToggle.subscribe((expanded: boolean) => {\n if (expanded && !this.multiple) {\n this.collapseOthers(accordion);\n }\n });\n this.subscriptions.push(sub);\n });\n }\n\n /**\n * Collapses all accordions except the specified one\n * @internal\n */\n private collapseOthers(expandedAccordion: IAccordion): void {\n this.accordions.forEach((accordion) => {\n if (accordion !== expandedAccordion && accordion.expanded) {\n accordion.expanded = false;\n accordion.expandedChange.emit(false);\n }\n });\n }\n}\n","<div class=\"i-accordion-list\" [attr.id]=\"componentId\">\n <ng-content></ng-content>\n</div>\n","import { NgClass } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ISeverity } from '../../enums/IButtonSeverity';\n\n@Component({\n selector: 'i-progress-spinner',\n imports: [NgClass],\n templateUrl: './progress-spinner.component.html',\n styleUrls: ['./progress-spinner.component.scss'],\n})\nexport class IProgressSpinner {\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\n @Input() strokeWidth = 4;\n @Input() ariaLabel = 'Loading';\n @Input() severity?: ISeverity;\n @Input() colorMode: 'accent' | 'text' = 'accent';\n\n get sizeClass(): string {\n return `spinner-${this.size}`;\n }\n\n get severityClass(): string {\n if (!this.severity) return '';\n if (this.colorMode === 'text') return `spinner--${this.severity}--text`;\n return `spinner--${this.severity}`;\n }\n}\n","<div\n class=\"spinner-container\"\n [class]=\"sizeClass\"\n [ngClass]=\"severityClass\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"status\"\n>\n <div class=\"spinner-rings\">\n <div class=\"spinner-ring spinner-ring-1\"></div>\n <div class=\"spinner-ring spinner-ring-2\"></div>\n <div class=\"spinner-ring spinner-ring-3\"></div>\n </div>\n</div>\n","import { NgClass } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n AfterViewInit,\n ElementRef,\n ViewChild,\n ChangeDetectorRef,\n HostBinding,\n} from '@angular/core';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { ISeverity } from '@shared/enums/IButtonSeverity';\nimport { IProgressSpinner } from '../progress-spinner/progress-spinner.component';\n\n/**\n * Supported button sizes\n */\nexport type IButtonSize = 'xtra-small' | 'small' | 'medium' | 'large';\n\n/**\n * Button Component\n *\n * A customizable button component with multiple styles and sizes.\n * Supports icons, different severity levels, and various visual states.\n *\n * @example\n * ```html\n * <!-- Basic button -->\n * <i-button>Click Me</i-button>\n *\n * <!-- Button with icon and severity -->\n * <i-button\n * severity=\"primary\"\n * icon=\"pi pi-check\"\n * (clicked)=\"onSave()\">\n * Save\n * </i-button>\n *\n * <!-- Icon-only button -->\n * <i-button\n * icon=\"pi pi-trash\"\n * severity=\"danger\"\n * [outlined]=\"true\">\n * </i-button>\n *\n * <!-- Fluid button (full width) -->\n * <i-button [fluid]=\"true\">Full Width Button</i-button>\n * ```\n *\n * @remarks\n * The button automatically detects if it's icon-only and adjusts its styling accordingly.\n */\n@Component({\n selector: 'i-button',\n standalone: true,\n imports: [NgClass, IProgressSpinner],\n templateUrl: './button.component.html',\n styleUrl: './button.component.scss',\n})\nexport class IButton implements AfterViewInit {\n @HostBinding('class.i-button-fluid') get fluidClass() {\n return this.fluid;\n }\n /**\n * Visual severity/style of the button\n * @default 'primary'\n */\n @Input() severity: ISeverity = 'primary';\n\n /**\n * Size of the button\n * @default 'medium'\n */\n @Input() size: IButtonSize = 'medium';\n\n /**\n * HTML button type attribute\n * @default 'button'\n */\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n\n /**\n * Whether the button is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Whether to display outlined style\n * @default false\n */\n @Input() outlined = false;\n\n /**\n * Whether to display raised (elevated) style\n * @default false\n */\n @Input() raised = false;\n\n /**\n * Whether to display text-only style (no background)\n * @default false\n */\n @Input() text = false;\n\n /**\n * Icon class name (e.g., 'pi pi-check')\n */\n @Input() icon?: string;\n\n /**\n * Whether the button should take full width of its container\n * @default false\n */\n @Input() fluid = false;\n\n /**\n * Whether the button is in a loading state\n * Shows a spinner and hides button content\n * @default false\n */\n @Input() loading = false;\n\n /**\n * Event emitted when the button is clicked\n */\n @Output() clicked = new EventEmitter<Event>();\n\n /**\n * Reference to the projected content element\n * @internal\n */\n @ViewChild('projected', { read: ElementRef })\n projected?: ElementRef<HTMLElement>;\n\n /**\n * Reference to the native button element\n * @internal\n */\n @ViewChild('buttonElement', { read: ElementRef })\n private buttonElement?: ElementRef<HTMLButtonElement>;\n\n /**\n * Whether the button is icon-only (no text content)\n * @internal\n */\n iconOnly = false;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-button-');\n\n constructor(private cdr: ChangeDetectorRef, public el: ElementRef) {}\n\n ngAfterViewInit(): void {\n const text = this.projected?.nativeElement?.textContent;\n const hasProjected = text && text.trim()?.length > 0;\n this.iconOnly = !!this.icon && !hasProjected;\n this.cdr.detectChanges();\n }\n\n /**\n * Focuses the underlying native button element.\n * Use this instead of accessing `nativeElement` directly.\n */\n focus(): void {\n this.buttonElement?.nativeElement?.focus();\n }\n}\n","<div class=\"i-button-wrapper\">\n <button\n #buttonElement\n primary\n [attr.id]=\"componentId\"\n class=\"i-button\"\n [ngClass]=\"[\n 'i-button--' + severity,\n 'i-button--' + size,\n outlined && !text ? 'i-button--outlined' : '',\n text ? 'i-button--text' : '',\n fluid ? 'i-button--fluid' : '',\n raised && !text ? 'i-button--raised' : '',\n iconOnly ? 'icon-only' : '',\n iconOnly && !text ? 'icon-only-text' : '',\n loading ? 'i-button--loading' : ''\n ]\"\n [disabled]=\"disabled || loading\"\n [attr.type]=\"type\"\n (click)=\"clicked.emit($event)\"\n >\n @if (loading) {\n <div class=\"button-loading-spinner\">\n <i-progress-spinner\n size=\"small\"\n [severity]=\"severity\"\n [colorMode]=\"outlined || text ? 'text' : 'accent'\"\n ></i-progress-spinner>\n </div>\n }\n <div\n [ngClass]=\"[\n 'button-content',\n iconOnly ? 'icon-only' : '',\n loading ? 'button-content--hidden' : ''\n ]\"\n >\n @if (icon) {\n <i [ngClass]=\"[icon, 'i-button__icon', iconOnly ? 'icon-only' : '']\"></i>\n }\n <span class=\"projected-content\" #projected>\n <ng-content></ng-content>\n </span>\n </div>\n </button>\n</div>\n","import { Component, Input } from '@angular/core';\n\n\nexport type TooltipPosition = 'above' | 'below' | 'left' | 'right';\n\n@Component({\n selector: 'i-tooltip',\n standalone: true,\n imports: [],\n template: `\n <div\n class=\"i-tooltip\"\n [class.i-tooltip--above]=\"position === 'above'\"\n [class.i-tooltip--below]=\"position === 'below'\"\n [class.i-tooltip--left]=\"position === 'left'\"\n [class.i-tooltip--right]=\"position === 'right'\"\n >\n {{ text }}\n <div class=\"i-tooltip__arrow\"></div>\n </div>\n `,\n styleUrl: './tooltip.component.scss',\n})\nexport class TooltipComponent {\n @Input() text: string = '';\n @Input() position: TooltipPosition = 'above';\n}\n","import {\n Directive,\n Input,\n ElementRef,\n Renderer2,\n OnDestroy,\n ViewContainerRef,\n ComponentRef,\n createComponent,\n ApplicationRef,\n Injector,\n EnvironmentInjector,\n} from '@angular/core';\nimport { TooltipComponent, TooltipPosition } from './tooltip.component';\n\n/**\n * Tooltip Directive\n *\n * Displays contextual tooltips on hover or focus.\n * Tooltips are appended to document.body with z-index: 10000 to ensure\n * they appear above all other elements including dialogs (z-index: 1000).\n *\n * @example\n * <button iTooltip=\"Click to save\" tooltipPosition=\"above\">Save</button>\n */\n@Directive({\n selector: '[iTooltip]',\n standalone: true,\n})\nexport class TooltipDirective implements OnDestroy {\n @Input('iTooltip') tooltipText: string = '';\n @Input() tooltipPosition: TooltipPosition = 'above';\n @Input() tooltipDelay: number = 500; // milliseconds\n\n private tooltipComponent: ComponentRef<TooltipComponent> | null = null;\n private showTimeout: any;\n private hideTimeout: any;\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2,\n private applicationRef: ApplicationRef,\n private injector: Injector,\n private environmentInjector: EnvironmentInjector,\n ) {\n this.setupEventListeners();\n }\n\n private setupEventListeners(): void {\n this.renderer.listen(this.elementRef.nativeElement, 'mouseenter', () => {\n this.showTooltip();\n });\n\n this.renderer.listen(this.elementRef.nativeElement, 'mouseleave', () => {\n this.hideTooltip();\n });\n\n this.renderer.listen(this.elementRef.nativeElement, 'focus', () => {\n this.showTooltip();\n });\n\n this.renderer.listen(this.elementRef.nativeElement, 'blur', () => {\n this.hideTooltip();\n });\n }\n\n private showTooltip(): void {\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n }\n\n // Check for empty, null, or whitespace-only tooltip text\n if (\n !this.tooltipText ||\n !this.tooltipText.trim() ||\n this.tooltipComponent\n ) {\n return;\n }\n\n this.showTimeout = setTimeout(() => {\n this.createTooltip();\n }, this.tooltipDelay);\n }\n\n private hideTooltip(): void {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n }\n\n this.hideTimeout = setTimeout(() => {\n this.destroyTooltip();\n }, 100);\n }\n\n private createTooltip(): void {\n if (this.tooltipComponent) {\n return;\n }\n\n // Create the tooltip component\n this.tooltipComponent = createComponent(TooltipComponent, {\n environmentInjector: this.environmentInjector,\n });\n\n // Set the tooltip properties\n this.tooltipComponent.instance.text = this.tooltipText;\n this.tooltipComponent.instance.position = this.tooltipPosition;\n\n // Add a unique identifier to the tooltip element to avoid conflicts\n const tooltipId = `tooltip-${Math.random().toString(36).substr(2, 9)}`;\n this.renderer.setAttribute(\n this.tooltipComponent.location.nativeElement,\n 'id',\n tooltipId,\n );\n this.renderer.setAttribute(\n this.tooltipComponent.location.nativeElement,\n 'data-tooltip-for',\n this.elementRef.nativeElement.id || 'unknown',\n );\n\n // Register with ApplicationRef for change detection first\n this.applicationRef.attachView(this.tooltipComponent.hostView);\n\n // Append to body\n document.body.appendChild(this.tooltipComponent.location.nativeElement);\n\n // Position the tooltip after a brief delay to ensure rendering\n requestAnimationFrame(() => {\n this.positionTooltip();\n });\n }\n\n private positionTooltip(): void {\n if (!this.tooltipComponent) return;\n\n const hostElement = this.elementRef.nativeElement;\n const tooltipElement = this.tooltipComponent.location.nativeElement;\n\n // Ensure we're working with the correct tooltip instance\n if (!tooltipElement || !document.body.contains(tooltipElement)) {\n return;\n }\n\n // Make tooltip visible but off-screen to measure its dimensions\n this.renderer.setStyle(tooltipElement, 'position', 'absolute');\n this.renderer.setStyle(tooltipElement, 'visibility', 'hidden');\n this.renderer.setStyle(tooltipElement, 'top', '-9999px');\n this.renderer.setStyle(tooltipElement, 'left', '-9999px');\n this.renderer.setStyle(tooltipElement, 'z-index', '9999');\n\n // Force a layout to get accurate measurements\n tooltipElement.offsetHeight;\n\n const hostRect = hostElement.getBoundingClientRect();\n const tooltipRect = tooltipElement.getBoundingClientRect();\n\n let top = 0;\n let left = 0;\n const gap = 8; // Gap between host and tooltip\n\n switch (this.tooltipPosition) {\n case 'above':\n top = hostRect.top - tooltipRect.height - gap + window.scrollY;\n left =\n hostRect.left +\n (hostRect.width - tooltipRect.width) / 2 +\n window.scrollX;\n break;\n case 'below':\n top = hostRect.bottom + gap + window.scrollY;\n left =\n hostRect.left +\n (hostRect.width - tooltipRect.width) / 2 +\n window.scrollX;\n break;\n case 'left':\n top =\n hostRect.top +\n (hostRect.height - tooltipRect.height) / 2 +\n window.scrollY;\n left = hostRect.left - tooltipRect.width - gap + window.scrollX;\n break;\n case 'right':\n top =\n hostRect.top +\n (hostRect.height - tooltipRect.height) / 2 +\n window.scrollY;\n left = hostRect.right + gap + window.scrollX;\n break;\n }\n\n // Ensure tooltip stays within viewport (using fixed positioning)\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const scrollX = window.scrollX;\n const scrollY = window.scrollY;\n\n // Convert back to viewport coordinates for boundary checking\n const viewportLeft = left - scrollX;\n const viewportTop = top - scrollY;\n\n // Adjust horizontal position if tooltip goes outside viewport\n if (viewportLeft < gap) {\n left = gap + scrollX;\n } else if (viewportLeft + tooltipRect.width > viewportWidth - gap) {\n left = viewportWidth - tooltipRect.width - gap + scrollX;\n }\n\n // Adjust vertical position if tooltip goes outside viewport\n if (viewportTop < gap) {\n top = gap + scrollY;\n } else if (viewportTop + tooltipRect.height > viewportHeight - gap) {\n top = viewportHeight - tooltipRect.height - gap + scrollY;\n }\n\n // Apply final position and make visible\n // Use z-index 10000 to ensure tooltips appear above dialogs (z-index: 1000)\n this.renderer.setStyle(tooltipElement, 'position', 'absolute');\n this.renderer.setStyle(tooltipElement, 'top', `${top}px`);\n this.renderer.setStyle(tooltipElement, 'left', `${left}px`);\n this.renderer.setStyle(tooltipElement, 'z-index', '10000');\n this.renderer.setStyle(tooltipElement, 'visibility', 'visible');\n }\n\n private destroyTooltip(): void {\n if (this.tooltipComponent) {\n const tooltipElement = this.tooltipComponent.location.nativeElement;\n\n // Remove from DOM first\n if (tooltipElement && document.body.contains(tooltipElement)) {\n document.body.removeChild(tooltipElement);\n }\n\n // Then cleanup Angular references\n this.applicationRef.detachView(this.tooltipComponent.hostView);\n this.tooltipComponent.destroy();\n this.tooltipComponent = null;\n }\n }\n\n ngOnDestroy(): void {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n }\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n }\n this.destroyTooltip();\n }\n}\n","import { Component, Input, Optional, Self } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ControlValueAccessor,\n NgControl,\n AbstractControl,\n} from '@angular/forms';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { TooltipDirective } from '../../directives/tooltip/tooltip.directive';\n\n/**\n * Supported background style options for the input\n */\nexport type IInputBackgroundStyle = 'surface' | 'component';\n\n/**\n * Input Text Component\n *\n * A form control text input component with floating labels, icons, and validation support.\n * Fully compatible with Angular Reactive Forms and Template-driven Forms.\n *\n * @example\n * ```html\n * <!-- Basic input -->\n * <i-input-text label=\"Username\"></i-input-text>\n *\n * <!-- Input with reactive form -->\n * <i-input-text\n * label=\"Email\"\n * type=\"email\"\n * formControlName=\"email\">\n * </i-input-text>\n *\n * <!-- Input with icon -->\n * <i-input-text\n * label=\"Search\"\n * icon=\"pi pi-search\"\n * [(ngModel)]=\"searchTerm\">\n * </i-input-text>\n *\n * <!-- Password input -->\n * <i-input-text\n * label=\"Password\"\n * type=\"password\"\n * formControlName=\"password\">\n * </i-input-text>\n *\n * <!-- Full width input -->\n * <i-input-text\n * label=\"Address\"\n * [fluid]=\"true\"\n * formControlName=\"address\">\n * </i-input-text>\n *\n * <!-- Input with custom error messages -->\n * <i-input-text\n * label=\"Phone\"\n * formControlName=\"phone\"\n * [errorMessages]=\"{pattern: 'Please enter a valid phone number'}\">\n * </i-input-text>\n * ```\n *\n * @remarks\n * This component implements ControlValueAccessor for seamless integration with Angular Forms.\n * Supports floating labels, custom validation messages, and external validation state.\n */\n@Component({\n selector: 'i-input-text',\n standalone: true,\n imports: [CommonModule, TooltipDirective],\n templateUrl: './input-text.component.html',\n styleUrls: ['./input-text.component.scss'],\n})\nexport class IInputText implements ControlValueAccessor {\n /**\n * Label text displayed for the input\n * @default 'Label'\n */\n @Input() label = 'Label';\n\n /**\n * HTML input type attribute\n * @default 'text'\n */\n @Input() type: string = 'text';\n\n /**\n * HTML id attribute for the input element\n */\n @Input() id?: string;\n\n /**\n * Whether the input should take full width of its container\n * @default false\n */\n @Input() fluid = false;\n\n /**\n * Forces the label to stay in floated position\n * @default false\n */\n @Input() forceFloated = false;\n\n /**\n * Hides the input text (useful for password fields with toggle)\n * @default false\n */\n @Input() hideText = false;\n\n /**\n * Enables floating label animation\n * @default true\n */\n @Input() useFloatLabel = true;\n\n /**\n * Placeholder text for the input\n */\n @Input() placeholder?: string;\n\n /**\n * Allows external control to override validation state\n * @default false\n */\n @Input() externalInvalid = false;\n\n /**\n * External error message to display (overrides internal validation)\n */\n @Input() externalErrorMessage?: string;\n\n /**\n * Background style of the input\n * @default 'surface'\n */\n @Input() backgroundStyle: IInputBackgroundStyle = 'surface';\n\n /**\n * Icon class name to display (e.g., 'pi pi-search')\n */\n @Input() icon?: string;\n\n /**\n * Whether the input is readonly\n * @default false\n */\n @Input() readonly = false;\n\n /**\n * Whether the input is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Custom error messages for validation rules\n * @default {}\n */\n @Input() errorMessages: { [key: string]: string } = {};\n\n /**\n * Current input value\n * @internal\n */\n value: string | null = null;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-input-text-');\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChange: (v: string | null) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouched: () => void = () => {};\n\n constructor(@Optional() @Self() public ngControl: NgControl | null) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * Writes a value to the input (ControlValueAccessor)\n * @internal\n */\n writeValue(obj: string | null): void {\n this.value = obj == null ? null : obj;\n }\n\n /**\n * Registers the onChange callback (ControlValueAccessor)\n * @internal\n */\n registerOnChange(fn: (v: string | null) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Registers the onTouched callback (ControlValueAccessor)\n * @internal\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Sets the disabled state (ControlValueAccessor)\n * @internal\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**\n * Handles input event and updates value\n * @internal\n */\n handleInput(event: Event) {\n const v = (event.target as HTMLInputElement).value;\n this.value = v;\n this.onChange(v);\n }\n\n /**\n * Marks the input as touched\n * @internal\n */\n touch() {\n this.onTouched();\n }\n\n /**\n * Gets the form control instance\n * @internal\n */\n get control(): AbstractControl | null {\n return this.ngControl ? this.ngControl.control : null;\n }\n\n /**\n * Determines if validation errors should be shown\n * @internal\n */\n get showErrors(): boolean {\n if (this.externalInvalid) return true;\n const c = this.control;\n return !!(c && c.invalid && c.dirty);\n }\n\n /**\n * Gets the first validation error key\n * @internal\n */\n get firstErrorKey(): string | null {\n const c = this.control;\n if (!c || !c.errors) return null;\n return Object.keys(c.errors)[0] || null;\n }\n\n /**\n * Gets the error message to display\n * @internal\n */\n getErrorMessage(): string | null {\n if (this.externalInvalid && this.externalErrorMessage) {\n return this.externalErrorMessage;\n }\n\n const key = this.firstErrorKey;\n if (!key) return null;\n const c = this.control;\n if (this.errorMessages && this.errorMessages[key])\n return this.errorMessages[key];\n const err = c?.errors || {};\n switch (key) {\n case 'required':\n return `${this.label} is required`;\n case 'minlength':\n return `Minimum ${err['minlength']?.requiredLength} characters required`;\n case 'maxlength':\n return `Maximum ${err['maxlength']?.requiredLength} characters allowed`;\n case 'pattern':\n return `${this.label} is not valid`;\n default:\n return err[key] && typeof err[key] === 'string'\n ? err[key]\n : 'Invalid value';\n }\n }\n\n /**\n * Checks if the input has a value (works for all input types including number)\n * @internal\n */\n get hasValue(): boolean {\n if (this.value === null || this.value === undefined) return false;\n if (typeof this.value === 'string') return this.value.length > 0;\n return true; // For numbers including 0\n }\n\n /**\n * Increment number input value\n * @internal\n */\n incrementNumber(inputElement: HTMLInputElement) {\n const step = parseFloat(inputElement.step) || 1;\n const currentValue = parseFloat(this.value || '0');\n const newValue = currentValue + step;\n\n // Check max constraint if exists\n if (inputElement.max && newValue > parseFloat(inputElement.max)) {\n return;\n }\n\n this.value = newValue.toString();\n this.onChange(this.value);\n inputElement.value = this.value;\n }\n\n /**\n * Decrement number input value\n * @internal\n */\n decrementNumber(inputElement: HTMLInputElement) {\n const step = parseFloat(inputElement.step) || 1;\n const currentValue = parseFloat(this.value || '0');\n const newValue = currentValue - step;\n\n // Check min constraint if exists\n if (inputElement.min && newValue < parseFloat(inputElement.min)) {\n return;\n }\n\n this.value = newValue.toString();\n this.onChange(this.value);\n inputElement.value = this.value;\n }\n}\n","<div\n class=\"i-input-wrapper\"\n [class.invalid]=\"showErrors\"\n [class.i-input--fluid]=\"fluid\"\n [class.i-input--no-float]=\"!useFloatLabel\"\n [attr.id]=\"componentId\"\n>\n <div\n [ngClass]=\"useFloatLabel ? 'float-label' : 'normal-input'\"\n class=\"i-input-container\"\n [class.has-icon]=\"icon\"\n >\n <div class=\"i-input-icon-wrapper\">\n @if (icon) {\n <span class=\"i-input-icon\" [attr.aria-hidden]=\"true\">\n <i [class]=\"icon\" [attr.aria-hidden]=\"true\"></i>\n </span>\n }\n <input\n #inputElement\n [id]=\"id || componentId\"\n [type]=\"type\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [value]=\"hideText ? '' : value || ''\"\n (input)=\"handleInput($event)\"\n (blur)=\"touch()\"\n [placeholder]=\"useFloatLabel ? ' ' : placeholder || label\"\n class=\"i-input\"\n [class.has-icon]=\"icon\"\n [class.hide-text]=\"hideText\"\n [class.readonly]=\"readonly\"\n [class.component-border]=\"backgroundStyle === 'component'\"\n [iTooltip]=\"showErrors ? getErrorMessage() || '' : ''\"\n tooltipPosition=\"below\"\n [tooltipDelay]=\"100\"\n />\n @if (type === \"number\" && !disabled && !readonly) {\n <div class=\"i-input-spinners\">\n <button\n type=\"button\"\n class=\"i-input-spinner-button i-input-spinner-up\"\n (click)=\"incrementNumber(inputElement)\"\n [attr.aria-label]=\"'Increment ' + label\"\n tabindex=\"-1\"\n >\n <i class=\"pi pi-chevron-up\"></i>\n </button>\n <button\n type=\"button\"\n class=\"i-input-spinner-button i-input-spinner-down\"\n (click)=\"decrementNumber(inputElement)\"\n [attr.aria-label]=\"'Decrement ' + label\"\n tabindex=\"-1\"\n >\n <i class=\"pi pi-chevron-down\"></i>\n </button>\n </div>\n }\n </div>\n @if (useFloatLabel) {\n <label\n [for]=\"id || componentId\"\n class=\"i-label\"\n [class.floated]=\"forceFloated || hasValue\"\n >{{ label }}</label\n >\n }\n <ng-content></ng-content>\n </div>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n HostListener,\n ElementRef,\n ViewChild,\n AfterViewInit,\n} from '@angular/core';\n\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n FormsModule,\n} from '@angular/forms';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { IInputText } from '../input-text/input-text.component';\nimport { IButton } from '../button/button.component';\n\n/**\n * Supported calendar view types\n */\nexport type CalendarView = 'date' | 'month' | 'year';\n\n/**\n * Calendar Component\n *\n * A customizable date picker component that replaces PrimeNG's p-calendar.\n * Supports date, month, and year selection with flexible formatting.\n * Fully compatible with Angular Reactive Forms and Template-driven Forms.\n *\n * @example\n * ```html\n * <!-- Basic date picker -->\n * <i-calendar [(ngModel)]=\"selectedDate\"></i-calendar>\n *\n * <!-- Month picker -->\n * <i-calendar\n * [(ngModel)]=\"selectedMonth\"\n * [view]=\"'month'\"\n * [dateFormat]=\"'mm-yy'\"\n * placeholder=\"Select Month\">\n * </i-calendar>\n *\n * <!-- Year picker -->\n * <i-calendar\n * [(ngModel)]=\"selectedYear\"\n * [view]=\"'year'\"\n * [dateFormat]=\"'yy'\"\n * placeholder=\"Select Year\">\n * </i-calendar>\n *\n * <!-- With event handling -->\n * <i-calendar\n * [(ngModel)]=\"date\"\n * (onSelect)=\"handleDateSelection($event)\">\n * </i-calendar>\n *\n * <!-- Readonly input -->\n * <i-calendar\n * [(ngModel)]=\"date\"\n * [readonlyInput]=\"true\">\n * </i-calendar>\n * ```\n */\n@Component({\n selector: 'i-calendar',\n standalone: true,\n imports: [FormsModule, IInputText, IButton],\n templateUrl: './calendar.component.html',\n styleUrls: ['./calendar.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ICalendar),\n multi: true,\n },\n ],\n})\nexport class ICalendar implements ControlValueAccessor, AfterViewInit {\n /**\n * Placeholder text for the input\n * @default 'Select Date'\n */\n @Input() placeholder = 'Select Date';\n\n /**\n * Whether the input field is readonly\n * @default false\n */\n @Input() readonlyInput = false;\n\n /**\n * Calendar view mode\n * @default 'date'\n */\n @Input() view: CalendarView = 'date';\n\n /**\n * Date format string\n * Supported tokens:\n * - dd: day (01-31)\n * - mm: month (01-12)\n * - yy: 4-digit year\n * - MMM: short month name\n * - MMMM: full month name\n * @default 'dd/mm/yy'\n */\n @Input() dateFormat = 'dd/mm/yy';\n\n /**\n * Label for the input field\n * @default 'Date'\n */\n @Input() label = 'Date';\n\n /**\n * Whether the calendar is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Whether to use floating label\n * @default true\n */\n @Input() useFloatLabel = true;\n\n /**\n * Icon to display in the input\n * @default 'pi pi-calendar'\n */\n @Input() icon = 'pi pi-calendar';\n\n /**\n * Event emitted when a date is selected\n */\n @Output() onSelect = new EventEmitter<Date>();\n\n /**\n * Selected date value (the actual form control value)\n * @internal\n */\n value: Date | null = null;\n\n /**\n * Formatted date string for display in i-input-text (internal ngModel)\n * @internal\n */\n inputDisplayValue = '';\n\n /**\n * Whether the calendar panel is visible\n * @internal\n */\n isOpen = false;\n\n /**\n * Current view date (for navigation)\n * @internal\n */\n viewDate = new Date();\n\n /**\n * Currently displayed view mode\n * @internal\n */\n currentView: CalendarView = 'date';\n\n /**\n * Calendar days grid\n * @internal\n */\n calendarDays: (Date | null)[][] = [];\n\n /**\n * Months array for month view\n * @internal\n */\n months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n\n /**\n * Short month names\n * @internal\n */\n monthsShort = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ];\n\n /**\n * Weekday names\n * @internal\n */\n weekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n /**\n * Years array for year view\n * @internal\n */\n years: number[] = [];\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-calendar-');\n\n /**\n * Reference to the calendar panel element\n * @internal\n */\n @ViewChild('calendarPanel', { read: ElementRef }) calendarPanel?: ElementRef;\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChange: (v: Date | null) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouched: () => void = () => {};\n\n constructor(private elementRef: ElementRef) {}\n\n ngAfterViewInit(): void {\n this.currentView = this.view;\n }\n\n /**\n * Writes a value to the component (ControlValueAccessor)\n * @internal\n */\n writeValue(date: Date | null): void {\n this.value = date;\n if (date) {\n this.viewDate = new Date(date);\n this.inputDisplayValue = this.formatDate(date);\n } else {\n this.inputDisplayValue = '';\n }\n }\n\n /**\n * Registers the onChange callback (ControlValueAccessor)\n * @internal\n */\n registerOnChange(fn: (v: Date | null) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Registers the onTouched callback (ControlValueAccessor)\n * @internal\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Sets the disabled state (ControlValueAccessor)\n * @internal\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**\n * Toggles the calendar panel\n * @internal\n */\n toggleCalendar(): void {\n if (this.disabled) return;\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.currentView = this.view;\n if (this.value) {\n this.viewDate = new Date(this.value);\n }\n this.updateCalendar();\n }\n }\n\n /**\n * Updates the calendar view based on current view mode\n * @internal\n */\n updateCalendar(): void {\n if (this.currentView === 'date') {\n this.generateCalendarDays();\n } else if (this.currentView === 'year') {\n this.generateYears();\n }\n }\n\n /**\n * Generates the calendar days grid\n * @internal\n */\n generateCalendarDays(): void {\n const year = this.viewDate.getFullYear();\n const month = this.viewDate.getMonth();\n\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const prevLastDay = new Date(year, month, 0);\n\n const firstDayOfWeek = firstDay.getDay();\n const lastDate = lastDay.getDate();\n const prevLastDate = prevLastDay.getDate();\n\n const weeks: (Date | null)[][] = [];\n let week: (Date | null)[] = [];\n\n // Previous month days\n for (let i = firstDayOfWeek - 1; i >= 0; i--) {\n week.push(new Date(year, month - 1, prevLastDate - i));\n }\n\n // Current month days\n for (let day = 1; day <= lastDate; day++) {\n if (week.length === 7) {\n weeks.push(week);\n week = [];\n }\n week.push(new Date(year, month, day));\n }\n\n // Next month days\n const remainingDays = 7 - week.length;\n for (let day = 1; day <= remainingDays; day++) {\n week.push(new Date(year, month + 1, day));\n }\n\n if (week.length > 0) {\n weeks.push(week);\n }\n\n this.calendarDays = weeks;\n }\n\n /**\n * Generates the years array for year view\n * @internal\n */\n generateYears(): void {\n const currentYear = this.viewDate.getFullYear();\n const startYear = Math.floor(currentYear / 10) * 10;\n this.years = Array.from({ length: 12 }, (_, i) => startYear + i);\n }\n\n /**\n * Selects a date\n * @internal\n */\n selectDate(date: Date): void {\n if (!this.isDateInCurrentMonth(date)) {\n return;\n }\n\n if (this.view === 'date') {\n this.value = date;\n this.inputDisplayValue = this.formatDate(date);\n this.onChange(date);\n this.onTouched();\n this.onSelect.emit(date);\n this.isOpen = false;\n }\n }\n\n /**\n * Selects a month\n * @internal\n */\n selectMonth(monthIndex: number): void {\n if (this.view === 'month') {\n const date = new Date(this.viewDate.getFullYear(), monthIndex, 1);\n this.value = date;\n this.inputDisplayValue = this.formatDate(date);\n this.onChange(date);\n this.onTouched();\n this.onSelect.emit(date);\n this.isOpen = false;\n } else {\n // Navigate to month in date view\n this.viewDate = new Date(this.viewDate.getFullYear(), monthIndex, 1);\n this.currentView = 'date';\n this.updateCalendar();\n }\n }\n\n /**\n * Selects a year\n * @internal\n */\n selectYear(year: number): void {\n if (this.view === 'year') {\n const date = new Date(year, 0, 1);\n this.value = date;\n this.inputDisplayValue = this.formatDate(date);\n this.onChange(date);\n this.onTouched();\n this.onSelect.emit(date);\n this.isOpen = false;\n } else {\n // Navigate to year in month or date view\n this.viewDate = new Date(year, this.viewDate.getMonth(), 1);\n this.currentView = this.view === 'month' ? 'month' : 'date';\n this.updateCalendar();\n }\n }\n\n /**\n * Navigates to previous period\n * @internal\n */\n navigatePrevious(): void {\n if (this.currentView === 'date') {\n this.viewDate = new Date(\n this.viewDate.getFullYear(),\n this.viewDate.getMonth() - 1,\n 1\n );\n } else if (this.currentView === 'month') {\n this.viewDate = new Date(\n this.viewDate.getFullYear() - 1,\n this.viewDate.getMonth(),\n 1\n );\n } else if (this.currentView === 'year') {\n const startYear = Math.floor(this.viewDate.getFullYear() / 10) * 10;\n this.viewDate = new Date(startYear - 10, 0, 1);\n }\n this.updateCalendar();\n }\n\n /**\n * Navigates to next period\n * @internal\n */\n navigateNext(): void {\n if (this.currentView === 'date') {\n this.viewDate = new Date(\n this.viewDate.getFullYear(),\n this.viewDate.getMonth() + 1,\n 1\n );\n } else if (this.currentView === 'month') {\n this.viewDate = new Date(\n this.viewDate.getFullYear() + 1,\n this.viewDate.getMonth(),\n 1\n );\n } else if (this.currentView === 'year') {\n const startYear = Math.floor(this.viewDate.getFullYear() / 10) * 10;\n this.viewDate = new Date(startYear + 10, 0, 1);\n }\n this.updateCalendar();\n }\n\n /**\n * Shows month view\n * @internal\n */\n showMonthView(): void {\n this.currentView = 'month';\n this.updateCalendar();\n }\n\n /**\n * Shows year view\n * @internal\n */\n showYearView(): void {\n this.currentView = 'year';\n this.updateCalendar();\n }\n\n /**\n * Gets the header title based on current view\n * @internal\n */\n getHeaderTitle(): string {\n if (this.currentView === 'date') {\n return `${\n this.months[this.viewDate.getMonth()]\n } ${this.viewDate.getFullYear()}`;\n } else if (this.currentView === 'month') {\n return this.viewDate.getFullYear().toString();\n } else {\n const startYear = Math.floor(this.viewDate.getFullYear() / 10) * 10;\n return `${startYear} - ${startYear + 9}`;\n }\n }\n\n /**\n * Checks if a date is the selected date\n * @internal\n */\n isSelectedDate(date: Date): boolean {\n if (!this.value) return false;\n\n if (this.view === 'date') {\n return (\n date.getDate() === this.value.getDate() &&\n date.getMonth() === this.value.getMonth() &&\n date.getFullYear() === this.value.getFullYear()\n );\n }\n return false;\n }\n\n /**\n * Checks if a month is the selected month\n * @internal\n */\n isSelectedMonth(monthIndex: number): boolean {\n if (!this.value) return false;\n return (\n monthIndex === this.value.getMonth() &&\n this.viewDate.getFullYear() === this.value.getFullYear()\n );\n }\n\n /**\n * Checks if a year is the selected year\n * @internal\n */\n isSelectedYear(year: number): boolean {\n if (!this.value) return false;\n return year === this.value.getFullYear();\n }\n\n /**\n * Checks if a date is today\n * @internal\n */\n isToday(date: Date): boolean {\n const today = new Date();\n return (\n date.getDate() === today.getDate() &&\n date.getMonth() === today.getMonth() &&\n date.getFullYear() === today.getFullYear()\n );\n }\n\n /**\n * Checks if a date is in the current view month\n * @internal\n */\n isDateInCurrentMonth(date: Date): boolean {\n return date.getMonth() === this.viewDate.getMonth();\n }\n\n /**\n * Formats a date according to the dateFormat input\n * @internal\n */\n formatDate(date: Date): string {\n if (!date) return '';\n\n let formatted = this.dateFormat;\n\n // Day\n formatted = formatted.replace(\n 'dd',\n date.getDate().toString().padStart(2, '0')\n );\n\n // Month\n formatted = formatted.replace('MMMM', this.months[date.getMonth()]);\n formatted = formatted.replace('MMM', this.monthsShort[date.getMonth()]);\n formatted = formatted.replace(\n 'mm',\n (date.getMonth() + 1).toString().padStart(2, '0')\n );\n\n // Year\n formatted = formatted.replace('yy', date.getFullYear().toString());\n\n return formatted;\n }\n\n /**\n * Closes the calendar when clicking outside\n * @internal\n */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.elementRef.nativeElement.contains(event.target)) {\n this.isOpen = false;\n }\n }\n}\n","<div class=\"i-calendar-container\" [attr.id]=\"componentId\">\n <!-- Input field using i-input-text component -->\n <div class=\"i-calendar-input-wrapper\" (click)=\"toggleCalendar()\">\n <i-input-text\n [id]=\"componentId\"\n [label]=\"label\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"true\"\n [icon]=\"icon\"\n [useFloatLabel]=\"useFloatLabel\"\n [(ngModel)]=\"inputDisplayValue\"\n [forceFloated]=\"!!(inputDisplayValue && inputDisplayValue.length > 0)\"\n />\n </div>\n\n <!-- Calendar Panel -->\n @if (isOpen) {\n <div\n #calendarPanel\n class=\"i-calendar-panel\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- Header -->\n <div class=\"i-calendar-header\">\n <i-button\n [size]=\"'small'\"\n [severity]=\"'primary'\"\n [text]=\"true\"\n icon=\"pi pi-chevron-left\"\n (clicked)=\"navigatePrevious()\"\n aria-label=\"Previous\"\n >\n </i-button>\n\n <div class=\"i-calendar-header-title\">\n @if (currentView === 'date') {\n <i-button\n [severity]=\"'contrast'\"\n [text]=\"true\"\n (clicked)=\"showMonthView()\"\n >\n {{ getHeaderTitle() }}\n </i-button>\n } @else if (currentView === 'month') {\n <i-button\n [severity]=\"'contrast'\"\n [text]=\"true\"\n (clicked)=\"showYearView()\"\n >\n {{ getHeaderTitle() }}\n </i-button>\n } @else {\n <span class=\"i-calendar-title-text\">{{ getHeaderTitle() }}</span>\n }\n </div>\n\n <i-button\n [size]=\"'small'\"\n [severity]=\"'primary'\"\n [text]=\"true\"\n icon=\"pi pi-chevron-right\"\n (clicked)=\"navigateNext()\"\n aria-label=\"Next\"\n >\n </i-button>\n </div>\n\n <!-- Calendar Body -->\n <div class=\"i-calendar-body\">\n <!-- Date View -->\n @if (currentView === 'date') {\n <div class=\"i-calendar-date-view\">\n <!-- Weekday headers -->\n <div class=\"i-calendar-weekdays\">\n @for (day of weekDays; track day) {\n <div class=\"i-calendar-weekday\">{{ day }}</div>\n }\n </div>\n\n <!-- Calendar days -->\n <div class=\"i-calendar-days\">\n @for (week of calendarDays; track week) { @for (date of week; track\n date) { @if (date) {\n <i-button\n [size]=\"'small'\"\n [severity]=\"'contrast'\"\n [text]=\"true\"\n [fluid]=\"true\"\n class=\"i-calendar-selection\"\n [class.selected]=\"isSelectedDate(date)\"\n [class.today]=\"isToday(date)\"\n [disabled]=\"!isDateInCurrentMonth(date)\"\n (clicked)=\"selectDate(date)\"\n >\n {{ date.getDate() }}\n </i-button>\n } } }\n </div>\n </div>\n }\n\n <!-- Month View -->\n @if (currentView === 'month') {\n <div class=\"i-calendar-month-view\">\n @for (month of months; track month; let i = $index) {\n <i-button\n [size]=\"'small'\"\n [severity]=\"'contrast'\"\n [text]=\"true\"\n [fluid]=\"true\"\n class=\"i-calendar-selection\"\n [class.selected]=\"isSelectedMonth(i)\"\n (clicked)=\"selectMonth(i)\"\n >\n {{ monthsShort[i] }}\n </i-button>\n }\n </div>\n }\n\n <!-- Year View -->\n @if (currentView === 'year') {\n <div class=\"i-calendar-year-view\">\n @for (year of years; track year) {\n <i-button\n [size]=\"'small'\"\n [severity]=\"'contrast'\"\n [text]=\"true\"\n [fluid]=\"true\"\n class=\"i-calendar-selection\"\n [text]=\"true\"\n [class.selected]=\"isSelectedYear(year)\"\n (clicked)=\"selectYear(year)\"\n >\n {{ year }}\n </i-button>\n }\n </div>\n }\n </div>\n </div>\n }\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n HostBinding,\n} from '@angular/core';\nimport { IButton } from '../button/button.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Card Component\n *\n * A container component that displays content in a styled card layout.\n * Optionally includes a header title and a close button.\n *\n * @example\n * ```html\n * <!-- Basic card with content -->\n * <i-card>\n * <p>Card content goes here</p>\n * </i-card>\n *\n * <!-- Card with title -->\n * <i-card title=\"My Card Title\">\n * <p>Card content</p>\n * </i-card>\n *\n * <!-- Closable card -->\n * <i-card\n * title=\"Closable Card\"\n * [closable]=\"true\"\n * (closeCard)=\"onCardClose()\">\n * <p>This card can be closed</p>\n * </i-card>\n * ```\n *\n * @remarks\n * Use content projection to add any content inside the card body.\n * The card automatically handles header rendering when a title is provided.\n */\n@Component({\n selector: 'i-card',\n imports: [IButton],\n templateUrl: './card.component.html',\n styleUrl: './card.component.scss',\n})\nexport class ICard {\n /**\n * Optional title displayed in the card header\n */\n @Input() title?: string;\n\n /**\n * Whether the card can be closed (shows close button)\n * @default false\n */\n @Input() closable: boolean = false;\n\n /**\n * Whether the card should fill the height of its container\n * @default false\n */\n @Input() fullHeight: boolean = false;\n\n /**\n * Host binding for full-height class\n * @internal\n */\n @HostBinding('class.i-card--full-height') get isFullHeight() {\n return this.fullHeight;\n }\n\n /**\n * Event emitted when the close button is clicked\n */\n @Output() closeCard = new EventEmitter<void>();\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-card-');\n\n /**\n * Handles the close button click event\n * @internal\n */\n onCloseCard(): void {\n this.closeCard.emit();\n }\n}\n","<div class=\"i-card\" [attr.id]=\"componentId\">\n <!-- Header Section -->\n <div class=\"i-card-header\">\n <ng-content select=\"[slot=header]\">\n @if (title) {\n <span class=\"i-card-title\">{{ title }}</span>\n }\n </ng-content>\n @if (closable) {\n <i-button\n [severity]=\"'contrast'\"\n [text]=\"true\"\n [icon]=\"'pi pi-times'\"\n [size]=\"'small'\"\n (click)=\"onCloseCard()\"\n />\n }\n </div>\n\n <!-- Content Section -->\n <div class=\"i-card-body\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer Section -->\n <div class=\"i-card-footer\">\n <ng-content select=\"[slot=footer]\"></ng-content>\n </div>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n} from '@angular/core';\n\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Supported checkbox sizes\n */\nexport type ICheckboxSize = 'small' | 'medium' | 'large';\n\n/**\n * Checkbox Component\n *\n * A form control checkbox component with multiple sizes and states.\n * Supports indeterminate state and is fully compatible with Angular Reactive Forms.\n *\n * @example\n * ```html\n * <!-- Basic checkbox -->\n * <i-checkbox label=\"Accept terms\"></i-checkbox>\n *\n * <!-- Checkbox with ngModel -->\n * <i-checkbox\n * label=\"Subscribe to newsletter\"\n * [(ngModel)]=\"subscribed\">\n * </i-checkbox>\n *\n * <!-- Checkbox in reactive form -->\n * <i-checkbox\n * label=\"Agree to privacy policy\"\n * formControlName=\"agreedToPolicy\">\n * </i-checkbox>\n *\n * <!-- Disabled checkbox -->\n * <i-checkbox\n * label=\"Disabled option\"\n * [disabled]=\"true\">\n * </i-checkbox>\n *\n * <!-- Indeterminate checkbox (e.g., for \"select all\") -->\n * <i-checkbox\n * label=\"Select All\"\n * [indeterminate]=\"someSelected\">\n * </i-checkbox>\n *\n * <!-- Different sizes -->\n * <i-checkbox label=\"Small\" size=\"small\"></i-checkbox>\n * <i-checkbox label=\"Medium\" size=\"medium\"></i-checkbox>\n * <i-checkbox label=\"Large\" size=\"large\"></i-checkbox>\n * ```\n *\n * @remarks\n * This component implements ControlValueAccessor for seamless integration with Angular Forms.\n * The indeterminate state is useful for parent checkboxes in hierarchical selections.\n */\n@Component({\n selector: 'i-checkbox',\n standalone: true,\n imports: [],\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ICheckbox),\n multi: true,\n },\n ],\n})\nexport class ICheckbox implements ControlValueAccessor {\n /**\n * Label text displayed next to the checkbox\n */\n @Input() label?: string;\n\n /**\n * HTML id attribute for the checkbox input element\n */\n @Input() id?: string;\n\n /**\n * Whether the checkbox is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Whether the checkbox is readonly (cannot be changed by user)\n * @default false\n */\n @Input() readonly = false;\n\n /**\n * Size of the checkbox\n * @default 'medium'\n */\n @Input() size: ICheckboxSize = 'medium';\n\n /**\n * Whether the checkbox is in indeterminate state\n * @default false\n */\n @Input() indeterminate = false;\n\n /**\n * Checked state of the checkbox\n */\n @Input()\n set checked(value: boolean) {\n this._checked = !!value;\n }\n get checked(): boolean {\n return this._checked;\n }\n\n /**\n * Event emitted when checkbox state changes\n */\n @Output() onChange = new EventEmitter<boolean>();\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-checkbox-');\n\n /**\n * Internal checked state\n * @internal\n */\n private _checked = false;\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChangeCallback: (value: boolean) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouchedCallback: () => void = () => {};\n\n /**\n * Toggles the checkbox state\n * @internal\n */\n toggle(): void {\n if (this.disabled || this.readonly) return;\n\n if (this.indeterminate) {\n this.indeterminate = false;\n this._checked = false;\n } else {\n this._checked = !this._checked;\n }\n\n this.onChangeCallback(this._checked);\n this.onTouchedCallback();\n\n setTimeout(() => {\n this.onChange.emit(this._checked);\n }, 0);\n }\n\n /**\n * Writes a value to the checkbox (ControlValueAccessor)\n * @internal\n */\n writeValue(value: boolean): void {\n this._checked = !!value;\n }\n\n /**\n * Registers the onChange callback (ControlValueAccessor)\n * @internal\n */\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChangeCallback = fn;\n }\n\n /**\n * Registers the onTouched callback (ControlValueAccessor)\n * @internal\n */\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n /**\n * Sets the disabled state (ControlValueAccessor)\n * @internal\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","<div\n class=\"i-checkbox-wrapper\"\n [class.i-checkbox--disabled]=\"disabled\"\n [class.i-checkbox--readonly]=\"readonly\"\n [class.i-checkbox--small]=\"size === 'small'\"\n [class.i-checkbox--medium]=\"size === 'medium'\"\n [class.i-checkbox--large]=\"size === 'large'\"\n>\n <div\n class=\"i-checkbox\"\n [class.i-checkbox--checked]=\"checked\"\n (click)=\"toggle()\"\n [attr.id]=\"id || componentId\"\n role=\"checkbox\"\n [attr.aria-checked]=\"indeterminate ? 'mixed' : checked\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-readonly]=\"readonly\"\n [attr.aria-labelledby]=\"label ? (id || componentId) + '-label' : null\"\n tabindex=\"0\"\n (keydown.space)=\"$event.preventDefault(); toggle()\"\n (keydown.enter)=\"$event.preventDefault(); toggle()\"\n >\n @if (!checked && indeterminate) {\n <i class=\"pi pi-minus i-checkbox-icon\"></i>\n } @if (!indeterminate) {\n <i\n class=\"pi pi-check i-checkbox-icon\"\n [style.opacity]=\"checked ? '1' : '0'\"\n ></i>\n }\n </div>\n @if (label) {\n <label\n [id]=\"(id || componentId) + '-label'\"\n class=\"i-checkbox-label\"\n (click)=\"toggle()\"\n >\n {{ label }}\n </label>\n }\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Chip Component\n *\n * A component for displaying removable tags, labels, or compact information.\n * Supports icons, images, and removal functionality.\n *\n * @example\n * ```html\n * <!-- Basic chip -->\n * <i-chip label=\"Angular\"></i-chip>\n *\n * <!-- Chip with icon -->\n * <i-chip label=\"John Doe\" icon=\"pi pi-user\"></i-chip>\n *\n * <!-- Chip with image -->\n * <i-chip label=\"Jane Smith\" image=\"assets/avatar.jpg\"></i-chip>\n *\n * <!-- Removable chip -->\n * <i-chip\n * label=\"TypeScript\"\n * [removable]=\"true\"\n * (onRemove)=\"handleRemove($event)\">\n * </i-chip>\n *\n * <!-- Custom style -->\n * <i-chip\n * label=\"Premium\"\n * styleClass=\"chip-premium\">\n * </i-chip>\n * ```\n *\n * @remarks\n * This component uses OnPush change detection for optimal performance.\n */\n@Component({\n selector: 'i-chip',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './chip.component.html',\n styleUrls: ['./chip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IChip {\n /**\n * Text label displayed on the chip\n */\n @Input() label?: string;\n\n /**\n * Icon class name to display (e.g., 'pi pi-user')\n */\n @Input() icon?: string;\n\n /**\n * Image URL to display (e.g., avatar)\n */\n @Input() image?: string;\n\n /**\n * Whether the chip can be removed\n * @default false\n */\n @Input() removable = false;\n\n /**\n * Icon class for the remove button\n * @default 'pi pi-times-circle'\n */\n @Input() removeIcon = 'pi pi-times-circle';\n\n /**\n * Additional CSS classes to apply\n */\n @Input() styleClass?: string;\n\n /**\n * Whether the chip is disabled (prevents removal)\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Event emitted when the remove icon is clicked\n */\n @Output() onRemove = new EventEmitter<Event>();\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-chip-');\n\n /**\n * Handles remove icon click\n * @internal\n */\n onRemoveClick(event: Event): void {\n if (!this.disabled) {\n this.onRemove.emit(event);\n }\n }\n}\n","<div class=\"i-chip\" [class.i-chip-disabled]=\"disabled\" [ngClass]=\"styleClass\">\n @if (icon) {\n <i [class]=\"icon\" class=\"i-chip-icon\"></i>\n } @if (image) {\n <img [src]=\"image\" [alt]=\"label\" class=\"i-chip-image\" />\n } @if (label) {\n <span class=\"i-chip-text\">{{ label }}</span>\n }\n <ng-content></ng-content>\n @if (removable && !disabled) {\n <i\n [class]=\"removeIcon\"\n class=\"i-chip-remove-icon\"\n (click)=\"onRemoveClick($event)\"\n ></i>\n }\n</div>\n","\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { IChip } from '../chip/chip.component';\nimport { IButton } from '../button/button.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\nexport interface ChipItem {\n label: string;\n value: unknown;\n icon?: string;\n removable?: boolean;\n disabled?: boolean;\n}\n\nexport interface ChipRemoveEvent {\n chip: ChipItem;\n originalEvent: Event;\n}\n\n@Component({\n selector: 'i-chips',\n standalone: true,\n imports: [IChip, IButton],\n templateUrl: './chips.component.html',\n styleUrls: ['./chips.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IChipsComponent implements OnChanges, AfterViewInit, OnDestroy {\n @Input() chips: ChipItem[] = [];\n @Input() removable = true;\n @Input() disabled = false;\n @Input() collapseOnOverflow = false;\n @Input() overflowLabel?: string;\n /** Render chips inside a boxed input-like container */\n @Input() boxed = false;\n @Input() allowCloseAll = false;\n\n /** Label text for float label */\n @Input() label?: string;\n /** Whether to use floating label style */\n @Input() useFloatLabel = false;\n /** Show error state styling */\n @Input() showError = false;\n\n @Output() closedAll = new EventEmitter<void>();\n\n @Output() removeChip = new EventEmitter<ChipRemoveEvent>();\n\n @ViewChild('chipsViewport', { static: false })\n chipsViewportRef?: ElementRef<HTMLDivElement>;\n\n @ViewChild('chipsList', { static: false })\n chipsListRef?: ElementRef<HTMLDivElement>;\n\n chipsOverflow = false;\n private resizeObserver?: ResizeObserver;\n private overflowRafId?: number;\n\n /** Unique component identifier */\n componentId = UniqueComponentId('i-chips-');\n\n constructor(private cdr: ChangeDetectorRef, private ngZone: NgZone) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['collapseOnOverflow']) {\n if (this.collapseOnOverflow) {\n this.setupOverflowHandling();\n } else {\n this.teardownOverflowHandling();\n }\n }\n\n if (changes['chips']) {\n this.queueOverflowCheck();\n }\n }\n\n ngAfterViewInit(): void {\n if (this.collapseOnOverflow) {\n this.setupOverflowHandling();\n }\n }\n\n ngOnDestroy(): void {\n this.teardownOverflowHandling();\n }\n\n trackByValue(index: number, chip: ChipItem): unknown {\n return chip.value ?? index;\n }\n\n onChipRemove(chip: ChipItem, event: Event): void {\n if (this.disabled || chip.disabled || !(chip.removable ?? this.removable)) {\n return;\n }\n\n event.stopPropagation();\n this.removeChip.emit({ chip, originalEvent: event });\n }\n\n get overflowText(): string {\n if (this.overflowLabel && this.overflowLabel.trim().length) {\n return this.overflowLabel;\n }\n\n const count = this.chips?.length ?? 0;\n return count === 1 ? '1 item selected' : `${count} items selected`;\n }\n\n private setupOverflowHandling(): void {\n if (!this.collapseOnOverflow) return;\n if (!this.chipsViewportRef?.nativeElement) return;\n\n this.resizeObserver?.disconnect();\n this.ngZone.runOutsideAngular(() => {\n this.resizeObserver = new ResizeObserver(() => this.queueOverflowCheck());\n this.resizeObserver.observe(this.chipsViewportRef!.nativeElement);\n });\n\n this.queueOverflowCheck();\n }\n\n private teardownOverflowHandling(): void {\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n\n if (this.overflowRafId) {\n cancelAnimationFrame(this.overflowRafId);\n this.overflowRafId = undefined;\n }\n\n if (this.chipsOverflow) {\n this.chipsOverflow = false;\n this.cdr.markForCheck();\n }\n }\n\n private queueOverflowCheck(): void {\n if (!this.collapseOnOverflow) return;\n if (!this.chipsViewportRef?.nativeElement) return;\n\n if (this.overflowRafId) {\n cancelAnimationFrame(this.overflowRafId);\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.overflowRafId = requestAnimationFrame(() => {\n this.overflowRafId = undefined;\n this.checkOverflow();\n });\n });\n }\n\n private checkOverflow(): void {\n if (!this.collapseOnOverflow) return;\n if (!this.chipsViewportRef?.nativeElement) return;\n if (!this.chipsListRef?.nativeElement) return;\n\n const viewport = this.chipsViewportRef.nativeElement;\n const chipsList = this.chipsListRef.nativeElement;\n\n // Compare the chips list scroll width against the viewport's client width\n const isOverflowing = chipsList.scrollWidth > viewport.clientWidth + 1;\n\n if (this.chipsOverflow !== isOverflowing) {\n this.ngZone.run(() => {\n this.chipsOverflow = isOverflowing;\n this.cdr.markForCheck();\n });\n }\n }\n\n // NOTE: removal of all chips is handled by parent via the `closedAll` event.\n\n /** Handle click on the internal close-all button. */\n onCloseAllClicked(event: Event): void {\n event.stopPropagation();\n // Emit a single event for parents to clear their data source\n this.closedAll.emit();\n }\n}\n","<div\n class=\"i-chips-wrapper\"\n [class.i-chips-wrapper--float]=\"useFloatLabel\"\n [class.i-chips-wrapper--error]=\"showError\"\n [attr.id]=\"componentId\"\n>\n <div\n class=\"i-chips-container\"\n #chipsViewport\n [class.i-chips-container--collapse]=\"collapseOnOverflow\"\n [class.i-chips-container--overflow]=\"collapseOnOverflow && chipsOverflow\"\n [class.i-chips-box]=\"boxed\"\n [class.i-chips--disabled]=\"disabled\"\n [class.i-chips--empty]=\"!chips || chips.length === 0\"\n [attr.tabindex]=\"boxed && !disabled ? 0 : null\"\n >\n <div class=\"i-chips-list\" #chipsList>\n @for (chip of chips; track trackByValue($index, chip)) {\n <i-chip\n [label]=\"chip.label\"\n [icon]=\"chip.icon\"\n [removable]=\"chip.removable ?? removable\"\n [disabled]=\"disabled || !!chip.disabled\"\n (onRemove)=\"onChipRemove(chip, $event)\"\n ></i-chip>\n }\n </div>\n\n @if (allowCloseAll && chips && chips.length > 0) {\n <div class=\"i-chips-actions\">\n <i-button\n [text]=\"true\"\n [size]=\"'xtra-small'\"\n [severity]=\"'contrast'\"\n [icon]=\"'pi pi-times'\"\n (clicked)=\"onCloseAllClicked($event)\"\n ></i-button>\n </div>\n } @if (collapseOnOverflow && chipsOverflow) {\n <div class=\"i-chips-summary\">\n {{ overflowText }}\n </div>\n }\n </div>\n\n @if (useFloatLabel && label) {\n <label\n class=\"i-chips-label\"\n [class.i-chips-label--floated]=\"chips && chips.length > 0\"\n [class.i-chips-label--error]=\"showError\"\n >\n {{ label }}\n </label>\n }\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IButton } from '../../../button/button.component';\nimport { ISeverity } from '../../../../enums/IButtonSeverity';\n\n@Component({\n selector: 'i-dialog-actions',\n imports: [IButton],\n templateUrl: './dialog-actions.component.html',\n styleUrl: './dialog-actions.component.scss',\n})\nexport class IDialogActions {\n @Input() submitLabel = 'Submit';\n @Input() cancelLabel = 'Cancel';\n @Input() severity: ISeverity = 'primary';\n @Input() showCancel = true;\n @Input() showSubmit = true;\n @Input() submitDisabled = false;\n @Output() cancelEvent = new EventEmitter<void>();\n @Output() submitEvent = new EventEmitter<void>();\n\n onCancel() {\n this.cancelEvent.emit();\n }\n\n onSubmit() {\n this.submitEvent.emit();\n }\n}\n","<div class=\"dialog-actions\">\n @if (showCancel) {\n <i-button [text]=\"true\" severity=\"secondary\" (click)=\"onCancel()\">{{\n cancelLabel\n }}</i-button>\n }\n @if (showSubmit) {\n <i-button\n [outlined]=\"true\"\n [severity]=\"severity\"\n [disabled]=\"submitDisabled\"\n type=\"submit\"\n (click)=\"onSubmit()\"\n >{{ submitLabel }}</i-button\n >\n }\n</div>\n","import { Component, signal, OnInit } from '@angular/core';\nimport {\n IDynamicDialogConfig,\n IDynamicDialogRef,\n} from '../dialog/services/dialog.interfaces';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { IDialogActions } from '../dialog/inner/dialog-actions/dialog-actions.component';\nimport { ISeverity } from '@shared/enums/IButtonSeverity';\n\n/**\n * Confirmation Dialog Component\n *\n * A pre-built dialog component for confirmation prompts.\n * Uses signals for reactive state management and is typically opened via the dialog service.\n *\n * @example\n * ```typescript\n * // In your component:\n * constructor(private confirmationService: ConfirmationDialogService) {}\n *\n * deleteItem() {\n * this.confirmationService.confirm({\n * message: 'Are you sure you want to delete this item?',\n * header: 'Confirm Delete',\n * severity: 'danger',\n * acceptLabel: 'Delete',\n * rejectLabel: 'Cancel',\n * accept: () => {\n * // User confirmed\n * this.performDelete();\n * },\n * reject: () => {\n * // User cancelled\n * }\n * });\n * }\n * ```\n *\n * @remarks\n * This component is designed to be used with the dialog service\n * and should not typically be instantiated directly.\n * Uses Angular signals for efficient change detection.\n */\n@Component({\n selector: 'i-confirmation-dialog',\n standalone: true,\n imports: [IDialogActions],\n templateUrl: './confirmation-dialog.component.html',\n styleUrl: './confirmation-dialog.component.scss',\n})\nexport class ConfirmationDialogComponent implements OnInit {\n /**\n * Reference to the dialog instance\n * Injected by the dialog service\n * @internal\n */\n public dialogRef?: IDynamicDialogRef;\n\n /**\n * Dialog configuration containing data passed from the service\n * @internal\n */\n public config: IDynamicDialogConfig = {};\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-confirmation-dialog-');\n\n /**\n * Visual severity/style of the dialog\n * @default 'primary'\n */\n severity = signal<ISeverity>('primary');\n\n /**\n * Main message text displayed in the dialog body\n * @default ''\n */\n message = signal('');\n\n /**\n * Dialog header text\n * @default 'Are you sure?'\n */\n header = signal('Are you sure?');\n\n /**\n * Label for the accept/confirm button\n * @default 'Confirm'\n */\n acceptLabel: string = 'Confirm';\n\n /**\n * Label for the reject/cancel button\n * @default 'Cancel'\n */\n rejectLabel: string = 'Cancel';\n\n ngOnInit(): void {\n this.message.set(this.config.data?.message || '');\n this.header.set(this.config.data?.header || 'Are you sure?');\n this.severity.set(this.config.data?.severity || 'primary');\n }\n\n /**\n * Handles confirm button click\n * Closes dialog with true result\n * @internal\n */\n onConfirm(): void {\n this.dialogRef?.close(true);\n }\n\n /**\n * Handles cancel button click\n * Closes dialog with false result\n * @internal\n */\n onCancel(): void {\n this.dialogRef?.close(false);\n }\n}\n","<div class=\"confirmation-dialog\" [attr.id]=\"componentId\">\n <div class=\"confirmation-content\">\n <p class=\"confirmation-message\">{{ message() }}</p>\n </div>\n <i-dialog-actions\n [title]=\"header()\"\n [submitLabel]=\"acceptLabel\"\n [cancelLabel]=\"rejectLabel\"\n [severity]=\"severity()\"\n (cancelEvent)=\"onCancel()\"\n (submitEvent)=\"onConfirm()\"\n ></i-dialog-actions>\n</div>\n","import { Input, Output, EventEmitter, Directive } from '@angular/core';\n\nexport type DialogBreakpoints = Record<\n string,\n { width?: string; height?: string }\n>;\nexport type DialogContentStyle = Record<string, string | number>;\n\n@Directive()\nexport abstract class AbstractDialog {\n @Input() header?: string;\n @Input() width: string = '800px';\n @Input() height?: string;\n @Input() closable: boolean = true;\n @Input() modal: boolean = true;\n /**\n * When true, clicking the overlay backdrop will close the dialog.\n * Defaults to false — the dialog must be closed via the close button or ESC key,\n * or programmatically.\n */\n @Input() dismissableMask: boolean = false;\n @Input() contentStyle?: DialogContentStyle;\n @Input() breakpoints?: DialogBreakpoints;\n @Input() visible: boolean = false;\n @Output() visibleChange = new EventEmitter<boolean>();\n}\n","import {\n Component,\n HostListener,\n ElementRef,\n ViewChild,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ICard } from '../card/card.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { AbstractDialog } from './dialog-base';\n\n/**\n * Dialog Component\n *\n * A modal dialog component for displaying content in an overlay.\n * Supports customizable header, dimensions, and close behavior.\n *\n * @example\n * ```html\n * <!-- Basic dialog -->\n * <i-dialog\n * [(visible)]=\"displayDialog\"\n * header=\"Dialog Title\">\n * <p>Dialog content goes here</p>\n * </i-dialog>\n *\n * <!-- Dialog with custom width -->\n * <i-dialog\n * [(visible)]=\"showDialog\"\n * header=\"Custom Size\"\n * width=\"480px\"\n * height=\"320px\">\n * <p>Content</p>\n * </i-dialog>\n *\n * <!-- Non-modal dialog -->\n * <i-dialog\n * [(visible)]=\"displayDialog\"\n * [modal]=\"false\"\n * header=\"Non-Modal\">\n * <p>Click outside won't close this</p>\n * </i-dialog>\n *\n * <!-- Non-closable dialog -->\n * <i-dialog\n * [(visible)]=\"displayDialog\"\n * [closable]=\"false\"\n * header=\"Cannot Close\">\n * <p>Must interact with dialog to close</p>\n * <button (click)=\"displayDialog = false\">OK</button>\n * </i-dialog>\n * ```\n *\n * @remarks\n * The dialog automatically manages body scroll lock when visible.\n * Press Escape to close if closable is true.\n */\n@Component({\n selector: 'i-dialog',\n imports: [CommonModule, ICard],\n templateUrl: './dialog.component.html',\n styleUrl: './dialog.component.scss',\n})\nexport class IDialog extends AbstractDialog implements OnInit, OnDestroy {\n /**\n * Reference to the dialog element for positioning and styling\n * @internal\n */\n @ViewChild('dialogElement', { static: false }) dialogElement?: ElementRef;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-dialog-');\n\n /**\n * Current applied width from breakpoints\n * @internal\n */\n currentWidth: string = '';\n\n /**\n * Current applied height from breakpoints\n * @internal\n */\n currentHeight: string = '';\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {\n if (this.visible) {\n this.show();\n }\n this.applyBreakpoints();\n }\n\n ngOnDestroy(): void {\n this.hide();\n }\n\n /**\n * Shows the dialog and locks body scroll\n */\n show(): void {\n this.visible = true;\n this.visibleChange.emit(true);\n document.body.style.overflow = 'hidden';\n this.cdr.detectChanges();\n }\n\n /**\n * Hides the dialog and unlocks body scroll\n */\n hide(): void {\n this.visible = false;\n this.visibleChange.emit(false);\n document.body.style.overflow = '';\n }\n\n /**\n * Handles Escape key press to close dialog\n * @internal\n */\n @HostListener('document:keydown.escape')\n onEscapeKey(): void {\n if (this.closable && this.visible) {\n this.hide();\n }\n }\n\n /**\n * Handles overlay click to close modal dialog.\n * Only fires when [dismissableMask]=\"true\" is set — by default dialogs\n * are not closed by clicking the backdrop.\n * @internal\n */\n onOverlayClick(event: Event): void {\n // Check if click was directly on overlay (not on dialog container or its children)\n const target = event.target as HTMLElement;\n const overlay = event.currentTarget as HTMLElement;\n\n if (\n this.modal &&\n this.closable &&\n this.dismissableMask &&\n target === overlay\n ) {\n this.hide();\n }\n }\n\n /**\n * Handles close button click\n * @internal\n */\n onCloseClick(): void {\n if (this.closable) {\n this.hide();\n }\n }\n\n /**\n * Handles window resize to apply responsive breakpoints\n * @internal\n */\n @HostListener('window:resize')\n onWindowResize(): void {\n this.applyBreakpoints();\n }\n\n /**\n * Applies responsive breakpoints based on current window width\n * @internal\n */\n private applyBreakpoints(): void {\n if (!this.breakpoints) {\n this.currentWidth = this.width;\n this.currentHeight = this.height || '';\n return;\n }\n\n const windowWidth = window.innerWidth;\n const sortedBreakpoints = Object.keys(this.breakpoints)\n .map((key) => ({\n breakpoint: parseInt(key),\n value: this.breakpoints![key],\n }))\n .sort((a, b) => b.breakpoint - a.breakpoint);\n\n // Find the first matching breakpoint\n const match = sortedBreakpoints.find((bp) => windowWidth <= bp.breakpoint);\n\n if (match) {\n // Object format with width and/or height\n this.currentWidth = match.value.width || this.width;\n this.currentHeight = match.value.height || this.height || '';\n } else {\n // No breakpoint matched, use default values\n this.currentWidth = this.width;\n this.currentHeight = this.height || '';\n }\n\n this.cdr.detectChanges();\n }\n}\n","@if (visible) {\n <div\n class=\"i-dialog-overlay\"\n (click)=\"onOverlayClick($event)\"\n [attr.id]=\"componentId\"\n >\n <div\n #dialogElement\n class=\"i-dialog-container\"\n [style.width]=\"currentWidth || width\"\n [style.height]=\"currentHeight || height\"\n >\n <i-card\n [title]=\"header\"\n [closable]=\"closable\"\n [fullHeight]=\"true\"\n (closeCard)=\"onCloseClick()\"\n >\n <!-- Main content -->\n <div class=\"i-dialog-content\" [ngStyle]=\"contentStyle\">\n <ng-content></ng-content>\n </div>\n <!-- Footer content -->\n <ng-content slot=\"footer\" select=\"[slot='footer']\"></ng-content>\n </i-card>\n </div>\n </div>\n}\n","import {\n Injectable,\n ComponentRef,\n ViewContainerRef,\n Injector,\n Type,\n createComponent,\n EnvironmentInjector,\n inject,\n ApplicationRef,\n} from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { IDialog } from '../dialog.component';\nimport { IDynamicDialogConfig, IDynamicDialogRef } from './dialog.interfaces';\n\n/**\n * Service for dynamically creating and managing dialog components.\n *\n * This service provides a programmatic way to open dialogs with custom components,\n * handling the component lifecycle, DOM attachment, change detection, and cleanup\n * automatically. It creates a dialog wrapper and injects the specified component\n * into it with optional configuration and data.\n *\n * @example\n * ```typescript\n * // Basic usage\n * constructor(private dialogService: DialogService) {}\n *\n * openDialog() {\n * const ref = this.dialogService.open(MyCustomComponent, {\n * header: 'Edit User',\n * width: '500px',\n * data: { userId: 123 }\n * });\n *\n * ref.onClose.subscribe(result => {\n * if (result) {\n * console.log('Dialog closed with result:', result);\n * }\n * });\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Responsive dialog with custom styles\n * openResponsiveDialog() {\n * this.dialogService.open(FormComponent, {\n * header: 'Create New Item',\n * width: '600px',\n * contentStyle: { overflow: 'auto', padding: '20px' },\n * breakpoints: {\n * '960px': '75vw',\n * '640px': '90vw'\n * },\n * data: { mode: 'create' }\n * });\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DialogService {\n /**\n * Angular's environment injector for creating components.\n * @internal\n */\n private environmentInjector = inject(EnvironmentInjector);\n\n /**\n * Application reference for managing component views in Angular's change detection.\n * @internal\n */\n private appRef = inject(ApplicationRef);\n\n /**\n * Opens a dialog with the specified component and configuration.\n *\n * Creates a dialog wrapper component, instantiates the provided component inside it,\n * and handles all necessary setup including change detection, DOM attachment, and\n * event subscriptions. The component instance will receive `config`, `dialogRef`,\n * and `data` properties if they are defined on the component.\n *\n * @template T The type of the component to display in the dialog\n * @param component The component class to render inside the dialog\n * @param config Configuration options for the dialog appearance and behavior\n * @returns A reference object that can be used to control the dialog and subscribe to close events\n *\n * @example\n * ```typescript\n * const ref = this.dialogService.open(UserFormComponent, {\n * header: 'Edit User',\n * width: '500px',\n * height: '600px',\n * closable: true,\n * modal: true,\n * data: {\n * user: this.selectedUser,\n * mode: 'edit'\n * }\n * });\n *\n * // Handle dialog close\n * ref.onClose.subscribe(savedUser => {\n * if (savedUser) {\n * this.updateUserList(savedUser);\n * }\n * });\n *\n * // Programmatically close the dialog\n * setTimeout(() => {\n * ref.close();\n * }, 5000);\n * ```\n */\n open<T>(\n component: Type<T>,\n config: IDynamicDialogConfig = {}\n ): IDynamicDialogRef {\n // Create the dialog wrapper component\n const dialogRef = createComponent(IDialog, {\n environmentInjector: this.environmentInjector,\n });\n\n // Create the dynamic component to be displayed inside the dialog\n const componentRef = createComponent(component, {\n environmentInjector: this.environmentInjector,\n });\n\n // Set dialog properties\n dialogRef.instance.header = config.header;\n dialogRef.instance.width = config.width || '300px';\n dialogRef.instance.height = config.height;\n dialogRef.instance.contentStyle = config.contentStyle;\n dialogRef.instance.breakpoints = config.breakpoints;\n dialogRef.instance.closable = config.closable !== false;\n dialogRef.instance.modal = config.modal !== false;\n dialogRef.instance.dismissableMask = config.dismissableMask ?? false;\n\n // Create the dialog reference first so we can pass it to the component\n const closeSubject = new Subject<any>();\n let isClosing = false; // Flag to prevent circular calls\n\n const ref: IDynamicDialogRef = {\n close: (result?: any) => {\n if (isClosing) return; // Prevent circular calls\n isClosing = true;\n\n dialogRef.instance.hide();\n\n // Properly detach views from Angular's change detection before destroying\n this.appRef.detachView(componentRef.hostView);\n this.appRef.detachView(dialogRef.hostView);\n\n if (dialogRef.location.nativeElement.parentNode) {\n dialogRef.location.nativeElement.parentNode.removeChild(\n dialogRef.location.nativeElement\n );\n }\n componentRef.destroy();\n dialogRef.destroy();\n closeSubject.next(result);\n closeSubject.complete();\n },\n onClose: closeSubject.asObservable(),\n instance: dialogRef.instance,\n };\n\n // Inject data and dialog reference into the dynamic component\n if (componentRef.instance && typeof componentRef.instance === 'object') {\n // Always set config if the property exists\n if ('config' in componentRef.instance) {\n (componentRef.instance as any).config = config;\n }\n // Always set dialogRef if the property exists\n if ('dialogRef' in componentRef.instance) {\n (componentRef.instance as any).dialogRef = ref;\n }\n // Set data from config if it exists and the property exists on the component\n if ('data' in componentRef.instance) {\n (componentRef.instance as any).data = config.data || {};\n }\n }\n\n // Attach both components to Angular's change detection cycle\n // This is critical for proper change detection in dynamic components\n this.appRef.attachView(dialogRef.hostView);\n this.appRef.attachView(componentRef.hostView);\n\n // Trigger change detection to ensure ngOnInit is called with the injected data\n componentRef.changeDetectorRef.detectChanges();\n\n document.body.appendChild(dialogRef.location.nativeElement);\n\n // Subscribe to dialog visibility changes to handle close button, ESC key, and overlay clicks\n dialogRef.instance.visibleChange.subscribe((visible: boolean) => {\n if (!visible && !isClosing) {\n // Dialog was closed via close button, ESC, or overlay click\n ref.close();\n }\n });\n\n // Show the dialog and wait for the next tick to ensure DOM is rendered\n dialogRef.instance.show();\n\n // Insert the dynamic component into the dialog content\n const dialogContent =\n dialogRef.location.nativeElement.querySelector('.i-dialog-content');\n if (dialogContent) {\n dialogContent.appendChild(componentRef.location.nativeElement);\n }\n\n return ref;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { take } from 'rxjs/operators';\nimport { DialogService } from '../../dialog/services/dialog.service';\nimport { IDynamicDialogRef } from '../../dialog/services/dialog.interfaces';\nimport { ISeverity } from '@shared/enums/IButtonSeverity';\n\n/**\n * Configuration options for confirmation dialogs.\n */\nexport interface ConfirmationDialogConfig {\n /** The visual severity/style of the confirmation dialog (e.g., 'primary', 'danger', 'warning'). Defaults to 'primary' */\n severity?: ISeverity;\n\n /** The confirmation message to display to the user */\n message: string;\n\n /** Optional header text for the dialog title bar */\n header?: string;\n\n /** Custom label for the accept/confirm button. Defaults to 'Confirm' */\n acceptLabel?: string;\n\n /** Custom label for the reject/cancel button. Defaults to 'Cancel' */\n rejectLabel?: string;\n\n /** Callback function executed when the user accepts/confirms the dialog */\n accept?: () => void;\n\n /** Callback function executed when the user rejects/cancels the dialog */\n reject?: () => void;\n}\n\n/**\n * Service for displaying confirmation dialogs to users.\n *\n * This service provides a simplified API for showing confirmation dialogs with\n * accept/reject actions. It automatically handles dialog creation, button labels,\n * and callback execution based on user choice.\n *\n * @example\n * ```typescript\n * constructor(private confirmationService: ConfirmationDialogService) {}\n *\n * deleteItem() {\n * this.confirmationService.confirm({\n * header: 'Delete Confirmation',\n * message: 'Are you sure you want to delete this item?',\n * severity: 'danger',\n * acceptLabel: 'Delete',\n * rejectLabel: 'Cancel',\n * accept: () => {\n * this.performDelete();\n * },\n * reject: () => {\n * console.log('Delete cancelled');\n * }\n * });\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Simple confirmation without callbacks\n * async confirmAction() {\n * const ref = await this.confirmationService.confirm({\n * message: 'Proceed with this action?',\n * header: 'Confirm Action'\n * });\n *\n * ref.onClose.subscribe(result => {\n * if (result === true) {\n * // User accepted\n * this.performAction();\n * }\n * });\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ConfirmationDialogService {\n constructor(private dialogService: DialogService) {}\n\n /** Label for the accept button. Set internally based on config */\n acceptLabel?: string;\n\n /** Label for the reject button. Set internally based on config */\n rejectLabel?: string;\n\n /**\n * Displays a confirmation dialog and handles user response.\n *\n * Opens a modal confirmation dialog with the specified message and options.\n * The dialog shows two buttons (accept and reject) and executes the appropriate\n * callback based on user choice. The confirmation component is lazy-loaded for\n * better performance.\n *\n * @param config Configuration object defining the dialog appearance and behavior\n * @returns A Promise that resolves to a dialog reference for programmatic control\n *\n * @example\n * ```typescript\n * // Basic confirmation\n * this.confirmationService.confirm({\n * message: 'Delete this record?',\n * header: 'Confirm Delete',\n * accept: () => this.delete()\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Confirmation with custom styling and labels\n * await this.confirmationService.confirm({\n * header: 'Warning',\n * message: 'This action cannot be undone. Continue?',\n * severity: 'danger',\n * acceptLabel: 'Yes, Continue',\n * rejectLabel: 'No, Go Back',\n * accept: () => {\n * this.performIrreversibleAction();\n * },\n * reject: () => {\n * this.logCancellation();\n * }\n * });\n * ```\n */\n async confirm(config: ConfirmationDialogConfig): Promise<IDynamicDialogRef> {\n const { ConfirmationDialogComponent } =\n await import('../confirmation-dialog.component');\n\n this.acceptLabel = config.acceptLabel || 'Confirm';\n this.rejectLabel = config.rejectLabel || 'Cancel';\n\n const ref = this.dialogService.open(ConfirmationDialogComponent, {\n header: config.header,\n width: '400px',\n contentStyle: { overflow: 'auto' },\n breakpoints: {\n '960px': { width: '720px' },\n '640px': { width: '576px' },\n },\n data: {\n message: config.message,\n header: config.header,\n severity: config.severity || 'primary',\n },\n });\n\n // Subscribe to dialog close event to execute callbacks\n ref.onClose.pipe(take(1)).subscribe((result: boolean) => {\n if (result === true && config.accept) {\n config.accept();\n } else if (result === false && config.reject) {\n config.reject();\n }\n });\n\n return ref;\n }\n}\n","import { Component, OnInit, AfterViewInit } from '@angular/core';\nimport {\n IDynamicDialogConfig,\n IDynamicDialogRef,\n} from './services/dialog.interfaces';\n\n@Component({\n template: '',\n})\nexport abstract class IDialogBase implements OnInit, AfterViewInit {\n public dialogRef?: IDynamicDialogRef;\n public config: IDynamicDialogConfig = {};\n\n constructor() {}\n\n ngOnInit(): void {\n this.initializeDialogProperties();\n }\n\n ngAfterViewInit(): void {\n this.initializeDialogProperties();\n }\n\n private initializeDialogProperties(): void {\n if (!this.config) {\n this.config = {};\n }\n\n if (!this.dialogRef && typeof window !== 'undefined') {\n setTimeout(() => {\n if (!this.dialogRef) {\n console.warn(\n 'BaseDialogComponent: dialogRef is not available. Dialog may not close properly.'\n );\n }\n }, 100);\n }\n }\n\n protected close(result?: any): void {\n if (this.dialogRef) {\n this.dialogRef.close(result);\n } else {\n console.error(\n 'BaseDialogComponent: Cannot close dialog - dialogRef is not available'\n );\n }\n }\n\n protected getData<T = any>(): T | undefined {\n return this.config?.data as T;\n }\n\n protected getDataProperty<T = any>(key: string): T | undefined {\n return this.config?.data?.[key] as T;\n }\n\n protected hasData(key?: string): boolean {\n if (!this.config?.data) {\n return false;\n }\n\n if (key) {\n return key in this.config.data;\n }\n\n return true;\n }\n}\n","import { Component, Input, signal } from '@angular/core';\n\n/**\n * Empty State Component\n *\n * Displays an illustration and message when no content is available.\n * Useful for empty lists, search results, or initial states.\n *\n * @example\n * ```html\n * <!-- Basic empty state -->\n * <i-empty-state></i-empty-state>\n *\n * <!-- Fixed position (doesn't scroll with content) -->\n * <i-empty-state [fixed]=\"true\"></i-empty-state>\n *\n * <!-- With dark color scheme -->\n * <i-empty-state [colorScheme]=\"colorSchemeSignal\"></i-empty-state>\n * ```\n *\n * @remarks\n * Use the fixed property when you want the empty state to remain\n * centered regardless of scroll position.\n */\n@Component({\n selector: 'i-empty-state',\n standalone: true,\n templateUrl: './empty-state.component.html',\n styleUrl: './empty-state.component.scss',\n})\nexport class EmptyStateComponent {\n /**\n * Whether the empty state should be fixed position\n * @default false\n */\n @Input() fixed: boolean = false;\n\n /**\n * Color scheme signal for theming\n * @default signal('light')\n */\n @Input() colorScheme = signal<string>('light');\n\n /**\n * Tracks whether the illustration image has loaded\n * @internal\n */\n imageLoaded: boolean = false;\n\n /**\n * Handles image load with a slight delay for smooth appearance\n * @internal\n */\n onImageLoad(): void {\n setTimeout(() => {\n this.imageLoaded = true;\n }, 200);\n }\n}\n","<div class=\"flex justify-contents no-results-container\">\n <img\n [src]=\"\n 'assets/images/' +\n (colorScheme() === 'light' ? 'no-results-light' : 'no-results-dark') +\n '.png'\n \"\n alt=\"No Results\"\n class=\"no-results-image\"\n [class.loaded]=\"imageLoaded\"\n [class.fixed]=\"fixed\"\n [class.dynamic]=\"!fixed\"\n (load)=\"onImageLoad()\"\n />\n</div>\n","import { Component, Input, Optional, Self } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ControlValueAccessor,\n NgControl,\n AbstractControl,\n} from '@angular/forms';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { TooltipDirective } from '../../directives/tooltip/tooltip.directive';\n\n/**\n * Supported background style options for the textarea\n */\nexport type ITextareaBackgroundStyle = 'surface' | 'component';\n\n/**\n * Textarea Component\n *\n * A form control multi-line text input component with floating labels and validation support.\n * Fully compatible with Angular Reactive Forms and Template-driven Forms.\n * Supports character counting, auto-resize, and custom error messages.\n *\n * @example\n * ```html\n * <!-- Basic textarea -->\n * <i-textarea label=\"Description\"></i-textarea>\n *\n * <!-- Textarea with reactive form -->\n * <i-textarea\n * label=\"Bio\"\n * formControlName=\"bio\"\n * [rows]=\"5\">\n * </i-textarea>\n *\n * <!-- Textarea with character limit -->\n * <i-textarea\n * label=\"Comment\"\n * [(ngModel)]=\"comment\"\n * [maxLength]=\"200\">\n * </i-textarea>\n *\n * <!-- Full width textarea -->\n * <i-textarea\n * label=\"Notes\"\n * [fluid]=\"true\"\n * [rows]=\"6\"\n * formControlName=\"notes\">\n * </i-textarea>\n * ```\n *\n * @remarks\n * This component implements ControlValueAccessor for seamless integration with Angular Forms.\n * Supports floating labels, character counting, and custom validation messages.\n */\n@Component({\n selector: 'i-textarea',\n standalone: true,\n imports: [CommonModule, TooltipDirective],\n templateUrl: './textarea.component.html',\n styleUrls: ['./textarea.component.scss'],\n})\nexport class ITextarea implements ControlValueAccessor {\n /**\n * Label text displayed for the textarea\n * @default 'Label'\n */\n @Input() label = 'Label';\n\n /**\n * HTML id attribute for the textarea element\n */\n @Input() id?: string;\n\n /**\n * Whether the textarea should take full width of its container\n * @default false\n */\n @Input() fluid = false;\n\n /**\n * Forces the label to stay in floated position\n * @default false\n */\n @Input() forceFloated = false;\n\n /**\n * Enables floating label animation\n * @default true\n */\n @Input() useFloatLabel = true;\n\n /**\n * Placeholder text for the textarea\n */\n @Input() placeholder?: string;\n\n /**\n * Number of visible text rows\n * @default 4\n */\n @Input() rows = 4;\n\n /**\n * Maximum number of characters allowed (also shows character counter)\n */\n @Input() maxLength?: number;\n\n /**\n * Whether the textarea can be resized by the user\n * @default true\n */\n @Input() resizable = true;\n\n /**\n * Whether the textarea is readonly\n * @default false\n */\n @Input() readonly = false;\n\n /**\n * Whether the textarea is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Allows external control to override validation state\n * @default false\n */\n @Input() externalInvalid = false;\n\n /**\n * External error message to display (overrides internal validation)\n */\n @Input() externalErrorMessage?: string;\n\n /**\n * Background style of the textarea\n * @default 'surface'\n */\n @Input() backgroundStyle: ITextareaBackgroundStyle = 'surface';\n\n /**\n * Custom error messages for validation rules\n * @default {}\n */\n @Input() errorMessages: { [key: string]: string } = {};\n\n /**\n * Percentage threshold (0–100) at which to show the character count warning colour\n * @default 80\n */\n @Input() charCountWarnAt = 80;\n\n /**\n * Current textarea value\n * @internal\n */\n value: string | null = null;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-textarea-');\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChange: (v: string | null) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouched: () => void = () => {};\n\n constructor(@Optional() @Self() public ngControl: NgControl | null) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * Writes a value to the textarea (ControlValueAccessor)\n * @internal\n */\n writeValue(obj: string | null): void {\n this.value = obj == null ? null : obj;\n }\n\n /**\n * Registers the onChange callback (ControlValueAccessor)\n * @internal\n */\n registerOnChange(fn: (v: string | null) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Registers the onTouched callback (ControlValueAccessor)\n * @internal\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Sets the disabled state (ControlValueAccessor)\n * @internal\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**\n * Handles input event and updates value\n * @internal\n */\n handleInput(event: Event) {\n const v = (event.target as HTMLTextAreaElement).value;\n this.value = v;\n this.onChange(v);\n }\n\n /**\n * Marks the textarea as touched\n * @internal\n */\n touch() {\n this.onTouched();\n }\n\n /**\n * Gets the form control instance\n * @internal\n */\n get control(): AbstractControl | null {\n return this.ngControl ? this.ngControl.control : null;\n }\n\n /**\n * Determines if validation errors should be shown\n * @internal\n */\n get showErrors(): boolean {\n if (this.externalInvalid) return true;\n const c = this.control;\n return !!(c && c.invalid && c.dirty);\n }\n\n /**\n * Gets the first validation error key\n * @internal\n */\n get firstErrorKey(): string | null {\n const c = this.control;\n if (!c || !c.errors) return null;\n return Object.keys(c.errors)[0] || null;\n }\n\n /**\n * Gets the error message to display\n * @internal\n */\n getErrorMessage(): string | null {\n if (this.externalInvalid && this.externalErrorMessage) {\n return this.externalErrorMessage;\n }\n\n const key = this.firstErrorKey;\n if (!key) return null;\n const c = this.control;\n if (this.errorMessages && this.errorMessages[key])\n return this.errorMessages[key];\n const err = c?.errors || {};\n switch (key) {\n case 'required':\n return `${this.label} is required`;\n case 'minlength':\n return `Minimum ${err['minlength']?.requiredLength} characters required`;\n case 'maxlength':\n return `Maximum ${err['maxlength']?.requiredLength} characters allowed`;\n case 'pattern':\n return `${this.label} is not valid`;\n default:\n return err[key] && typeof err[key] === 'string'\n ? err[key]\n : 'Invalid value';\n }\n }\n\n /**\n * Whether the textarea has a non-empty value\n * @internal\n */\n get hasValue(): boolean {\n if (this.value === null || this.value === undefined) return false;\n return this.value.length > 0;\n }\n\n /**\n * Current character count\n * @internal\n */\n get currentLength(): number {\n return this.value?.length ?? 0;\n }\n\n /**\n * Whether the character count is in the warning range\n * @internal\n */\n get charCountWarning(): boolean {\n if (!this.maxLength) return false;\n const pct = (this.currentLength / this.maxLength) * 100;\n return pct >= this.charCountWarnAt && pct < 100;\n }\n\n /**\n * Whether the character count has exceeded the limit\n * @internal\n */\n get charCountOver(): boolean {\n if (!this.maxLength) return false;\n return this.currentLength >= this.maxLength;\n }\n}\n","<div\n class=\"i-textarea-wrapper\"\n [class.invalid]=\"showErrors\"\n [class.i-textarea--fluid]=\"fluid\"\n [class.i-textarea--no-float]=\"!useFloatLabel\"\n [attr.id]=\"componentId\"\n>\n <div\n [ngClass]=\"useFloatLabel ? 'float-label' : 'normal-input'\"\n class=\"i-textarea-container\"\n >\n <div class=\"i-textarea-icon-wrapper\">\n <textarea\n #textareaElement\n [id]=\"id || componentId\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [rows]=\"rows\"\n [attr.maxlength]=\"maxLength || null\"\n [value]=\"value || ''\"\n (input)=\"handleInput($event)\"\n (blur)=\"touch()\"\n [placeholder]=\"useFloatLabel ? ' ' : placeholder || label\"\n class=\"i-textarea\"\n [class.readonly]=\"readonly\"\n [class.no-resize]=\"!resizable\"\n [class.component-border]=\"backgroundStyle === 'component'\"\n [iTooltip]=\"showErrors ? (getErrorMessage() || '') : ''\"\n tooltipPosition=\"below\"\n [tooltipDelay]=\"100\"\n ></textarea>\n @if (useFloatLabel) {\n <label\n [for]=\"id || componentId\"\n class=\"i-textarea-label\"\n [class.floated]=\"forceFloated || hasValue\"\n >{{ label }}</label\n >\n }\n <ng-content></ng-content>\n </div>\n </div>\n\n <div class=\"i-textarea-footer\">\n @if (showErrors && getErrorMessage()) {\n <span class=\"i-error\">{{ getErrorMessage() }}</span>\n }\n @if (maxLength) {\n <span\n class=\"i-char-count\"\n [class.i-char-count--warn]=\"charCountWarning\"\n [class.i-char-count--over]=\"charCountOver\"\n >\n {{ currentLength }}/{{ maxLength }}\n </span>\n }\n </div>\n</div>\n","import { Component, Input, ChangeDetectionStrategy, booleanAttribute } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ISeverity } from '../../enums/IButtonSeverity';\n\nexport type ITagSize = 'sm' | 'md' | 'lg';\n\n/**\n * Tag Component\n *\n * A compact badge/label component for categorisation, status indicators,\n * and metadata display. Supports all design-system severity colours,\n * optional icons, pill shape, and three sizes.\n *\n * @example\n * ```html\n * <!-- Basic tag -->\n * <i-tag value=\"New\" />\n *\n * <!-- Severity tag -->\n * <i-tag value=\"Saved\" severity=\"success\" />\n *\n * <!-- Rounded pill -->\n * <i-tag value=\"Beta\" severity=\"info\" [rounded]=\"true\" />\n *\n * <!-- With icon -->\n * <i-tag value=\"Error\" severity=\"danger\" icon=\"pi pi-times-circle\" />\n *\n * <!-- Different sizes -->\n * <i-tag value=\"Small\" severity=\"warning\" size=\"sm\" />\n * <i-tag value=\"Large\" severity=\"primary\" size=\"lg\" />\n * ```\n */\n@Component({\n selector: 'i-tag',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './tag.component.html',\n styleUrls: ['./tag.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ITag {\n /**\n * Text content of the tag\n */\n @Input() value = '';\n\n /**\n * Colour severity following the design-system palette.\n * When omitted the tag renders with a neutral surface style.\n */\n @Input() severity?: ISeverity;\n\n /**\n * Renders the tag as a pill (fully rounded corners)\n * @default false\n */\n @Input({ transform: booleanAttribute }) rounded = false;\n\n /**\n * Icon class name to display before the value (e.g. 'pi pi-check')\n */\n @Input() icon?: string;\n\n /**\n * Visual size of the tag\n * @default 'md'\n */\n @Input() size: ITagSize = 'md';\n}\n","<span\n class=\"i-tag\"\n [ngClass]=\"[\n severity ? 'i-tag-' + severity : '',\n rounded ? 'i-tag-rounded' : '',\n size === 'lg' ? 'i-tag-lg' : size === 'sm' ? 'i-tag-sm' : ''\n ]\"\n>\n @if (icon) {\n <i [class]=\"icon\" class=\"i-tag-icon\" aria-hidden=\"true\"></i>\n }\n <span class=\"i-tag-value\">{{ value }}</span>\n</span>\n","import { Component, Input } from '@angular/core';\n\n\n/**\n * Arrow direction options for the placeholder icon\n */\nexport type PlaceholderArrowDirection =\n | 'left'\n | 'right'\n | 'up'\n | 'down'\n | 'none';\n\n/**\n * Placeholder Component\n *\n * Displays a centered placeholder area with an optional arrow icon and custom content.\n * Useful for empty selection states, drop zones, or instructional placeholders.\n *\n * @example\n * ```html\n * <!-- Basic placeholder with left arrow -->\n * <i-placeholder arrowDirection=\"left\">\n * Select an item from the list\n * </i-placeholder>\n *\n * <!-- Placeholder with no icon -->\n * <i-placeholder arrowDirection=\"none\">\n * <h3>No items found</h3>\n * <p>Try adjusting your search criteria</p>\n * </i-placeholder>\n *\n * <!-- Placeholder with custom icon -->\n * <i-placeholder [customIcon]=\"'pi pi-inbox'\">\n * Your inbox is empty\n * </i-placeholder>\n * ```\n */\n@Component({\n selector: 'i-placeholder',\n standalone: true,\n imports: [],\n templateUrl: './placeholder.component.html',\n styleUrl: './placeholder.component.scss',\n})\nexport class IPlaceholder {\n /**\n * Direction of the arrow icon.\n * Use 'none' to hide the icon completely.\n * @default 'left'\n */\n @Input() arrowDirection: PlaceholderArrowDirection = 'left';\n\n /**\n * Custom icon class to use instead of an arrow.\n * When set, this overrides arrowDirection.\n * @example 'pi pi-inbox', 'pi pi-search'\n */\n @Input() customIcon: string | null = null;\n\n /**\n * Whether to show a subtle background pattern\n * @default false\n */\n @Input() showPattern: boolean = false;\n\n /**\n * Gets the icon class based on configuration\n */\n get iconClass(): string | null {\n if (this.customIcon) {\n return this.customIcon;\n }\n\n if (this.arrowDirection === 'none') {\n return null;\n }\n\n const arrowMap: Record<PlaceholderArrowDirection, string> = {\n left: 'pi pi-arrow-left',\n right: 'pi pi-arrow-right',\n up: 'pi pi-arrow-up',\n down: 'pi pi-arrow-down',\n none: '',\n };\n\n return arrowMap[this.arrowDirection];\n }\n}\n","<div class=\"i-placeholder\" [class.has-pattern]=\"showPattern\">\n <div class=\"i-placeholder-content\">\n @if (iconClass) {\n <i [class]=\"iconClass\"></i>\n }\n <ng-content></ng-content>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { IPlaceholder } from '../placeholder/placeholder.component';\n\n/**\n * No Content Component\n *\n * A versatile empty state component that can be used anywhere in the application\n * when there is no data to display. Perfect for tables, lists, search results, etc.\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <i-no-content></i-no-content>\n *\n * <!-- With custom message -->\n * <i-no-content [message]=\"'No products found'\"></i-no-content>\n *\n * <!-- With custom icon -->\n * <i-no-content\n * [icon]=\"'pi pi-search'\"\n * [message]=\"'No search results'\">\n * </i-no-content>\n *\n * <!-- In a table when no data -->\n * <table>\n * <tbody>\n * @if (data.length === 0) {\n * <tr>\n * <td colspan=\"100%\">\n * <i-no-content></i-no-content>\n * </td>\n * </tr>\n * }\n * </tbody>\n * </table>\n * ```\n *\n * @remarks\n * This component provides a consistent empty state experience across the application.\n */\n@Component({\n selector: 'i-no-content',\n standalone: true,\n imports: [IPlaceholder],\n templateUrl: './no-content.component.html',\n styleUrl: './no-content.component.scss',\n})\nexport class NoContentComponent {\n /**\n * Icon class to display (PrimeIcons format)\n * @default 'pi pi-inbox'\n */\n @Input() icon: string = 'pi pi-inbox';\n\n /**\n * Message to display below the icon\n * @default 'No content available'\n */\n @Input() message: string = 'No content available';\n}\n","<i-placeholder [customIcon]=\"icon\" arrowDirection=\"none\">\n <p class=\"no-content-message\">{{ message }}</p>\n</i-placeholder>\n","import { Injectable, effect, signal, WritableSignal } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport const LocalStorageColorSchemeKey = 'viewModeColorScheme';\n\nconst MOBILE_BREAKPOINT = 991;\n\nexport interface AppConfig {\n inputStyle: string;\n colorScheme: string;\n ripple: boolean;\n scale: number;\n}\n\ninterface LayoutState {\n isSidebarOpen: boolean;\n isMobileViewport: boolean;\n profileSidebarVisible: boolean;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LayoutService {\n private readonly mobileBreakpoint = MOBILE_BREAKPOINT;\n\n _config: AppConfig = {\n ripple: true,\n inputStyle: 'outlined',\n colorScheme: localStorage.getItem(LocalStorageColorSchemeKey) || 'light',\n scale: 12,\n };\n\n config: WritableSignal<AppConfig> = signal<AppConfig>(this._config);\n\n public colorScheme = signal(this.config().colorScheme);\n\n state: WritableSignal<LayoutState> = signal<LayoutState>(\n this.createInitialLayoutState()\n );\n\n private configUpdate = new Subject<AppConfig>();\n\n configUpdate$ = this.configUpdate.asObservable();\n\n constructor() {\n effect(() => {\n const config = this.config();\n this.changeScale(config.scale);\n this.onConfigUpdate();\n });\n }\n\n private createInitialLayoutState(): LayoutState {\n const isMobileViewport = this.isMobileViewport();\n return {\n isSidebarOpen: !isMobileViewport,\n isMobileViewport,\n profileSidebarVisible: false,\n };\n }\n\n updateStyle(config: AppConfig) {\n return config.colorScheme !== this._config.colorScheme;\n }\n\n toggleSidebar() {\n this.state.update((currentState) => ({\n ...currentState,\n isSidebarOpen: !currentState.isSidebarOpen,\n }));\n }\n\n closeSidebar() {\n this.state.update((currentState) =>\n currentState.isSidebarOpen\n ? { ...currentState, isSidebarOpen: false }\n : currentState\n );\n }\n\n syncViewport(width: number) {\n const isMobileViewport = this.isMobileViewport(width);\n this.state.update((currentState) => {\n if (currentState.isMobileViewport === isMobileViewport) {\n return currentState;\n }\n\n return {\n ...currentState,\n isMobileViewport,\n isSidebarOpen: isMobileViewport ? false : true,\n };\n });\n }\n\n showProfileSidebar() {\n this.state.update((currentState) => ({\n ...currentState,\n profileSidebarVisible: !currentState.profileSidebarVisible,\n }));\n }\n\n private isMobileViewport(width: number = this.getViewportWidth()) {\n return width <= this.mobileBreakpoint;\n }\n\n private getViewportWidth(): number {\n if (typeof window !== 'undefined' && window?.innerWidth) {\n return window.innerWidth;\n }\n\n return 0;\n }\n\n onConfigUpdate() {\n this._config = { ...this.config() };\n this.configUpdate.next(this.config());\n }\n\n changeScale(value: number) {\n document.documentElement.style.fontSize = `${value}px`;\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport {\n LayoutService,\n LocalStorageColorSchemeKey,\n} from '../services/layout.service';\nimport { NgClass } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport { IButton } from '../../button/button.component';\nimport { LayoutConfig } from '../models/layout-config.model';\n\n@Component({\n selector: 'i-topbar',\n templateUrl: './topbar.component.html',\n styleUrls: ['./topbar.component.scss'],\n imports: [RouterLink, NgClass, IButton],\n})\nexport class TopbarComponent implements OnInit {\n @Input() config!: LayoutConfig;\n isDark: boolean = false;\n\n constructor(public layoutService: LayoutService) {}\n\n ngOnInit(): void {\n this.isDark = this.colorScheme === 'dark';\n }\n\n set colorScheme(val: string) {\n this.layoutService.config.update((config) => ({\n ...config,\n colorScheme: val,\n }));\n }\n\n get colorScheme(): string {\n return this.layoutService.config().colorScheme;\n }\n\n changeTheme() {\n this.isDark = !this.isDark;\n if (this.isDark) {\n this.colorScheme = 'dark';\n document.body.classList.add('dark');\n document.body.classList.remove('light');\n } else {\n this.colorScheme = 'light';\n document.body.classList.add('light');\n document.body.classList.remove('dark');\n }\n\n localStorage.setItem(LocalStorageColorSchemeKey, this.colorScheme);\n }\n\n get logo(): string {\n if (this.colorScheme === 'light' && this.config.logoLight) {\n return this.config.logoLight;\n } else if (this.colorScheme === 'dark' && this.config.logoDark) {\n return this.config.logoDark;\n }\n return this.config.logoLight || this.config.logoDark || '';\n }\n}\n","<div class=\"layout-topbar\">\n <a class=\"layout-topbar-logo\" routerLink=\"\">\n @if (logo) {\n <img [src]=\"logo\" [alt]=\"config.websiteName + ' logo'\" />\n }\n <span>{{ config.websiteName }}</span>\n </a>\n <i-button\n [severity]=\"'contrast'\"\n size=\"medium\"\n [text]=\"true\"\n [icon]=\"'pi pi-bars'\"\n (clicked)=\"layoutService.toggleSidebar()\"\n ></i-button>\n <i-button\n class=\"layout-topbar-menu-button\"\n [severity]=\"'contrast'\"\n size=\"medium\"\n [text]=\"true\"\n [icon]=\"'pi pi-ellipsis-v'\"\n (clicked)=\"layoutService.showProfileSidebar()\"\n ></i-button>\n\n <div\n class=\"layout-topbar-menu\"\n [ngClass]=\"{\n 'layout-topbar-menu-mobile-active':\n layoutService.state().profileSidebarVisible\n }\"\n >\n <ng-content />\n @if (config.showThemeToggle !== false) {\n <i-button\n [severity]=\"'contrast'\"\n size=\"medium\"\n [text]=\"true\"\n [icon]=\"isDark ? 'pi pi-moon' : 'pi pi-sun'\"\n (clicked)=\"changeTheme()\"\n />\n }\n </div>\n</div>\n","import { InjectionToken, Provider } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n/**\n * Interface for claims checking service.\n * Consuming applications should implement this interface and provide it\n * using the CLAIMS_CHECKER injection token.\n */\nexport interface ClaimsChecker {\n /**\n * Checks if the current user has the specified claim.\n * @param claim The claim to check\n * @returns Observable<boolean> indicating if the user has the claim\n */\n hasClaim(claim: string): Observable<boolean>;\n}\n\n/**\n * Injection token for providing a claims checking service.\n * Applications using claims-based menu filtering should provide\n * an implementation of ClaimsChecker using this token.\n * \n * @example\n * // In your app.config.ts or module:\n * providers: [\n * {\n * provide: CLAIMS_CHECKER,\n * useExisting: ClaimsClient // Your claims service\n * }\n * ]\n */\nexport const CLAIMS_CHECKER = new InjectionToken<ClaimsChecker>('ClaimsChecker');\n\n/**\n * Provides a claims checker service for menu item filtering.\n * This is the recommended way to configure claims-based access control in your application.\n * \n * @param claimsService The claims service instance that implements the ClaimsChecker interface\n * @returns Provider configuration for dependency injection\n * \n * @example\n * // In your app.config.ts:\n * import { provideMenuClaimsChecker } from 'integra-ng';\n * import { ClaimsService } from './services/claims.service';\n * \n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideMenuClaimsChecker(ClaimsService),\n * // ... other providers\n * ]\n * };\n * \n * @example\n * // Or provide an existing service instance:\n * providers: [\n * ClaimsService,\n * provideMenuClaimsChecker(ClaimsService)\n * ]\n */\nexport function provideMenuClaimsChecker(claimsService: any): Provider {\n return {\n provide: CLAIMS_CHECKER,\n useExisting: claimsService,\n };\n}\n","import { Component, Input, OnDestroy, OnInit, inject, signal } from '@angular/core';\nimport { MenuModel, MenuItem } from '../models/menu.model';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { CLAIMS_CHECKER, ClaimsChecker } from '../services/claims-checker.token';\nimport { Subject, BehaviorSubject, forkJoin, of, Observable } from 'rxjs';\nimport { takeUntil, switchMap, map } from 'rxjs/operators';\n\n@Component({\n selector: 'i-menu',\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.scss'],\n imports: [RouterLink, RouterLinkActive],\n})\nexport class MenuComponent implements OnInit, OnDestroy {\n private readonly claimsChecker = inject(CLAIMS_CHECKER, { optional: true });\n private readonly destroy$ = new Subject<void>();\n private readonly modelSubject$ = new BehaviorSubject<MenuModel[]>([]);\n \n filteredModel = signal<MenuModel[]>([]);\n\n @Input() set model(value: MenuModel[]) {\n this.modelSubject$.next(value);\n }\n\n ngOnInit(): void {\n this.modelSubject$\n .pipe(\n takeUntil(this.destroy$),\n switchMap((model) => this.filterModelByClaims(model))\n )\n .subscribe((filteredModel) => {\n this.filteredModel.set(filteredModel);\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private filterModelByClaims(model: MenuModel[]): Observable<MenuModel[]> {\n // If no claims checker is provided, return all menu items (backward compatible)\n if (!this.claimsChecker) {\n return of(model);\n }\n\n // Collect all unique claims from the model\n const claims = this.collectClaims(model);\n \n if (claims.size === 0) {\n return of(model);\n }\n\n // Check all claims in parallel using forkJoin\n const claimChecks: { [key: string]: Observable<boolean> } = {};\n claims.forEach((claim) => {\n claimChecks[claim] = this.claimsChecker!.hasClaim(claim);\n });\n\n if (Object.keys(claimChecks).length === 0) {\n return of(model);\n }\n\n return forkJoin(claimChecks).pipe(\n map((claimsMap) => this.filterModel(model, claimsMap))\n );\n }\n\n private collectClaims(model: MenuModel[]): Set<string> {\n const claims = new Set<string>();\n\n model.forEach((group) => {\n if (group.claim) {\n claims.add(group.claim);\n }\n \n group.items.forEach((item) => {\n this.collectItemClaims(item, claims);\n });\n });\n\n return claims;\n }\n\n private collectItemClaims(item: MenuItem, claims: Set<string>): void {\n if (item.claim) {\n claims.add(item.claim);\n }\n\n if (item.items) {\n item.items.forEach((subItem) => {\n this.collectItemClaims(subItem, claims);\n });\n }\n }\n\n private filterModel(model: MenuModel[], claimsMap: { [key: string]: boolean }): MenuModel[] {\n return model\n .filter((group) => {\n // If group has a claim, check if user has access\n if (group.claim && !claimsMap[group.claim]) {\n return false;\n }\n return true;\n })\n .map((group) => ({\n ...group,\n items: this.filterItems(group.items, claimsMap),\n }))\n .filter((group) => group.items.length > 0); // Remove groups with no visible items\n }\n\n private filterItems(items: MenuItem[], claimsMap: { [key: string]: boolean }): MenuItem[] {\n return items\n .filter((item) => {\n // If item has a claim, check if user has access\n if (item.claim && !claimsMap[item.claim]) {\n return false;\n }\n return true;\n })\n .map((item) => {\n // If item has nested items, filter them recursively\n if (item.items) {\n return {\n ...item,\n items: this.filterItems(item.items, claimsMap),\n };\n }\n return item;\n })\n .filter((item) => {\n // If item has nested items, keep it only if it has visible nested items\n if (item.items) {\n return item.items.length > 0;\n }\n return true;\n });\n }\n}\n","<ul class=\"menu\">\n @for(group of filteredModel(); track $index) {\n <li class=\"menu-group\">\n @if (group.label) {\n <div class=\"menu-group-label\">\n {{ group.label }}\n </div>\n }\n\n <ul class=\"menu-items\">\n @for(item of group.items; track $index) {\n <li class=\"menu-item\">\n <a\n [routerLink]=\"item.routerLink\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n >\n @if (item.icon) {\n <i class=\"{{ item.icon }}\"></i>\n }\n <span>{{ item.label }}</span>\n </a>\n\n @if (item.items) {\n <ul class=\"submenu\">\n @for(subItem of item.items; track $index) {\n <li class=\"submenu-item\">\n <a\n [routerLink]=\"subItem.routerLink\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n >\n @if (subItem.icon) {\n <i class=\"{{ subItem.icon }}\"></i>\n }\n <span>{{ subItem.label }}</span>\n </a>\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n\n @if (group.separator) {\n <hr class=\"separator\" />\n }\n </li>\n }\n</ul>\n","import { Component, ElementRef, Input } from '@angular/core';\nimport { MenuComponent } from '../menu/menu.component';\nimport { MenuModel } from '../models/menu.model';\nimport { LayoutService } from '../services/layout.service';\nimport { IButton } from '../../button/button.component';\n\n@Component({\n selector: 'i-sidebar',\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss'],\n imports: [MenuComponent, IButton],\n})\nexport class SidebarComponent {\n @Input() menuModel: MenuModel[] = [];\n\n constructor(public el: ElementRef, public layoutService: LayoutService) {}\n}\n","<div class=\"sidebar\">\n @if (layoutService.state().isMobileViewport &&\n layoutService.state().isSidebarOpen) {\n <div class=\"sidebar-mobile-header\">\n <div class=\"sidebar-mobile-header-inner\">\n <i-button\n [size]=\"'xtra-small'\"\n [text]=\"true\"\n [severity]=\"'contrast'\"\n [icon]=\"'pi pi-times'\"\n (clicked)=\"layoutService.closeSidebar()\"\n ></i-button>\n </div>\n </div>\n }\n\n <div class=\"sidebar-menu-wrapper\">\n <i-menu [model]=\"menuModel\" />\n </div>\n</div>\n","import {\n Component,\n HostListener,\n OnDestroy,\n OnInit,\n computed,\n effect,\n Input,\n signal,\n ElementRef,\n ViewChild,\n AfterViewInit,\n} from '@angular/core';\nimport { NavigationEnd, Router, RouterOutlet } from '@angular/router';\nimport { filter, Subscription } from 'rxjs';\nimport { NgClass } from '@angular/common';\nimport { TopbarComponent } from './topbar/topbar.component';\nimport { SidebarComponent } from './sidebar/sidebar.component';\nimport { LayoutService } from './services/layout.service';\nimport { LayoutConfig } from './models/layout-config.model';\nimport { MenuModel } from './models/menu.model';\n\n@Component({\n selector: 'i-layout',\n templateUrl: './layout.component.html',\n styleUrls: ['./layout.component.scss'],\n imports: [NgClass, TopbarComponent, SidebarComponent, RouterOutlet],\n})\nexport class LayoutComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() config!: LayoutConfig;\n @Input() menuModel: MenuModel[] = [];\n @ViewChild('mainContainer') mainContainer?: ElementRef<HTMLDivElement>;\n\n protected readonly Math = Math;\n\n private routerSubscription: Subscription;\n private touchStartY = 0;\n private touchCurrentY = 0;\n private isPulling = false;\n pullDistance = signal(0);\n isRefreshing = signal(false);\n\n protected readonly PULL_THRESHOLD = 80;\n private readonly MAX_PULL_DISTANCE = 150;\n protected readonly INDICATOR_OFFSET = 60;\n private readonly REFRESH_DELAY = 300;\n\n // Store bound event handlers for cleanup\n private boundHandleTouchStart?: (event: TouchEvent) => void;\n private boundHandleTouchMove?: (event: TouchEvent) => void;\n private boundHandleTouchEnd?: (event: TouchEvent) => void;\n private refreshTimeoutId?: number;\n private isPullToRefreshInitialized = false;\n\n constructor(\n public layoutService: LayoutService,\n public router: Router\n ) {\n effect(() => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const state = this.layoutService.state();\n const shouldBlockScroll = state.isMobileViewport && state.isSidebarOpen;\n document.body.classList.toggle('blocked-scroll', shouldBlockScroll);\n });\n\n this.routerSubscription = this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe(() => {\n const state = this.layoutService.state();\n if (state.isMobileViewport) {\n this.layoutService.closeSidebar();\n }\n });\n }\n\n ngOnInit(): void {\n this.syncViewportToCurrentWindow();\n }\n\n ngAfterViewInit(): void {\n this.setupPullToRefresh();\n }\n\n private setupPullToRefresh(): void {\n if (!this.config.enablePullToRefresh || typeof window === 'undefined') {\n return;\n }\n\n const container = this.mainContainer?.nativeElement;\n if (!container) {\n return;\n }\n\n // Bind event handlers and store references for cleanup\n this.boundHandleTouchStart = this.handleTouchStart.bind(this);\n this.boundHandleTouchMove = this.handleTouchMove.bind(this);\n this.boundHandleTouchEnd = this.handleTouchEnd.bind(this);\n\n // Use passive: true for touchstart for better scroll performance\n container.addEventListener('touchstart', this.boundHandleTouchStart, {\n passive: true,\n });\n // Use passive: false for touchmove where preventDefault() is needed\n container.addEventListener('touchmove', this.boundHandleTouchMove, {\n passive: false,\n });\n container.addEventListener('touchend', this.boundHandleTouchEnd);\n\n this.isPullToRefreshInitialized = true;\n }\n\n private handleTouchStart(event: TouchEvent): void {\n const state = this.layoutService.state();\n if (!state.isMobileViewport || event.touches.length === 0) {\n return;\n }\n\n const container = this.mainContainer?.nativeElement;\n if (!container || container.scrollTop > 0) {\n return;\n }\n\n this.touchStartY = event.touches[0].clientY;\n this.isPulling = true;\n }\n\n private handleTouchMove(event: TouchEvent): void {\n if (!this.isPulling || event.touches.length === 0) {\n return;\n }\n\n const container = this.mainContainer?.nativeElement;\n if (!container || container.scrollTop > 0) {\n this.isPulling = false;\n this.pullDistance.set(0);\n return;\n }\n\n this.touchCurrentY = event.touches[0].clientY;\n const pullDistance = Math.max(\n 0,\n Math.min(\n this.touchCurrentY - this.touchStartY,\n this.MAX_PULL_DISTANCE\n )\n );\n\n if (pullDistance > 0) {\n event.preventDefault();\n this.pullDistance.set(pullDistance);\n }\n }\n\n private handleTouchEnd(): void {\n if (!this.isPulling) {\n return;\n }\n\n this.isPulling = false;\n\n if (this.pullDistance() >= this.PULL_THRESHOLD) {\n this.refresh();\n } else {\n this.pullDistance.set(0);\n }\n }\n\n private refresh(): void {\n this.isRefreshing.set(true);\n this.pullDistance.set(0);\n \n // Delay reload slightly to show the refreshing state\n this.refreshTimeoutId = window.setTimeout(() => {\n if (typeof window !== 'undefined') {\n window.location.reload();\n }\n }, this.REFRESH_DELAY);\n }\n\n @HostListener('window:resize')\n onWindowResize() {\n this.syncViewportToCurrentWindow();\n }\n\n hideMenu() {\n this.layoutService.closeSidebar();\n }\n\n private syncViewportToCurrentWindow() {\n if (typeof window === 'undefined') {\n return;\n }\n\n this.layoutService.syncViewport(window.innerWidth);\n }\n\n containerClass = computed(() => {\n const layoutConfig = this.layoutService.config();\n const state = this.layoutService.state();\n return {\n 'layout-static': true,\n 'layout-static-inactive': !state.isMobileViewport && !state.isSidebarOpen,\n 'layout-mobile-active': state.isMobileViewport && state.isSidebarOpen,\n 'p-input-filled': layoutConfig.inputStyle === 'filled',\n 'p-ripple-disabled': !layoutConfig.ripple,\n };\n });\n\n ngOnDestroy() {\n if (this.routerSubscription) {\n this.routerSubscription.unsubscribe();\n }\n\n // Clear any pending refresh timeout\n if (this.refreshTimeoutId !== undefined) {\n window.clearTimeout(this.refreshTimeoutId);\n }\n\n // Clean up event listeners\n if (this.isPullToRefreshInitialized) {\n const container = this.mainContainer?.nativeElement;\n if (container && this.boundHandleTouchStart && this.boundHandleTouchMove && this.boundHandleTouchEnd) {\n container.removeEventListener('touchstart', this.boundHandleTouchStart);\n container.removeEventListener('touchmove', this.boundHandleTouchMove);\n container.removeEventListener('touchend', this.boundHandleTouchEnd);\n }\n }\n }\n}\n","<div class=\"layout\">\n <div class=\"layout-wrapper\" [ngClass]=\"containerClass()\">\n <i-topbar [config]=\"config\">\n <ng-content select=\"[topbarActions]\" />\n </i-topbar>\n <div class=\"layout-body\">\n <div\n class=\"layout-sidebar-container\"\n [ngClass]=\"{\n 'sidebar-open': layoutService.state().isSidebarOpen,\n 'sidebar-closed': !layoutService.state().isSidebarOpen\n }\"\n >\n <i-sidebar [menuModel]=\"menuModel\" />\n </div>\n <div class=\"layout-main-container\" #mainContainer>\n @if (config.enablePullToRefresh && layoutService.state().isMobileViewport) {\n <div \n class=\"pull-to-refresh-indicator\"\n [style.transform]=\"'translateY(' + Math.max(-INDICATOR_OFFSET, pullDistance() - INDICATOR_OFFSET) + 'px)'\"\n [style.opacity]=\"Math.min(1, pullDistance() / PULL_THRESHOLD)\"\n >\n <div class=\"refresh-icon\" [class.refreshing]=\"isRefreshing()\">\n <i class=\"pi pi-refresh\"></i>\n </div>\n <div class=\"refresh-text\">\n {{ isRefreshing() ? 'Refreshing...' : (pullDistance() >= PULL_THRESHOLD ? 'Release to refresh' : 'Pull to refresh') }}\n </div>\n </div>\n }\n <div class=\"layout-main\">\n <router-outlet />\n </div>\n </div>\n </div>\n <div class=\"layout-mask\" (click)=\"hideMenu()\"></div>\n </div>\n</div>\n","import {\n Component,\n Input,\n ElementRef,\n ViewChild,\n HostListener,\n Output,\n EventEmitter,\n forwardRef,\n Injector,\n signal,\n computed,\n InputSignal,\n input,\n} from '@angular/core';\n\nimport {\n FormsModule,\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n NgControl,\n AbstractControl,\n} from '@angular/forms';\nimport {\n IChipsComponent,\n ChipItem,\n ChipRemoveEvent,\n} from '../chips/chips.component';\nimport { ICheckbox } from '../checkbox/checkbox.component';\nimport { IInputText } from '../input-text/input-text.component';\nimport { IButton } from '../button/button.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Option data structure for the listbox component\n */\nexport interface ListboxOption {\n [key: string]: any;\n}\n\n/**\n * Listbox Component\n *\n * A versatile listbox component supporting both single and multiple selection modes.\n * Features filtering, chips display, and full form control integration.\n * Uses Angular signals for reactive state management.\n *\n * @example\n * ```html\n * <!-- Single selection listbox -->\n * <i-listbox\n * title=\"Choose One\"\n * [options]=\"items\"\n * optionLabel=\"name\"\n * [multiple]=\"false\"\n * formControlName=\"selectedItem\">\n * </i-listbox>\n *\n * <!-- Multiple selection listbox with action button -->\n * <i-listbox\n * title=\"Choose Multiple\"\n * [options]=\"items\"\n * optionLabel=\"name\"\n * [multiple]=\"true\"\n * actionIcon=\"pi pi-plus\"\n * actionTooltip=\"Add new item\"\n * (onAction)=\"addItem()\"\n * formControlName=\"selectedItems\">\n * </i-listbox>\n *\n * <!-- Listbox with option icons -->\n * <i-listbox\n * title=\"Select Items\"\n * [options]=\"items\"\n * optionLabel=\"name\"\n * optionIcon=\"icon\"\n * formControlName=\"selection\">\n * </i-listbox>\n *\n * <!-- Multiple selection without chips -->\n * <i-listbox\n * title=\"Choose Multiple\"\n * [options]=\"items\"\n * optionLabel=\"name\"\n * [multiple]=\"true\"\n * [showChips]=\"false\"\n * formControlName=\"selectedItems\">\n * </i-listbox>\n *\n * <!-- Display as menu -->\n * <i-listbox\n * title=\"Navigation\"\n * [options]=\"menuItems\"\n * optionLabel=\"name\"\n * [multiple]=\"false\"\n * [displayAsMenu]=\"true\"\n * [filter]=\"false\"\n * formControlName=\"selectedPage\">\n * </i-listbox>\n * ```\n *\n * @remarks\n * This component implements ControlValueAccessor for seamless integration with Angular Forms.\n * Supports both single and multiple selection modes.\n * Uses signals for efficient filtering and option management.\n */\n@Component({\n selector: 'i-listbox',\n standalone: true,\n imports: [FormsModule, IChipsComponent, ICheckbox, IInputText, IButton],\n templateUrl: './listbox.component.html',\n styleUrls: ['./listbox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => IListbox),\n multi: true,\n },\n ],\n})\nexport class IListbox implements ControlValueAccessor {\n /**\n * Title text displayed in the listbox header\n * @default 'List Box'\n */\n @Input() title = 'List Box';\n\n /**\n * @deprecated Use 'title' instead\n */\n @Input() label = '';\n\n /**\n * Icon class for the action button (e.g., 'pi pi-plus')\n * If provided, an action button will be shown in the header\n */\n @Input() actionIcon?: string;\n\n /**\n * Tooltip text for the action button\n */\n @Input() actionTooltip?: string;\n\n /**\n * Property name for icon on each option\n * The option object should have this property with an icon class string\n */\n @Input() optionIcon?: string;\n\n // Convert options to signal input\n options: InputSignal<ListboxOption[] | null | undefined> = input<\n ListboxOption[] | null | undefined\n >([]);\n @Input({ required: true }) optionLabel!: string;\n @Input() placeholder?: string;\n @Input() id?: string;\n @Input() fluid = false;\n @Input() showClear = false;\n @Input() filter = true;\n @Input() filterBy = 'label';\n @Input() maxSelectedLabels = 3;\n @Input() selectedItemsLabel = '{0} items selected';\n @Input() errorMessages: { [key: string]: string } = {};\n @Input() disabled = false;\n @Input() multiple = true;\n @Input() readonly = true;\n\n /**\n * Whether to show chips for selected items in multiple selection mode\n * @default true\n */\n @Input() showChips = true;\n\n /**\n * Display listbox as a menu with larger text and chevron icons\n * Selected item uses menu-style highlighting\n * @default false\n */\n @Input() displayAsMenu = false;\n\n @Output() onChange = new EventEmitter<any[] | any>();\n @Output() onClear = new EventEmitter<void>();\n\n /**\n * Event emitted when the action button is clicked\n */\n @Output() onAction = new EventEmitter<void>();\n\n @ViewChild('dropdown', { static: false }) dropdownRef!: ElementRef;\n @ViewChild('searchInput', { static: false }) searchInputRef!: ElementRef;\n\n // Convert filter value to signal\n filterValue = signal('');\n\n // Create computed signal for filtered options\n filteredOptions = computed(() => {\n const currentOptions = this.options() || [];\n const currentFilterValue = this.filterValue();\n\n if (!Array.isArray(currentOptions)) {\n return [];\n }\n\n if (!this.filter || !currentFilterValue.trim()) {\n return [...currentOptions];\n } else {\n const filterText = currentFilterValue.toLowerCase();\n return currentOptions.filter((option) => {\n const searchValue = this.getOptionSearchValue(option).toLowerCase();\n return searchValue.includes(filterText);\n });\n }\n });\n\n private _value: any[] | any = [];\n\n get value(): any[] | any {\n return this._value;\n }\n\n set value(val: any[] | any) {\n if (this.multiple) {\n this._value = val || [];\n } else {\n this._value = val;\n }\n }\n\n /**\n * Gets the effective title (supports legacy 'label' property)\n */\n get effectiveTitle(): string {\n return this.title || this.label || 'List Box';\n }\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChangeCallback: (value: any[] | any) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouchedCallback: () => void = () => {};\n\n /**\n * NgControl reference for form validation\n * @internal\n */\n public ngControl: NgControl | null = null;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-listbox-');\n\n constructor(private injector: Injector) {\n setTimeout(() => {\n this.ngControl = this.injector.get(NgControl, null);\n });\n }\n\n /**\n * Handles action button click\n */\n onActionClick(event: Event): void {\n event.stopPropagation();\n this.onAction.emit();\n }\n\n /**\n * Gets the icon for an option\n */\n getOptionIcon(option: ListboxOption): string | null {\n if (!this.optionIcon) return null;\n return option[this.optionIcon] || null;\n }\n\n toggleOption(option: ListboxOption) {\n const optionValue = this.getOptionValue(option);\n\n if (this.multiple) {\n const currentValues = Array.isArray(this.value) ? [...this.value] : [];\n const index = currentValues.findIndex(\n (val) => JSON.stringify(val) === JSON.stringify(optionValue)\n );\n\n if (index > -1) {\n currentValues.splice(index, 1);\n } else {\n currentValues.push(optionValue);\n }\n\n this.value = currentValues;\n this.onChange.emit(currentValues);\n this.onChangeCallback(currentValues);\n this.onTouchedCallback();\n } else {\n const newValue =\n JSON.stringify(this.value) === JSON.stringify(optionValue)\n ? null\n : optionValue;\n this.value = newValue;\n this.onChange.emit(newValue);\n this.onChangeCallback(newValue);\n this.onTouchedCallback();\n }\n }\n\n isOptionSelected(option: ListboxOption): boolean {\n const optionValue = this.getOptionValue(option);\n\n if (this.multiple) {\n return (\n Array.isArray(this.value) &&\n this.value.some(\n (val) => JSON.stringify(val) === JSON.stringify(optionValue)\n )\n );\n } else {\n return JSON.stringify(this.value) === JSON.stringify(optionValue);\n }\n }\n\n clearSelection() {\n const newValue = this.multiple ? [] : null;\n this.value = newValue;\n this.onClear.emit();\n this.onChangeCallback(newValue);\n this.onTouchedCallback();\n }\n\n removeSelectedItem(value: any, event: Event) {\n event.stopPropagation();\n\n if (this.multiple) {\n const currentValues = Array.isArray(this.value) ? [...this.value] : [];\n const index = currentValues.findIndex(\n (val) => JSON.stringify(val) === JSON.stringify(value)\n );\n if (index > -1) {\n currentValues.splice(index, 1);\n this.value = currentValues;\n this.onChange.emit(currentValues);\n this.onChangeCallback(currentValues);\n this.onTouchedCallback();\n }\n } else {\n if (JSON.stringify(this.value) === JSON.stringify(value)) {\n this.value = null;\n this.onChange.emit(null);\n this.onChangeCallback(null);\n this.onTouchedCallback();\n }\n }\n }\n\n getOptionLabel(option: ListboxOption): string {\n return option[this.optionLabel] || option['label'] || String(option);\n }\n\n getOptionValue(option: ListboxOption): any {\n return option;\n }\n\n getOptionSearchValue(option: ListboxOption): string {\n if (this.filterBy && option[this.filterBy]) {\n return String(option[this.filterBy]);\n }\n return this.getOptionLabel(option);\n }\n\n getSelectedLabels(): string[] {\n const currentOptions = this.options() || [];\n if (!Array.isArray(currentOptions)) {\n return [];\n }\n\n if (!this.multiple) {\n if (this.value === null || this.value === undefined) {\n return [];\n }\n const option = currentOptions.find(\n (opt: ListboxOption) =>\n JSON.stringify(this.getOptionValue(opt)) ===\n JSON.stringify(this.value)\n );\n return option ? [this.getOptionLabel(option)] : [String(this.value)];\n }\n\n const values = Array.isArray(this.value) ? this.value : [];\n return values.map((val: any) => {\n const option = currentOptions.find(\n (opt: ListboxOption) =>\n JSON.stringify(this.getOptionValue(opt)) === JSON.stringify(val)\n );\n return option ? this.getOptionLabel(option) : String(val);\n });\n }\n\n getSelectedChipItems(): ChipItem[] {\n const labels = this.getSelectedLabels();\n const values = this.getValueArray();\n\n return values.map((value, index) => ({\n label: labels[index] ?? String(value),\n value,\n removable: !this.disabled,\n }));\n }\n\n getDisplayLabel(): string {\n const currentOptions = this.options() || [];\n if (!Array.isArray(currentOptions)) {\n return '';\n }\n\n if (!this.multiple) {\n if (this.value === null || this.value === undefined) {\n return '';\n }\n const option = currentOptions.find(\n (opt: ListboxOption) =>\n JSON.stringify(this.getOptionValue(opt)) ===\n JSON.stringify(this.value)\n );\n return option ? this.getOptionLabel(option) : String(this.value);\n }\n\n if (!this.value || (Array.isArray(this.value) && this.value.length === 0)) {\n return '';\n }\n\n const selectedLabels = this.getSelectedLabels();\n\n if (selectedLabels.length <= this.maxSelectedLabels) {\n return selectedLabels.join(', ');\n } else {\n return this.selectedItemsLabel.replace(\n '{0}',\n selectedLabels.length.toString()\n );\n }\n }\n\n trackByValue(index: number, value: any): any {\n return value;\n }\n\n hasValue(): boolean {\n if (this.multiple) {\n return Array.isArray(this.value) && this.value.length > 0;\n } else {\n return this.value !== null && this.value !== undefined;\n }\n }\n\n getValueArray(): any[] {\n if (this.multiple) {\n return Array.isArray(this.value) ? this.value : [];\n } else {\n return this.value !== null && this.value !== undefined\n ? [this.value]\n : [];\n }\n }\n\n getPlaceholder(): string {\n return (\n this.placeholder ||\n (this.multiple ? 'Select options' : 'Select an option')\n );\n }\n\n onChipRemove(event: ChipRemoveEvent): void {\n this.removeSelectedItem(event.chip.value, event.originalEvent);\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event) {\n if (\n this.dropdownRef &&\n !this.dropdownRef.nativeElement.contains(event.target)\n ) {\n this.filterValue.set('');\n }\n }\n\n // ControlValueAccessor implementation\n writeValue(value: any[] | any): void {\n if (this.multiple) {\n this._value = value || [];\n } else {\n this._value = value;\n }\n }\n\n registerOnChange(fn: (value: any[] | any) => void): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n get control(): AbstractControl | null {\n return this.ngControl ? this.ngControl.control : null;\n }\n\n get showErrors(): boolean {\n const c = this.control;\n return !!(c && c.invalid && c.dirty);\n }\n\n get firstErrorKey(): string | null {\n const c = this.control;\n if (!c || !c.errors) return null;\n return Object.keys(c.errors)[0] || null;\n }\n\n getErrorMessage(): string | null {\n const key = this.firstErrorKey;\n if (!key) return null;\n const c = this.control;\n if (this.errorMessages && this.errorMessages[key])\n return this.errorMessages[key];\n const err = c?.errors || {};\n switch (key) {\n case 'required':\n return `${this.effectiveTitle} is required`;\n case 'minlength':\n return `Minimum ${err['minlength']?.requiredLength} items required`;\n case 'minArrayLength':\n return `Minimum ${err['minArrayLength']?.requiredLength} items required`;\n case 'maxlength':\n return `Maximum ${err['maxlength']?.requiredLength} items allowed`;\n default:\n return err[key] && typeof err[key] === 'string'\n ? err[key]\n : 'Invalid selection';\n }\n }\n}\n","<div\n class=\"i-listbox-wrapper\"\n [class.i-listbox--fluid]=\"fluid\"\n [class.i-listbox--disabled]=\"disabled\"\n [class.i-listbox--invalid]=\"showErrors\"\n [class.i-listbox--menu]=\"displayAsMenu\"\n #dropdown\n>\n <!-- Header -->\n <div class=\"i-listbox-header\">\n <div class=\"i-listbox-header-content\">\n <span class=\"i-listbox-title\">{{ effectiveTitle }}</span>\n @if (actionIcon) {\n <i-button\n [text]=\"true\"\n [size]=\"'small'\"\n [severity]=\"'contrast'\"\n [icon]=\"actionIcon\"\n [disabled]=\"disabled\"\n (clicked)=\"onActionClick($event)\"\n [attr.title]=\"actionTooltip\"\n ></i-button>\n }\n </div>\n\n <!-- Chips area for multiselect mode -->\n @if (multiple && showChips) {\n <div class=\"i-listbox-chips-wrapper\">\n <i-chips\n class=\"i-listbox-chips\"\n [chips]=\"getSelectedChipItems()\"\n [removable]=\"!disabled\"\n [disabled]=\"disabled\"\n [collapseOnOverflow]=\"true\"\n [overflowLabel]=\"getDisplayLabel()\"\n (removeChip)=\"onChipRemove($event)\"\n ></i-chips>\n </div>\n }\n </div>\n\n <!-- Dropdown content -->\n <div class=\"i-listbox-dropdown\">\n @if (filter) {\n <div class=\"i-listbox-filter\">\n <i-input-text\n #searchInput\n [useFloatLabel]=\"false\"\n placeholder=\"Search...\"\n [ngModel]=\"filterValue()\"\n (ngModelChange)=\"filterValue.set($event)\"\n [fluid]=\"true\"\n [icon]=\"'pi pi-search'\"\n >\n </i-input-text>\n </div>\n }\n\n <div class=\"i-listbox-options\">\n @for (option of filteredOptions(); track getOptionValue(option)) {\n <div\n class=\"i-listbox-option\"\n [class.selected]=\"isOptionSelected(option)\"\n [class.has-icon]=\"!multiple && getOptionIcon(option)\"\n (click)=\"toggleOption(option)\"\n >\n <!-- Checkbox only in multiple mode -->\n @if (multiple) {\n <i-checkbox\n [checked]=\"isOptionSelected(option)\"\n [readonly]=\"true\"\n size=\"small\"\n class=\"i-listbox-checkbox\"\n ></i-checkbox>\n }\n\n <!-- Left icon -->\n @if (getOptionIcon(option) && !displayAsMenu) {\n <i\n [class]=\"getOptionIcon(option)\"\n class=\"i-listbox-option-icon i-listbox-option-icon--left\"\n ></i>\n }\n\n <span class=\"i-listbox-option-label\">\n {{ getOptionLabel(option) }}\n </span>\n\n <!-- Right chevron for menu mode -->\n @if (displayAsMenu) {\n <i\n class=\"pi pi-chevron-right i-listbox-option-icon i-listbox-option-icon--chevron\"\n ></i>\n }\n </div>\n } @if (filteredOptions().length === 0) {\n <div class=\"i-listbox-no-options\">No options found</div>\n }\n </div>\n </div>\n\n <!-- Error message -->\n @if (showErrors) {\n <div class=\"i-listbox-error\">\n {{ getErrorMessage() }}\n </div>\n }\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n ElementRef,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n Injector,\n} from '@angular/core';\n\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n NgControl,\n} from '@angular/forms';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { Subject, Subscription } from 'rxjs';\n\n/**\n * RadioButton Component\n *\n * A form control radio button component for single selection within a group.\n * Fully compatible with Angular Reactive Forms and Template-driven Forms.\n *\n * @example\n * ```html\n * <!-- Basic radio button -->\n * <i-radio-button label=\"Option 1\" value=\"option1\" name=\"options\"></i-radio-button>\n *\n * <!-- Radio button with ngModel -->\n * <i-radio-button\n * label=\"Male\"\n * value=\"male\"\n * name=\"gender\"\n * [(ngModel)]=\"selectedGender\">\n * </i-radio-button>\n * <i-radio-button\n * label=\"Female\"\n * value=\"female\"\n * name=\"gender\"\n * [(ngModel)]=\"selectedGender\">\n * </i-radio-button>\n *\n * <!-- Radio button in reactive form -->\n * <i-radio-button\n * label=\"Yes\"\n * value=\"yes\"\n * name=\"confirmation\"\n * formControlName=\"confirmation\">\n * </i-radio-button>\n *\n * <!-- Disabled radio button -->\n * <i-radio-button\n * label=\"Unavailable\"\n * value=\"unavailable\"\n * name=\"options\"\n * [disabled]=\"true\">\n * </i-radio-button>\n * ```\n *\n * @remarks\n * This component implements ControlValueAccessor for seamless integration with Angular Forms.\n * Radio buttons with the same `name` attribute work as a group, allowing only one selection.\n *\n * Note: For Reactive Forms (formControlName), the component will attempt to infer the `name`\n * from the `formControlName` directive when `name` is not explicitly set, but it's still\n * recommended to set the `name` Input for clarity and group scoping.\n */\n@Component({\n selector: 'i-radio-button',\n standalone: true,\n imports: [],\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => IRadioButton),\n multi: true,\n },\n ],\n})\nexport class IRadioButton implements ControlValueAccessor, OnInit, OnDestroy {\n /**\n * Label text displayed next to the radio button\n */\n @Input() label?: string;\n\n /**\n * The value of this radio option\n */\n @Input() value: any;\n\n /**\n * Name attribute to group radio buttons\n */\n @Input() name?: string;\n\n /**\n * HTML id attribute for the radio input element\n */\n @Input() inputId?: string;\n\n /**\n * Whether the radio button is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Whether the radio button should take full width\n * @default false\n */\n @Input() fluid = false;\n\n /**\n * Event emitted when radio button is selected\n */\n @Output() onChange = new EventEmitter<any>();\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-radio-button-');\n\n /**\n * Internal model value (the selected value in the group)\n * @internal\n */\n private _modelValue: any;\n // Grouping state shared across instances (name + form scope)\n private static groupSubjects = new Map<string, Subject<any>>();\n private static groupValues = new Map<string, any>();\n private groupKey?: string;\n private subscription?: Subscription;\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChangeCallback: (value: any) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouchedCallback: () => void = () => {};\n\n constructor(\n private elementRef: ElementRef,\n private cdr: ChangeDetectorRef,\n private injector: Injector\n ) {}\n\n /**\n * Gets the effective input ID\n */\n get effectiveInputId(): string {\n return this.inputId || this.componentId;\n }\n\n /**\n * Checks if this radio button is currently selected\n */\n get checked(): boolean {\n return this._modelValue === this.value;\n }\n\n /**\n * Selects this radio button\n * @internal\n */\n select(): void {\n if (this.disabled) return;\n\n if (this._modelValue !== this.value) {\n this._modelValue = this.value;\n this.onChangeCallback(this.value);\n this.onTouchedCallback();\n\n // Emit after the current change detection cycle completes\n // This ensures Angular forms have processed the value change\n setTimeout(() => {\n this.onChange.emit(this.value);\n }, 0);\n\n // Notify group subscribers (if name is provided)\n if (this.groupKey) {\n const subject = IRadioButton.groupSubjects.get(this.groupKey);\n if (subject) {\n IRadioButton.groupValues.set(this.groupKey, this.value);\n subject.next(this.value);\n }\n }\n }\n }\n\n /**\n * Writes a value to the radio button (ControlValueAccessor)\n * @internal\n */\n writeValue(value: any): void {\n this._modelValue = value;\n\n // If the control receives a value, notify the group so all members update\n if (this.groupKey) {\n const current = IRadioButton.groupValues.get(this.groupKey);\n if (current !== value) {\n let subject = IRadioButton.groupSubjects.get(this.groupKey);\n if (!subject) {\n subject = new Subject<any>();\n IRadioButton.groupSubjects.set(this.groupKey, subject);\n }\n IRadioButton.groupValues.set(this.groupKey, value);\n subject.next(value);\n }\n }\n }\n\n ngOnInit(): void {\n // If the consumer used reactive forms but didn't provide a 'name' input,\n // try to use the NgControl name for grouping\n const ngControl = this.injector.get(NgControl, null as any);\n if (!this.name && ngControl?.name) {\n try {\n this.name = String(ngControl.name);\n } catch {}\n }\n\n // Only group radios when a common name is provided\n if (!this.name) return;\n\n // compute a form-scoped key: name@formId or name@root\n const form = this.elementRef.nativeElement.closest(\n 'form'\n ) as HTMLFormElement | null;\n let formKey = 'root';\n if (form) {\n formKey =\n form.id ||\n form.getAttribute('data-integrang-form-id') ||\n UniqueComponentId('i-radio-form-');\n if (!form.id && !form.getAttribute('data-integrang-form-id')) {\n form.setAttribute('data-integrang-form-id', formKey);\n }\n }\n this.groupKey = `${this.name}@${formKey}`;\n\n // ensure subject exists\n let subject = IRadioButton.groupSubjects.get(this.groupKey);\n if (!subject) {\n subject = new Subject<any>();\n IRadioButton.groupSubjects.set(this.groupKey, subject);\n }\n\n // subscribe to group changes\n this.subscription = subject.subscribe((value: any) => {\n // update model and view\n this._modelValue = value;\n // run change detection to update CSS classes\n this.cdr.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n\n // Cleanup: if there are no more observers for this group, remove the subject and value\n if (this.groupKey) {\n const subject = IRadioButton.groupSubjects.get(this.groupKey);\n if (subject && subject.observers && subject.observers.length === 0) {\n IRadioButton.groupSubjects.delete(this.groupKey);\n IRadioButton.groupValues.delete(this.groupKey);\n }\n }\n }\n\n /**\n * Registers the onChange callback (ControlValueAccessor)\n * @internal\n */\n registerOnChange(fn: (value: any) => void): void {\n this.onChangeCallback = fn;\n }\n\n /**\n * Registers the onTouched callback (ControlValueAccessor)\n * @internal\n */\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n /**\n * Sets the disabled state (ControlValueAccessor)\n * @internal\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","<div\n class=\"i-radio-button-wrapper\"\n [class.i-radio-button--disabled]=\"disabled\"\n [class.i-radio-button--fluid]=\"fluid\"\n>\n <div\n class=\"i-radio-button\"\n [class.i-radio-button--checked]=\"checked\"\n (click)=\"select()\"\n [attr.id]=\"effectiveInputId\"\n role=\"radio\"\n [attr.aria-checked]=\"checked\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-labelledby]=\"label ? effectiveInputId + '-label' : null\"\n tabindex=\"0\"\n (keydown.space)=\"$event.preventDefault(); select()\"\n >\n <span class=\"i-radio-button-icon\"></span>\n </div>\n @if (label) {\n <label\n [id]=\"effectiveInputId + '-label'\"\n class=\"i-radio-button-label\"\n (click)=\"select()\"\n >\n {{ label }}\n </label>\n }\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\nimport { ISeverity } from '@shared/enums/IButtonSeverity';\n\nexport type MessageSize = 'small' | 'medium' | 'large';\n\n@Component({\n selector: 'i-message',\n imports: [],\n templateUrl: './message.component.html',\n styleUrl: './message.component.scss',\n})\nexport class IMessage {\n /**\n * Severity type of the message\n * @default 'info'\n */\n @Input() severity: ISeverity = 'info';\n\n /**\n * Size of the message\n * @default 'medium'\n */\n @Input() size: MessageSize = 'medium';\n\n /**\n * Icon to display (Material Icons)\n * If not provided, default icons based on severity will be used\n */\n @Input() icon?: string;\n\n /**\n * Whether the message can be closed\n * @default false\n */\n @Input() closable: boolean = false;\n\n /**\n * Whether the message is visible\n * @default true\n */\n @Input() visible: boolean = true;\n\n /**\n * Event emitted when visible changes (for two-way binding)\n */\n @Output() visibleChange = new EventEmitter<boolean>();\n\n /**\n * Get the default icon based on severity\n */\n getDefaultIcon(): string {\n if (this.icon) return this.icon;\n\n const iconMap: Record<ISeverity, string> = {\n success: 'pi pi-check-circle',\n info: 'pi pi-lightbulb',\n warning: 'pi pi-exclamation-triangle',\n danger: 'pi pi-times-circle',\n primary: 'pi pi-info-circle',\n secondary: 'pi pi-info-circle',\n tertiary: 'pi pi-info-circle',\n contrast: 'pi pi-info-circle',\n };\n\n return iconMap[this.severity] || 'pi pi-info-circle';\n }\n\n /**\n * Close the message\n */\n close(): void {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n}\n","@if (visible) {\n<div\n class=\"i-message i-message-{{ severity }} i-message--{{ size }}\"\n role=\"alert\"\n>\n <div class=\"i-message-content\">\n <div class=\"i-message-icon\">\n <i [class]=\"getDefaultIcon()\"></i>\n </div>\n <div class=\"i-message-text\">\n <ng-content></ng-content>\n </div>\n @if (closable) {\n <button\n class=\"i-message-close\"\n type=\"button\"\n (click)=\"close()\"\n aria-label=\"Close\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n }\n </div>\n</div>\n}\n","import {\n Component,\n Input,\n ElementRef,\n ViewChild,\n HostListener,\n Output,\n EventEmitter,\n forwardRef,\n Injector,\n signal,\n computed,\n InputSignal,\n input,\n WritableSignal,\n} from '@angular/core';\n\nimport {\n FormsModule,\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n NgControl,\n AbstractControl,\n} from '@angular/forms';\nimport { IChipsComponent, ChipItem } from '../chips/chips.component';\nimport { ICheckbox } from '../checkbox/checkbox.component';\nimport { IInputText } from '../input-text/input-text.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Option data structure for the multi-select component\n */\nexport interface MultiSelectOption {\n [key: string]: any;\n}\n\n/**\n * Multi-Select Component\n *\n * A multi-selection dropdown component with filtering, chips display, and form control support.\n * Uses Angular signals for reactive state management and is fully compatible with Angular Forms.\n *\n * @example\n * ```html\n * <!-- Basic multi-select -->\n * <i-multi-select\n * label=\"Skills\"\n * [options]=\"skills\"\n * optionLabel=\"name\"\n * formControlName=\"selectedSkills\">\n * </i-multi-select>\n *\n * <!-- Multi-select with filtering -->\n * <i-multi-select\n * label=\"Countries\"\n * [options]=\"countries\"\n * optionLabel=\"name\"\n * [filter]=\"true\"\n * filterBy=\"name\"\n * formControlName=\"countries\">\n * </i-multi-select>\n *\n * <!-- Multi-select with clear button -->\n * <i-multi-select\n * label=\"Tags\"\n * [options]=\"tags\"\n * optionLabel=\"label\"\n * [showClear]=\"true\"\n * [maxSelectedLabels]=\"5\"\n * (onClear)=\"handleClear()\"\n * formControlName=\"tags\">\n * </i-multi-select>\n *\n * <!-- Full width multi-select -->\n * <i-multi-select\n * label=\"Permissions\"\n * [options]=\"permissions\"\n * optionLabel=\"name\"\n * [fluid]=\"true\"\n * formControlName=\"permissions\">\n * </i-multi-select>\n * ```\n *\n * @remarks\n * This component implements ControlValueAccessor for seamless integration with Angular Forms.\n * Uses signals for efficient filtering and option management.\n * Selected items are displayed as chips when count is within maxSelectedLabels.\n */\n@Component({\n selector: 'i-multi-select',\n standalone: true,\n imports: [FormsModule, IChipsComponent, ICheckbox, IInputText],\n templateUrl: './multi-select.component.html',\n styleUrls: ['./multi-select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => IMultiSelect),\n multi: true,\n },\n ],\n})\nexport class IMultiSelect implements ControlValueAccessor {\n /**\n * Label text displayed for the multi-select\n * @default 'Multi Select'\n */\n @Input() label = 'Multi Select';\n\n /**\n * Array of options to display in the dropdown\n */\n options: InputSignal<MultiSelectOption[] | null | undefined> = input<\n MultiSelectOption[] | null | undefined\n >([]);\n\n /**\n * Property name to use as the display label for options\n */\n @Input({ required: true }) optionLabel!: string;\n\n /**\n * Placeholder text when no options are selected\n * @default 'Select options'\n */\n @Input() placeholder = 'Select options';\n\n /**\n * HTML id attribute for the multi-select element\n */\n @Input() id?: string;\n\n /**\n * Whether the multi-select should take full width of its container\n * @default false\n */\n @Input() fluid = false;\n\n /**\n * Whether to show a clear button to reset all selections\n * @default false\n */\n @Input() showClear = false;\n\n /**\n * Enables filtering/searching of options\n * @default true\n */\n @Input() filter = true;\n\n /**\n * Property name to use for filtering\n * @default 'label'\n */\n @Input() filterBy = 'label';\n\n /**\n * Maximum number of selected items to display as labels before showing count\n * @default 3\n */\n @Input() maxSelectedLabels = 3;\n\n /**\n * Template string for selected items count label (use {0} for count placeholder)\n * @default '{0} items selected'\n */\n @Input() selectedItemsLabel = '{0} items selected';\n\n /**\n * Custom error messages for validation rules\n * @default {}\n */\n @Input() errorMessages: { [key: string]: string } = {};\n\n /**\n * Whether the multi-select is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Whether the multi-select input is readonly\n * @default true\n */\n @Input() readonly = true;\n\n /**\n * Event emitted when selection changes\n */\n @Output() onChange = new EventEmitter<any[]>();\n\n /**\n * Event emitted when all selections are cleared\n */\n @Output() onClear = new EventEmitter<void>();\n\n /**\n * Reference to the dropdown element\n * @internal\n */\n @ViewChild('dropdown', { static: false }) dropdownRef!: ElementRef;\n\n /**\n * Reference to the search input element\n * @internal\n */\n @ViewChild('searchInput', { static: false }) searchInputRef!: ElementRef;\n\n /**\n * Whether the dropdown is currently open\n * @internal\n */\n isOpen = false;\n\n /**\n * Current filter/search value\n * @internal\n */\n filterValue = signal('');\n\n /**\n * Computed filtered options based on search value\n * @internal\n */\n filteredOptions = computed(() => {\n const currentOptions = this.options() || [];\n const currentFilterValue = this.filterValue();\n\n if (!Array.isArray(currentOptions)) {\n return [];\n }\n\n if (!this.filter || !currentFilterValue.trim()) {\n return [...currentOptions];\n } else {\n const filterText = currentFilterValue.toLowerCase();\n return currentOptions.filter((option) => {\n const searchValue = this.getOptionSearchValue(option).toLowerCase();\n return searchValue.includes(filterText);\n });\n }\n });\n\n /**\n * Computed chip items from selected values\n * @internal\n */\n selectedChips = computed<ChipItem[]>(() => {\n const currentValue = this._value();\n\n return currentValue.map((val) => {\n const label = this.getOptionLabel(val);\n\n return {\n label,\n value: val,\n removable: !this.disabled,\n };\n });\n });\n\n /**\n * Internal selected values storage as a signal\n * @internal\n */\n private _value: WritableSignal<any[]> = signal([]);\n\n /**\n * Gets the current selected values array\n * @internal\n */\n get value(): any[] {\n return this._value();\n }\n\n /**\n * Sets the selected values and updates the display\n * @internal\n */\n set value(val: any[]) {\n this._value.set(val || []);\n }\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChangeCallback: (value: any[]) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouchedCallback: () => void = () => {};\n\n /**\n * NgControl reference for form validation\n * @internal\n */\n public ngControl: NgControl | null = null;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-multi-select-');\n\n constructor(private injector: Injector) {\n setTimeout(() => {\n this.ngControl = this.injector.get(NgControl, null);\n });\n }\n\n /**\n * Toggles the dropdown open/closed state\n * @internal\n */\n toggleDropdown() {\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.filterValue.set('');\n setTimeout(() => {\n if (\n this.filter &&\n this.searchInputRef &&\n this.searchInputRef.nativeElement\n ) {\n this.searchInputRef.nativeElement.focus();\n }\n });\n }\n }\n\n /**\n * Toggles selection state of an option\n * @internal\n */\n toggleOption(option: MultiSelectOption) {\n const currentValues = [...this.value];\n const optionValue = this.getOptionValue(option);\n\n const index = currentValues.findIndex(\n (val) => JSON.stringify(val) === JSON.stringify(optionValue)\n );\n\n if (index > -1) {\n currentValues.splice(index, 1);\n } else {\n currentValues.push(optionValue);\n }\n\n this.value = currentValues;\n this.onChange.emit(currentValues);\n this.onChangeCallback(currentValues);\n this.onTouchedCallback();\n }\n\n /**\n * Checks if an option is currently selected\n * @internal\n */\n isOptionSelected(option: MultiSelectOption): boolean {\n const optionValue = this.getOptionValue(option);\n return this.value.some(\n (val) => JSON.stringify(val) === JSON.stringify(optionValue)\n );\n }\n\n /**\n * Clears all selections\n * @internal\n */\n clearSelection() {\n this.value = [];\n this.onClear.emit();\n this.onChangeCallback([]);\n this.onTouchedCallback();\n }\n\n /**\n * Removes a specific selected item from chips\n * @internal\n */\n onChipRemove(event: { chip: ChipItem; originalEvent: Event }) {\n event.originalEvent.stopPropagation();\n const currentValues = [...this.value];\n\n const index = currentValues.findIndex(\n (val) => JSON.stringify(val) === JSON.stringify(event.chip.value)\n );\n\n if (index > -1) {\n currentValues.splice(index, 1);\n this.value = currentValues;\n this.onChange.emit(currentValues);\n this.onChangeCallback(currentValues);\n this.onTouchedCallback();\n }\n }\n\n /**\n * Handles close all event from chips component\n * @internal\n */\n onChipsCloseAll() {\n this.clearSelection();\n }\n\n /**\n * Gets the display label for an option\n * @internal\n */\n getOptionLabel(option: MultiSelectOption): string {\n return option[this.optionLabel] || option['label'] || String(option);\n }\n\n /**\n * Gets the value for an option\n * @internal\n */\n getOptionValue(option: MultiSelectOption): any {\n return option;\n }\n\n /**\n * Gets the searchable value for filtering\n * @internal\n */\n getOptionSearchValue(option: MultiSelectOption): string {\n if (this.filterBy && option[this.filterBy]) {\n return String(option[this.filterBy]);\n }\n return this.getOptionLabel(option);\n }\n\n /**\n * Gets labels for all selected items\n * @internal\n */\n getSelectedLabels(): string[] {\n return this.value.map((val) => {\n return this.getOptionLabel(val);\n });\n }\n\n /**\n * Gets the display label for the input (shows labels or count)\n * @internal\n */\n getDisplayLabel(): string {\n if (!this.value || this.value.length === 0) {\n return '';\n }\n\n const selectedLabels = this.getSelectedLabels();\n\n if (selectedLabels.length <= this.maxSelectedLabels) {\n return selectedLabels.join(', ');\n } else {\n return this.selectedItemsLabel.replace(\n '{0}',\n selectedLabels.length.toString()\n );\n }\n }\n\n /**\n * TrackBy function for ngFor optimization\n * @internal\n */\n trackByValue(index: number, value: any): any {\n return value;\n }\n\n /**\n * Handles clicks outside the dropdown to close it\n * @internal\n */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event) {\n if (\n this.isOpen &&\n this.dropdownRef &&\n !this.dropdownRef.nativeElement.contains(event.target as Node)\n ) {\n this.isOpen = false;\n this.filterValue.set('');\n }\n }\n\n /**\n * Writes a value to the multi-select (ControlValueAccessor)\n * @internal\n */\n writeValue(value: any[]): void {\n this._value.set(value || []);\n }\n\n /**\n * Registers the onChange callback (ControlValueAccessor)\n * @internal\n */\n registerOnChange(fn: (value: any[]) => void): void {\n this.onChangeCallback = fn;\n }\n\n /**\n * Registers the onTouched callback (ControlValueAccessor)\n * @internal\n */\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n /**\n * Sets the disabled state (ControlValueAccessor)\n * @internal\n */\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**\n * Gets the form control instance\n * @internal\n */\n get control(): AbstractControl | null {\n return this.ngControl ? this.ngControl.control : null;\n }\n\n /**\n * Determines if validation errors should be shown\n * @internal\n */\n get showErrors(): boolean {\n const c = this.control;\n return !!(c && c.invalid && c.dirty);\n }\n\n /**\n * Gets the first validation error key\n * @internal\n */\n get firstErrorKey(): string | null {\n const c = this.control;\n if (!c || !c.errors) return null;\n return Object.keys(c.errors)[0] || null;\n }\n\n /**\n * Gets the error message to display\n * @internal\n */\n getErrorMessage(): string | null {\n const key = this.firstErrorKey;\n if (!key) return null;\n const c = this.control;\n if (this.errorMessages && this.errorMessages[key])\n return this.errorMessages[key];\n const err = c?.errors || {};\n switch (key) {\n case 'required':\n return `${this.label} is required`;\n case 'minlength':\n return `Minimum ${err['minlength']?.requiredLength} items required`;\n case 'minArrayLength':\n return `Minimum ${err['minArrayLength']?.requiredLength} items required`;\n case 'maxlength':\n return `Maximum ${err['maxlength']?.requiredLength} items allowed`;\n default:\n return err[key] && typeof err[key] === 'string'\n ? err[key]\n : 'Invalid selection';\n }\n }\n}\n","<div\n class=\"i-multi-select-wrapper\"\n [class.i-multi-select--fluid]=\"fluid\"\n #dropdown\n >\n <!-- Input container with click handler -->\n <div class=\"i-multi-select-input-container\" (click)=\"toggleDropdown()\">\n <!-- Chips component with float label -->\n <i-chips\n [chips]=\"selectedChips()\"\n [boxed]=\"true\"\n [collapseOnOverflow]=\"true\"\n [removable]=\"!disabled\"\n [disabled]=\"disabled\"\n [allowCloseAll]=\"showClear && value && value.length > 0\"\n [useFloatLabel]=\"true\"\n [label]=\"label\"\n [showError]=\"showErrors\"\n (removeChip)=\"onChipRemove($event)\"\n (closedAll)=\"onChipsCloseAll()\"\n class=\"i-multi-select-chips\"\n ></i-chips>\n\n <!-- Icons overlay -->\n <div class=\"i-multi-select-icons-overlay\">\n <span class=\"i-multi-select-arrow-wrapper\">\n <i\n class=\"pi pi-chevron-down i-multi-select-arrow\"\n [class.flipped]=\"isOpen\"\n ></i>\n </span>\n </div>\n\n <!-- Error message -->\n @if (showErrors) {\n <div class=\"i-multi-select-error\">\n {{ getErrorMessage() }}\n </div>\n }\n </div>\n\n @if (isOpen) {\n <div class=\"i-multi-select-dropdown\" [class.open]=\"isOpen\">\n @if (filter) {\n <div class=\"i-multi-select-filter\">\n <i-input-text\n #searchInput\n [useFloatLabel]=\"false\"\n placeholder=\"Search...\"\n [ngModel]=\"filterValue()\"\n (ngModelChange)=\"filterValue.set($event)\"\n [fluid]=\"true\"\n [icon]=\"'pi pi-search'\"\n >\n </i-input-text>\n </div>\n }\n\n <div class=\"i-multi-select-options\">\n @for (option of filteredOptions(); track option) {\n <div\n class=\"i-multi-select-option\"\n [class.selected]=\"isOptionSelected(option)\"\n (click)=\"toggleOption(option)\"\n >\n <i-checkbox\n [checked]=\"isOptionSelected(option)\"\n [readonly]=\"true\"\n size=\"small\"\n class=\"i-multi-select-checkbox\"\n ></i-checkbox>\n <span class=\"i-multi-select-option-label\">\n {{ getOptionLabel(option) }}\n </span>\n </div>\n }\n\n @if (filteredOptions().length === 0) {\n <div class=\"i-multi-select-no-options\">No options found</div>\n }\n </div>\n </div>\n }\n</div>\n","interface ZIndexUtilsInterface {\n get: (el: HTMLElement | null) => number;\n set: (key: string, el: HTMLElement | null, baseZIndex: number) => void;\n clear: (el: HTMLElement | null) => void;\n getCurrent: () => number;\n}\n\nexport function ZIndexUtils(): ZIndexUtilsInterface {\n interface ZIndexEntry {\n key: string;\n value: number;\n }\n\n let zIndexes: ZIndexEntry[] = [];\n\n const generateZIndex = (key: string, baseZIndex: number): number => {\n let lastZIndex =\n zIndexes.length > 0\n ? zIndexes[zIndexes.length - 1]\n : { key, value: baseZIndex };\n let newZIndex =\n lastZIndex.value + (lastZIndex.key === key ? 0 : baseZIndex) + 2;\n\n zIndexes.push({ key, value: newZIndex });\n\n return newZIndex;\n };\n\n const revertZIndex = (zIndex: number): void => {\n zIndexes = zIndexes.filter((obj: ZIndexEntry) => obj.value !== zIndex);\n };\n\n const getCurrentZIndex = (): number => {\n return zIndexes.length > 0 ? zIndexes[zIndexes.length - 1].value : 0;\n };\n\n const getZIndex = (el: HTMLElement | null): number => {\n return el ? parseInt(el.style.zIndex, 10) || 0 : 0;\n };\n\n return {\n get: getZIndex,\n set: (key: string, el: HTMLElement | null, baseZIndex: number): void => {\n if (el) {\n el.style.zIndex = String(generateZIndex(key, baseZIndex));\n }\n },\n clear: (el: HTMLElement | null): void => {\n if (el) {\n revertZIndex(getZIndex(el));\n el.style.zIndex = '';\n }\n },\n getCurrent: () => getCurrentZIndex(),\n };\n}\n\nexport default ZIndexUtils();\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n OnDestroy,\n Renderer2,\n NgZone,\n} from '@angular/core';\nimport {\n trigger,\n state,\n style,\n transition,\n animate,\n AnimationEvent,\n} from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { IButton } from '../button/button.component';\nimport { ZIndexUtils } from '../../utils/zindexutils';\n\n/**\n * Overlay Panel Component\n *\n * A floating panel that positions itself relative to a target element.\n * Modeled after PrimeNG's OverlayPanel with automatic positioning and collision detection.\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <i-button (clicked)=\"panel.toggle($event)\">Show Panel</i-button>\n * <i-overlay-panel #panel>\n * <p>Panel content goes here</p>\n * </i-overlay-panel>\n *\n * <!-- With custom position -->\n * <i-button (clicked)=\"panel2.toggle($event)\">Show Panel</i-button>\n * <i-overlay-panel #panel2 [appendTo]=\"'body'\">\n * <p>This panel is appended to body</p>\n * </i-overlay-panel>\n * ```\n */\n@Component({\n selector: 'i-overlay-panel',\n standalone: true,\n imports: [CommonModule, IButton],\n templateUrl: './overlay-panel.component.html',\n styleUrls: ['./overlay-panel.component.scss'],\n animations: [\n trigger('animation', [\n state(\n 'void',\n style({\n transform: 'scaleY(0.8)',\n opacity: 0,\n })\n ),\n state(\n 'open',\n style({\n transform: 'scaleY(1)',\n opacity: 1,\n })\n ),\n state(\n 'closed',\n style({\n transform: 'scaleY(0.8)',\n opacity: 0,\n })\n ),\n transition('void => open', animate('150ms ease-out')),\n transition('open => closed', animate('150ms ease-in')),\n ]),\n ],\n})\nexport class IOverlayPanel implements OnDestroy {\n /**\n * Whether clicking outside closes the panel\n * @default true\n */\n @Input() dismissable = true;\n\n /**\n * Where to append the panel ('body' or null for inline)\n * @default 'body'\n */\n @Input() appendTo: 'body' | null = 'body';\n\n /**\n * Base z-index value\n * @default 1000\n */\n @Input() baseZIndex = 1000;\n\n /**\n * Auto z-index layering\n * @default true\n */\n @Input() autoZIndex = true;\n\n /**\n * Event emitted when panel shows\n */\n @Output() onShow = new EventEmitter<void>();\n\n /**\n * Event emitted when panel hides\n */\n @Output() onHide = new EventEmitter<void>();\n\n @ViewChild('container') containerViewChild?: ElementRef;\n\n visible = false;\n private target?: HTMLElement;\n private documentClickListener?: () => void;\n private documentResizeListener?: () => void;\n private scrollHandler?: any;\n private selfClick = false;\n private targetClick = false;\n overlayVisible = false;\n render = false;\n\n constructor(\n public el: ElementRef,\n private renderer: Renderer2,\n private zone: NgZone\n ) {}\n\n ngOnDestroy() {\n this.unbindDocumentClickListener();\n this.unbindScrollListener();\n this.unbindResizeListener();\n if (this.appendTo === 'body' && this.containerViewChild) {\n this.renderer.removeChild(\n document.body,\n this.containerViewChild.nativeElement\n );\n }\n this.target = undefined;\n }\n\n toggle(event: Event, target?: HTMLElement) {\n if (this.visible) {\n this.hide();\n } else {\n this.show(event, target || (event.currentTarget as HTMLElement));\n }\n }\n\n show(event: Event, target?: HTMLElement) {\n this.target = target || (event.currentTarget as HTMLElement);\n this.targetClick = true;\n\n if (this.visible) {\n return;\n }\n\n this.visible = true;\n this.render = true;\n }\n\n hide() {\n this.visible = false;\n this.unbindDocumentClickListener();\n this.unbindScrollListener();\n this.unbindResizeListener();\n }\n\n onAnimationStart(event: any) {\n if (event.toState === 'open') {\n const zIndexUtils = ZIndexUtils();\n this.containerViewChild!.nativeElement.style.zIndex = String(\n this.autoZIndex\n ? this.baseZIndex + zIndexUtils.getCurrent() + 1\n : this.baseZIndex\n );\n this.appendContainer();\n this.align();\n this.bindDocumentClickListener();\n this.bindScrollListener();\n this.bindResizeListener();\n this.overlayVisible = true;\n this.onShow.emit();\n }\n }\n\n onAnimationEnd(event: any) {\n if (event.toState === 'closed') {\n if (this.appendTo === 'body' && this.containerViewChild) {\n this.renderer.removeChild(\n document.body,\n this.containerViewChild.nativeElement\n );\n }\n this.unbindDocumentClickListener();\n this.unbindScrollListener();\n this.unbindResizeListener();\n this.overlayVisible = false;\n this.onHide.emit();\n this.render = false;\n }\n }\n\n appendContainer() {\n if (this.appendTo === 'body') {\n this.renderer.appendChild(\n document.body,\n this.containerViewChild!.nativeElement\n );\n }\n }\n\n align() {\n if (!this.containerViewChild || !this.target) {\n return;\n }\n\n const container = this.containerViewChild.nativeElement;\n const target = this.target.getBoundingClientRect();\n const containerWidth = container.offsetWidth;\n const containerHeight = container.offsetHeight;\n const targetWidth = target.width;\n const targetHeight = target.height;\n const viewport = { width: window.innerWidth, height: window.innerHeight };\n const gap = 8;\n\n let top: number;\n let left: number;\n let arrowPosition: 'top' | 'bottom' | 'left' | 'right' = 'top';\n\n // Calculate best position\n const spaceBelow = viewport.height - (target.top + targetHeight);\n const spaceAbove = target.top;\n const spaceRight = viewport.width - (target.left + targetWidth);\n const spaceLeft = target.left;\n\n // Determine position based on available space\n if (spaceBelow >= containerHeight + gap) {\n // Position below\n top = target.top + targetHeight + gap;\n left = target.left + targetWidth / 2 - containerWidth / 2;\n arrowPosition = 'top';\n } else if (spaceAbove >= containerHeight + gap) {\n // Position above\n top = target.top - containerHeight - gap;\n left = target.left + targetWidth / 2 - containerWidth / 2;\n arrowPosition = 'bottom';\n } else if (spaceRight >= containerWidth + gap) {\n // Position right\n top = target.top + targetHeight / 2 - containerHeight / 2;\n left = target.left + targetWidth + gap;\n arrowPosition = 'left';\n } else if (spaceLeft >= containerWidth + gap) {\n // Position left\n top = target.top + targetHeight / 2 - containerHeight / 2;\n left = target.left - containerWidth - gap;\n arrowPosition = 'right';\n } else {\n // Default to below if no space\n top = target.top + targetHeight + gap;\n left = target.left + targetWidth / 2 - containerWidth / 2;\n arrowPosition = 'top';\n }\n\n // Keep within viewport bounds\n if (left < 10) {\n left = 10;\n } else if (left + containerWidth > viewport.width - 10) {\n left = viewport.width - containerWidth - 10;\n }\n\n if (top < 10) {\n top = 10;\n } else if (top + containerHeight > viewport.height - 10) {\n top = viewport.height - containerHeight - 10;\n }\n\n // Apply positioning\n container.style.top = top + 'px';\n container.style.left = left + 'px';\n container.className = `overlay-panel overlay-panel-${arrowPosition}`;\n }\n\n onContainerClick() {\n this.selfClick = true;\n }\n\n bindDocumentClickListener() {\n if (!this.documentClickListener && this.dismissable) {\n this.zone.runOutsideAngular(() => {\n this.documentClickListener = this.renderer.listen(\n 'document',\n 'click',\n () => {\n if (!this.selfClick && !this.targetClick && this.visible) {\n this.zone.run(() => {\n this.hide();\n });\n }\n this.selfClick = false;\n this.targetClick = false;\n }\n );\n });\n }\n }\n\n unbindDocumentClickListener() {\n if (this.documentClickListener) {\n this.documentClickListener();\n this.documentClickListener = undefined;\n }\n }\n\n bindScrollListener() {\n if (!this.scrollHandler) {\n this.scrollHandler = () => {\n if (this.visible) {\n this.zone.run(() => {\n this.align();\n });\n }\n };\n window.addEventListener('scroll', this.scrollHandler, true);\n }\n }\n\n unbindScrollListener() {\n if (this.scrollHandler) {\n window.removeEventListener('scroll', this.scrollHandler, true);\n this.scrollHandler = null;\n }\n }\n\n bindResizeListener() {\n if (!this.documentResizeListener) {\n this.zone.runOutsideAngular(() => {\n this.documentResizeListener = this.renderer.listen(\n 'window',\n 'resize',\n () => {\n if (this.visible) {\n this.zone.run(() => {\n this.align();\n });\n }\n }\n );\n });\n }\n }\n\n unbindResizeListener() {\n if (this.documentResizeListener) {\n this.documentResizeListener();\n this.documentResizeListener = undefined;\n }\n }\n\n onEscapeKey() {\n if (this.dismissable) {\n this.hide();\n }\n }\n}\n","@if (render) {\n<div\n #container\n class=\"overlay-panel\"\n [class.overlay-panel-visible]=\"overlayVisible\"\n (click)=\"onContainerClick()\"\n (keydown.escape)=\"onEscapeKey()\"\n [@animation]=\"visible ? 'open' : 'closed'\"\n (@animation.start)=\"onAnimationStart($event)\"\n (@animation.done)=\"onAnimationEnd($event)\"\n role=\"dialog\"\n [attr.aria-hidden]=\"!visible\"\n>\n <i-button\n class=\"overlay-panel-close\"\n size=\"xtra-small\"\n [icon]=\"'pi pi-times'\"\n [text]=\"true\"\n [severity]=\"'contrast'\"\n (clicked)=\"hide()\"\n ></i-button>\n <div class=\"overlay-panel-content\">\n <ng-content></ng-content>\n </div>\n</div>\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Panel Component\n *\n * A collapsible panel container with a header that can be toggled open/closed.\n * Displays a minus/plus icon to indicate the collapsed state.\n *\n * @example\n * ```html\n * <!-- Basic panel -->\n * <i-panel header=\"Options\">\n * <p>Content goes here</p>\n * </i-panel>\n *\n * <!-- Initially collapsed panel -->\n * <i-panel header=\"Settings\" [collapsed]=\"true\">\n * <p>Settings content</p>\n * </i-panel>\n *\n * <!-- Panel with toggle event -->\n * <i-panel header=\"Details\" (onToggle)=\"handleToggle($event)\">\n * <p>Detailed information</p>\n * </i-panel>\n *\n * <!-- Non-toggleable panel -->\n * <i-panel header=\"Fixed Section\" [toggleable]=\"false\">\n * <p>Always visible content</p>\n * </i-panel>\n * ```\n *\n * @remarks\n * Use content projection to add any content inside the panel body.\n * The panel header shows a minus icon when expanded and plus icon when collapsed.\n */\n@Component({\n selector: 'i-panel',\n templateUrl: './panel.component.html',\n styleUrl: './panel.component.scss',\n})\nexport class IPanel {\n /**\n * The header/title text displayed in the panel\n */\n @Input() header: string = '';\n\n /**\n * Whether the panel content is collapsed\n * @default false\n */\n @Input() collapsed: boolean = false;\n\n /**\n * Whether the panel can be toggled\n * @default true\n */\n @Input() toggleable: boolean = true;\n\n /**\n * Event emitted when collapsed state changes\n */\n @Output() collapsedChange = new EventEmitter<boolean>();\n\n /**\n * Event emitted when panel is toggled\n */\n @Output() onToggle = new EventEmitter<boolean>();\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-panel-');\n\n /**\n * Toggles the panel collapsed state\n * @internal\n */\n toggle(): void {\n if (!this.toggleable) {\n return;\n }\n this.collapsed = !this.collapsed;\n this.collapsedChange.emit(this.collapsed);\n this.onToggle.emit(this.collapsed);\n }\n}\n","<div\n class=\"i-panel\"\n [class.i-panel--collapsed]=\"collapsed\"\n [class.i-panel--toggleable]=\"toggleable\"\n [attr.id]=\"componentId\"\n>\n <div class=\"i-panel-header-wrap\">\n @if (toggleable) {\n <button\n class=\"i-panel-header\"\n type=\"button\"\n (click)=\"toggle()\"\n [attr.aria-expanded]=\"!collapsed\"\n >\n <i\n class=\"i-panel-toggle-icon pi\"\n [class.pi-minus]=\"!collapsed\"\n [class.pi-plus]=\"collapsed\"\n aria-hidden=\"true\"\n ></i>\n <span class=\"i-panel-title\">{{ header }}</span>\n </button>\n } @if (!toggleable) {\n <div class=\"i-panel-header\">\n <i class=\"i-panel-toggle-icon\" aria-hidden=\"true\"></i>\n <span class=\"i-panel-title\">{{ header }}</span>\n </div>\n }\n </div>\n <div\n class=\"i-panel-content-wrapper\"\n [class.i-panel-content-wrapper--collapsed]=\"collapsed\"\n >\n <div class=\"i-panel-content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n","import {\n Component,\n Input,\n ElementRef,\n ViewChild,\n HostListener,\n Output,\n EventEmitter,\n forwardRef,\n Injector,\n signal,\n computed,\n InputSignal,\n input,\n} from '@angular/core';\n\nimport {\n FormsModule,\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n NgControl,\n AbstractControl,\n} from '@angular/forms';\nimport { IInputText } from '../input-text/input-text.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Option data structure for the select component\n */\nexport interface SelectOption {\n [key: string]: any;\n}\n\n/**\n * Select Component\n *\n * A dropdown select component with filtering, searching, and form control support.\n * Uses Angular signals for reactive state management and is fully compatible with Angular Forms.\n *\n * @example\n * ```html\n * <!-- Basic select -->\n * <i-select\n * label=\"Country\"\n * [options]=\"countries\"\n * optionLabel=\"name\"\n * formControlName=\"country\">\n * </i-select>\n *\n * <!-- Select with filtering -->\n * <i-select\n * label=\"City\"\n * [options]=\"cities\"\n * optionLabel=\"name\"\n * [filter]=\"true\"\n * filterBy=\"name\"\n * formControlName=\"city\">\n * </i-select>\n *\n * <!-- Select with clear button -->\n * <i-select\n * label=\"Category\"\n * [options]=\"categories\"\n * optionLabel=\"label\"\n * [showClear]=\"true\"\n * (onClear)=\"handleClear()\"\n * formControlName=\"category\">\n * </i-select>\n *\n * <!-- Full width select -->\n * <i-select\n * label=\"Status\"\n * [options]=\"statuses\"\n * optionLabel=\"name\"\n * [fluid]=\"true\"\n * formControlName=\"status\">\n * </i-select>\n * ```\n *\n * @remarks\n * This component implements ControlValueAccessor for seamless integration with Angular Forms.\n * Uses signals for efficient filtering and option management.\n */\n@Component({\n selector: 'i-select',\n standalone: true,\n imports: [FormsModule, IInputText],\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ISelect),\n multi: true,\n },\n ],\n})\nexport class ISelect implements ControlValueAccessor {\n /**\n * Label text displayed for the select\n * @default 'Select'\n */\n @Input() label = 'Select';\n\n /**\n * Array of options to display in the dropdown\n */\n options: InputSignal<SelectOption[] | null | undefined> = input<\n SelectOption[] | null | undefined\n >([]);\n\n /**\n * Property name to use as the display label for options\n */\n @Input({ required: true }) optionLabel!: string;\n\n /**\n * Placeholder text when no option is selected\n * @default 'Select an option'\n */\n @Input() placeholder = 'Select an option';\n\n /**\n * Whether the internal input should use float label style\n * @default true\n */\n @Input() useFloatLabel = true;\n\n /**\n * HTML id attribute for the select element\n */\n @Input() id?: string;\n\n /**\n * Whether the select should take full width of its container\n * @default false\n */\n @Input() fluid = false;\n\n /**\n * Whether to show a clear button to reset selection\n * @default false\n */\n @Input() showClear = false;\n\n /**\n * Enables filtering/searching of options\n * @default true\n */\n @Input() filter = true;\n\n /**\n * Property name to use for filtering\n * @default 'label'\n */\n @Input() filterBy = 'label';\n\n /**\n * Custom error messages for validation rules\n * @default {}\n */\n @Input() errorMessages: { [key: string]: string } = {};\n\n /**\n * Whether the select input is readonly\n * @default true\n */\n @Input() readonly = true;\n\n /**\n * Event emitted when selection changes\n */\n @Output() onChange = new EventEmitter<any>();\n\n /**\n * Event emitted when selection is cleared\n */\n @Output() onClear = new EventEmitter<void>();\n\n /**\n * Reference to the input text component\n * @internal\n */\n @ViewChild('inputText') inputTextRef!: IInputText;\n\n /**\n * Reference to the dropdown element\n * @internal\n */\n @ViewChild('dropdown', { static: false }) dropdownRef!: ElementRef;\n\n /**\n * Reference to the search input element\n * @internal\n */\n @ViewChild('searchInput', { static: false }) searchInputRef!: ElementRef;\n\n /**\n * Whether the dropdown is currently open\n * @internal\n */\n isOpen = false;\n\n /**\n * Current filter/search value\n * @internal\n */\n filterValue = signal('');\n\n /**\n * Computed filtered options based on search value\n * @internal\n */\n filteredOptions = computed(() => {\n const currentOptions = this.options() || [];\n const currentFilterValue = this.filterValue();\n\n if (!Array.isArray(currentOptions)) {\n return [];\n }\n\n if (!this.filter || !currentFilterValue.trim()) {\n return [...currentOptions];\n } else {\n const filterText = currentFilterValue.toLowerCase();\n return currentOptions.filter((option) => {\n const searchValue = this.getOptionSearchValue(option).toLowerCase();\n return searchValue.includes(filterText);\n });\n }\n });\n\n /**\n * Display value for the input text component\n * @internal\n */\n get inputValue(): string {\n return this.getSelectedLabel() || '';\n }\n\n set inputValue(value: string) {\n // Setter required for binding, but value is managed internally\n }\n\n /**\n * Internal selected value storage\n * @internal\n */\n private _value: any = null;\n\n /**\n * Gets the current selected value\n * @internal\n */\n get value(): any {\n return this._value;\n }\n\n /**\n * Sets the selected value and updates the display\n * @internal\n */\n set value(val: any) {\n this._value = val;\n if (this.inputTextRef) {\n this.inputTextRef.value = this.getSelectedLabel() || null;\n }\n }\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onChangeCallback: (value: any) => void = () => {};\n\n /**\n * Callback for ControlValueAccessor\n * @internal\n */\n private onTouchedCallback: () => void = () => {};\n\n /**\n * NgControl reference for form validation\n * @internal\n */\n public ngControl: NgControl | null = null;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-select-');\n\n constructor(private injector: Injector) {\n setTimeout(() => {\n this.ngControl = this.injector.get(NgControl, null);\n });\n }\n\n /**\n * Toggles the dropdown open/closed state\n * @internal\n */\n toggleDropdown() {\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.filterValue.set('');\n setTimeout(() => {\n if (\n this.filter &&\n this.searchInputRef &&\n this.searchInputRef.nativeElement\n ) {\n this.searchInputRef.nativeElement.focus();\n }\n });\n }\n }\n\n /**\n * Selects an option from the dropdown\n * @internal\n */\n selectOption(option: SelectOption) {\n const newValue = this.getOptionValue(option);\n this.value = newValue;\n this.onChange.emit(newValue);\n this.onChangeCallback(newValue);\n this.onTouchedCallback();\n this.isOpen = false;\n this.filterValue.set('');\n }\n\n /**\n * Clears the current selection\n * @internal\n */\n clearSelection() {\n this.value = null;\n this.onClear.emit();\n this.onChangeCallback(null);\n this.onTouchedCallback();\n }\n\n /**\n * Gets the display label for an option\n * @internal\n */\n getOptionLabel(option: SelectOption): string {\n return option[this.optionLabel] || option['label'] || String(option);\n }\n\n /**\n * Gets the value for an option\n * @internal\n */\n getOptionValue(option: SelectOption): any {\n return option;\n }\n\n /**\n * Checks if an option is currently selected\n * @internal\n */\n isOptionSelected(option: SelectOption): boolean {\n if (this.value === null || this.value === undefined) {\n return false;\n }\n\n return JSON.stringify(option) === JSON.stringify(this.value);\n }\n\n /**\n * Gets the searchable value for filtering\n * @internal\n */\n getOptionSearchValue(option: SelectOption): string {\n if (this.filterBy && option[this.filterBy]) {\n return String(option[this.filterBy]);\n }\n return this.getOptionLabel(option);\n }\n\n /**\n * Gets the label of the currently selected option\n * @internal\n */\n getSelectedLabel(): string {\n if (this.value === null || this.value === undefined) {\n return '';\n }\n\n const currentOptions = this.options() || [];\n if (!Array.isArray(currentOptions)) {\n return String(this.value);\n }\n\n const selectedOption = currentOptions.find((option: SelectOption) =>\n this.isOptionSelected(option)\n );\n\n return selectedOption\n ? this.getOptionLabel(selectedOption)\n : String(this.value);\n }\n\n /**\n * Handles clicks outside the dropdown to close it\n * @internal\n */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event) {\n if (\n this.isOpen &&\n this.dropdownRef &&\n !this.dropdownRef.nativeElement.contains(event.target as Node)\n ) {\n this.isOpen = false;\n this.filterValue.set('');\n }\n }\n\n /**\n * Writes a value to the select (ControlValueAccessor)\n * @internal\n */\n writeValue(value: any): void {\n this._value = value;\n if (this.inputTextRef) {\n this.inputTextRef.value = this.getSelectedLabel() || null;\n }\n }\n\n /**\n * Registers the onChange callback (ControlValueAccessor)\n * @internal\n */\n registerOnChange(fn: (value: any) => void): void {\n this.onChangeCallback = fn;\n }\n\n /**\n * Registers the onTouched callback (ControlValueAccessor)\n * @internal\n */\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n /**\n * Sets the disabled state (ControlValueAccessor)\n * @internal\n */\n setDisabledState?(isDisabled: boolean): void {\n // Not implemented - can be added if needed\n }\n\n /**\n * Gets the form control instance\n * @internal\n */\n get control(): AbstractControl | null {\n return this.ngControl ? this.ngControl.control : null;\n }\n\n /**\n * Determines if validation errors should be shown\n * @internal\n */\n get showErrors(): boolean {\n const c = this.control;\n return !!(c && c.invalid && c.dirty);\n }\n\n /**\n * Gets the first validation error key\n * @internal\n */\n get firstErrorKey(): string | null {\n const c = this.control;\n if (!c || !c.errors) return null;\n return Object.keys(c.errors)[0] || null;\n }\n\n /**\n * Gets the error message to display\n * @internal\n */\n getErrorMessage(): string | null {\n const key = this.firstErrorKey;\n if (!key) return null;\n const c = this.control;\n if (this.errorMessages && this.errorMessages[key])\n return this.errorMessages[key];\n const err = c?.errors || {};\n switch (key) {\n case 'required':\n return `${this.label} is required`;\n default:\n return err[key] && typeof err[key] === 'string'\n ? err[key]\n : 'Invalid selection';\n }\n }\n}\n","<div class=\"i-select-wrapper\" [class.i-select--fluid]=\"fluid\" #dropdown>\n <!-- Reuse the input-text component for consistent styling and form integration -->\n <div class=\"i-select-input-container\" (click)=\"toggleDropdown()\">\n <i-input-text\n #inputText\n [label]=\"label\"\n [useFloatLabel]=\"useFloatLabel\"\n [id]=\"id\"\n [fluid]=\"fluid\"\n [errorMessages]=\"errorMessages\"\n [(ngModel)]=\"inputValue\"\n [type]=\"'text'\"\n [externalInvalid]=\"showErrors\"\n [externalErrorMessage]=\"showErrors ? getErrorMessage() || '' : ''\"\n [readonly]=\"readonly\"\n >\n <!-- Icons overlay on the input -->\n <div class=\"i-select-icons\">\n @if (showClear && value !== null && value !== undefined) {\n <i\n class=\"pi pi-times i-select-clear\"\n (click)=\"clearSelection(); $event.stopPropagation()\"\n ></i>\n }\n <i\n class=\"pi pi-chevron-down i-multi-select-arrow\"\n [class.flipped]=\"isOpen\"\n ></i>\n </div>\n </i-input-text>\n </div>\n\n <!-- Dropdown overlay -->\n @if (isOpen) {\n <div class=\"i-select-dropdown\">\n @if (filter) {\n <div class=\"i-select-filter\">\n <i-input-text\n #searchInput\n [useFloatLabel]=\"false\"\n placeholder=\"Search...\"\n [ngModel]=\"filterValue()\"\n (ngModelChange)=\"filterValue.set($event)\"\n [fluid]=\"true\"\n [icon]=\"'pi pi-search'\"\n >\n </i-input-text>\n </div>\n }\n\n <div class=\"i-select-options\">\n @for (option of filteredOptions(); track option) {\n <div\n class=\"i-select-option\"\n [class.selected]=\"isOptionSelected(option)\"\n (click)=\"selectOption(option)\"\n >\n {{ getOptionLabel(option) }}\n </div>\n }\n\n @if (filteredOptions().length === 0) {\n <div class=\"i-select-no-options\">No options found</div>\n }\n </div>\n </div>\n }\n</div>\n","import { Component, Input, TemplateRef, ViewChild } from '@angular/core';\n\n/**\n * Tab Panel Component\n *\n * Individual tab panel used inside the ITabs container.\n * Supports text-only, icon-only, and combined icon + text labels.\n *\n * @example\n * ```html\n * <!-- Text only -->\n * <i-tab-panel header=\"Home\">Content here</i-tab-panel>\n *\n * <!-- Icon only -->\n * <i-tab-panel icon=\"pi pi-home\">Content here</i-tab-panel>\n *\n * <!-- Icon and text -->\n * <i-tab-panel header=\"Home\" icon=\"pi pi-home\">Content here</i-tab-panel>\n * ```\n */\n@Component({\n selector: 'i-tab-panel',\n standalone: true,\n template: `\n <ng-template #contentTemplate>\n <ng-content></ng-content>\n </ng-template>\n `,\n})\nexport class ITabPanel {\n /**\n * Text label for the tab header\n */\n @Input() header?: string;\n\n /**\n * Icon class for the tab header (e.g., 'pi pi-home')\n */\n @Input() icon?: string;\n\n /**\n * Whether the tab is disabled\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * Whether the tab can be closed\n * @default false\n */\n @Input() closable = false;\n\n /**\n * Reference to the content template\n * @internal\n */\n @ViewChild('contentTemplate', { static: true })\n contentTemplate!: TemplateRef<unknown>;\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n ContentChildren,\n EventEmitter,\n Input,\n Output,\n QueryList,\n AfterContentInit,\n} from '@angular/core';\nimport { ITabPanel } from './tab-panel.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\n\n/**\n * Tabs Component\n *\n * A container component for tabbed navigation.\n * Supports icon-only, text-only, and combined icon + text tabs.\n *\n * @example\n * ```html\n * <!-- Text only tabs -->\n * <i-tabs [(activeIndex)]=\"activeTab\">\n * <i-tab-panel header=\"Home\">Home content</i-tab-panel>\n * <i-tab-panel header=\"Profile\">Profile content</i-tab-panel>\n * </i-tabs>\n *\n * <!-- Icon only tabs -->\n * <i-tabs [(activeIndex)]=\"activeTab\">\n * <i-tab-panel icon=\"pi pi-home\"></i-tab-panel>\n * <i-tab-panel icon=\"pi pi-user\"></i-tab-panel>\n * </i-tabs>\n *\n * <!-- Icon and text tabs -->\n * <i-tabs [(activeIndex)]=\"activeTab\">\n * <i-tab-panel header=\"Home\" icon=\"pi pi-home\">Home content</i-tab-panel>\n * <i-tab-panel header=\"Profile\" icon=\"pi pi-user\">Profile content</i-tab-panel>\n * </i-tabs>\n * ```\n */\n@Component({\n selector: 'i-tabs',\n standalone: true,\n imports: [NgClass, NgTemplateOutlet],\n templateUrl: './tabs.component.html',\n styleUrl: './tabs.component.scss',\n})\nexport class ITabs implements AfterContentInit {\n /**\n * Index of the currently active tab\n * @default 0\n */\n @Input() activeIndex = 0;\n\n /**\n * Event emitted when the active tab index changes (for two-way binding)\n */\n @Output() activeIndexChange = new EventEmitter<number>();\n\n /**\n * Event emitted when a tab is selected\n */\n @Output() onChange = new EventEmitter<{\n originalEvent: Event;\n index: number;\n }>();\n\n /**\n * Event emitted when a tab is closed\n */\n @Output() onClose = new EventEmitter<{\n originalEvent: Event;\n index: number;\n }>();\n\n /**\n * Collection of tab panels\n * @internal\n */\n @ContentChildren(ITabPanel) tabPanels!: QueryList<ITabPanel>;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-tabs-');\n\n /**\n * Array of tabs for template iteration\n * @internal\n */\n tabs: ITabPanel[] = [];\n\n ngAfterContentInit(): void {\n this.tabs = this.tabPanels.toArray();\n this.tabPanels.changes.subscribe(() => {\n this.tabs = this.tabPanels.toArray();\n });\n }\n\n /**\n * Selects a tab by index\n * @param event - The click event\n * @param index - The index of the tab to select\n * @internal\n */\n selectTab(event: Event, index: number): void {\n const tab = this.tabs[index];\n if (tab && !tab.disabled) {\n this.activeIndex = index;\n this.activeIndexChange.emit(index);\n this.onChange.emit({ originalEvent: event, index });\n }\n }\n\n /**\n * Closes a tab by index\n * @param event - The click event\n * @param index - The index of the tab to close\n * @internal\n */\n closeTab(event: Event, index: number): void {\n event.stopPropagation();\n this.onClose.emit({ originalEvent: event, index });\n }\n\n /**\n * Handles keyboard navigation for accessibility\n * @param event - The keyboard event\n * @param index - The current tab index\n * @internal\n */\n onKeyDown(event: KeyboardEvent, index: number): void {\n switch (event.key) {\n case 'ArrowLeft':\n this.navigateTabs(index, -1);\n event.preventDefault();\n break;\n case 'ArrowRight':\n this.navigateTabs(index, 1);\n event.preventDefault();\n break;\n case 'Home':\n this.navigateToFirstTab();\n event.preventDefault();\n break;\n case 'End':\n this.navigateToLastTab();\n event.preventDefault();\n break;\n case 'Enter':\n case ' ':\n this.selectTab(event, index);\n event.preventDefault();\n break;\n }\n }\n\n /**\n * Navigates to adjacent tabs\n * @param currentIndex - The current tab index\n * @param direction - The direction to navigate (-1 or 1)\n * @internal\n */\n private navigateTabs(currentIndex: number, direction: number): void {\n let nextIndex = currentIndex + direction;\n const tabsLength = this.tabs.length;\n\n while (nextIndex >= 0 && nextIndex < tabsLength) {\n if (!this.tabs[nextIndex].disabled) {\n this.focusTab(nextIndex);\n break;\n }\n nextIndex += direction;\n }\n }\n\n /**\n * Navigates to the first non-disabled tab\n * @internal\n */\n private navigateToFirstTab(): void {\n for (let i = 0; i < this.tabs.length; i++) {\n if (!this.tabs[i].disabled) {\n this.focusTab(i);\n break;\n }\n }\n }\n\n /**\n * Navigates to the last non-disabled tab\n * @internal\n */\n private navigateToLastTab(): void {\n for (let i = this.tabs.length - 1; i >= 0; i--) {\n if (!this.tabs[i].disabled) {\n this.focusTab(i);\n break;\n }\n }\n }\n\n /**\n * Focuses a tab by index\n * @param index - The index of the tab to focus\n * @internal\n */\n private focusTab(index: number): void {\n const tabElement = document.getElementById(\n `${this.componentId}-tab-${index}`\n );\n tabElement?.focus();\n }\n}\n","<div class=\"i-tabs\" [attr.id]=\"componentId\">\n <!-- Tab Headers -->\n <div class=\"i-tabs__header\" role=\"tablist\">\n @for (tab of tabs; track $index) {\n <button\n [attr.id]=\"componentId + '-tab-' + $index\"\n class=\"i-tabs__tab\"\n [ngClass]=\"{\n 'i-tabs__tab--active': activeIndex === $index,\n 'i-tabs__tab--disabled': tab.disabled,\n 'i-tabs__tab--icon-only': tab.icon && !tab.header\n }\"\n role=\"tab\"\n [attr.aria-selected]=\"activeIndex === $index\"\n [attr.aria-controls]=\"componentId + '-panel-' + $index\"\n [attr.tabindex]=\"activeIndex === $index ? 0 : -1\"\n [disabled]=\"tab.disabled\"\n (click)=\"selectTab($event, $index)\"\n (keydown)=\"onKeyDown($event, $index)\"\n >\n @if (tab.icon) {\n <i [ngClass]=\"tab.icon\" class=\"i-tabs__tab-icon\"></i>\n }\n @if (tab.header) {\n <span class=\"i-tabs__tab-label\">{{ tab.header }}</span>\n }\n @if (tab.closable && !tab.disabled) {\n <button\n class=\"i-tabs__tab-close\"\n type=\"button\"\n aria-label=\"Close tab\"\n (click)=\"closeTab($event, $index)\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n }\n </button>\n }\n </div>\n\n <!-- Tab Panels -->\n <div class=\"i-tabs__panels\">\n @for (tab of tabs; track $index) {\n <div\n [attr.id]=\"componentId + '-panel-' + $index\"\n class=\"i-tabs__panel\"\n [ngClass]=\"{ 'i-tabs__panel--active': activeIndex === $index }\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"componentId + '-tab-' + $index\"\n [attr.hidden]=\"activeIndex !== $index || null\"\n >\n @if (activeIndex === $index) {\n <ng-container [ngTemplateOutlet]=\"tab.contentTemplate\"></ng-container>\n }\n </div>\n }\n </div>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnChanges,\n SimpleChanges,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { ICheckbox } from '../checkbox/checkbox.component';\nimport { IInputText } from '../input-text/input-text.component';\n\n/**\n * Tree node data structure\n */\nexport interface ITreeNode {\n key?: string;\n label?: string;\n data?: any;\n icon?: string;\n expandedIcon?: string;\n collapsedIcon?: string;\n children?: ITreeNode[];\n leaf?: boolean;\n expanded?: boolean;\n type?: string;\n parent?: ITreeNode;\n partialSelected?: boolean;\n styleClass?: string;\n draggable?: boolean;\n droppable?: boolean;\n selectable?: boolean;\n loading?: boolean;\n}\n\n/**\n * Supported tree selection modes\n */\nexport type TreeSelectionMode = 'single' | 'multiple' | 'checkbox';\n\n/**\n * Tree View Component\n *\n * A hierarchical tree component with support for single/multiple/checkbox selection modes.\n * Features filtering, expand/collapse functionality, and parent-child selection propagation.\n *\n * @example\n * ```html\n * <!-- Basic tree view -->\n * <i-tree-view\n * [value]=\"treeData\"\n * selectionMode=\"single\"\n * [(selection)]=\"selectedNode\">\n * </i-tree-view>\n *\n * <!-- Tree with checkbox selection -->\n * <i-tree-view\n * [value]=\"treeData\"\n * selectionMode=\"checkbox\"\n * [(selection)]=\"selectedNodes\"\n * [propagateSelectionUp]=\"true\"\n * [propagateSelectionDown]=\"true\">\n * </i-tree-view>\n *\n * <!-- Tree with filtering -->\n * <i-tree-view\n * [value]=\"treeData\"\n * [filter]=\"true\"\n * filterBy=\"label\"\n * filterPlaceholder=\"Search tree...\"\n * [(selection)]=\"selectedNode\">\n * </i-tree-view>\n *\n * <!-- Tree with select all (checkbox mode) -->\n * <i-tree-view\n * [value]=\"treeData\"\n * selectionMode=\"checkbox\"\n * [selectAll]=\"true\"\n * [(selection)]=\"selectedNodes\">\n * </i-tree-view>\n * ```\n *\n * @remarks\n * Supports three selection modes: single, multiple, and checkbox.\n * In checkbox mode, supports selection propagation to parent and child nodes.\n * Includes filtering capability to search through tree nodes.\n */\n@Component({\n selector: 'i-tree-view',\n standalone: true,\n imports: [CommonModule, FormsModule, ICheckbox, IInputText],\n templateUrl: './tree-view.component.html',\n styleUrl: './tree-view.component.scss',\n})\nexport class ITreeView implements OnInit, OnChanges {\n /**\n * Array of tree nodes to display\n * @default []\n */\n @Input() value: ITreeNode[] = [];\n\n /**\n * Selection mode for the tree\n * @default 'single'\n */\n @Input() selectionMode: TreeSelectionMode = 'single';\n\n /**\n * Currently selected node(s)\n */\n @Input() selection: ITreeNode | ITreeNode[] | null = null;\n\n /**\n * Fixed scroll height for the tree container\n */\n @Input() scrollHeight?: string;\n\n /**\n * Whether the tree is in loading state\n * @default false\n */\n @Input() loading = false;\n\n /**\n * Message to display when tree is empty\n * @default 'No data found'\n */\n @Input() emptyMessage = 'No data found';\n\n /**\n * Custom template for the expand/collapse toggler\n */\n @Input() togglerTemplate?: string;\n\n /**\n * Enables filtering of tree nodes\n * @default false\n */\n @Input() filter = false;\n\n /**\n * Property name to use for filtering\n * @default 'label'\n */\n @Input() filterBy = 'label';\n\n /**\n * Filter matching mode\n * @default 'lenient'\n */\n @Input() filterMode = 'lenient';\n\n /**\n * Placeholder text for the filter input\n * @default 'Search'\n */\n @Input() filterPlaceholder = 'Search';\n\n /**\n * Filtered nodes array (for internal use)\n * @default []\n */\n @Input() filteredNodes: ITreeNode[] = [];\n\n /**\n * Validates drop operations (for drag and drop)\n * @default false\n */\n @Input() validateDrop = false;\n\n /**\n * Whether selecting a child node should propagate selection up to parents\n * @default true\n */\n @Input() propagateSelectionUp = true;\n\n /**\n * Whether selecting a parent node should propagate selection down to children\n * @default true\n */\n @Input() propagateSelectionDown = true;\n\n /**\n * Shows a \"select all\" checkbox for checkbox selection mode\n * @default false\n */\n @Input() selectAll = false;\n\n /**\n * Event emitted when a node is selected\n */\n @Output() onNodeSelect = new EventEmitter<{\n originalEvent: Event;\n node: ITreeNode;\n }>();\n\n /**\n * Event emitted when a node is unselected\n */\n @Output() onNodeUnselect = new EventEmitter<{\n originalEvent: Event;\n node: ITreeNode;\n }>();\n\n /**\n * Event emitted when a node is expanded\n */\n @Output() onNodeExpand = new EventEmitter<{\n originalEvent: Event;\n node: ITreeNode;\n }>();\n\n /**\n * Event emitted when a node is collapsed\n */\n @Output() onNodeCollapse = new EventEmitter<{\n originalEvent: Event;\n node: ITreeNode;\n }>();\n\n /**\n * Event emitted when selection changes\n */\n @Output() selectionChange = new EventEmitter<ITreeNode | ITreeNode[]>();\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-tree-view-');\n\n /**\n * Filtered tree nodes after applying search\n * @internal\n */\n filteredValue: ITreeNode[] = [];\n\n /**\n * Current filter/search value\n * @internal\n */\n filterValue = '';\n\n /**\n * State of the \"select all\" checkbox\n * @internal\n */\n selectAllChecked = false;\n\n /**\n * Set of temporarily highlighted nodes (for visual feedback)\n * @internal\n */\n private temporaryHighlighted = new Set<ITreeNode>();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.updateSerializedValue();\n this.updateSelectAllState();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['value']) {\n this.updateSerializedValue();\n this.updateSelectAllState();\n }\n if (changes['selection']) {\n this.updateSelectAllState();\n }\n }\n\n updateSerializedValue() {\n this.filteredValue = this.value || [];\n this.initializeParentReferences(this.filteredValue);\n if (this.filter && this.filterValue) {\n this.applyFilter();\n }\n }\n\n initializeParentReferences(nodes: ITreeNode[], parent?: ITreeNode) {\n if (!nodes) return;\n\n for (let node of nodes) {\n node.parent = parent;\n if (node.children) {\n this.initializeParentReferences(node.children, node);\n }\n }\n }\n\n onFilterKeyup(event: Event) {\n const target = event.target as HTMLInputElement;\n this.filterValue = target.value;\n this.applyFilter();\n }\n\n applyFilter() {\n if (!this.filterValue.trim()) {\n this.filteredValue = this.value;\n return;\n }\n\n this.filteredValue = this.filterNodes(\n this.value,\n this.filterValue.toLowerCase()\n );\n }\n\n filterNodes(nodes: ITreeNode[], filterValue: string): ITreeNode[] {\n const filteredNodes: ITreeNode[] = [];\n\n for (let node of nodes) {\n const nodeMatches = this.isNodeMatch(node, filterValue);\n const filteredChildren = node.children\n ? this.filterNodes(node.children, filterValue)\n : [];\n\n if (nodeMatches || filteredChildren.length > 0) {\n const clonedNode = { ...node };\n if (filteredChildren.length > 0) {\n clonedNode.children = filteredChildren;\n clonedNode.expanded = true;\n }\n filteredNodes.push(clonedNode);\n }\n }\n\n return filteredNodes;\n }\n\n isNodeMatch(node: ITreeNode, filterValue: string): boolean {\n const nodeValue = (node.label || '').toLowerCase();\n return nodeValue.includes(filterValue);\n }\n\n isSelected(node: ITreeNode): boolean {\n if (this.selectionMode === 'single') {\n return this.selection === node;\n } else if (\n this.selectionMode === 'multiple' ||\n this.selectionMode === 'checkbox'\n ) {\n return Array.isArray(this.selection)\n ? this.selection.includes(node)\n : false;\n }\n return false;\n }\n\n isNodeHighlighted(node: ITreeNode): boolean {\n if (this.selectionMode === 'checkbox') {\n return this.temporaryHighlighted.has(node);\n }\n return this.isSelected(node);\n }\n\n isTemporarilyHighlighted(node: ITreeNode): boolean {\n return this.temporaryHighlighted.has(node);\n }\n\n private addTemporaryHighlight(node: ITreeNode) {\n this.temporaryHighlighted.add(node);\n setTimeout(() => {\n this.temporaryHighlighted.delete(node);\n this.cdr.detectChanges();\n }, 400);\n }\n\n isPartiallySelected(node: ITreeNode): boolean {\n if (this.selectionMode !== 'checkbox' || !node.children) {\n return false;\n }\n\n const selection = Array.isArray(this.selection) ? this.selection : [];\n const selectedChildren = node.children.filter((child) =>\n selection.includes(child)\n );\n const totalChildren = node.children.length;\n\n return (\n selectedChildren.length > 0 && selectedChildren.length < totalChildren\n );\n }\n\n onNodeClick(event: Event, node: ITreeNode) {\n if (node.selectable === false) {\n return;\n }\n\n if (this.selectionMode === 'checkbox') {\n return;\n }\n\n if (this.selectionMode === 'single') {\n this.selectSingleNode(event, node);\n } else if (this.selectionMode === 'multiple') {\n this.selectMultipleNode(event, node);\n }\n }\n\n selectSingleNode(event: Event, node: ITreeNode) {\n if (this.selection === node) {\n this.selection = null;\n this.onNodeUnselect.emit({ originalEvent: event, node });\n } else {\n this.selection = node;\n this.onNodeSelect.emit({ originalEvent: event, node });\n }\n this.selectionChange.emit(this.selection || undefined);\n }\n\n selectMultipleNode(event: Event, node: ITreeNode) {\n const selection = Array.isArray(this.selection) ? [...this.selection] : [];\n this.selection = selection;\n const index = selection.indexOf(node);\n\n if (index >= 0) {\n selection.splice(index, 1);\n this.onNodeUnselect.emit({ originalEvent: event, node });\n } else {\n selection.push(node);\n this.onNodeSelect.emit({ originalEvent: event, node });\n }\n this.selectionChange.emit(this.selection);\n }\n\n selectCheckboxNode(event: Event, node: ITreeNode) {\n const selection = Array.isArray(this.selection) ? [...this.selection] : [];\n const selected = this.isSelected(node);\n\n if (selected) {\n this.unselectNode(node, selection);\n } else {\n this.selectNode(node, selection);\n }\n\n if (this.propagateSelectionDown && node.children) {\n this.propagateDown(node, !selected, selection);\n }\n\n if (this.propagateSelectionUp && node.parent) {\n this.propagateUp(node.parent, selection);\n }\n\n this.selection = selection;\n this.selectionChange.emit(this.selection);\n this.updateSelectAllState();\n\n setTimeout(() => {\n if (selected) {\n this.onNodeUnselect.emit({ originalEvent: event, node });\n } else {\n this.onNodeSelect.emit({ originalEvent: event, node });\n }\n }, 0);\n }\n\n onCheckboxChange(checked: boolean, node: ITreeNode) {\n this.addTemporaryHighlight(node);\n\n const fakeEvent = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n });\n\n this.selectCheckboxNode(fakeEvent, node);\n }\n\n selectNode(node: ITreeNode, selection: ITreeNode[]) {\n if (!selection.includes(node)) {\n selection.push(node);\n }\n }\n\n unselectNode(node: ITreeNode, selection: ITreeNode[]) {\n const index = selection.indexOf(node);\n if (index >= 0) {\n selection.splice(index, 1);\n }\n }\n\n propagateDown(node: ITreeNode, select: boolean, selection: ITreeNode[]) {\n if (node.children) {\n for (let child of node.children) {\n if (select) {\n this.selectNode(child, selection);\n } else {\n this.unselectNode(child, selection);\n }\n\n if (child.children) {\n this.propagateDown(child, select, selection);\n }\n }\n }\n }\n\n propagateUp(node: ITreeNode, selection: ITreeNode[]) {\n if (node.children) {\n const selectedChildren = node.children.filter((child) =>\n selection.includes(child)\n );\n const totalChildren = node.children.length;\n\n if (selectedChildren.length === totalChildren) {\n this.selectNode(node, selection);\n } else if (selectedChildren.length > 0) {\n this.selectNode(node, selection);\n } else {\n this.unselectNode(node, selection);\n }\n\n if (node.parent) {\n this.propagateUp(node.parent, selection);\n }\n }\n }\n\n toggleNode(event: Event, node: ITreeNode) {\n if (node.expanded) {\n this.collapseNode(event, node);\n } else {\n this.expandNode(event, node);\n }\n }\n\n expandNode(event: Event, node: ITreeNode) {\n node.expanded = true;\n this.onNodeExpand.emit({ originalEvent: event, node });\n }\n\n collapseNode(event: Event, node: ITreeNode) {\n node.expanded = false;\n this.onNodeCollapse.emit({ originalEvent: event, node });\n }\n\n hasChildren(node: ITreeNode): boolean {\n return !!(node.children && node.children.length > 0);\n }\n\n getToggleIcon(node: ITreeNode): string {\n if (node.loading) {\n return 'pi pi-spin pi-spinner';\n }\n\n const expanded = node.expanded;\n\n if (node.expandedIcon && node.collapsedIcon) {\n return expanded ? node.expandedIcon : node.collapsedIcon;\n }\n\n return expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right';\n }\n\n getNodeIcon(node: ITreeNode): string {\n if (node.icon) {\n return node.icon;\n }\n\n if (this.hasChildren(node)) {\n return node.expanded ? 'pi pi-folder-open' : 'pi pi-folder';\n }\n\n return 'pi pi-file';\n }\n\n getCheckboxId(node: ITreeNode): string {\n const safeKey = (node.key || node.label || 'node')\n .replace(/[^a-zA-Z0-9\\-_]/g, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n return `${this.componentId}-checkbox-${safeKey}`;\n }\n\n // Select All functionality\n onSelectAllChange() {\n if (this.selectionMode !== 'checkbox') return;\n\n const allNodes = this.flattenNodes(this.filteredValue);\n const previousSelection = Array.isArray(this.selection)\n ? this.selection\n : [];\n\n const fakeEvent = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n });\n\n if (this.selectAllChecked) {\n this.selection = allNodes;\n\n allNodes.forEach((node) => {\n if (!previousSelection.includes(node)) {\n this.onNodeSelect.emit({ originalEvent: fakeEvent, node });\n }\n });\n } else {\n this.selection = [];\n\n previousSelection.forEach((node) => {\n this.onNodeUnselect.emit({ originalEvent: fakeEvent, node });\n });\n }\n\n this.selectionChange.emit(this.selection);\n }\n\n private flattenNodes(nodes: ITreeNode[]): ITreeNode[] {\n let result: ITreeNode[] = [];\n nodes.forEach((node) => {\n result.push(node);\n if (node.children) {\n result = result.concat(this.flattenNodes(node.children));\n }\n });\n return result;\n }\n\n updateSelectAllState() {\n if (this.selectionMode !== 'checkbox' || !this.selectAll) return;\n\n const allNodes = this.flattenNodes(this.filteredValue);\n const selectedNodes = Array.isArray(this.selection) ? this.selection : [];\n this.selectAllChecked =\n allNodes.length > 0 && selectedNodes.length === allNodes.length;\n }\n}\n","<div class=\"i-tree-view-wrapper\" [style.height]=\"scrollHeight\">\n @if (filter) {\n <div class=\"i-tree-view-filter-container\">\n <i-input-text\n [(ngModel)]=\"filterValue\"\n [placeholder]=\"filterPlaceholder\"\n [icon]=\"'pi pi-search'\"\n [useFloatLabel]=\"false\"\n [fluid]=\"true\"\n (input)=\"onFilterKeyup($event)\"\n class=\"i-tree-view-filter\"\n >\n </i-input-text>\n </div>\n } @if (selectAll && selectionMode === 'checkbox') {\n <div class=\"i-tree-view-select-all-container\">\n <div class=\"select-box\">\n <i-checkbox\n [(ngModel)]=\"selectAllChecked\"\n [id]=\"componentId + '-select-all'\"\n [label]=\"'Select All'\"\n (ngModelChange)=\"onSelectAllChange()\"\n />\n </div>\n </div>\n }\n\n <div class=\"i-tree-view-container\">\n @if (loading) {\n <div class=\"i-tree-view-loading\">\n <i class=\"pi pi-spin pi-spinner\"></i>\n <span>Loading...</span>\n </div>\n } @else if (filteredValue.length === 0) {\n <div class=\"i-tree-view-empty\">\n <span>{{ emptyMessage }}</span>\n </div>\n } @else {\n <ul class=\"i-tree-view-root\" [attr.id]=\"componentId\" role=\"tree\">\n @for (node of filteredValue; track node.key || $index) {\n <li>\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: node, level: 0 }\"\n ></ng-container>\n </li>\n }\n </ul>\n }\n </div>\n</div>\n\n<ng-template #nodeTemplate let-node let-level=\"level\">\n <div\n class=\"i-tree-view-node\"\n [class.i-tree-view-node--selected]=\"isNodeHighlighted(node)\"\n [class.i-tree-view-node--leaf]=\"!hasChildren(node)\"\n [class.i-tree-view-node--expanded]=\"node.expanded\"\n [class.i-tree-view-node--collapsed]=\"!node.expanded && hasChildren(node)\"\n [class.i-tree-view-node--temporary-highlight]=\"\n isTemporarilyHighlighted(node)\n \"\n [class]=\"node.styleClass\"\n [style.padding-left.rem]=\"level * 1\"\n role=\"treeitem\"\n [attr.aria-expanded]=\"hasChildren(node) ? node.expanded : null\"\n [attr.aria-selected]=\"isSelected(node)\"\n [attr.aria-level]=\"level + 1\"\n tabindex=\"0\"\n (click)=\"onNodeClick($event, node)\"\n (keydown.enter)=\"onNodeClick($event, node)\"\n (keydown.space)=\"$event.preventDefault(); onNodeClick($event, node)\"\n >\n <div class=\"i-tree-view-node-content\">\n @if (hasChildren(node)) {\n <button\n type=\"button\"\n class=\"i-tree-view-toggler\"\n (click)=\"$event.stopPropagation(); toggleNode($event, node)\"\n [attr.aria-label]=\"node.expanded ? 'Collapse' : 'Expand'\"\n tabindex=\"-1\"\n >\n <i [class]=\"getToggleIcon(node)\"></i>\n </button>\n } @else {\n <span class=\"i-tree-view-toggler-spacer\"></span>\n } @if (selectionMode === 'checkbox') {\n <div class=\"i-tree-view-checkbox-container\">\n <i-checkbox\n [checked]=\"isSelected(node) && !isPartiallySelected(node)\"\n [indeterminate]=\"isPartiallySelected(node)\"\n (onChange)=\"onCheckboxChange($event, node)\"\n [id]=\"getCheckboxId(node)\"\n size=\"small\"\n tabindex=\"-1\"\n >\n </i-checkbox>\n </div>\n }\n\n <i [class]=\"getNodeIcon(node)\" class=\"i-tree-view-node-icon\"></i>\n\n <span class=\"i-tree-view-node-label\">{{ node.label }}</span>\n </div>\n </div>\n\n @if (hasChildren(node) && node.expanded) {\n <ul class=\"i-tree-view-children\" role=\"group\">\n @for (child of node.children; track child.key || $index) {\n <li>\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: child, level: level + 1 }\"\n ></ng-container>\n </li>\n }\n </ul>\n }\n</ng-template>\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { IWhisperMessage, IWhisperOptions } from './whisper.interfaces';\n\n/**\n * Service for displaying whisper (toast/notification) messages to users.\n *\n * This service provides a centralized way to show temporary notification messages\n * across the application. Messages can be customized with different severities,\n * durations, and positions. The service supports auto-dismissing messages, sticky\n * messages, and grouping related notifications.\n *\n * @example\n * ```typescript\n * // Basic success message\n * constructor(private whisperService: WhisperService) {}\n *\n * saveData() {\n * this.apiService.save(data).subscribe(() => {\n * this.whisperService.add({\n * severity: 'success',\n * summary: 'Success',\n * detail: 'Data saved successfully'\n * });\n * });\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Error message with custom duration\n * this.whisperService.add({\n * severity: 'danger',\n * summary: 'Error',\n * detail: 'Failed to load data',\n * life: 5000,\n * closable: true\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Sticky message that requires manual close\n * this.whisperService.add({\n * severity: 'warning',\n * summary: 'Important Notice',\n * detail: 'Please review these changes carefully',\n * sticky: true\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Configure global options\n * this.whisperService.setOptions({\n * position: 'bottom-right',\n * preventDuplicates: true\n * });\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class WhisperService {\n /**\n * Internal subject for publishing new messages.\n * @internal\n */\n private messageSource = new Subject<IWhisperMessage>();\n\n /**\n * Internal subject for publishing clear commands.\n * @internal\n */\n private clearSource = new Subject<string | null>();\n\n /**\n * Observable stream of whisper messages. Subscribe to this to display messages in the UI.\n */\n messageObserver = this.messageSource.asObservable();\n\n /**\n * Observable stream of clear commands. Emits when messages should be cleared.\n */\n clearObserver = this.clearSource.asObservable();\n\n /**\n * Default configuration options for the whisper service.\n * @internal\n */\n private defaultOptions: IWhisperOptions = {\n position: 'top-right',\n preventOpenDuplicates: false,\n preventDuplicates: false,\n };\n\n /**\n * Current active configuration options.\n * @internal\n */\n private options: IWhisperOptions = { ...this.defaultOptions };\n\n /**\n * Adds a new whisper message to display.\n *\n * Creates and displays a notification message with auto-generated ID if not provided.\n * Sets default values for life (3000ms), closable (true), and severity (info) if not specified.\n *\n * @param message The message configuration object\n *\n * @example\n * ```typescript\n * // Simple info message\n * this.whisperService.add({\n * severity: 'info',\n * summary: 'Information',\n * detail: 'This is an info message'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Custom duration and grouped message\n * this.whisperService.add({\n * severity: 'success',\n * summary: 'Upload Complete',\n * detail: 'File uploaded successfully',\n * key: 'upload-notifications',\n * life: 5000\n * });\n * ```\n */\n add(message: IWhisperMessage): void {\n if (message) {\n // Generate a unique ID if not provided\n if (!message.id) {\n message.id = this.generateId();\n }\n\n // Set default values\n message.life = message.life ?? 3000;\n message.closable = message.closable ?? true;\n message.severity = message.severity ?? 'info';\n\n this.messageSource.next(message);\n }\n }\n\n /**\n * Adds multiple whisper messages at once.\n *\n * Convenience method for displaying multiple notification messages.\n * Each message is processed individually through the add() method.\n *\n * @param messages Array of message configuration objects to display\n *\n * @example\n * ```typescript\n * this.whisperService.addAll([\n * { severity: 'success', summary: 'Task 1', detail: 'Completed' },\n * { severity: 'success', summary: 'Task 2', detail: 'Completed' },\n * { severity: 'info', summary: 'Task 3', detail: 'In progress' }\n * ]);\n * ```\n */\n addAll(messages: IWhisperMessage[]): void {\n if (messages && messages.length) {\n messages.forEach(message => this.add(message));\n }\n }\n\n /**\n * Clears whisper messages from the display.\n *\n * When called without a key, clears all visible messages.\n * When called with a key, clears only messages matching that key.\n *\n * @param key Optional key to clear only specific grouped messages\n *\n * @example\n * ```typescript\n * // Clear all messages\n * this.whisperService.clear();\n * ```\n *\n * @example\n * ```typescript\n * // Clear only messages with a specific key\n * this.whisperService.clear('upload-notifications');\n * ```\n */\n clear(key?: string): void {\n this.clearSource.next(key || null);\n }\n\n /**\n * Sets global configuration options for the whisper service.\n *\n * Updates the service configuration by merging provided options with defaults.\n * This affects all future messages displayed by the service.\n *\n * @param options Configuration options to apply\n *\n * @example\n * ```typescript\n * // Change position and enable duplicate prevention\n * this.whisperService.setOptions({\n * position: 'bottom-left',\n * preventDuplicates: true,\n * preventOpenDuplicates: true\n * });\n * ```\n */\n setOptions(options: IWhisperOptions): void {\n this.options = { ...this.defaultOptions, ...options };\n }\n\n /**\n * Gets the current global configuration options.\n *\n * Returns a copy of the current options to prevent external modifications.\n *\n * @returns A copy of the current configuration options\n *\n * @example\n * ```typescript\n * const currentOptions = this.whisperService.getOptions();\n * console.log('Current position:', currentOptions.position);\n * ```\n */\n getOptions(): IWhisperOptions {\n return { ...this.options };\n }\n\n /**\n * Generates a unique identifier for messages.\n * @internal\n */\n private generateId(): string {\n return Math.random().toString(36).substr(2, 9);\n }\n}","import { NgClass, NgStyle } from '@angular/common';\nimport {\n Component,\n OnInit,\n OnDestroy,\n Input,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { WhisperService } from './services/whisper.service';\nimport {\n IWhisperMessage,\n IWhisperOptions,\n} from './services/whisper.interfaces';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { ZIndexUtils } from '../../utils/zindexutils';\nimport { IButton } from '../button/button.component';\nimport { ISeverity } from '@shared/enums/IButtonSeverity';\n\n/**\n * Supported whisper/toast positions\n */\nexport type IWhisperPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\n/**\n * Whisper (Toast Notification) Component\n *\n * A notification/toast component that displays temporary messages.\n * Supports multiple positions, severities, and automatic dismissal.\n *\n * @example\n * ```html\n * <!-- Basic whisper container (place in app root) -->\n * <i-whisper></i-whisper>\n *\n * <!-- Whisper with custom position -->\n * <i-whisper position=\"bottom-right\"></i-whisper>\n *\n * <!-- Keyed whisper for specific notifications -->\n * <i-whisper key=\"global-notifications\"></i-whisper>\n * ```\n *\n * ```typescript\n * // In your component:\n * constructor(private whisperService: WhisperService) {}\n *\n * showSuccess() {\n * this.whisperService.add({\n * severity: 'success',\n * summary: 'Success',\n * detail: 'Operation completed successfully',\n * life: 3000\n * });\n * }\n *\n * showError() {\n * this.whisperService.add({\n * severity: 'danger',\n * summary: 'Error',\n * detail: 'An error occurred',\n * life: 5000\n * });\n * }\n * ```\n *\n * @remarks\n * This component uses OnPush change detection for optimal performance.\n * Works with WhisperService to display notifications.\n * Supports auto-dismissal with configurable life time.\n */\n@Component({\n selector: 'i-whisper',\n standalone: true,\n imports: [NgClass, NgStyle, IButton],\n templateUrl: './whisper.component.html',\n styleUrl: './whisper.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IWhisper implements OnInit, OnDestroy {\n /**\n * Key to filter which messages this whisper container displays\n * If set, only messages with matching key will be shown\n */\n @Input() key?: string;\n\n /**\n * Whether to automatically manage z-index\n * @default true\n */\n @Input() autoZIndex = true;\n\n /**\n * Base z-index value for the whisper container\n * @default 0\n */\n @Input() baseZIndex = 0;\n\n /**\n * Custom inline styles to apply to the container\n */\n @Input() style?: { [key: string]: any };\n\n /**\n * Position of the whisper container on screen\n * @default 'top-right'\n */\n @Input() position: IWhisperPosition = 'top-right';\n\n /**\n * Prevents duplicate messages from being shown at the same time\n * Removes existing message before showing the duplicate\n * @default false\n */\n @Input() preventOpenDuplicates = false;\n\n /**\n * Prevents duplicate messages from being added at all\n * @default false\n */\n @Input() preventDuplicates = false;\n\n /**\n * Array of current whisper messages\n * @internal\n */\n messages: IWhisperMessage[] = [];\n\n /**\n * Subscription to message events from the service\n * @internal\n */\n messageSubscription?: Subscription;\n\n /**\n * Subscription to clear events from the service\n * @internal\n */\n clearSubscription?: Subscription;\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-whisper-');\n\n constructor(\n private whisperService: WhisperService,\n private cd: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.messageSubscription = this.whisperService.messageObserver.subscribe(\n (message) => {\n if (message) {\n if (this.key) {\n if (message.key !== this.key) {\n return;\n }\n } else {\n if (message.key) {\n return;\n }\n }\n\n if (this.preventDuplicates) {\n const isDuplicate = this.messages.some(\n (m) =>\n m.summary === message.summary &&\n m.detail === message.detail &&\n m.severity === message.severity\n );\n if (isDuplicate) return;\n }\n\n if (this.preventOpenDuplicates) {\n this.messages = this.messages.filter(\n (m) =>\n !(\n m.summary === message.summary &&\n m.detail === message.detail &&\n m.severity === message.severity\n )\n );\n }\n\n this.messages = [...this.messages, message];\n\n if (message.life && message.life > 0) {\n setTimeout(() => {\n this.remove(message);\n }, message.life);\n }\n\n this.cd.markForCheck();\n }\n }\n );\n\n this.clearSubscription = this.whisperService.clearObserver.subscribe(\n (key) => {\n if (key) {\n this.messages = this.messages.filter((m) => m.key !== key);\n } else {\n this.messages = [];\n }\n this.cd.markForCheck();\n }\n );\n }\n\n ngOnDestroy(): void {\n if (this.messageSubscription) {\n this.messageSubscription.unsubscribe();\n }\n\n if (this.clearSubscription) {\n this.clearSubscription.unsubscribe();\n }\n }\n\n /**\n * Removes a specific message from the display\n * @internal\n */\n remove(message: IWhisperMessage): void {\n this.messages = this.messages.filter((m) => m.id !== message.id);\n this.cd.markForCheck();\n }\n\n /**\n * Removes all messages from the display\n * @internal\n */\n removeAll(): void {\n this.messages = [];\n this.cd.markForCheck();\n }\n\n /**\n * Handles the close button click for a message\n * @internal\n */\n onClose(message: IWhisperMessage): void {\n this.remove(message);\n }\n\n /**\n * Gets the appropriate icon class for a message severity\n * @internal\n */\n getMessageIcon(severity: ISeverity): string {\n switch (severity) {\n case 'success':\n return 'pi-check-circle';\n case 'info':\n return 'pi-info-circle';\n case 'warning':\n return 'pi-exclamation-triangle';\n case 'danger':\n return 'pi-times-circle';\n default:\n return 'pi-info-circle';\n }\n }\n\n /**\n * Gets CSS classes for the whisper container\n * @internal\n */\n getContainerClass(): string {\n return `i-whisper i-whisper-${this.position}`;\n }\n\n /**\n * Gets CSS classes for a specific message\n * @internal\n */\n getMessageClass(message: IWhisperMessage): string {\n let classes = 'i-whisper-message';\n if (message.severity) {\n classes += ` i-whisper-message-${message.severity}`;\n }\n return classes;\n }\n\n /**\n * TrackBy function for ngFor optimization\n * @internal\n */\n trackByMessage(index: number, message: IWhisperMessage): any {\n return message.id;\n }\n}\n","@if (messages && messages.length > 0) {\n <div\n [ngClass]=\"getContainerClass()\"\n [ngStyle]=\"style\"\n [attr.id]=\"componentId\"\n >\n @for (message of messages; track trackByMessage($index, message)) {\n <div\n [ngClass]=\"getMessageClass(message)\"\n [attr.data-whisper-key]=\"message.key\"\n [attr.aria-live]=\"'polite'\"\n [attr.aria-atomic]=\"'true'\"\n role=\"alert\"\n >\n <div class=\"i-whisper-message-content\">\n <div class=\"i-whisper-message-icon\">\n <i [ngClass]=\"['pi', getMessageIcon(message.severity)]\"> </i>\n </div>\n <div class=\"i-whisper-message-text\">\n @if (message.summary) {\n <div class=\"i-whisper-message-summary\">\n {{ message.summary }}\n </div>\n }\n @if (message.detail) {\n <div class=\"i-whisper-message-detail\">\n {{ message.detail }}\n </div>\n }\n </div>\n @if (message.closable === true) {\n <i-button\n [severity]=\"message.severity\"\n size=\"small\"\n [text]=\"true\"\n icon=\"pi pi-times\"\n (click)=\"onClose(message)\"\n [attr.aria-label]=\"'Close'\"\n />\n }\n </div>\n </div>\n }\n </div>\n }\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n Output,\n EventEmitter,\n signal,\n computed,\n InputSignal,\n input,\n HostListener,\n ElementRef,\n effect,\n ViewChild,\n forwardRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n CdkVirtualScrollViewport,\n CdkVirtualForOf,\n CdkFixedSizeVirtualScroll,\n} from '@angular/cdk/scrolling';\nimport { IInputText } from '../input-text/input-text.component';\nimport { IButton } from '../button/button.component';\nimport { ICheckbox } from '../checkbox/checkbox.component';\nimport { UniqueComponentId } from '../../utils/uniquecomponentid';\nimport { ISeverity } from '@shared/enums/IButtonSeverity';\nimport { NoContentComponent } from '../no-content/no-content.component';\nimport { TooltipDirective } from '../../directives/tooltip/tooltip.directive';\nimport { IChip } from '../chip/chip.component';\n\n/**\n * Column definition for the table\n */\nexport interface TableColumn {\n /** Field name in the data object */\n field: string;\n /** Header text displayed for this column */\n header: string;\n /** Whether this column is sortable */\n sortable?: boolean;\n /** Whether this column is filterable */\n filterable?: boolean;\n /** Column width (e.g., '100px', '20%') */\n width?: string;\n /** Text alignment within the column */\n align?: 'left' | 'center' | 'right';\n /** Data type for formatting */\n type?: 'text' | 'number' | 'date' | 'boolean' | 'currency' | 'icon' | 'list';\n /** Format string for date/currency formatting */\n format?: string;\n /** Icon class for 'icon' type - can be a field name or a function that returns the icon class */\n iconClass?: string | ((row: any) => string);\n /** Severity/color for content - applies to text and icons, can be a field name or a function */\n severity?: ISeverity | string | ((row: any) => ISeverity | string);\n /** Icon size for 'icon' type */\n iconSize?: string;\n}\n\n/**\n * Action button with an embedded per-action click handler.\n * No shared dispatcher is needed — each action calls its own `handler`.\n *\n * @typeParam T - The row type this action operates on.\n */\nexport interface GridAction<T = any> {\n /** Unique identifier for the action */\n id: string;\n /** Icon class (e.g., 'pi pi-edit') */\n icon?: string;\n /** Button label text */\n label?: string;\n /** Button severity/style */\n severity?: ISeverity;\n /** Whether the action is disabled */\n disabled?: boolean | ((row: T) => boolean);\n /** Tooltip text to display on hover */\n tooltip?: string | ((row: T) => string);\n /** Whether the action is visible */\n visible?: boolean | ((row: T) => boolean);\n /** Called when this action button is clicked for a row */\n handler: (row: T) => void;\n}\n\n/**\n * Defines the expandable detail sub-table rendered below each parent row.\n *\n * @typeParam TRow - The parent row type.\n * @typeParam TDetail - The detail row type.\n */\nexport interface GridDetails<TRow = any, TDetail = any> {\n /** Column definitions for the detail sub-table */\n columns: TableColumn[];\n /** Returns the detail rows for a given parent row */\n rows: (parentRow: TRow) => TDetail[];\n /** Optional actions on the detail rows */\n actions?: GridAction<TDetail>[];\n}\n\n/**\n * Single data object passed to `<i-table>`.\n * Bundles columns, rows, per-row actions, and an optional detail expansion\n * — eliminating the need for separate `[columns]`, `[actions]`, `[groupedData]` inputs.\n *\n * @typeParam TRow - The main row type.\n * @typeParam TDetail - The detail row type (defaults to `any`).\n *\n * @example\n * ```typescript\n * // Flat table\n * grid: GridData<Product> = { columns, rows: products };\n *\n * // With actions — each action carries its own handler\n * grid: GridData<Product> = {\n * columns,\n * rows: products,\n * actions: [\n * { id: 'edit', icon: 'pi pi-pencil', handler: p => this.edit(p) },\n * { id: 'delete', icon: 'pi pi-trash', handler: p => this.delete(p) },\n * ],\n * };\n *\n * // With expandable detail sub-table (replaces grouped mode)\n * grid: GridData<CategorySummary, Product> = {\n * columns: categoryColumns,\n * rows: categories,\n * actions: [{ id: 'view', icon: 'pi pi-eye', handler: c => this.view(c) }],\n * details: {\n * columns: productColumns,\n * rows: cat => products.filter(p => p.category === cat.name),\n * actions: [{ id: 'edit', icon: 'pi pi-pencil', handler: p => this.edit(p) }],\n * },\n * };\n * ```\n */\nexport interface GridData<TRow = any, TDetail = any> {\n /** Column definitions for this table level */\n columns: TableColumn[];\n /** Data rows */\n rows: TRow[];\n /** Per-row actions — each action carries its own click handler */\n actions?: GridAction<TRow>[];\n /** Optional expandable detail sub-table rendered below each expanded row */\n details?: GridDetails<TRow, TDetail>;\n}\n\n/**\n * Sort event emitted when sorting changes\n */\nexport interface SortEvent {\n /** Field being sorted */\n field: string;\n /** Sort direction */\n order: 'asc' | 'desc';\n}\n\n/**\n * Filter event emitted when filtering changes\n */\nexport interface FilterEvent {\n /** Column filters keyed by field name */\n filters: { [field: string]: string };\n /** Global filter value */\n globalFilter?: string;\n}\n\n/**\n * Download event configuration\n */\nexport interface TableDownloadEvent {\n /** Download format */\n format: 'csv' | 'excel' | 'json';\n /** Filtered data to download */\n data: any[];\n /** Columns to include in download */\n columns: TableColumn[];\n}\n\n/**\n * Table Component\n *\n * A comprehensive table component with sorting, filtering, pagination, selection,\n * and row actions. All features are configurable via props.\n * Uses Angular signals for reactive state management.\n *\n * @example\n * ```html\n * <!-- Flat table -->\n * <i-table [grid]=\"productGrid\" [sortable]=\"true\"></i-table>\n *\n * <!-- Table with selection -->\n * <i-table\n * [grid]=\"productGrid\"\n * selectionMode=\"multiple\"\n * [(selection)]=\"selectedProducts\"\n * (onSelectionChange)=\"onSelect($event)\">\n * </i-table>\n *\n * <!-- Expandable detail (replaces grouped mode) -->\n * <i-table [grid]=\"categoryGrid\" [sortable]=\"true\"></i-table>\n * ```\n *\n * @remarks\n * This component provides a feature-rich table implementation similar to\n * PrimeNG's table but configured entirely via props without templating.\n */\n@Component({\n selector: 'i-table',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n CdkVirtualScrollViewport,\n CdkVirtualForOf,\n CdkFixedSizeVirtualScroll,\n IInputText,\n IButton,\n ICheckbox,\n IChip,\n NoContentComponent,\n TooltipDirective,\n forwardRef(() => ITable),\n ],\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n})\nexport class ITable {\n // ===== DATA =====\n\n /**\n * All table data in one object: columns, rows, optional per-row actions, and\n * an optional `details` spec for expandable sub-tables (replaces grouped mode).\n *\n * @see GridData\n */\n grid: InputSignal<GridData> = input<GridData>({ columns: [], rows: [] });\n\n /**\n * Message displayed when table has no data\n * @default 'No data available'\n */\n @Input() emptyMessage = 'No data available';\n\n // ===== SORTING =====\n\n /**\n * Enable/disable sorting globally\n * @default false\n */\n @Input() sortable = false;\n\n /**\n * Current sort field (backed by a signal so computed can track changes)\n */\n private _sortField = signal('');\n @Input()\n set sortField(val: string) {\n this._sortField.set(val ?? '');\n }\n get sortField(): string {\n return this._sortField();\n }\n\n /**\n * Sort direction (backed by a signal)\n * @default 'asc'\n */\n private _sortOrder = signal<'asc' | 'desc'>('asc');\n @Input()\n set sortOrder(val: 'asc' | 'desc') {\n this._sortOrder.set(val === 'desc' ? 'desc' : 'asc');\n }\n get sortOrder(): 'asc' | 'desc' {\n return this._sortOrder();\n }\n\n /**\n * Event emitted when sort changes\n */\n @Output() onSort = new EventEmitter<SortEvent>();\n\n // ===== FILTERING =====\n\n /**\n * Enable column filtering\n * @default false\n */\n @Input() filterable = false;\n\n /**\n * Enable global search\n * @default false\n */\n @Input() globalFilter = false;\n\n /**\n * Debounce delay for filtering in milliseconds\n * @default 300\n */\n @Input() filterDelay = 300;\n\n /**\n * Event emitted when filter changes\n */\n @Output() onFilter = new EventEmitter<FilterEvent>();\n\n // ===== SELECTION =====\n\n /**\n * Selection mode\n */\n @Input() selectionMode: 'single' | 'multiple' | null = null;\n\n /**\n * Selected rows\n */\n @Input() selection: any[] = [];\n\n /**\n * Property name to uniquely identify rows (improves selection performance)\n * When provided, uses this property for row comparison instead of JSON.stringify\n */\n @Input() dataKey?: string;\n\n /**\n * Event emitted when selection changes\n */\n @Output() selectionChange = new EventEmitter<any[]>();\n\n /**\n * Event emitted when selection changes (alias for two-way binding)\n */\n @Output() onSelectionChange = new EventEmitter<any[]>();\n\n /**\n * Event emitted when a row is selected\n */\n @Output() onRowSelect = new EventEmitter<any>();\n\n /**\n * Event emitted when a row is unselected\n */\n @Output() onRowUnselect = new EventEmitter<any>();\n\n // ===== ROW ACTIONS =====\n // Actions are embedded inside GridData.actions — each action has its own handler.\n // No separate @Input or @Output is needed.\n\n // ===== VISUAL FEATURES =====\n\n /**\n * Show striped rows\n * @default false\n */\n @Input() striped = false;\n\n /**\n * Enable row hover effect\n * @default true\n */\n @Input() hoverable = true;\n\n /**\n * Show borders\n * @default false\n */\n @Input() bordered = false;\n\n /**\n * Table size\n * @default 'medium'\n */\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Show loading state\n * @default false\n */\n @Input() loading = false;\n\n /**\n * Enable horizontal scrolling\n * @default false\n */\n @Input() scrollable = false;\n\n /**\n * Container height (also controls virtual scroll viewport height).\n * @example '400px'\n */\n @Input() height?: string;\n\n /**\n * Enable CDK virtual scroll for large datasets.\n * Leave `false` (default) for small/medium tables — rows are rendered with\n * a regular `@for` loop inside a scrollable container.\n * Set to `true` only when the row count is large enough (≥ ~500 rows) to\n * benefit from virtual rendering.\n * @default false\n */\n @Input() virtualScroll = false;\n\n /**\n * Item size for virtual scroll (height of each row in pixels)\n * @default 48\n */\n @Input() virtualScrollItemSize = 48;\n\n /**\n * Minimum buffer size in pixels for virtual scroll\n * @default 200\n */\n @Input() virtualScrollMinBufferPx = 200;\n\n /**\n * Maximum buffer size in pixels for virtual scroll\n * @default 400\n */\n @Input() virtualScrollMaxBufferPx = 400;\n\n /**\n * Reference to the virtual scroll viewport\n * @internal\n */\n @ViewChild(CdkVirtualScrollViewport)\n virtualScrollViewport?: CdkVirtualScrollViewport;\n\n // ===== ADDITIONAL FEATURES =====\n\n /**\n * Allow column resizing\n * @default false\n */\n @Input() resizableColumns = false;\n\n /**\n * Event emitted when a row is expanded\n */\n @Output() onRowExpand = new EventEmitter<any>();\n\n /**\n * Event emitted when a row is collapsed\n */\n @Output() onRowCollapse = new EventEmitter<any>();\n\n // ===== DOWNLOAD FEATURES =====\n\n /**\n * Enable download functionality\n * @default false\n */\n @Input() downloadable = false;\n\n /**\n * Download mode - 'direct' for client-side download, 'api' for server-side\n * @default 'direct'\n */\n @Input() downloadMode: 'direct' | 'api' = 'direct';\n\n /**\n * Default download format\n * @default 'csv'\n */\n @Input() downloadFormat: 'csv' | 'excel' | 'json' = 'csv';\n\n /**\n * Custom download filename (without extension)\n */\n @Input() downloadFilename?: string;\n\n /**\n * Event emitted when download is triggered in 'api' mode\n */\n @Output() onDownload = new EventEmitter<TableDownloadEvent>();\n\n // ===== INTERNAL STATE =====\n\n /**\n * Unique component identifier\n * @internal\n */\n componentId = UniqueComponentId('i-table-');\n\n /**\n * Global filter value signal\n * @internal\n */\n globalFilterValue = signal('');\n\n /**\n * Column filter values signal\n * @internal\n */\n columnFilters = signal<{ [field: string]: string }>({});\n\n /**\n * Expanded rows\n * @internal\n */\n expandedRows = signal<Set<any>>(new Set());\n\n /**\n * Filter debounce timer\n * @internal\n */\n private filterTimer: ReturnType<typeof setTimeout> | null = null;\n\n /**\n * Column being resized\n * @internal\n */\n private resizingColumn: TableColumn | null = null;\n\n /**\n * Starting X position for resize\n * @internal\n */\n private resizeStartX = 0;\n\n /**\n * Starting width for resize\n * @internal\n */\n private resizeStartWidth = 0;\n\n /**\n * Column widths (for resizing)\n * @internal\n */\n columnWidths = signal<{ [field: string]: number }>({});\n\n constructor(private el: ElementRef) {}\n\n // ===== DERIVED DATA =====\n\n /** Columns for the current table level. @internal */\n gridColumns = computed<TableColumn[]>(() => this.grid().columns ?? []);\n\n /** Data rows for the current table level. @internal */\n gridRows = computed<any[]>(() => this.grid().rows ?? []);\n\n /** Per-row actions for the current table level. @internal */\n gridActions = computed<GridAction[]>(() => this.grid().actions ?? []);\n\n /** Whether this table level has an expandable detail sub-table. @internal */\n hasDetails = computed<boolean>(() => !!this.grid().details);\n\n /**\n * Computed filtered and sorted data.\n * @internal\n */\n processedData = computed(() => {\n let result = [...this.gridRows()];\n\n // Apply global filter\n const globalFilter = this.globalFilterValue();\n if (globalFilter) {\n const cols = this.gridColumns();\n result = result.filter((row) =>\n cols.some((col) => {\n const value = this.getCellValue(row, col.field);\n return String(value)\n .toLowerCase()\n .includes(globalFilter.toLowerCase());\n }),\n );\n }\n\n // Apply column filters\n const filters = this.columnFilters();\n Object.keys(filters).forEach((field) => {\n const filterValue = filters[field];\n if (filterValue) {\n result = result.filter((row) => {\n const value = this.getCellValue(row, field);\n return String(value)\n .toLowerCase()\n .includes(filterValue.toLowerCase());\n });\n }\n });\n\n // Apply sorting\n if (this.sortField) {\n result.sort((a, b) => {\n const aValue = this.getCellValue(a, this.sortField);\n const bValue = this.getCellValue(b, this.sortField);\n let comparison = 0;\n if (aValue < bValue) comparison = -1;\n if (aValue > bValue) comparison = 1;\n return this.sortOrder === 'asc' ? comparison : -comparison;\n });\n }\n\n return result;\n });\n\n /**\n * Gets a cell value from a row\n * @internal\n */\n getCellValue(row: any, field: string): any {\n if (!row || !field) return '';\n // Support nested properties with dot notation\n const parts = field.split('.');\n let value = row;\n for (const part of parts) {\n if (value === null || value === undefined) return '';\n value = value[part];\n }\n return value ?? '';\n }\n\n /**\n * Formats a cell value based on column type\n * @internal\n */\n formatCellValue(value: any, column: TableColumn): string {\n if (value === null || value === undefined) return '';\n\n switch (column.type) {\n case 'date':\n try {\n const date = new Date(value);\n return column.format\n ? this.formatDate(date, column.format)\n : date.toLocaleDateString();\n } catch {\n return String(value);\n }\n case 'currency':\n try {\n const num = Number(value);\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: column.format || 'USD',\n }).format(num);\n } catch {\n return String(value);\n }\n case 'number':\n return Number(value).toLocaleString();\n case 'boolean':\n return value ? 'Yes' : 'No';\n case 'icon':\n // Icons are rendered in the template, not as text\n return '';\n case 'list':\n // Lists are rendered in the template as chips, not as text\n return '';\n default:\n return String(value);\n }\n }\n\n /**\n * Checks if a column should render a list of chips\n * @internal\n */\n isListColumn(column: TableColumn): boolean {\n return column.type === 'list';\n }\n\n /**\n * Gets the list items for a cell\n * @internal\n */\n getCellListItems(row: any, column: TableColumn): string[] {\n if (column.type !== 'list') return [];\n const value = this.getCellValue(row, column.field);\n if (Array.isArray(value)) {\n return value.map((item) => String(item));\n }\n return [];\n }\n\n /**\n * Gets the icon class for a cell\n * @internal\n */\n getCellIcon(row: any, column: TableColumn): string {\n if (column.type !== 'icon') return '';\n\n if (typeof column.iconClass === 'function') {\n return column.iconClass(row);\n } else if (typeof column.iconClass === 'string') {\n // Check if it's a field reference or a direct icon class\n const fieldValue = this.getCellValue(row, column.iconClass);\n return fieldValue || column.iconClass;\n }\n\n // Fallback to field value\n return this.getCellValue(row, column.field) || '';\n }\n\n /**\n * Gets the severity/color for a cell (applies to text and icons)\n * @internal\n */\n getCellSeverity(row: any, column: TableColumn): string {\n if (!column.severity) return '';\n\n if (typeof column.severity === 'function') {\n return String(column.severity(row));\n } else if (typeof column.severity === 'string') {\n // Check if it's a field reference or a direct severity value\n const fieldValue = this.getCellValue(row, column.severity);\n return fieldValue || column.severity;\n }\n\n return '';\n }\n\n /**\n * Returns the combined CSS classes for an icon cell: the icon class itself,\n * the `i-severity-icon` marker (for scoped colour styles), and the severity\n * token (e.g. `success`, `danger`) needed by the sibling CSS rule.\n * @internal\n */\n getIconClasses(row: any, column: TableColumn): string {\n const icon = this.getCellIcon(row, column);\n const severity = this.getCellSeverity(row, column);\n return severity ? `${icon} i-severity-icon ${severity}` : icon;\n }\n\n /**\n * Checks if a column should render an icon\n * @internal\n */\n isIconColumn(column: TableColumn): boolean {\n return column.type === 'icon';\n }\n\n /**\n * Simple date formatter\n * @internal\n */\n private formatDate(date: Date, format: string): string {\n const pad = (n: number) => n.toString().padStart(2, '0');\n return format\n .replace('yyyy', date.getFullYear().toString())\n .replace('MM', pad(date.getMonth() + 1))\n .replace('dd', pad(date.getDate()))\n .replace('HH', pad(date.getHours()))\n .replace('mm', pad(date.getMinutes()))\n .replace('ss', pad(date.getSeconds()));\n }\n\n // ===== SORTING METHODS =====\n\n /**\n * Handles column sort click\n * @internal\n */\n onSortColumn(column: TableColumn): void {\n if (!this.sortable || !column.sortable) return;\n\n if (this.sortField === column.field) {\n this.sortOrder = this.sortOrder === 'asc' ? 'desc' : 'asc';\n } else {\n this.sortField = column.field;\n this.sortOrder = 'asc';\n }\n\n this.onSort.emit({\n field: this.sortField,\n order: this.sortOrder,\n });\n }\n\n /**\n * Gets the sort icon for a column\n * @internal\n */\n getSortIcon(column: TableColumn): string {\n if (this.sortField !== column.field) {\n return 'pi pi-sort-alt';\n }\n return this.sortOrder === 'asc'\n ? 'pi pi-sort-amount-up'\n : 'pi pi-sort-amount-down';\n }\n\n // ===== FILTERING METHODS =====\n\n /**\n * Handles global filter input\n * @internal\n */\n onGlobalFilterInput(value: string): void {\n if (this.filterTimer) {\n clearTimeout(this.filterTimer);\n }\n\n this.filterTimer = setTimeout(() => {\n this.globalFilterValue.set(value);\n this.emitFilterEvent();\n }, this.filterDelay);\n }\n\n /**\n * Handles column filter input\n * @internal\n */\n onColumnFilterInput(field: string, value: string): void {\n if (this.filterTimer) {\n clearTimeout(this.filterTimer);\n }\n\n this.filterTimer = setTimeout(() => {\n this.columnFilters.update((filters) => ({\n ...filters,\n [field]: value,\n }));\n this.emitFilterEvent();\n }, this.filterDelay);\n }\n\n /**\n * Emits filter event\n * @internal\n */\n private emitFilterEvent(): void {\n this.onFilter.emit({\n filters: this.columnFilters(),\n globalFilter: this.globalFilterValue(),\n });\n }\n\n // ===== SELECTION METHODS =====\n\n /**\n * Checks if a row is selected\n * @internal\n */\n isRowSelected(row: any): boolean {\n if (!this.selectionMode) return false;\n return this.selection?.some((s) => this.compareObjects(s, row)) ?? false;\n }\n\n /**\n * Toggles row selection\n * @internal\n */\n toggleRowSelection(row: any, event?: Event): void {\n if (!this.selectionMode) return;\n\n // Prevent checkbox from triggering twice\n if (event) {\n event.stopPropagation();\n }\n\n const isSelected = this.isRowSelected(row);\n\n if (this.selectionMode === 'single') {\n if (isSelected) {\n this.selection = [];\n this.onRowUnselect.emit(row);\n } else {\n this.selection = [row];\n this.onRowSelect.emit(row);\n }\n } else if (this.selectionMode === 'multiple') {\n if (isSelected) {\n this.selection = this.selection.filter(\n (s) => !this.compareObjects(s, row),\n );\n this.onRowUnselect.emit(row);\n } else {\n this.selection = [...this.selection, row];\n this.onRowSelect.emit(row);\n }\n }\n\n this.selectionChange.emit(this.selection);\n this.onSelectionChange.emit(this.selection);\n }\n\n /**\n * Toggles all rows selection\n * @internal\n */\n toggleAllSelection(): void {\n if (this.selectionMode !== 'multiple') return;\n\n const data = this.processedData();\n const allSelected = this.areAllRowsSelected();\n\n if (allSelected) {\n // Deselect all visible rows\n this.selection = this.selection.filter(\n (s: any) => !data.some((d: any) => this.compareObjects(s, d)),\n );\n } else {\n // Select all visible rows\n const newSelections = data.filter(\n (d: any) => !this.selection.some((s: any) => this.compareObjects(s, d)),\n );\n this.selection = [...this.selection, ...newSelections];\n }\n\n this.selectionChange.emit(this.selection);\n this.onSelectionChange.emit(this.selection);\n }\n\n /**\n * Checks if all visible rows are selected\n * @internal\n */\n areAllRowsSelected(): boolean {\n const data = this.processedData();\n if (data.length === 0) return false;\n return data.every((d: any) =>\n this.selection?.some((s: any) => this.compareObjects(s, d)),\n );\n }\n\n /**\n * Checks if some (but not all) rows are selected\n * @internal\n */\n areSomeRowsSelected(): boolean {\n const data = this.processedData();\n const selectedCount = data.filter((d: any) =>\n this.selection?.some((s: any) => this.compareObjects(s, d)),\n ).length;\n return selectedCount > 0 && selectedCount < data.length;\n }\n\n /**\n * Compares two objects for equality using dataKey if provided,\n * otherwise falls back to JSON.stringify comparison\n * @internal\n */\n private compareObjects(obj1: any, obj2: any): boolean {\n if (this.dataKey) {\n return obj1?.[this.dataKey] === obj2?.[this.dataKey];\n }\n return JSON.stringify(obj1) === JSON.stringify(obj2);\n }\n\n // ===== ACTION METHODS =====\n\n /**\n * Dispatches a grid action by calling the action's own embedded handler.\n * @internal\n */\n triggerAction(action: GridAction, row: any, event: Event): void {\n event.stopPropagation();\n action.handler(row);\n }\n\n /**\n * Checks if an action is disabled for a row.\n * @internal\n */\n isActionDisabled(action: GridAction, row: any): boolean {\n if (typeof action.disabled === 'function') {\n return action.disabled(row);\n }\n return action.disabled ?? false;\n }\n\n /**\n * Checks if an action is visible for a row.\n * @internal\n */\n isActionVisible(action: GridAction, row: any): boolean {\n if (action.visible === undefined) return true;\n if (typeof action.visible === 'function') {\n return action.visible(row);\n }\n return action.visible;\n }\n\n /**\n * Gets the tooltip text for an action.\n * @internal\n */\n getActionTooltip(action: GridAction, row: any): string {\n if (!action.tooltip) return '';\n if (typeof action.tooltip === 'function') {\n return action.tooltip(row);\n }\n return action.tooltip;\n }\n\n // ===== ROW EXPANSION METHODS =====\n\n /**\n * Toggles row expansion\n * @internal\n */\n toggleRowExpansion(row: any, event: Event): void {\n event.stopPropagation();\n if (!this.hasDetails()) return;\n\n const expanded = this.expandedRows();\n const isExpanded = expanded.has(row);\n\n if (isExpanded) {\n expanded.delete(row);\n this.onRowCollapse.emit(row);\n } else {\n expanded.add(row);\n this.onRowExpand.emit(row);\n }\n\n this.expandedRows.set(new Set(expanded));\n }\n\n /**\n * Checks if a row is expanded\n * @internal\n */\n isRowExpanded(row: any): boolean {\n return this.expandedRows().has(row);\n }\n\n // ===== DOWNLOAD METHODS =====\n\n /**\n * Handles download button click\n * @internal\n */\n handleDownload(): void {\n if (this.downloadMode === 'api') {\n this.onDownload.emit({\n format: this.downloadFormat,\n data: this.processedData(),\n columns: this.gridColumns(),\n });\n } else {\n this.downloadData();\n }\n }\n\n /**\n * Downloads table data directly (client-side)\n * @internal\n */\n private downloadData(): void {\n const data = this.processedData();\n const columns = this.gridColumns();\n const filename = this.downloadFilename || 'table-data';\n\n switch (this.downloadFormat) {\n case 'csv':\n this.downloadCSV(data, columns, filename);\n break;\n case 'json':\n this.downloadJSON(data, filename);\n break;\n case 'excel':\n // For Excel, we'll fall back to CSV with .xls extension\n // A full Excel implementation would require a library like xlsx\n this.downloadCSV(data, columns, filename, 'xls');\n break;\n }\n }\n\n /**\n * Downloads data as CSV\n * @internal\n */\n private downloadCSV(\n data: any[],\n columns: TableColumn[],\n filename: string,\n extension: string = 'csv',\n ): void {\n // Create CSV header\n const headers = columns\n .map((col) => {\n const escaped = String(col.header).replace(/\"/g, '\"\"');\n return escaped.includes(',') ||\n escaped.includes('\"') ||\n escaped.includes('\\n')\n ? `\"${escaped}\"`\n : escaped;\n })\n .join(',');\n\n // Create CSV rows\n const rows = data.map((row) => {\n return columns\n .map((col) => {\n const value = this.getCellValue(row, col.field);\n const formatted = this.formatCellValue(value, col);\n // Escape quotes and wrap in quotes if contains comma or quote\n const escaped = String(formatted).replace(/\"/g, '\"\"');\n return escaped.includes(',') ||\n escaped.includes('\"') ||\n escaped.includes('\\n')\n ? `\"${escaped}\"`\n : escaped;\n })\n .join(',');\n });\n\n // Combine header and rows\n const csv = [headers, ...rows].join('\\n');\n\n // Create and download file\n this.downloadFile(csv, `${filename}.${extension}`, 'text/csv');\n }\n\n /**\n * Downloads data as JSON\n * @internal\n */\n private downloadJSON(data: any[], filename: string): void {\n const json = JSON.stringify(data, null, 2);\n this.downloadFile(json, `${filename}.json`, 'application/json');\n }\n\n /**\n * Creates and triggers file download\n * @internal\n */\n private downloadFile(\n content: string,\n filename: string,\n mimeType: string,\n ): void {\n const blob = new Blob([content], { type: mimeType });\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n link.click();\n window.URL.revokeObjectURL(url);\n }\n\n // ===== COLUMN RESIZE METHODS =====\n\n /**\n * Starts column resize\n * @internal\n */\n onColumnResizeStart(event: MouseEvent, column: TableColumn): void {\n if (!this.resizableColumns) return;\n\n event.preventDefault();\n this.resizingColumn = column;\n this.resizeStartX = event.pageX;\n\n const widths = this.columnWidths();\n this.resizeStartWidth =\n widths[column.field] || this.getColumnDefaultWidth(column);\n }\n\n /**\n * Gets default column width\n * @internal\n */\n private getColumnDefaultWidth(column: TableColumn): number {\n if (column.width) {\n const match = column.width.match(/^(\\d+)px$/);\n if (match) return parseInt(match[1], 10);\n }\n return 150;\n }\n\n /**\n * Handles document mouse move for column resize\n * @internal\n */\n @HostListener('document:mousemove', ['$event'])\n onColumnResize(event: MouseEvent): void {\n if (!this.resizingColumn) return;\n\n const delta = event.pageX - this.resizeStartX;\n const newWidth = Math.max(50, this.resizeStartWidth + delta);\n\n this.columnWidths.update((widths) => ({\n ...widths,\n [this.resizingColumn!.field]: newWidth,\n }));\n }\n\n /**\n * Handles document mouse up to end column resize\n * @internal\n */\n @HostListener('document:mouseup')\n onColumnResizeEnd(): void {\n this.resizingColumn = null;\n }\n\n /**\n * Gets the width style for a column\n * @internal\n */\n getColumnWidth(column: TableColumn): string {\n const widths = this.columnWidths();\n if (widths[column.field]) {\n return `${widths[column.field]}px`;\n }\n return column.width || 'auto';\n }\n\n // ===== UTILITY METHODS =====\n\n /**\n * Gets CSS classes for the table\n * @internal\n */\n getTableClasses(): { [key: string]: boolean } {\n return {\n 'i-table': true,\n 'i-table--striped': this.striped,\n 'i-table--hoverable': this.hoverable,\n 'i-table--bordered': this.bordered,\n 'i-table--small': this.size === 'small',\n 'i-table--medium': this.size === 'medium',\n 'i-table--large': this.size === 'large',\n 'i-table--scrollable': this.scrollable || !!this.height,\n 'i-table--loading': this.loading,\n };\n }\n\n /**\n * Track by function for rows.\n * Must be an arrow property so that CDK virtual-scroll can call it as a\n * plain function reference without losing the component's `this` context.\n * @internal\n */\n trackByRow = (index: number, row: any): any => {\n if (this.dataKey) return row[this.dataKey];\n return row?.id ?? index;\n };\n\n /**\n * Track by function for columns\n * @internal\n */\n trackByColumn(index: number, column: TableColumn): string {\n return column.field;\n }\n\n // ===== COMPUTED LAYOUT HELPERS =====\n\n /**\n * Effective container height for the virtual scroll viewport.\n * Falls back to '100%' when no height is provided.\n * @internal\n */\n effectiveHeight = computed<string>(() => this.height || '100%');\n\n /**\n * Total column span used for empty-state and detail expansion cells.\n * @internal\n */\n totalColspan = computed<number>(() => {\n return (\n this.gridColumns().length +\n (this.selectionMode === 'multiple' ? 1 : 0) +\n (this.hasDetails() ? 2 : 0) + // expand column + detail-count column\n (this.gridActions().length > 0 ? 1 : 0)\n );\n });\n\n /**\n * Returns the number of detail rows for a given parent row.\n * Used to render the `(n)` count badge in the expand table.\n * @internal\n */\n getDetailRowCount(row: any): number {\n const details = this.grid().details;\n if (!details) return 0;\n return details.rows(row).length;\n }\n\n /**\n * Builds a `GridData` for the nested detail `<i-table>` of an expanded row.\n * @internal\n */\n getDetailGrid(row: any): GridData {\n const details = this.grid().details;\n if (!details) return { columns: [], rows: [] };\n return {\n columns: details.columns,\n rows: details.rows(row),\n actions: details.actions,\n };\n }\n\n /**\n * Scrolls to a specific index in the virtual scroll viewport\n * @param index - The index to scroll to\n * @param behavior - Scroll behavior ('auto' or 'smooth')\n */\n scrollToIndex(index: number, behavior: ScrollBehavior = 'auto'): void {\n this.virtualScrollViewport?.scrollToIndex(index, behavior);\n }\n\n /**\n * Scrolls to a specific offset in the virtual scroll viewport\n * @param offset - The offset in pixels to scroll to\n * @param behavior - Scroll behavior ('auto' or 'smooth')\n */\n scrollToOffset(offset: number, behavior: ScrollBehavior = 'auto'): void {\n this.virtualScrollViewport?.scrollToOffset(offset, behavior);\n }\n\n /**\n * Gets the total content size of the virtual scroll viewport\n * @returns The total content size in pixels\n */\n getVirtualScrollContentSize(): number {\n return this.virtualScrollViewport?.measureScrollOffset('bottom') ?? 0;\n }\n\n /**\n * Gets the current scroll offset of the virtual scroll viewport\n * @returns The current scroll offset in pixels\n */\n getVirtualScrollOffset(): number {\n return this.virtualScrollViewport?.measureScrollOffset() ?? 0;\n }\n}\n","<div class=\"i-table-wrapper\" [ngClass]=\"getTableClasses()\">\n <!-- Table Header: global filter + download -->\n @if (globalFilter || downloadable) {\n <div class=\"i-table-header\">\n <div class=\"i-table-header-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n <div class=\"i-table-header-end\">\n @if (globalFilter) {\n <div class=\"i-table-global-filter\">\n <i-input-text\n [useFloatLabel]=\"false\"\n placeholder=\"Search...\"\n [ngModel]=\"globalFilterValue()\"\n (ngModelChange)=\"onGlobalFilterInput($event)\"\n [fluid]=\"false\"\n [icon]=\"'pi pi-search'\"\n ></i-input-text>\n </div>\n }\n @if (downloadable) {\n <div class=\"i-table-download\">\n <i-button\n severity=\"secondary\"\n [text]=\"true\"\n size=\"small\"\n icon=\"pi pi-download\"\n label=\"Download\"\n (clicked)=\"handleDownload()\"\n ></i-button>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Loading Overlay -->\n @if (loading) {\n <div class=\"i-table-loading-overlay\">\n <i class=\"pi pi-spin pi-spinner i-table-loading-icon\"></i>\n </div>\n }\n\n <!-- ================================================================\n PATH A — Detail-expandable table\n Uses a standard scrollable container so that nested <i-table>\n components can expand inline below their parent rows.\n ================================================================ -->\n @if (hasDetails()) {\n <div\n class=\"i-table-container i-table-container--scrollable\"\n [style.max-height]=\"effectiveHeight()\"\n >\n <table class=\"i-table\">\n <thead>\n <!-- Column Filter Row -->\n @if (filterable) {\n <tr class=\"i-table-filter-row\">\n @if (selectionMode === \"multiple\") {\n <th class=\"i-table-selection-header\"></th>\n }\n <th class=\"i-table-expand-header\"></th>\n @for (\n column of gridColumns();\n track trackByColumn($index, column)\n ) {\n @if (column.filterable !== false) {\n <th [style.width]=\"getColumnWidth(column)\">\n <input\n type=\"text\"\n class=\"i-table-column-filter\"\n placeholder=\"Filter...\"\n [ngModel]=\"columnFilters()[column.field] || ''\"\n (ngModelChange)=\"\n onColumnFilterInput(column.field, $event)\n \"\n />\n </th>\n } @else {\n <th [style.width]=\"getColumnWidth(column)\"></th>\n }\n }\n <th class=\"i-table-detail-count-header\"></th>\n @if (gridActions().length > 0) {\n <th class=\"i-table-actions-header\"></th>\n }\n </tr>\n }\n\n <!-- Column Headers -->\n <tr>\n @if (selectionMode === \"multiple\") {\n <th class=\"i-table-selection-header\">\n <i-checkbox\n [checked]=\"areAllRowsSelected()\"\n [indeterminate]=\"areSomeRowsSelected()\"\n (onChange)=\"toggleAllSelection()\"\n ></i-checkbox>\n </th>\n }\n <th class=\"i-table-expand-header\"></th>\n @for (\n column of gridColumns();\n track trackByColumn($index, column)\n ) {\n <th\n [style.width]=\"getColumnWidth(column)\"\n [style.text-align]=\"column.align || 'left'\"\n [class.i-table-sortable-column]=\"sortable && column.sortable\"\n [class.i-table-sorted]=\"sortField === column.field\"\n (click)=\"onSortColumn(column)\"\n >\n <div class=\"i-table-header-content\">\n <span class=\"i-table-header-text\">{{ column.header }}</span>\n @if (sortable && column.sortable) {\n <i\n [class]=\"getSortIcon(column)\"\n class=\"i-table-sort-icon\"\n ></i>\n }\n </div>\n @if (resizableColumns) {\n <span\n class=\"i-table-column-resizer\"\n (mousedown)=\"onColumnResizeStart($event, column)\"\n ></span>\n }\n </th>\n }\n <th class=\"i-table-detail-count-header\"></th>\n @if (gridActions().length > 0) {\n <th class=\"i-table-actions-header\">Actions</th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (processedData().length === 0) {\n <tr class=\"i-table-empty-row\">\n <td [attr.colspan]=\"totalColspan()\">\n <i-no-content />\n </td>\n </tr>\n }\n @for (row of processedData(); track trackByRow($index, row)) {\n <!-- Parent row -->\n <tr\n [class.i-table-row-odd]=\"$odd\"\n [class.i-table-row-selected]=\"isRowSelected(row)\"\n (click)=\"toggleRowSelection(row)\"\n >\n @if (selectionMode === \"multiple\") {\n <td class=\"i-table-selection-cell\">\n <i-checkbox\n [checked]=\"isRowSelected(row)\"\n (onChange)=\"toggleRowSelection(row)\"\n (click)=\"$event.stopPropagation()\"\n ></i-checkbox>\n </td>\n }\n <td class=\"i-table-expand-cell\">\n <i-button\n severity=\"secondary\"\n [text]=\"true\"\n size=\"xtra-small\"\n [icon]=\"\n isRowExpanded(row)\n ? 'pi pi-chevron-down'\n : 'pi pi-chevron-right'\n \"\n (clicked)=\"toggleRowExpansion(row, $event)\"\n ></i-button>\n </td>\n @for (\n column of gridColumns();\n track trackByColumn($index, column)\n ) {\n <td\n [style.text-align]=\"column.align || 'left'\"\n [style.width]=\"getColumnWidth(column)\"\n [class]=\"\n getCellSeverity(row, column)\n ? 'i-table-cell-' + getCellSeverity(row, column)\n : ''\n \"\n >\n @if (isIconColumn(column)) {\n <i\n [class]=\"getCellIcon(row, column)\"\n [class.i-severity-icon]=\"getCellSeverity(row, column)\"\n [style.font-size]=\"column.iconSize || '1rem'\"\n ></i>\n } @else if (isListColumn(column)) {\n <div class=\"i-table-list-cell\">\n @for (item of getCellListItems(row, column); track item) {\n <i-chip [label]=\"item\"></i-chip>\n }\n </div>\n } @else {\n <span\n [class.i-severity-text]=\"getCellSeverity(row, column)\"\n >\n {{\n formatCellValue(getCellValue(row, column.field), column)\n }}\n </span>\n }\n </td>\n }\n <td class=\"i-table-detail-count-cell\">\n ({{ getDetailRowCount(row) }})\n </td>\n @if (gridActions().length > 0) {\n <td class=\"i-table-actions-cell\">\n <div class=\"i-table-actions\">\n @for (action of gridActions(); track action.id) {\n <i-button\n [severity]=\"action.severity || 'secondary'\"\n [text]=\"true\"\n size=\"small\"\n [icon]=\"action.icon || ''\"\n [disabled]=\"isActionDisabled(action, row)\"\n [iTooltip]=\"getActionTooltip(action, row)\"\n [class.i-action-hidden]=\"!isActionVisible(action, row)\"\n (clicked)=\"triggerAction(action, row, $event)\"\n >\n @if (action.label) {\n {{ action.label }}\n }\n </i-button>\n }\n </div>\n </td>\n }\n </tr>\n\n <!-- Detail expansion row -->\n @if (isRowExpanded(row)) {\n <tr class=\"i-table-expanded-row\">\n <td\n [attr.colspan]=\"totalColspan()\"\n class=\"i-table-expanded-cell\"\n >\n <div class=\"i-table-expanded-content\">\n <i-table\n [grid]=\"getDetailGrid(row)\"\n [sortable]=\"sortable\"\n [filterable]=\"filterable\"\n [selectionMode]=\"selectionMode\"\n [selection]=\"selection\"\n [striped]=\"striped\"\n [hoverable]=\"hoverable\"\n [bordered]=\"bordered\"\n [size]=\"size\"\n [dataKey]=\"dataKey\"\n [resizableColumns]=\"resizableColumns\"\n (onSort)=\"onSort.emit($event)\"\n (onFilter)=\"onFilter.emit($event)\"\n (onSelectionChange)=\"onSelectionChange.emit($event)\"\n (selectionChange)=\"selectionChange.emit($event)\"\n (onRowSelect)=\"onRowSelect.emit($event)\"\n (onRowUnselect)=\"onRowUnselect.emit($event)\"\n ></i-table>\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n } @else if (virtualScroll) {\n <!-- ================================================================\n PATH B — CDK Virtual Scroll (div-based rows)\n Use only for large row counts (≥ ~500 rows). Uses flex <div> rows\n so CDK's wrapper <div> does not end up inside <tbody> (invalid HTML).\n ================================================================ -->\n <div\n class=\"i-table-container i-table-container--scrollable i-table-container--virtual-scroll\"\n [style.height]=\"effectiveHeight()\"\n >\n <!-- Sticky header — flex rows that mirror the virtual body rows -->\n <div class=\"i-table-virtual-header\">\n @if (filterable) {\n <div class=\"i-table-virtual-row i-table-filter-row\">\n @if (selectionMode === \"multiple\") {\n <div class=\"i-table-virtual-cell i-table-selection-header\"></div>\n }\n @for (\n column of gridColumns();\n track trackByColumn($index, column)\n ) {\n @if (column.filterable !== false) {\n <div\n class=\"i-table-virtual-cell\"\n [style.width]=\"\n getColumnWidth(column) !== 'auto'\n ? getColumnWidth(column)\n : null\n \"\n [style.flex]=\"getColumnWidth(column) === 'auto' ? '1' : null\"\n >\n <input\n type=\"text\"\n class=\"i-table-column-filter\"\n placeholder=\"Filter...\"\n [ngModel]=\"columnFilters()[column.field] || ''\"\n (ngModelChange)=\"onColumnFilterInput(column.field, $event)\"\n />\n </div>\n } @else {\n <div\n class=\"i-table-virtual-cell\"\n [style.width]=\"\n getColumnWidth(column) !== 'auto'\n ? getColumnWidth(column)\n : null\n \"\n [style.flex]=\"getColumnWidth(column) === 'auto' ? '1' : null\"\n ></div>\n }\n }\n @if (gridActions().length > 0) {\n <div class=\"i-table-virtual-cell i-table-actions-header\"></div>\n }\n </div>\n }\n <div class=\"i-table-virtual-row i-table-header-row\">\n @if (selectionMode === \"multiple\") {\n <div class=\"i-table-virtual-cell i-table-selection-header\">\n <i-checkbox\n [checked]=\"areAllRowsSelected()\"\n [indeterminate]=\"areSomeRowsSelected()\"\n (onChange)=\"toggleAllSelection()\"\n ></i-checkbox>\n </div>\n }\n @for (column of gridColumns(); track trackByColumn($index, column)) {\n <div\n class=\"i-table-virtual-cell i-table-header-cell\"\n [style.width]=\"\n getColumnWidth(column) !== 'auto'\n ? getColumnWidth(column)\n : null\n \"\n [style.flex]=\"getColumnWidth(column) === 'auto' ? '1' : null\"\n [style.text-align]=\"column.align || 'left'\"\n [class.i-table-sortable-column]=\"sortable && column.sortable\"\n [class.i-table-sorted]=\"sortField === column.field\"\n (click)=\"onSortColumn(column)\"\n >\n <div class=\"i-table-header-content\">\n <span class=\"i-table-header-text\">{{ column.header }}</span>\n @if (sortable && column.sortable) {\n <i\n [class]=\"getSortIcon(column)\"\n class=\"i-table-sort-icon\"\n ></i>\n }\n </div>\n </div>\n }\n @if (gridActions().length > 0) {\n <div class=\"i-table-virtual-cell i-table-actions-header\">\n Actions\n </div>\n }\n </div>\n </div>\n\n <!-- Virtual Scroll Viewport — *cdkVirtualFor on <div>, not <tr> -->\n <cdk-virtual-scroll-viewport\n [itemSize]=\"virtualScrollItemSize\"\n [minBufferPx]=\"virtualScrollMinBufferPx\"\n [maxBufferPx]=\"virtualScrollMaxBufferPx\"\n class=\"i-table-virtual-viewport\"\n >\n @if (processedData().length === 0) {\n <div class=\"i-table-virtual-row i-table-empty-row\">\n <div\n class=\"i-table-virtual-cell\"\n style=\"flex: 1; text-align: center; padding: 40px 16px\"\n >\n <i-no-content />\n </div>\n </div>\n }\n <div\n *cdkVirtualFor=\"\n let row of processedData();\n let rowIndex = index;\n trackBy: trackByRow\n \"\n class=\"i-table-virtual-row\"\n [style.height.px]=\"virtualScrollItemSize\"\n [class.i-table-row-odd]=\"rowIndex % 2 !== 0\"\n [class.i-table-row-selected]=\"isRowSelected(row)\"\n (click)=\"toggleRowSelection(row)\"\n >\n @if (selectionMode === \"multiple\") {\n <div class=\"i-table-virtual-cell i-table-selection-cell\">\n <i-checkbox\n [checked]=\"isRowSelected(row)\"\n (onChange)=\"toggleRowSelection(row)\"\n (click)=\"$event.stopPropagation()\"\n ></i-checkbox>\n </div>\n }\n @for (column of gridColumns(); track trackByColumn($index, column)) {\n <div\n class=\"i-table-virtual-cell\"\n [style.width]=\"\n getColumnWidth(column) !== 'auto'\n ? getColumnWidth(column)\n : null\n \"\n [style.flex]=\"getColumnWidth(column) === 'auto' ? '1' : null\"\n [style.text-align]=\"column.align || 'left'\"\n [ngClass]=\"\n getCellSeverity(row, column)\n ? 'i-table-cell-' + getCellSeverity(row, column)\n : ''\n \"\n >\n @if (isIconColumn(column)) {\n <i\n [class]=\"getIconClasses(row, column)\"\n [style.font-size]=\"column.iconSize || '1rem'\"\n ></i>\n } @else if (isListColumn(column)) {\n <div class=\"i-table-list-cell\">\n @for (item of getCellListItems(row, column); track item) {\n <i-chip [label]=\"item\"></i-chip>\n }\n </div>\n } @else {\n <span [class.i-severity-text]=\"getCellSeverity(row, column)\">\n {{ formatCellValue(getCellValue(row, column.field), column) }}\n </span>\n }\n </div>\n }\n @if (gridActions().length > 0) {\n <div class=\"i-table-virtual-cell i-table-actions-cell\">\n <div class=\"i-table-actions\">\n @for (action of gridActions(); track action.id) {\n <i-button\n [severity]=\"action.severity || 'secondary'\"\n [text]=\"true\"\n size=\"small\"\n [icon]=\"action.icon || ''\"\n [disabled]=\"isActionDisabled(action, row)\"\n [iTooltip]=\"getActionTooltip(action, row)\"\n [class.i-action-hidden]=\"!isActionVisible(action, row)\"\n (clicked)=\"triggerAction(action, row, $event)\"\n >\n @if (action.label) {\n {{ action.label }}\n }\n </i-button>\n }\n </div>\n </div>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n </div>\n } @else {\n <!-- ================================================================\n PATH C — Regular scrollable table\n Default for small/medium datasets and nested detail tables.\n Uses a plain overflow container with a @for loop — no CDK needed.\n ================================================================ -->\n <div\n class=\"i-table-container i-table-container--scrollable\"\n [style.max-height]=\"effectiveHeight()\"\n >\n <table class=\"i-table\">\n <thead>\n <!-- Column Filter Row -->\n @if (filterable) {\n <tr class=\"i-table-filter-row\">\n @if (selectionMode === \"multiple\") {\n <th class=\"i-table-selection-header\"></th>\n }\n @for (\n column of gridColumns();\n track trackByColumn($index, column)\n ) {\n @if (column.filterable !== false) {\n <th [style.width]=\"getColumnWidth(column)\">\n <input\n type=\"text\"\n class=\"i-table-column-filter\"\n placeholder=\"Filter...\"\n [ngModel]=\"columnFilters()[column.field] || ''\"\n (ngModelChange)=\"\n onColumnFilterInput(column.field, $event)\n \"\n />\n </th>\n } @else {\n <th [style.width]=\"getColumnWidth(column)\"></th>\n }\n }\n @if (gridActions().length > 0) {\n <th class=\"i-table-actions-header\"></th>\n }\n </tr>\n }\n\n <!-- Column Headers -->\n <tr>\n @if (selectionMode === \"multiple\") {\n <th class=\"i-table-selection-header\">\n <i-checkbox\n [checked]=\"areAllRowsSelected()\"\n [indeterminate]=\"areSomeRowsSelected()\"\n (onChange)=\"toggleAllSelection()\"\n ></i-checkbox>\n </th>\n }\n @for (\n column of gridColumns();\n track trackByColumn($index, column)\n ) {\n <th\n [style.width]=\"getColumnWidth(column)\"\n [style.text-align]=\"column.align || 'left'\"\n [class.i-table-sortable-column]=\"sortable && column.sortable\"\n [class.i-table-sorted]=\"sortField === column.field\"\n (click)=\"onSortColumn(column)\"\n >\n <div class=\"i-table-header-content\">\n <span class=\"i-table-header-text\">{{ column.header }}</span>\n @if (sortable && column.sortable) {\n <i\n [class]=\"getSortIcon(column)\"\n class=\"i-table-sort-icon\"\n ></i>\n }\n </div>\n @if (resizableColumns) {\n <span\n class=\"i-table-column-resizer\"\n (mousedown)=\"onColumnResizeStart($event, column)\"\n ></span>\n }\n </th>\n }\n @if (gridActions().length > 0) {\n <th class=\"i-table-actions-header\">Actions</th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (processedData().length === 0) {\n <tr class=\"i-table-empty-row\">\n <td [attr.colspan]=\"totalColspan()\">\n <i-no-content />\n </td>\n </tr>\n }\n @for (row of processedData(); track trackByRow($index, row)) {\n <tr\n [class.i-table-row-odd]=\"$odd\"\n [class.i-table-row-selected]=\"isRowSelected(row)\"\n (click)=\"toggleRowSelection(row)\"\n >\n @if (selectionMode === \"multiple\") {\n <td class=\"i-table-selection-cell\">\n <i-checkbox\n [checked]=\"isRowSelected(row)\"\n (onChange)=\"toggleRowSelection(row)\"\n (click)=\"$event.stopPropagation()\"\n ></i-checkbox>\n </td>\n }\n @for (\n column of gridColumns();\n track trackByColumn($index, column)\n ) {\n <td\n [style.text-align]=\"column.align || 'left'\"\n [style.width]=\"getColumnWidth(column)\"\n [class]=\"\n getCellSeverity(row, column)\n ? 'i-table-cell-' + getCellSeverity(row, column)\n : ''\n \"\n >\n @if (isIconColumn(column)) {\n <i\n [class]=\"getIconClasses(row, column)\"\n [style.font-size]=\"column.iconSize || '1rem'\"\n ></i>\n } @else if (isListColumn(column)) {\n <div class=\"i-table-list-cell\">\n @for (item of getCellListItems(row, column); track item) {\n <i-chip [label]=\"item\"></i-chip>\n }\n </div>\n } @else {\n <span\n [class.i-severity-text]=\"getCellSeverity(row, column)\"\n >\n {{\n formatCellValue(getCellValue(row, column.field), column)\n }}\n </span>\n }\n </td>\n }\n @if (gridActions().length > 0) {\n <td class=\"i-table-actions-cell\">\n <div class=\"i-table-actions\">\n @for (action of gridActions(); track action.id) {\n <i-button\n [severity]=\"action.severity || 'secondary'\"\n [text]=\"true\"\n size=\"small\"\n [icon]=\"action.icon || ''\"\n [disabled]=\"isActionDisabled(action, row)\"\n [iTooltip]=\"getActionTooltip(action, row)\"\n [class.i-action-hidden]=\"!isActionVisible(action, row)\"\n (clicked)=\"triggerAction(action, row, $event)\"\n >\n @if (action.label) {\n {{ action.label }}\n }\n </i-button>\n }\n </div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n</div>\n","import {\n Component,\n Input,\n AfterViewInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ViewChildren,\n ElementRef,\n QueryList,\n ChangeDetectorRef,\n inject,\n} from '@angular/core';\nimport { Chart, ChartConfiguration, registerables } from 'chart.js';\nimport {\n IChartData,\n IChartDataSet,\n IChartDisplay,\n IChartType,\n IChartTypeExtended,\n} from './chart.interfaces';\n\n// Register all Chart.js components\nChart.register(...registerables);\n\n/**\n * Built-in color palette for chart colors.\n * Users can reference these colors using shorthand like '--blue-500' or direct hex values.\n * @internal\n */\nconst CHART_COLOR_PALETTE: Record<string, Record<string | number, string>> = {\n blue: {\n 50: '#f5f9ff',\n 100: '#d0e1fd',\n 200: '#abc9fb',\n 300: '#85b2f9',\n 400: '#609af8',\n 500: '#3b82f6',\n 600: '#326fd1',\n 700: '#295bac',\n 800: '#204887',\n 900: '#183462',\n },\n green: {\n 50: '#f4fcf7',\n 100: '#caf1d8',\n 200: '#a0e6ba',\n 300: '#76db9b',\n 400: '#4cd07d',\n 500: '#22c55e',\n 600: '#1da750',\n 700: '#188a42',\n 800: '#136c34',\n 900: '#0e4f26',\n },\n yellow: {\n 50: '#fefbf3',\n 100: '#faedc4',\n 200: '#f6de95',\n 300: '#f2d066',\n 400: '#eec137',\n 500: '#eab308',\n 600: '#c79807',\n 700: '#a47d06',\n 800: '#816204',\n 900: '#5e4803',\n },\n cyan: {\n 50: '#f3fbfd',\n 100: '#c3edf5',\n 200: '#94e0ed',\n 300: '#65d2e4',\n 400: '#35c4dc',\n 500: '#06b6d4',\n 600: '#059bb4',\n 700: '#047f94',\n 800: '#036475',\n 900: '#024955',\n },\n pink: {\n 50: '#fef6fa',\n 100: '#fad3e7',\n 200: '#f7b0d3',\n 300: '#f38ec0',\n 400: '#f06bac',\n 500: '#ec4899',\n 600: '#c93d82',\n 700: '#a5326b',\n 800: '#822854',\n 900: '#5e1d3d',\n },\n indigo: {\n 50: '#f7f7fe',\n 100: '#dadafc',\n 200: '#bcbdf9',\n 300: '#9ea0f6',\n 400: '#8183f4',\n 500: '#6366f1',\n 600: '#5457cd',\n 700: '#4547a9',\n 800: '#363885',\n 900: '#282960',\n },\n teal: {\n 50: '#f3fbfb',\n 100: '#c7eeea',\n 200: '#9ae0d9',\n 300: '#6dd3c8',\n 400: '#41c5b7',\n 500: '#14b8a6',\n 600: '#119c8d',\n 700: '#0e8174',\n 800: '#0b655b',\n 900: '#084a42',\n },\n orange: {\n 50: '#fff7ed',\n 100: '#ffedd5',\n 200: '#fed7aa',\n 300: '#fdba74',\n 400: '#fb923c',\n 500: '#f59e0b',\n 600: '#d97706',\n 700: '#b45309',\n 800: '#92400e',\n 900: '#78350f',\n },\n bluegray: {\n 50: '#f7f8f9',\n 100: '#dadee3',\n 200: '#bcc3cd',\n 300: '#9fa9b7',\n 400: '#818ea1',\n 500: '#64748b',\n 600: '#556376',\n 700: '#465161',\n 800: '#37404c',\n 900: '#282e38',\n },\n purple: {\n 50: '#fbf7ff',\n 100: '#ead6fd',\n 200: '#dab6fc',\n 300: '#c996fa',\n 400: '#b975f9',\n 500: '#a855f7',\n 600: '#8f48d2',\n 700: '#763cad',\n 800: '#5c2f88',\n 900: '#432263',\n },\n red: {\n 50: '#fff5f5',\n 100: '#ffd0ce',\n 200: '#ffaca7',\n 300: '#ff8780',\n 400: '#ff6259',\n 500: '#ff3d32',\n 600: '#d9342b',\n 700: '#b32b23',\n 800: '#8c221c',\n 900: '#661814',\n },\n gray: {\n 0: '#ffffff',\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#111827',\n 950: '#020617',\n },\n};\n\n/**\n * Chart Component\n *\n * A Chart.js-based chart component for displaying various chart types.\n * Supports multiple charts in a responsive grid layout.\n *\n * @example\n * ```html\n * <i-chart\n * [charts]=\"myCharts\"\n * height=\"25rem\">\n * </i-chart>\n * ```\n *\n * @example\n * ```typescript\n * myCharts: IChartData[] = [\n * {\n * chartId: 'sales-chart',\n * chartType: 'bar',\n * labels: ['Jan', 'Feb', 'Mar'],\n * dataSets: [{\n * label: 'Sales',\n * data: [100, 200, 150],\n * backgroundColors: ['--blue-500', '--green-500', '--orange-500']\n * }]\n * }\n * ];\n * ```\n */\n@Component({\n selector: 'i-chart',\n standalone: true,\n imports: [],\n templateUrl: './chart.component.html',\n styleUrl: './chart.component.scss',\n})\nexport class IChart implements AfterViewInit, OnDestroy, OnChanges {\n /**\n * Array of chart data objects to render\n */\n @Input() charts: IChartData[] = [];\n\n /**\n * Default height for charts\n * @default '20rem'\n */\n @Input() height = '20rem';\n\n /**\n * Whether charts should be responsive\n * @default true\n */\n @Input() responsive = true;\n\n /**\n * Reference to all canvas elements\n * @internal\n */\n @ViewChildren('chartCanvas')\n canvasElements!: QueryList<ElementRef<HTMLCanvasElement>>;\n\n /**\n * Array of display configurations for each chart\n * @internal\n */\n chartDisplays: IChartDisplay[] = [];\n\n /**\n * Chart.js instances for cleanup\n * @internal\n */\n private chartInstances: Chart[] = [];\n\n /**\n * Flag to track if component has initialized\n * @internal\n */\n private initialized = false;\n\n /**\n * Reference to pending animation frame for cleanup\n * @internal\n */\n private pendingAnimationFrame: number | null = null;\n\n /**\n * Change detector reference for manual change detection\n * @internal\n */\n private cdr = inject(ChangeDetectorRef);\n\n /**\n * Reference to the host element\n * @internal\n */\n private el = inject(ElementRef);\n\n ngAfterViewInit(): void {\n this.initialized = true;\n this.initializeCharts();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['charts'] && this.initialized) {\n this.destroyCharts();\n this.initializeCharts();\n }\n }\n\n ngOnDestroy(): void {\n this.cancelPendingInitialization();\n this.destroyCharts();\n }\n\n /**\n * Cancel any pending chart initialization\n * @internal\n */\n private cancelPendingInitialization(): void {\n if (this.pendingAnimationFrame !== null) {\n cancelAnimationFrame(this.pendingAnimationFrame);\n this.pendingAnimationFrame = null;\n }\n }\n\n /**\n * Initialize all charts\n * @internal\n */\n private initializeCharts(): void {\n this.chartDisplays = this.charts.map((chart, index) =>\n this.transformToChartDisplay(chart, index)\n );\n\n // Cancel any pending initialization\n this.cancelPendingInitialization();\n\n // Trigger change detection to ensure DOM is updated with canvas elements\n this.cdr.detectChanges();\n\n // Use requestAnimationFrame for proper timing after view update\n this.pendingAnimationFrame = requestAnimationFrame(() => {\n this.pendingAnimationFrame = null;\n this.createChartInstances();\n });\n }\n\n /**\n * Create Chart.js instances for all canvas elements\n * @internal\n */\n private createChartInstances(): void {\n this.canvasElements.forEach((canvasRef, index) => {\n const chartDisplay = this.chartDisplays[index];\n if (chartDisplay && canvasRef?.nativeElement) {\n const chartInstance = this.createChartInstance(\n canvasRef.nativeElement,\n chartDisplay\n );\n this.chartInstances.push(chartInstance);\n }\n });\n }\n\n /**\n * Destroy all chart instances\n * @internal\n */\n private destroyCharts(): void {\n this.chartInstances.forEach((chart) => {\n chart.destroy();\n });\n this.chartInstances = [];\n this.chartDisplays = [];\n }\n\n /**\n * Create a Chart.js instance\n * @internal\n */\n private createChartInstance(\n canvas: HTMLCanvasElement,\n display: IChartDisplay\n ): Chart {\n const config: ChartConfiguration = {\n type: display.type,\n data: display.data as ChartConfiguration['data'],\n options: display.options as ChartConfiguration['options'],\n };\n\n return new Chart(canvas, config);\n }\n\n /**\n * Transform IChartData to IChartDisplay\n * @internal\n */\n private transformToChartDisplay(\n chart: IChartData,\n index: number\n ): IChartDisplay {\n // Read resolved CSS variables from the host element\n // This picks up the values defined in chart.component.scss which map to the global theme\n const computedStyle = getComputedStyle(this.el.nativeElement);\n const documentStyle = getComputedStyle(document.documentElement);\n\n const getStyle = (name: string, fallback: string) => {\n const value = computedStyle.getPropertyValue(name).trim();\n return value && !value.startsWith('var(') ? value : fallback;\n };\n\n // Use the chart-specific variables defined in SCSS\n const textColor = getStyle('--chart-text-color', '#334155');\n const textColorSecondary = getStyle('--chart-text-secondary', '#64748b');\n const surfaceBorder = getStyle('--chart-grid-color', '#e2e8f0');\n\n const chartType = this.mapChartType(chart.chartType);\n const height = this.getChartHeight(chart.chartType);\n const options = this.getChartOptions(\n chart.chartType,\n textColor,\n textColorSecondary,\n surfaceBorder\n );\n\n const data = {\n labels: chart.labels,\n datasets: chart.dataSets.map((dataset) =>\n this.transformDataset(dataset, documentStyle)\n ),\n };\n\n return {\n id: chart.chartId || `chart-${index}`,\n type: chartType,\n data,\n options,\n height,\n };\n }\n\n /**\n * Map custom chart type strings to Chart.js types\n * @internal\n */\n private mapChartType(chartType: IChartTypeExtended): IChartType {\n const typeMap: Record<IChartTypeExtended, IChartType> = {\n bar: 'bar',\n 'bar-stack': 'bar',\n 'bar-large': 'bar',\n 'bar-horizontal': 'bar',\n pie: 'pie',\n doughnut: 'doughnut',\n line: 'line',\n scatter: 'scatter',\n bubble: 'bubble',\n polarArea: 'polarArea',\n radar: 'radar',\n };\n\n return typeMap[chartType] || 'bar';\n }\n\n /**\n * Get chart height based on chart type\n * @internal\n */\n private getChartHeight(chartType: IChartTypeExtended): string {\n if (chartType === 'bar-large') {\n return '40rem';\n }\n return this.height;\n }\n\n /**\n * Get chart options based on chart type\n * @internal\n */\n private getChartOptions(\n chartType: IChartTypeExtended,\n textColor: string,\n textColorSecondary: string,\n surfaceBorder: string\n ): unknown {\n const baseOptions = {\n maintainAspectRatio: false,\n responsive: this.responsive,\n plugins: {\n legend: {\n labels: {\n color: textColor,\n },\n },\n },\n };\n\n switch (chartType) {\n case 'bar':\n return {\n ...baseOptions,\n scales: this.getBarScales(textColorSecondary, surfaceBorder),\n };\n\n case 'bar-stack':\n return {\n ...baseOptions,\n scales: this.getStackedBarScales(textColorSecondary, surfaceBorder),\n };\n\n case 'bar-large':\n return {\n ...baseOptions,\n scales: this.getBarScales(textColorSecondary, surfaceBorder),\n };\n\n case 'bar-horizontal':\n return {\n ...baseOptions,\n indexAxis: 'y' as const,\n scales: this.getBarScales(textColorSecondary, surfaceBorder),\n };\n\n case 'pie':\n case 'doughnut':\n return {\n ...baseOptions,\n plugins: {\n legend: {\n labels: {\n color: textColor,\n },\n position: 'bottom' as const,\n },\n },\n };\n\n case 'line':\n return {\n ...baseOptions,\n scales: this.getBarScales(textColorSecondary, surfaceBorder),\n };\n\n case 'radar':\n return {\n ...baseOptions,\n plugins: {\n legend: {\n labels: {\n color: textColor,\n },\n },\n },\n scales: {\n r: {\n grid: {\n color: surfaceBorder,\n },\n pointLabels: {\n color: textColorSecondary,\n },\n },\n },\n };\n\n case 'polarArea':\n return {\n ...baseOptions,\n scales: {\n r: {\n grid: {\n color: surfaceBorder,\n },\n },\n },\n };\n\n default:\n return baseOptions;\n }\n }\n\n /**\n * Get scales configuration for bar charts\n * @internal\n */\n private getBarScales(textColorSecondary: string, surfaceBorder: string) {\n return {\n x: {\n ticks: {\n color: textColorSecondary,\n },\n grid: {\n color: surfaceBorder,\n },\n },\n y: {\n ticks: {\n color: textColorSecondary,\n },\n grid: {\n color: surfaceBorder,\n },\n },\n };\n }\n\n /**\n * Get scales configuration for stacked bar charts\n * @internal\n */\n private getStackedBarScales(\n textColorSecondary: string,\n surfaceBorder: string\n ) {\n return {\n x: {\n stacked: true,\n ticks: {\n color: textColorSecondary,\n },\n grid: {\n color: surfaceBorder,\n },\n },\n y: {\n stacked: true,\n ticks: {\n color: textColorSecondary,\n },\n grid: {\n color: surfaceBorder,\n },\n },\n };\n }\n\n /**\n * Transform dataset with resolved colors\n * @internal\n */\n private transformDataset(\n dataset: IChartDataSet,\n documentStyle: CSSStyleDeclaration\n ) {\n return {\n label: dataset.label,\n data: dataset.data,\n backgroundColor: dataset.backgroundColors.map((color) => {\n const resolvedColor = this.resolveColor(color, documentStyle);\n return this.addTransparency(resolvedColor);\n }),\n borderColor: dataset.backgroundColors.map((color) =>\n this.resolveColor(color, documentStyle)\n ),\n borderWidth: 1,\n };\n }\n\n /**\n * Resolve color to hex value. Supports:\n * - Direct hex colors (e.g., '#ff0000')\n * - RGB/RGBA colors (e.g., 'rgb(255, 0, 0)', 'rgba(255, 0, 0, 0.5)')\n * - Built-in palette shorthand (e.g., '--blue-500', '--green-400')\n * - CSS custom properties (e.g., '--my-custom-color')\n * @internal\n */\n private resolveColor(\n color: string,\n documentStyle: CSSStyleDeclaration\n ): string {\n // If it's already a hex color or rgb/rgba, return as-is\n if (\n color.startsWith('#') ||\n color.startsWith('rgb(') ||\n color.startsWith('rgba(')\n ) {\n return color;\n }\n\n // Handle CSS variable format (--color-name or --color-shade)\n if (color.startsWith('--')) {\n // Try to resolve from built-in palette first (e.g., --blue-500)\n const paletteColor = this.resolveFromPalette(color);\n if (paletteColor) {\n return paletteColor;\n }\n\n // Fall back to CSS custom property lookup\n const cssValue = documentStyle.getPropertyValue(color).trim();\n if (cssValue) {\n return cssValue;\n }\n\n // If CSS variable is not found, return a fallback color\n return '#64748b'; // Default gray-500\n }\n\n return color;\n }\n\n /**\n * Resolve color from built-in palette using shorthand format (e.g., '--blue-500')\n * @internal\n */\n private resolveFromPalette(colorVar: string): string | null {\n // Remove leading '--' and split by '-'\n const colorName = colorVar.substring(2); // Remove '--'\n const lastDashIndex = colorName.lastIndexOf('-');\n\n if (lastDashIndex === -1) {\n return null;\n }\n\n const name = colorName.substring(0, lastDashIndex);\n const shade = colorName.substring(lastDashIndex + 1);\n\n const colorGroup = CHART_COLOR_PALETTE[name];\n if (colorGroup) {\n // Try as string key first, then as number for numeric shades like 500\n if (colorGroup[shade]) {\n return colorGroup[shade];\n }\n const numericShade = parseInt(shade, 10);\n if (!isNaN(numericShade) && colorGroup[numericShade]) {\n return colorGroup[numericShade];\n }\n }\n\n return null;\n }\n\n /**\n * Add transparency to a color. Supports hex and rgb/rgba formats.\n * @internal\n */\n private addTransparency(color: string): string {\n // If it's a hex color, add transparency\n if (color.startsWith('#')) {\n return color + 'bf'; // ~75% opacity\n }\n // If it's an rgb color, convert to rgba with transparency\n if (color.startsWith('rgb(')) {\n // Extract the rgb values and convert to rgba\n const rgbMatch = color.match(\n /rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/\n );\n if (rgbMatch) {\n return `rgba(${rgbMatch[1]}, ${rgbMatch[2]}, ${rgbMatch[3]}, 0.75)`;\n }\n }\n // If it's already rgba, leave as-is (user specified their own alpha)\n return color;\n }\n\n /**\n * Get the height style for a chart display\n * @param display - The chart display configuration\n * @returns The height CSS value\n */\n getChartHeightStyle(display: IChartDisplay): string {\n return display.height || this.height;\n }\n\n /**\n * Get the number of active chart instances (for testing)\n * @returns The count of active chart instances\n */\n getChartInstanceCount(): number {\n return this.chartInstances.length;\n }\n}\n","<div class=\"i-charts-container\">\n @for (chartDisplay of chartDisplays; track chartDisplay.id) {\n <div class=\"i-chart-item\" [style.height]=\"getChartHeightStyle(chartDisplay)\">\n <canvas #chartCanvas></canvas>\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n/**\n * Service for broadcasting data update events across the application.\n *\n * This service provides a centralized mechanism for components to notify other parts\n * of the application when data has been updated, enabling reactive UI updates without\n * tight coupling between components.\n *\n * @example\n * ```typescript\n * // In a component that updates data\n * constructor(private dataUpdateService: DataUpdateEventService) {}\n *\n * saveData() {\n * this.apiService.save(this.data).subscribe(() => {\n * this.dataUpdateService.notifyDataUpdated();\n * });\n * }\n *\n * // In a component that needs to react to updates\n * ngOnInit() {\n * this.dataUpdateService.dataUpdated$.subscribe(() => {\n * this.loadFreshData();\n * });\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DataUpdateEventService {\n /**\n * Internal subject for managing data update events.\n * @internal\n */\n private dataUpdatedSource = new BehaviorSubject<void>(undefined);\n\n /**\n * Observable stream that emits when data has been updated.\n * Subscribe to this observable to react to data changes in the application.\n */\n dataUpdated$ = this.dataUpdatedSource.asObservable();\n\n /**\n * Notifies all subscribers that data has been updated.\n * Call this method after performing any data modification operation\n * to trigger reactive updates across the application.\n *\n * @example\n * ```typescript\n * this.dataUpdateService.notifyDataUpdated();\n * ```\n */\n notifyDataUpdated() {\n this.dataUpdatedSource.next();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\n\n/**\n * Configuration interface for SEO meta tags\n */\nexport interface SeoConfig {\n /** Page title - will be set as the document title */\n title: string;\n /** Meta description - should be 150-160 characters for optimal SEO */\n description: string;\n /** Meta keywords - comma-separated list of keywords */\n keywords?: string;\n /** Canonical URL of the page */\n url?: string;\n /** Image URL for social sharing (og:image, twitter:image) */\n image?: string;\n /** Type of content (website, article, product, etc.) */\n type?: string;\n /** Site name for Open Graph */\n siteName?: string;\n /** Twitter card type (summary, summary_large_image, app, player) */\n twitterCard?: 'summary' | 'summary_large_image' | 'app' | 'player';\n}\n\n/**\n * Service for managing SEO meta tags dynamically.\n *\n * This service provides methods to update page titles, meta descriptions,\n * Open Graph tags, Twitter Cards, and other SEO-related meta tags.\n *\n * @example\n * ```typescript\n * import { SeoService } from 'integra-ng';\n *\n * export class MyComponent {\n * constructor(private seoService: SeoService) {\n * this.seoService.updateMetaTags({\n * title: 'My Page Title | My Site',\n * description: 'Description of my page for search engines.',\n * keywords: 'keyword1, keyword2, keyword3',\n * url: 'https://example.com/my-page',\n * image: 'https://example.com/og-image.png'\n * });\n * }\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class SeoService {\n constructor(\n private meta: Meta,\n private title: Title\n ) {}\n\n /**\n * Updates all SEO-related meta tags based on the provided configuration.\n *\n * @param config - The SEO configuration object\n */\n updateMetaTags(config: SeoConfig): void {\n // Set document title\n this.title.setTitle(config.title);\n\n // Basic meta tags\n this.meta.updateTag({ name: 'description', content: config.description });\n\n if (config.keywords) {\n this.meta.updateTag({ name: 'keywords', content: config.keywords });\n }\n\n // Open Graph tags\n this.meta.updateTag({ property: 'og:title', content: config.title });\n this.meta.updateTag({\n property: 'og:description',\n content: config.description,\n });\n this.meta.updateTag({\n property: 'og:type',\n content: config.type || 'website',\n });\n\n if (config.url) {\n this.meta.updateTag({ property: 'og:url', content: config.url });\n // Also update canonical link\n this.updateCanonicalUrl(config.url);\n }\n\n if (config.image) {\n this.meta.updateTag({ property: 'og:image', content: config.image });\n }\n\n if (config.siteName) {\n this.meta.updateTag({\n property: 'og:site_name',\n content: config.siteName,\n });\n }\n\n // Twitter Card tags\n this.meta.updateTag({\n name: 'twitter:card',\n content: config.twitterCard || 'summary_large_image',\n });\n this.meta.updateTag({ name: 'twitter:title', content: config.title });\n this.meta.updateTag({\n name: 'twitter:description',\n content: config.description,\n });\n\n if (config.image) {\n this.meta.updateTag({ name: 'twitter:image', content: config.image });\n }\n\n if (config.url) {\n this.meta.updateTag({ property: 'twitter:url', content: config.url });\n }\n }\n\n /**\n * Sets only the page title.\n *\n * @param title - The title to set\n */\n setTitle(title: string): void {\n this.title.setTitle(title);\n }\n\n /**\n * Gets the current page title.\n *\n * @returns The current document title\n */\n getTitle(): string {\n return this.title.getTitle();\n }\n\n /**\n * Sets only the meta description.\n *\n * @param description - The description to set (recommended: 150-160 characters)\n */\n setDescription(description: string): void {\n this.meta.updateTag({ name: 'description', content: description });\n }\n\n /**\n * Sets robots meta tag directives.\n *\n * @param content - The robots directive (e.g., 'index, follow', 'noindex, nofollow')\n */\n setRobots(content: string): void {\n this.meta.updateTag({ name: 'robots', content });\n }\n\n /**\n * Updates or creates the canonical URL link element.\n *\n * @param url - The canonical URL\n */\n updateCanonicalUrl(url: string): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n let link: HTMLLinkElement | null =\n document.querySelector('link[rel=\"canonical\"]');\n\n if (!link) {\n link = document.createElement('link');\n link.setAttribute('rel', 'canonical');\n document.head.appendChild(link);\n }\n\n link.setAttribute('href', url);\n }\n\n /**\n * Removes a specific meta tag by name or property.\n *\n * @param attrSelector - The attribute selector (e.g., \"name='description'\" or \"property='og:title'\")\n */\n removeTag(attrSelector: string): void {\n this.meta.removeTag(attrSelector);\n }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * Organization schema configuration\n */\nexport interface OrganizationSchema {\n name: string;\n url: string;\n logo?: string;\n sameAs?: string[];\n contactPoint?: {\n telephone: string;\n contactType: string;\n areaServed?: string;\n availableLanguage?: string[];\n };\n}\n\n/**\n * WebSite schema configuration\n */\nexport interface WebSiteSchema {\n name: string;\n url: string;\n description?: string;\n potentialAction?: {\n queryInput: string;\n target: string;\n };\n}\n\n/**\n * BreadcrumbList item configuration\n */\nexport interface BreadcrumbItem {\n name: string;\n url: string;\n}\n\n/**\n * Article schema configuration\n */\nexport interface ArticleSchema {\n headline: string;\n description: string;\n image?: string;\n datePublished: string;\n dateModified?: string;\n author: {\n name: string;\n url?: string;\n };\n}\n\n/**\n * Service for managing structured data (JSON-LD) for SEO.\n *\n * This service provides methods to insert and manage schema.org\n * structured data in the document head for improved search engine\n * visibility and rich search results.\n *\n * @example\n * ```typescript\n * import { StructuredDataService } from 'integra-ng';\n *\n * export class AppComponent {\n * constructor(private structuredDataService: StructuredDataService) {\n * // Insert organization schema\n * const orgSchema = this.structuredDataService.createOrganizationSchema({\n * name: 'My Company',\n * url: 'https://example.com',\n * logo: 'https://example.com/logo.png'\n * });\n * this.structuredDataService.insertSchema(orgSchema, 'organization-schema');\n * }\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class StructuredDataService {\n constructor(@Inject(DOCUMENT) private document: Document) {}\n\n /**\n * Inserts or updates a JSON-LD schema script in the document head.\n *\n * @param schema - The schema object to insert\n * @param id - Unique identifier for the script element (default: 'structured-data')\n */\n insertSchema(schema: object, id: string = 'structured-data'): void {\n if (typeof this.document === 'undefined') {\n return;\n }\n\n let script = this.document.getElementById(id) as HTMLScriptElement | null;\n\n if (!script) {\n script = this.document.createElement('script');\n script.id = id;\n script.type = 'application/ld+json';\n this.document.head.appendChild(script);\n }\n\n script.textContent = JSON.stringify(schema);\n }\n\n /**\n * Removes a schema script from the document.\n *\n * @param id - The identifier of the script element to remove\n */\n removeSchema(id: string): void {\n if (typeof this.document === 'undefined') {\n return;\n }\n\n const script = this.document.getElementById(id);\n if (script) {\n script.remove();\n }\n }\n\n /**\n * Creates an Organization schema object.\n *\n * @param config - Organization configuration\n * @returns A schema.org Organization object\n */\n createOrganizationSchema(config: OrganizationSchema): object {\n const schema: Record<string, unknown> = {\n '@context': 'https://schema.org',\n '@type': 'Organization',\n name: config.name,\n url: config.url,\n };\n\n if (config.logo) {\n schema['logo'] = config.logo;\n }\n\n if (config.sameAs && config.sameAs.length > 0) {\n schema['sameAs'] = config.sameAs;\n }\n\n if (config.contactPoint) {\n schema['contactPoint'] = {\n '@type': 'ContactPoint',\n telephone: config.contactPoint.telephone,\n contactType: config.contactPoint.contactType,\n ...(config.contactPoint.areaServed && {\n areaServed: config.contactPoint.areaServed,\n }),\n ...(config.contactPoint.availableLanguage && {\n availableLanguage: config.contactPoint.availableLanguage,\n }),\n };\n }\n\n return schema;\n }\n\n /**\n * Creates a WebSite schema object.\n *\n * @param config - WebSite configuration\n * @returns A schema.org WebSite object\n */\n createWebSiteSchema(config: WebSiteSchema): object {\n const schema: Record<string, unknown> = {\n '@context': 'https://schema.org',\n '@type': 'WebSite',\n name: config.name,\n url: config.url,\n };\n\n if (config.description) {\n schema['description'] = config.description;\n }\n\n if (config.potentialAction) {\n schema['potentialAction'] = {\n '@type': 'SearchAction',\n target: config.potentialAction.target,\n 'query-input': config.potentialAction.queryInput,\n };\n }\n\n return schema;\n }\n\n /**\n * Creates a BreadcrumbList schema object.\n *\n * @param items - Array of breadcrumb items\n * @returns A schema.org BreadcrumbList object\n */\n createBreadcrumbSchema(items: BreadcrumbItem[]): object {\n return {\n '@context': 'https://schema.org',\n '@type': 'BreadcrumbList',\n itemListElement: items.map((item, index) => ({\n '@type': 'ListItem',\n position: index + 1,\n name: item.name,\n item: item.url,\n })),\n };\n }\n\n /**\n * Creates an Article schema object.\n *\n * @param config - Article configuration\n * @returns A schema.org Article object\n */\n createArticleSchema(config: ArticleSchema): object {\n const schema: Record<string, unknown> = {\n '@context': 'https://schema.org',\n '@type': 'Article',\n headline: config.headline,\n description: config.description,\n datePublished: config.datePublished,\n author: {\n '@type': 'Person',\n name: config.author.name,\n ...(config.author.url && { url: config.author.url }),\n },\n };\n\n if (config.image) {\n schema['image'] = config.image;\n }\n\n if (config.dateModified) {\n schema['dateModified'] = config.dateModified;\n }\n\n return schema;\n }\n\n /**\n * Creates a SoftwareApplication schema object for the library.\n *\n * @param config - Application configuration\n * @returns A schema.org SoftwareApplication object\n */\n createSoftwareApplicationSchema(config: {\n name: string;\n description: string;\n applicationCategory: string;\n operatingSystem?: string;\n offers?: {\n price: string;\n priceCurrency: string;\n };\n }): object {\n const schema: Record<string, unknown> = {\n '@context': 'https://schema.org',\n '@type': 'SoftwareApplication',\n name: config.name,\n description: config.description,\n applicationCategory: config.applicationCategory,\n };\n\n if (config.operatingSystem) {\n schema['operatingSystem'] = config.operatingSystem;\n }\n\n if (config.offers) {\n schema['offers'] = {\n '@type': 'Offer',\n price: config.offers.price,\n priceCurrency: config.offers.priceCurrency,\n };\n }\n\n return schema;\n }\n}\n","/*\n * Public API Surface of integra-ng\n */\n\n/* Components - organized by folder structure */\nexport * from './lib/components/accordion/accordion.component';\nexport * from './lib/components/accordion-list/accordion-list.component';\nexport * from './lib/components/button/button.component';\nexport * from './lib/components/calendar/calendar.component';\nexport * from './lib/components/card/card.component';\nexport * from './lib/components/checkbox/checkbox.component';\nexport * from './lib/components/chip/chip.component';\nexport * from './lib/components/chips/chips.component';\nexport * from './lib/components/confirmation-dialog/confirmation-dialog.component';\nexport * from './lib/components/confirmation-dialog/services/confirmation-dialog.service';\nexport * from './lib/components/dialog/dialog.component';\nexport * from './lib/components/dialog/dialog-base';\nexport * from './lib/components/dialog/base-dialog.component';\nexport * from './lib/components/dialog/inner/dialog-actions/dialog-actions.component';\nexport * from './lib/components/dialog/services/dialog.service';\nexport * from './lib/components/dialog/services/dialog.interfaces';\nexport * from './lib/components/empty-state/empty-state.component';\nexport * from './lib/components/input-text/input-text.component';\nexport * from './lib/components/textarea/textarea.component';\nexport * from './lib/components/tag/tag.component';\nexport * from './lib/components/placeholder/placeholder.component';\nexport * from './lib/components/no-content/no-content.component';\nexport * from './lib/components/layout/layout.component';\nexport * from './lib/components/layout/topbar/topbar.component';\nexport * from './lib/components/layout/sidebar/sidebar.component';\nexport * from './lib/components/layout/menu/menu.component';\nexport * from './lib/components/layout/models/menu.model';\nexport * from './lib/components/layout/models/layout-config.model';\nexport * from './lib/components/layout/services/layout.service';\nexport { CLAIMS_CHECKER, provideMenuClaimsChecker } from './lib/components/layout/services/claims-checker.token';\nexport type { ClaimsChecker } from './lib/components/layout/services/claims-checker.token';\nexport * from './lib/components/listbox/listbox.component';\nexport * from './lib/components/radio-button/radio-button.component';\nexport * from './lib/components/message/message.component';\nexport * from './lib/components/multi-select/multi-select.component';\nexport * from './lib/components/overlay-panel/overlay-panel.component';\nexport * from './lib/components/panel/panel.component';\nexport * from './lib/components/placeholder/placeholder.component';\nexport * from './lib/components/progress-spinner/progress-spinner.component';\nexport * from './lib/components/select/select.component';\nexport * from './lib/components/tabs/tabs.component';\nexport * from './lib/components/tabs/tab-panel.component';\nexport * from './lib/components/tree-view/tree-view.component';\nexport * from './lib/components/whisper/whisper.component';\nexport * from './lib/components/whisper/services/whisper.service';\nexport * from './lib/components/whisper/services/whisper.interfaces';\nexport * from './lib/components/table/table.component';\nexport * from './lib/components/chart/chart.component';\nexport * from './lib/components/chart/chart.interfaces';\n\n/* Directives */\nexport * from './lib/directives/tooltip/tooltip.component';\nexport * from './lib/directives/tooltip/tooltip.directive';\n\n/* Services */\nexport * from './lib/services/data-update-event/data-update-event.service';\nexport * from './lib/services/seo/seo.service';\nexport * from './lib/services/seo/structured-data.service';\n\n/* Utils */\nexport * from './lib/utils/uniquecomponentid';\nexport * from './lib/utils/zindexutils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.DialogService","i1.LayoutService","i2","i1.WhisperService"],"mappings":"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"}