angular-material-wrap 0.1.0-beta.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-material-wrap.mjs","sources":["../../../src/library/src/controls/components/base/base.component.ts","../../../src/library/src/controls/components/amw-button/amw-button.component.ts","../../../src/library/src/controls/components/amw-button/amw-button.component.html","../../../src/library/src/controls/components/amw-input/amw-input.component.ts","../../../src/library/src/controls/components/amw-input/amw-input.component.html","../../../src/library/src/controls/components/amw-select/amw-select.component.ts","../../../src/library/src/controls/components/amw-select/amw-select.component.html","../../../src/library/src/controls/components/amw-radio-group/amw-radio-group.component.ts","../../../src/library/src/controls/components/amw-radio-group/amw-radio-group.component.html","../../../src/library/src/controls/components/amw-autocomplete/amw-autocomplete.component.ts","../../../src/library/src/controls/components/amw-autocomplete/amw-autocomplete.component.html","../../../src/library/src/controls/components/amw-datepicker/amw-datepicker.component.ts","../../../src/library/src/controls/components/amw-datepicker/amw-datepicker.component.html","../../../src/library/src/controls/components/amw-checkbox/amw-checkbox.component.ts","../../../src/library/src/controls/components/amw-checkbox/amw-checkbox.component.html","../../../src/library/src/controls/components/amw-radio/amw-radio.component.ts","../../../src/library/src/controls/components/amw-radio/amw-radio.component.html","../../../src/library/src/controls/components/amw-slider/amw-slider.component.ts","../../../src/library/src/controls/components/amw-slider/amw-slider.component.html","../../../src/library/src/controls/components/amw-toggle/amw-toggle.component.ts","../../../src/library/src/controls/components/amw-toggle/amw-toggle.component.html","../../../src/library/src/controls/components/amw-textarea/amw-textarea.component.ts","../../../src/library/src/controls/components/amw-textarea/amw-textarea.component.html","../../../src/library/src/controls/components/amw-range-slider/amw-range-slider.component.ts","../../../src/library/src/controls/components/amw-range-slider/amw-range-slider.component.html","../../../src/library/src/controls/components/amw-switch/amw-switch.component.ts","../../../src/library/src/controls/components/amw-switch/amw-switch.component.html","../../../src/library/src/controls/components/amw-file-input/amw-file-input.component.ts","../../../src/library/src/controls/components/amw-file-input/amw-file-input.component.html","../../../src/library/src/controls/components/amw-timepicker/amw-timepicker.component.ts","../../../src/library/src/controls/components/amw-timepicker/amw-timepicker.component.html","../../../src/library/src/controls/components/amw-color-picker/amw-color-picker.component.ts","../../../src/library/src/controls/components/amw-color-picker/amw-color-picker.component.html","../../../src/library/src/controls/components/amw-chips/amw-chips.component.ts","../../../src/library/src/controls/components/amw-chips/amw-chips.component.html","../../../src/library/src/controls/components/index.ts","../../../src/library/src/components/components/amw-calendar/services/calendar-item-registry.service.ts","../../../src/library/src/components/components/amw-calendar/amw-calendar-item-editor.component.ts","../../../src/library/src/components/components/amw-calendar/amw-calendar-item-editor.component.html","../../../src/library/src/components/components/amw-calendar/services/calendar-item-popover.service.ts","../../../src/library/src/components/components/amw-calendar/amw-calendar-base.component.ts","../../../src/library/src/components/components/amw-calendar/amw-calendar-full.component.ts","../../../src/library/src/components/components/amw-calendar/amw-calendar-full.component.html","../../../src/library/src/components/components/amw-calendar/amw-calendar-mini.component.ts","../../../src/library/src/components/components/amw-calendar/amw-calendar-mini.component.html","../../../src/library/src/components/components/amw-dialog/amw-dialog.component.ts","../../../src/library/src/components/components/amw-dialog/amw-dialog.component.html","../../../src/library/src/components/services/dialog.service.ts","../../../src/library/src/components/components/amw-data-table/amw-data-table.component.ts","../../../src/library/src/components/components/amw-data-table/amw-data-table.component.html","../../../src/library/src/components/components/amw-stepper/amw-stepper.component.ts","../../../src/library/src/components/components/amw-stepper/amw-stepper.component.html","../../../src/library/src/components/components/amw-tabs/amw-tabs.component.ts","../../../src/library/src/components/components/amw-tabs/amw-tabs.component.html","../../../src/library/src/components/components/amw-accordion/amw-accordion.component.ts","../../../src/library/src/components/components/amw-accordion/amw-accordion.component.html","../../../src/library/src/components/components/index.ts","../../../src/library/src/components/services/card.service.ts","../../../src/library/src/directives/amw-tooltip/amw-tooltip.component.ts","../../../src/library/src/directives/amw-tooltip/amw-tooltip.component.html","../../../src/library/src/directives/amw-tooltip/amw-tooltip.directive.ts","../../../src/library/src/directives/amw-click-outside/amw-click-outside.directive.ts","../../../src/library/src/directives/amw-auto-focus/amw-auto-focus.directive.ts","../../../src/library/src/directives/amw-copy-to-clipboard/amw-copy-to-clipboard.directive.ts","../../../src/library/src/pipes/amw-currency/amw-currency.pipe.ts","../../../src/library/src/pipes/amw-date/amw-date.pipe.ts","../../../src/library/src/pipes/amw-text-transform/amw-text-transform.pipe.ts","../../../src/library/src/services/amw-messaging/amw-messaging.service.ts","../../../src/library/src/services/amw-loading/amw-loading.service.ts","../../../src/library/src/services/amw-notification/amw-notification.service.ts","../../../src/library/src/services/amw-http-cache/indexed-db-storage.service.ts","../../../src/library/src/services/amw-http-cache/cache-sync.service.ts","../../../src/library/src/services/amw-http-cache/http-cache.service.ts","../../../src/library/src/services/amw-http-cache/cache-config.service.ts","../../../src/library/src/services/amw-http-cache/http-cache.interceptor.ts","../../../src/library/src/pages/components/amw-list-page/services/default-list-page-data-source.service.ts","../../../src/library/src/pages/components/amw-list-page/amw-list-page.component.ts","../../../src/library/src/pages/components/amw-list-page/amw-list-page.component.html","../../../src/library/src/pages/components/amw-detail-page/services/default-detail-page-data-source.service.ts","../../../src/library/src/pages/components/amw-detail-page/amw-detail-page.component.ts","../../../src/library/src/pages/components/amw-detail-page/amw-detail-page.component.html","../../../src/library/src/pages/components/amw-form-page/amw-form-page.component.ts","../../../src/library/src/pages/components/amw-form-page/amw-form-page.component.html","../../../src/library/src/pages/components/amw-search-page/services/default-search-page-data-source.service.ts","../../../src/library/src/pages/components/amw-search-page/amw-search-page.component.ts","../../../src/library/src/pages/components/amw-search-page/amw-search-page.component.html","../../../src/library/src/pages/components/amw-workflow-page/amw-workflow-page.component.ts","../../../src/library/src/pages/components/amw-workflow-page/amw-workflow-page.component.html","../../../src/library/src/pages/components/amw-report-page/amw-report-page.component.ts","../../../src/library/src/pages/components/amw-report-page/amw-report-page.component.html","../../../src/library/src/pages/components/index.ts","../../../src/library/src/styling/services/theme.service.ts","../../../src/library/src/styling/components/theme-picker/theme-picker.component.ts","../../../src/library/src/styling/components/theme-picker/theme-picker.component.html","../../../src/library/src/styling/components/theme-editor/theme-editor.component.ts","../../../src/library/src/styling/components/theme-editor/theme-editor.component.html","../../../src/library/src/styling/components/theme-manager/theme-manager.component.ts","../../../src/library/src/styling/components/theme-manager/theme-manager.component.html","../../../src/library/src/public-api.ts","../../../src/library/src/angular-material-wrap.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormControl } from '@angular/forms';\nimport { BaseComponentInterface } from '../../interfaces/base-component.interface';\n\n/**\n * Base component class for all AMW components\n * Provides form integration and common functionality\n */\n@Component({\n selector: 'amw-base',\n template: '',\n standalone: true,\n encapsulation: ViewEncapsulation.None\n})\nexport abstract class BaseComponent implements BaseComponentInterface {\n @Input() disabled = false;\n @Input() required = false;\n @Input() placeholder = '';\n @Input() label = '';\n @Input() errorMessage = '';\n @Input() hasError = false;\n\n @Output() valueChange = new EventEmitter<any>();\n @Output() blur = new EventEmitter<FocusEvent>();\n @Output() focus = new EventEmitter<FocusEvent>();\n\n protected _value: any = null;\n protected _onChange = (value: any) => { };\n protected _onTouched = () => { };\n\n // NgControl will be injected by individual components if needed\n protected ngControl?: NgControl;\n\n constructor() {\n // Empty constructor - no NgControl injection to avoid circular dependency\n }\n\n get value(): any {\n return this._value;\n }\n\n set value(val: any) {\n if (val !== this._value) {\n this._value = val;\n this._onChange(val);\n this.valueChange.emit(val);\n }\n }\n\n // ControlValueAccessor implementation\n writeValue(value: any): void {\n this._value = value;\n }\n\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // Event handlers\n onBlur(event: FocusEvent): void {\n this._onTouched();\n this.blur.emit(event);\n }\n\n onFocus(event: FocusEvent): void {\n this.focus.emit(event);\n }\n\n // Helper methods\n get isDisabled(): boolean {\n return this.disabled || (this.ngControl?.control as FormControl)?.disabled || false;\n }\n\n get isRequired(): boolean {\n return this.required || (this.ngControl?.control as FormControl)?.hasError('required') || false;\n }\n\n get hasValidationError(): boolean {\n return this.hasError || (this.ngControl?.control as FormControl)?.invalid || false;\n }\n\n get errorText(): string {\n if (this.errorMessage) return this.errorMessage;\n if (this.ngControl?.control) {\n const control = this.ngControl.control as FormControl;\n if (control.hasError('required')) return 'This field is required';\n if (control.hasError('email')) return 'Please enter a valid email';\n if (control.hasError('minlength')) return `Minimum length is ${control.errors?.['minlength'].requiredLength}`;\n if (control.hasError('maxlength')) return `Maximum length is ${control.errors?.['maxlength'].requiredLength}`;\n }\n return '';\n }\n}\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { BaseComponent } from '../base/base.component';\nimport { ButtonVariant } from './interfaces/button.interface';\nimport { AmwSize } from '../../../shared/types/amw-size.type';\nimport { ButtonType } from './interfaces/button-type.type';\nimport { AmwColor } from '../../../shared/types/amw-color.type';\nimport { IconPosition } from './interfaces/icon-position.type';\n\n/**\n * AMW Button Component\n * A comprehensive wrapper around Angular Material Button with enhanced functionality\n */\n@Component({\n selector: 'amw-button',\n standalone: true,\n imports: [CommonModule, MatButtonModule, MatRippleModule, MatIconModule, MatProgressSpinnerModule],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-button.component.html',\n styleUrl: './amw-button.component.scss'\n})\nexport class AmwButtonComponent extends BaseComponent {\n // Basic button properties\n @Input() type: ButtonType = 'button';\n @Input() variant: ButtonVariant = 'text';\n @Input() size: AmwSize = 'medium';\n @Input() color: AmwColor = 'primary';\n\n // Icon properties\n @Input() icon?: string;\n @Input() iconPosition: IconPosition = 'left';\n\n // State properties\n @Input() loading = false;\n @Input() fullWidth = false;\n @Input() autofocus = false;\n\n // Form properties\n @Input() name?: string;\n @Input() form?: string;\n @Input() formAction?: string;\n @Input() formMethod?: 'get' | 'post' | 'put' | 'delete';\n @Input() formTarget?: '_blank' | '_self' | '_parent' | '_top';\n @Input() formEnctype?: 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/plain';\n @Input() formNoValidate = false;\n @Input() formReset = false;\n\n // Accessibility properties\n @Input() ariaLabel?: string;\n @Input() ariaLabelledby?: string;\n @Input() ariaDescribedby?: string;\n @Input() tabIndex?: number;\n\n // Ripple properties\n @Input() ripple = true;\n @Input() disableRipple = false;\n @Input() rippleColor?: string;\n @Input() rippleRadius?: number;\n @Input() rippleCentered = false;\n @Input() rippleUnbounded = false;\n\n // Spinner properties\n @Input() spinnerSize: number = 20;\n @Input() spinnerColor: string = 'primary';\n\n // Text content\n @Input() text: string = '';\n\n // Events\n @Output() click = new EventEmitter<MouseEvent>();\n @Output() override focus = new EventEmitter<FocusEvent>();\n @Output() override blur = new EventEmitter<FocusEvent>();\n @Output() mouseenter = new EventEmitter<MouseEvent>();\n @Output() mouseleave = new EventEmitter<MouseEvent>();\n\n onButtonClick(event: MouseEvent): void {\n if (!this.disabled && !this.loading) {\n this.click.emit(event);\n }\n }\n\n onButtonFocus(event: FocusEvent): void {\n this.focus.emit(event);\n }\n\n onButtonBlur(event: FocusEvent): void {\n this.blur.emit(event);\n }\n\n onMouseEnter(event: MouseEvent): void {\n this.mouseenter.emit(event);\n }\n\n onMouseLeave(event: MouseEvent): void {\n this.mouseleave.emit(event);\n }\n\n get buttonClasses(): string {\n return `amw-button amw-button--${this.variant} amw-button--${this.size} ${this.fullWidth ? 'amw-button--full-width' : ''} ${this.loading ? 'amw-button--loading' : ''}`;\n }\n\n get rippleConfig(): any {\n return {\n color: this.rippleColor,\n radius: this.rippleRadius,\n centered: this.rippleCentered,\n unbounded: this.rippleUnbounded,\n disabled: this.disableRipple || this.disabled\n };\n }\n\n /**\n * Determines if the current variant is a special variant (mutually exclusive)\n */\n isSpecialVariant(): boolean {\n const specialVariants: string[] = ['icon', 'fab', 'mini-fab', 'extended-fab'];\n return specialVariants.includes(this.variant);\n }\n\n}\n","<div class=\"amw-button\">\n <!-- Common Button Content Template -->\n <ng-template #buttonContent>\n <!-- Left Icon -->\n @if (icon && iconPosition === 'left' && !loading) {\n <mat-icon class=\"amw-button__icon amw-button__icon--left\">{{ icon }}</mat-icon>\n }\n\n <!-- Loading Spinner -->\n @if (loading) {\n <mat-spinner class=\"amw-button__spinner\" [diameter]=\"spinnerSize\" [color]=\"spinnerColor\">\n </mat-spinner>\n }\n\n <!-- Button Text -->\n @if (!loading) {\n <span class=\"amw-button__text\">\n @if (text && text.trim()) {\n <span [innerHTML]=\"text\"></span>\n } @else {\n <ng-content></ng-content>\n }\n </span>\n }\n\n <!-- Right Icon -->\n @if (icon && iconPosition === 'right' && !loading) {\n <mat-icon class=\"amw-button__icon amw-button__icon--right\">{{ icon }}</mat-icon>\n }\n </ng-template>\n\n <!-- Text Button -->\n @if (variant === 'text') {\n <button matButton [type]=\"type\" [attr.color]=\"color\" [disabled]=\"disabled || loading\"\n [autofocus]=\"autofocus\" [name]=\"name\" [attr.form]=\"form\" [attr.formaction]=\"formAction\"\n [attr.formmethod]=\"formMethod\" [attr.formtarget]=\"formTarget\" [attr.formenctype]=\"formEnctype\"\n [attr.formnovalidate]=\"formNoValidate\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\" [attr.tabindex]=\"tabIndex\" [class]=\"buttonClasses\"\n (click)=\"onButtonClick($event)\" (focus)=\"onButtonFocus($event)\" (blur)=\"onButtonBlur($event)\"\n (mouseenter)=\"onMouseEnter($event)\" (mouseleave)=\"onMouseLeave($event)\" class=\"amw-button__button\">\n <ng-container [ngTemplateOutlet]=\"buttonContent\"></ng-container>\n </button>\n }\n\n <!-- Elevated Button -->\n @if (variant === 'elevated') {\n <button matButton=\"elevated\" [type]=\"type\" [attr.color]=\"color\" [disabled]=\"disabled || loading\"\n [autofocus]=\"autofocus\" [name]=\"name\" [attr.form]=\"form\" [attr.formaction]=\"formAction\"\n [attr.formmethod]=\"formMethod\" [attr.formtarget]=\"formTarget\" [attr.formenctype]=\"formEnctype\"\n [attr.formnovalidate]=\"formNoValidate\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\" [attr.tabindex]=\"tabIndex\" [class]=\"buttonClasses\"\n (click)=\"onButtonClick($event)\" (focus)=\"onButtonFocus($event)\" (blur)=\"onButtonBlur($event)\"\n (mouseenter)=\"onMouseEnter($event)\" (mouseleave)=\"onMouseLeave($event)\" class=\"amw-button__button\">\n <ng-container [ngTemplateOutlet]=\"buttonContent\"></ng-container>\n </button>\n }\n\n <!-- Outlined Button -->\n @if (variant === 'outlined') {\n <button matButton=\"outlined\" [type]=\"type\" [attr.color]=\"color\" [disabled]=\"disabled || loading\"\n [autofocus]=\"autofocus\" [name]=\"name\" [attr.form]=\"form\" [attr.formaction]=\"formAction\"\n [attr.formmethod]=\"formMethod\" [attr.formtarget]=\"formTarget\" [attr.formenctype]=\"formEnctype\"\n [attr.formnovalidate]=\"formNoValidate\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\" [attr.tabindex]=\"tabIndex\" [class]=\"buttonClasses\"\n (click)=\"onButtonClick($event)\" (focus)=\"onButtonFocus($event)\" (blur)=\"onButtonBlur($event)\"\n (mouseenter)=\"onMouseEnter($event)\" (mouseleave)=\"onMouseLeave($event)\" class=\"amw-button__button\">\n <ng-container [ngTemplateOutlet]=\"buttonContent\"></ng-container>\n </button>\n }\n\n <!-- Filled Button -->\n @if (variant === 'filled') {\n <button matButton=\"filled\" [type]=\"type\" [attr.color]=\"color\" [disabled]=\"disabled || loading\"\n [autofocus]=\"autofocus\" [name]=\"name\" [attr.form]=\"form\" [attr.formaction]=\"formAction\"\n [attr.formmethod]=\"formMethod\" [attr.formtarget]=\"formTarget\" [attr.formenctype]=\"formEnctype\"\n [attr.formnovalidate]=\"formNoValidate\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\" [attr.tabindex]=\"tabIndex\" [class]=\"buttonClasses\"\n (click)=\"onButtonClick($event)\" (focus)=\"onButtonFocus($event)\" (blur)=\"onButtonBlur($event)\"\n (mouseenter)=\"onMouseEnter($event)\" (mouseleave)=\"onMouseLeave($event)\" class=\"amw-button__button\">\n <ng-container [ngTemplateOutlet]=\"buttonContent\"></ng-container>\n </button>\n }\n\n <!-- Tonal Button -->\n @if (variant === 'tonal') {\n <button matButton=\"tonal\" [type]=\"type\" [attr.color]=\"color\" [disabled]=\"disabled || loading\"\n [autofocus]=\"autofocus\" [name]=\"name\" [attr.form]=\"form\" [attr.formaction]=\"formAction\"\n [attr.formmethod]=\"formMethod\" [attr.formtarget]=\"formTarget\" [attr.formenctype]=\"formEnctype\"\n [attr.formnovalidate]=\"formNoValidate\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\" [attr.tabindex]=\"tabIndex\" [class]=\"buttonClasses\"\n (click)=\"onButtonClick($event)\" (focus)=\"onButtonFocus($event)\" (blur)=\"onButtonBlur($event)\"\n (mouseenter)=\"onMouseEnter($event)\" (mouseleave)=\"onMouseLeave($event)\" class=\"amw-button__button\">\n <ng-container [ngTemplateOutlet]=\"buttonContent\"></ng-container>\n </button>\n }\n\n <!-- Special Button Variants (mutually exclusive) -->\n @if (isSpecialVariant()) {\n @if (variant === 'icon') {\n <button matIconButton [type]=\"type\" [attr.color]=\"color\" [disabled]=\"disabled || loading\"\n [autofocus]=\"autofocus\" [name]=\"name\" [attr.form]=\"form\" [attr.formaction]=\"formAction\"\n [attr.formmethod]=\"formMethod\" [attr.formtarget]=\"formTarget\" [attr.formenctype]=\"formEnctype\"\n [attr.formnovalidate]=\"formNoValidate\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\" [attr.tabindex]=\"tabIndex\" [class]=\"buttonClasses\"\n (click)=\"onButtonClick($event)\" (focus)=\"onButtonFocus($event)\" (blur)=\"onButtonBlur($event)\"\n (mouseenter)=\"onMouseEnter($event)\" (mouseleave)=\"onMouseLeave($event)\" class=\"amw-button__button\">\n\n <!-- Loading Spinner -->\n @if (loading) {\n <mat-spinner class=\"amw-button__spinner\" [diameter]=\"spinnerSize\" [color]=\"spinnerColor\">\n </mat-spinner>\n }\n\n <!-- Icon -->\n @if (icon && !loading) {\n <mat-icon class=\"amw-button__icon\">{{ icon }}</mat-icon>\n }\n </button>\n }\n\n @if (variant === 'fab') {\n <button matFab [type]=\"type\" [attr.color]=\"color\" [disabled]=\"disabled || loading\"\n [autofocus]=\"autofocus\" [name]=\"name\" [attr.form]=\"form\" [attr.formaction]=\"formAction\"\n [attr.formmethod]=\"formMethod\" [attr.formtarget]=\"formTarget\" [attr.formenctype]=\"formEnctype\"\n [attr.formnovalidate]=\"formNoValidate\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\" [attr.tabindex]=\"tabIndex\" [class]=\"buttonClasses\"\n (click)=\"onButtonClick($event)\" (focus)=\"onButtonFocus($event)\" (blur)=\"onButtonBlur($event)\"\n (mouseenter)=\"onMouseEnter($event)\" (mouseleave)=\"onMouseLeave($event)\" class=\"amw-button__button\">\n\n <!-- Loading Spinner -->\n @if (loading) {\n <mat-spinner class=\"amw-button__spinner\" [diameter]=\"spinnerSize\" [color]=\"spinnerColor\">\n </mat-spinner>\n }\n\n <!-- Icon -->\n @if (icon && !loading) {\n <mat-icon class=\"amw-button__icon\">{{ icon }}</mat-icon>\n }\n </button>\n }\n\n @if (variant === 'mini-fab') {\n <button matMiniFab [type]=\"type\" [attr.color]=\"color\" [disabled]=\"disabled || loading\"\n [autofocus]=\"autofocus\" [name]=\"name\" [attr.form]=\"form\" [attr.formaction]=\"formAction\"\n [attr.formmethod]=\"formMethod\" [attr.formtarget]=\"formTarget\" [attr.formenctype]=\"formEnctype\"\n [attr.formnovalidate]=\"formNoValidate\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\" [attr.tabindex]=\"tabIndex\" [class]=\"buttonClasses\"\n (click)=\"onButtonClick($event)\" (focus)=\"onButtonFocus($event)\" (blur)=\"onButtonBlur($event)\"\n (mouseenter)=\"onMouseEnter($event)\" (mouseleave)=\"onMouseLeave($event)\" class=\"amw-button__button\">\n\n <!-- Loading Spinner -->\n @if (loading) {\n <mat-spinner class=\"amw-button__spinner\" [diameter]=\"spinnerSize\" [color]=\"spinnerColor\">\n </mat-spinner>\n }\n\n <!-- Icon -->\n @if (icon && !loading) {\n <mat-icon class=\"amw-button__icon\">{{ icon }}</mat-icon>\n }\n </button>\n }\n\n @if (variant === 'extended-fab') {\n <button matFab extended [type]=\"type\" [attr.color]=\"color\" [disabled]=\"disabled || loading\"\n [autofocus]=\"autofocus\" [name]=\"name\" [attr.form]=\"form\" [attr.formaction]=\"formAction\"\n [attr.formmethod]=\"formMethod\" [attr.formtarget]=\"formTarget\" [attr.formenctype]=\"formEnctype\"\n [attr.formnovalidate]=\"formNoValidate\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\" [attr.tabindex]=\"tabIndex\" [class]=\"buttonClasses\"\n (click)=\"onButtonClick($event)\" (focus)=\"onButtonFocus($event)\" (blur)=\"onButtonBlur($event)\"\n (mouseenter)=\"onMouseEnter($event)\" (mouseleave)=\"onMouseLeave($event)\" class=\"amw-button__button\">\n <ng-container [ngTemplateOutlet]=\"buttonContent\"></ng-container>\n </button>\n }\n }\n</div>","import { Component, Input, Output, EventEmitter, ViewEncapsulation, forwardRef } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule, MatFormFieldAppearance } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { BaseComponent } from '../base/base.component';\nimport { InputType } from './interfaces/input-type.type';\nimport { InputAppearance } from './interfaces/input-appearance.type';\nimport { AmwSize } from '../../../shared/types/amw-size.type';\n\n/**\n * AMW Input Component\n * A comprehensive wrapper around Angular Material Input with enhanced functionality\n */\n@Component({\n selector: 'amw-input',\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule,\n MatButtonModule\n],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-input.component.html',\n styleUrl: './amw-input.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AmwInputComponent,\n multi: true\n }\n ]\n})\nexport class AmwInputComponent extends BaseComponent implements ControlValueAccessor {\n // Basic input properties\n @Input() type: InputType = 'text';\n @Input() appearance: MatFormFieldAppearance = 'outline';\n @Input() size: AmwSize = 'medium';\n @Input() override placeholder: string = '';\n @Input() override label: string = '';\n @Input() hint: string = '';\n @Input() prefix: string = '';\n @Input() suffix: string = '';\n @Input() readonly: boolean = false;\n @Input() maxlength: number | null = null;\n @Input() minlength: number | null = null;\n @Input() max: number | null = null;\n @Input() min: number | null = null;\n @Input() step: number | null = null;\n @Input() pattern: string = '';\n @Input() autocomplete: string = '';\n @Input() autofocus: boolean = false;\n @Input() name: string = '';\n @Input() id: string = '';\n @Input() tabIndex?: number;\n\n // Accessibility properties\n @Input() ariaLabel: string = '';\n @Input() ariaLabelledby: string = '';\n @Input() ariaDescribedby: string = '';\n @Input() ariaRequired: boolean = false;\n @Input() ariaInvalid: boolean = false;\n\n // Icon properties\n @Input() startIcon: string = '';\n @Input() endIcon: string = '';\n\n // Feature properties\n @Input() clearable: boolean = false;\n @Input() showPasswordToggle: boolean = false;\n @Input() showCharacterCount: boolean = false;\n @Input() showValidationOnBlur: boolean = true;\n @Input() showValidationOnChange: boolean = false;\n\n // Validation messages\n @Input() validationMessages: {\n required?: string;\n email?: string;\n minlength?: string;\n maxlength?: string;\n pattern?: string;\n min?: string;\n max?: string;\n } = {};\n\n // Internal state\n internalValue: string | number = '';\n showPassword: boolean = false;\n characterCount: number = 0;\n\n // Events\n @Output() input = new EventEmitter<Event>();\n @Output() change = new EventEmitter<Event>();\n @Output() override blur = new EventEmitter<FocusEvent>();\n @Output() override focus = new EventEmitter<FocusEvent>();\n @Output() keydown = new EventEmitter<KeyboardEvent>();\n @Output() keyup = new EventEmitter<KeyboardEvent>();\n @Output() clear = new EventEmitter<void>();\n @Output() togglePassword = new EventEmitter<boolean>();\n\n // ControlValueAccessor implementation\n private onChange = (value: any) => { };\n private onTouched = () => { };\n\n override writeValue(value: any): void {\n this.internalValue = value || '';\n this.updateCharacterCount();\n }\n\n override registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n override registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n override setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // Event handlers\n onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.internalValue = target.value;\n this.updateCharacterCount();\n this.onChange(this.internalValue);\n this.input.emit(event);\n\n if (this.showValidationOnChange) {\n this.validateInput();\n }\n }\n\n onChangeEvent(event: Event): void {\n this.change.emit(event);\n }\n\n override onBlur(event: FocusEvent): void {\n this.onTouched();\n this.blur.emit(event);\n\n if (this.showValidationOnBlur) {\n this.validateInput();\n }\n }\n\n override onFocus(event: FocusEvent): void {\n this.focus.emit(event);\n }\n\n onKeydown(event: KeyboardEvent): void {\n this.keydown.emit(event);\n }\n\n onKeyup(event: KeyboardEvent): void {\n this.keyup.emit(event);\n }\n\n onClear(): void {\n this.internalValue = '';\n this.updateCharacterCount();\n this.onChange(this.internalValue);\n this.clear.emit();\n }\n\n onTogglePassword(): void {\n this.showPassword = !this.showPassword;\n this.togglePassword.emit(this.showPassword);\n }\n\n // Helper methods\n private updateCharacterCount(): void {\n if (this.showCharacterCount && typeof this.internalValue === 'string') {\n this.characterCount = this.internalValue.length;\n }\n }\n\n private validateInput(): void {\n // Basic validation logic\n this.hasError = this.required && !this.internalValue;\n }\n\n get inputType(): string {\n if (this.type === 'password' && this.showPasswordToggle) {\n return this.showPassword ? 'text' : 'password';\n }\n return this.type;\n }\n\n get hasValue(): boolean {\n return this.internalValue !== '' && this.internalValue != null;\n }\n\n get canClear(): boolean {\n return this.clearable && this.hasValue && !this.disabled && !this.readonly;\n }\n\n get canTogglePassword(): boolean {\n return this.showPasswordToggle && this.type === 'password' && !this.disabled && !this.readonly;\n }\n\n get characterCountText(): string {\n if (!this.showCharacterCount || !this.maxlength) return '';\n return `${this.characterCount}/${this.maxlength}`;\n }\n\n get isOverLimit(): boolean {\n return this.maxlength ? this.characterCount > this.maxlength : false;\n }\n\n override get errorText(): string {\n if (this.errorMessage) return this.errorMessage;\n\n if (this.ngControl?.control) {\n const control = this.ngControl.control;\n if (control.hasError('required')) {\n return this.validationMessages.required || 'This field is required';\n }\n if (control.hasError('email')) {\n return this.validationMessages.email || 'Please enter a valid email';\n }\n if (control.hasError('minlength')) {\n return this.validationMessages.minlength || `Minimum length is ${control.errors?.['minlength'].requiredLength}`;\n }\n if (control.hasError('maxlength')) {\n return this.validationMessages.maxlength || `Maximum length is ${control.errors?.['maxlength'].requiredLength}`;\n }\n if (control.hasError('pattern')) {\n return this.validationMessages.pattern || 'Please enter a valid format';\n }\n if (control.hasError('min')) {\n return this.validationMessages.min || `Minimum value is ${control.errors?.['min'].min}`;\n }\n if (control.hasError('max')) {\n return this.validationMessages.max || `Maximum value is ${control.errors?.['max'].max}`;\n }\n }\n\n return '';\n }\n\n override get hasValidationError(): boolean {\n return this.hasError || (this.ngControl?.control?.invalid) || false;\n }\n}\n","<div class=\"amw-input\">\n <mat-form-field\n [appearance]=\"appearance\"\n [class]=\"'amw-input__field amw-input--' + size + ' amw-input--' + appearance\"\n [class.amw-input--error]=\"hasValidationError\"\n [class.amw-input--disabled]=\"disabled\"\n [class.amw-input--readonly]=\"readonly\"\n [class.amw-input--with-start-icon]=\"!!startIcon\"\n [class.amw-input--with-end-icon]=\"!!endIcon || canClear || canTogglePassword\"\n [class.amw-input--with-character-count]=\"showCharacterCount\"\n [floatLabel]=\"label ? 'always' : 'auto'\"\n [hideRequiredMarker]=\"!required\"\n [class.mat-form-field-invalid]=\"hasValidationError\">\n\n <!-- Label -->\n @if (label) {\n <mat-label [innerHTML]=\"label\"></mat-label>\n }\n\n <!-- Start Icon -->\n @if (startIcon) {\n <mat-icon matPrefix class=\"amw-input__start-icon\">{{ startIcon }}</mat-icon>\n }\n\n <!-- Prefix Text -->\n @if (prefix) {\n <span matPrefix class=\"amw-input__prefix\">{{ prefix }}</span>\n }\n\n <!-- Input Element -->\n <input\n matInput\n [type]=\"inputType\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [max]=\"max\"\n [min]=\"min\"\n [step]=\"step\"\n [pattern]=\"pattern\"\n [autocomplete]=\"autocomplete\"\n [autofocus]=\"autofocus\"\n [name]=\"name\"\n [id]=\"id\"\n [attr.tabindex]=\"tabIndex\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n [attr.aria-required]=\"ariaRequired || required\"\n [attr.aria-invalid]=\"ariaInvalid || hasValidationError\"\n [value]=\"internalValue\"\n (input)=\"onInput($event)\"\n (change)=\"onChangeEvent($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n class=\"amw-input__field\">\n\n <!-- Suffix Text -->\n @if (suffix) {\n <span matSuffix class=\"amw-input__suffix\">{{ suffix }}</span>\n }\n\n <!-- End Icon -->\n @if (endIcon) {\n <mat-icon matSuffix class=\"amw-input__end-icon\">{{ endIcon }}</mat-icon>\n }\n\n <!-- Clear Button -->\n @if (canClear) {\n <button\n matSuffix\n mat-icon-button\n type=\"button\"\n (click)=\"onClear()\"\n class=\"amw-input__clear-button\"\n [attr.aria-label]=\"'Clear input'\">\n <mat-icon>clear</mat-icon>\n </button>\n }\n\n <!-- Password Toggle Button -->\n @if (canTogglePassword) {\n <button\n matSuffix\n mat-icon-button\n type=\"button\"\n (click)=\"onTogglePassword()\"\n class=\"amw-input__password-toggle\"\n [attr.aria-label]=\"showPassword ? 'Hide password' : 'Show password'\">\n <mat-icon>{{ showPassword ? 'visibility_off' : 'visibility' }}</mat-icon>\n </button>\n }\n\n <!-- Hint Text -->\n @if (hint && !hasValidationError) {\n <mat-hint class=\"amw-input__hint\">{{ hint }}</mat-hint>\n }\n\n <!-- Character Count -->\n @if (showCharacterCount && !hasValidationError) {\n <mat-hint align=\"end\" class=\"amw-input__character-count\" [class.amw-input__character-count--over-limit]=\"isOverLimit\">\n {{ characterCountText }}\n </mat-hint>\n }\n\n <!-- Error Message -->\n @if (hasValidationError) {\n <mat-error class=\"amw-input__error\">\n {{ errorText }}\n </mat-error>\n }\n </mat-form-field>\n</div>\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation, forwardRef, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatFormFieldModule, MatFormFieldAppearance } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatInputModule } from '@angular/material/input';\nimport { BaseComponent } from '../base/base.component';\nimport { SelectAppearance } from './interfaces/select-appearance.type';\nimport { AmwSize } from '../../../shared/types/amw-size.type';\nimport { SelectOption, SelectConfig } from './interfaces/select.interface';\n\n/**\n * AMW Select Component\n * A comprehensive wrapper around Angular Material Select with enhanced functionality\n */\n@Component({\n selector: 'amw-select',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatSelectModule,\n MatFormFieldModule,\n MatIconModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n MatInputModule\n ],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-select.component.html',\n styleUrl: './amw-select.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AmwSelectComponent,\n multi: true\n }\n ]\n})\nexport class AmwSelectComponent extends BaseComponent implements ControlValueAccessor, OnInit, OnChanges {\n // Basic select properties\n @Input() appearance: MatFormFieldAppearance = 'outline';\n @Input() size: AmwSize = 'medium';\n @Input() override placeholder: string = '';\n @Input() override label: string = '';\n @Input() hint: string = '';\n @Input() multiple: boolean = false;\n @Input() compareWith: (a: any, b: any) => boolean = (a, b) => a === b;\n @Input() options: SelectOption[] = [];\n @Input() groups: { [key: string]: SelectOption[] } = {};\n @Input() searchable: boolean = false;\n @Input() clearable: boolean = false;\n @Input() loading: boolean = false;\n @Input() autofocus: boolean = false;\n @Input() name: string = '';\n @Input() id: string = '';\n @Input() form: string = '';\n\n // Panel properties\n @Input() panelClass: string | string[] = '';\n @Input() overlayPanelClass: string | string[] = '';\n @Input() disableRipple: boolean = false;\n @Input() disableOptionCentering: boolean = false;\n @Input() typeaheadDebounceInterval: number = 300;\n @Input() maxHeight: number = 256;\n @Input() width: number | null = null;\n @Input() autoWidth: boolean = true;\n @Input() hideSingleSelectionIndicator: boolean = false;\n\n // UI properties\n @Input() showClearButton: boolean = false;\n @Input() showSearchBox: boolean = false;\n @Input() searchPlaceholder: string = 'Search...';\n @Input() noOptionsText: string = 'No options available';\n @Input() loadingText: string = 'Loading...';\n\n // Template properties\n @Input() customTrigger: boolean = false;\n @Input() customOptionTemplate: boolean = false;\n @Input() customLabelTemplate: boolean = false;\n @Input() customEmptyTemplate: boolean = false;\n @Input() customLoadingTemplate: boolean = false;\n @Input() customErrorTemplate: boolean = false;\n\n // Accessibility properties\n @Input() ariaLabel: string = '';\n @Input() ariaLabelledby: string = '';\n @Input() ariaDescribedby: string = '';\n @Input() tabIndex: number = 0;\n\n // Validation messages\n @Input() validationMessages: {\n required?: string;\n invalid?: string;\n noOptions?: string;\n } = {};\n\n // Internal state\n internalValue: any = null;\n searchValue: string = '';\n filteredOptions: SelectOption[] = [];\n filteredGroups: { [key: string]: SelectOption[] } = {};\n isOpen: boolean = false;\n\n // Events\n @Output() selectionChange = new EventEmitter<any>();\n @Output() openedChange = new EventEmitter<boolean>();\n @Output() searchChange = new EventEmitter<string>();\n @Output() clear = new EventEmitter<void>();\n @Output() override focus = new EventEmitter<FocusEvent>();\n @Output() override blur = new EventEmitter<FocusEvent>();\n\n // ControlValueAccessor implementation\n private onChange = (value: any) => { };\n private onTouched = () => { };\n\n ngOnInit(): void {\n this.updateFilteredOptions();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['options'] || changes['groups'] || changes['searchValue']) {\n this.updateFilteredOptions();\n }\n }\n\n override writeValue(value: any): void {\n this.internalValue = value;\n }\n\n override registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n override registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n override setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // Event handlers\n onSelectionChange(value: any): void {\n this.internalValue = value;\n this.onChange(value);\n this.selectionChange.emit(value);\n }\n\n onOpenedChange(isOpen: boolean): void {\n this.isOpen = isOpen;\n this.openedChange.emit(isOpen);\n }\n\n onSearchChange(searchValue: string): void {\n this.searchValue = searchValue;\n this.searchChange.emit(searchValue);\n this.updateFilteredOptions();\n }\n\n onClear(): void {\n this.internalValue = this.multiple ? [] : null;\n this.onChange(this.internalValue);\n this.clear.emit();\n }\n\n override onFocus(event: FocusEvent): void {\n this.focus.emit(event);\n }\n\n override onBlur(event: FocusEvent): void {\n this.onTouched();\n this.blur.emit(event);\n }\n\n // Helper methods\n private updateFilteredOptions(): void {\n if (this.searchable && this.searchValue) {\n this.filteredOptions = this.options.filter(option =>\n option.label.toLowerCase().includes(this.searchValue.toLowerCase()) ||\n (option.description && option.description.toLowerCase().includes(this.searchValue.toLowerCase()))\n );\n\n if (Object.keys(this.groups).length > 0) {\n this.filteredGroups = {};\n Object.keys(this.groups).forEach(groupKey => {\n const filteredGroup = this.groups[groupKey].filter(option =>\n option.label.toLowerCase().includes(this.searchValue.toLowerCase()) ||\n (option.description && option.description.toLowerCase().includes(this.searchValue.toLowerCase()))\n );\n if (filteredGroup.length > 0) {\n this.filteredGroups[groupKey] = filteredGroup;\n }\n });\n }\n } else {\n this.filteredOptions = [...this.options];\n this.filteredGroups = { ...this.groups };\n }\n }\n\n get displayValue(): string {\n if (this.multiple && Array.isArray(this.internalValue)) {\n return this.internalValue.map(val => this.getOptionLabel(val)).join(', ');\n }\n return this.getOptionLabel(this.internalValue);\n }\n\n private getOptionLabel(value: any): string {\n if (value == null) return '';\n\n const option = this.options.find(opt => this.compareWith(opt.value, value));\n return option ? option.label : String(value);\n }\n\n get hasValue(): boolean {\n if (this.multiple) {\n return Array.isArray(this.internalValue) && this.internalValue.length > 0;\n }\n return this.internalValue != null && this.internalValue !== '';\n }\n\n get canClear(): boolean {\n return this.clearable && this.hasValue && !this.disabled;\n }\n\n get hasOptions(): boolean {\n return this.filteredOptions.length > 0 || Object.keys(this.filteredGroups).length > 0;\n }\n\n override get errorText(): string {\n if (this.errorMessage) return this.errorMessage;\n\n if (this.ngControl?.control) {\n const control = this.ngControl.control;\n if (control.hasError('required')) {\n return this.validationMessages.required || 'This field is required';\n }\n if (control.hasError('invalid')) {\n return this.validationMessages.invalid || 'Please select a valid option';\n }\n }\n\n return '';\n }\n\n override get hasValidationError(): boolean {\n return this.hasError || (this.ngControl?.control?.invalid) || false;\n }\n\n get selectClasses(): string {\n return `amw-select amw-select--${this.size} amw-select--${this.appearance} ${this.multiple ? 'amw-select--multiple' : ''} ${this.disabled ? 'amw-select--disabled' : ''} ${this.hasValidationError ? 'amw-select--error' : ''}`;\n }\n}\n","<div class=\"amw-select\">\n <mat-form-field\n [appearance]=\"appearance\"\n [class]=\"'amw-select__field ' + selectClasses\"\n [floatLabel]=\"label ? 'always' : 'auto'\"\n [hideRequiredMarker]=\"!required\"\n [class.mat-form-field-invalid]=\"hasValidationError\">\n\n <!-- Label -->\n @if (label) {\n <mat-label [innerHTML]=\"label\"></mat-label>\n }\n\n <!-- Select Element -->\n <mat-select\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [multiple]=\"multiple\"\n [compareWith]=\"compareWith\"\n [value]=\"internalValue\"\n [panelClass]=\"panelClass\"\n [disableRipple]=\"disableRipple\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n [attr.tabindex]=\"tabIndex\"\n [attr.autofocus]=\"autofocus\"\n [attr.id]=\"id\"\n (selectionChange)=\"onSelectionChange($event.value)\"\n (openedChange)=\"onOpenedChange($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n class=\"amw-select__field\">\n\n <!-- Search Box (if enabled) -->\n @if (searchable && showSearchBox) {\n <mat-option disabled class=\"amw-select__search-option\">\n <input\n matInput\n [placeholder]=\"searchPlaceholder\"\n [value]=\"searchValue\"\n (input)=\"onSearchChange($any($event.target).value || '')\"\n class=\"amw-select__search-input\"\n (click)=\"$event.stopPropagation()\">\n </mat-option>\n }\n\n <!-- Clear Button (if enabled) -->\n @if (canClear) {\n <mat-option (click)=\"onClear()\" class=\"amw-select__clear-option\">\n <mat-icon class=\"amw-select__clear-icon\">clear</mat-icon>\n Clear Selection\n </mat-option>\n }\n\n <!-- Loading Option -->\n @if (loading) {\n <mat-option disabled class=\"amw-select__loading-option\">\n <mat-spinner diameter=\"20\" class=\"amw-select__loading-spinner\"></mat-spinner>\n {{ loadingText }}\n </mat-option>\n }\n\n <!-- No Options Message -->\n @if (!loading && !hasOptions) {\n <mat-option disabled class=\"amw-select__no-options\">\n {{ noOptionsText }}\n </mat-option>\n }\n\n <!-- Regular Options -->\n @for (option of filteredOptions; track option) {\n <mat-option\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n [class.amw-select__option]=\"true\"\n [class.amw-select__option--disabled]=\"option.disabled\">\n <div class=\"amw-select__option-content\">\n @if (option.icon) {\n <mat-icon class=\"amw-select__option-icon\">{{ option.icon }}</mat-icon>\n }\n <div class=\"amw-select__option-text\">\n <span class=\"amw-select__option-label\" [innerHTML]=\"option.label\"></span>\n @if (option.description) {\n <span class=\"amw-select__option-description\">{{ option.description }}</span>\n }\n </div>\n </div>\n </mat-option>\n }\n\n <!-- Grouped Options -->\n @for (group of filteredGroups | keyvalue; track group) {\n <mat-optgroup\n [label]=\"group.key\"\n class=\"amw-select__group\">\n @for (option of group.value; track option) {\n <mat-option\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n [class.amw-select__option]=\"true\"\n [class.amw-select__option--disabled]=\"option.disabled\">\n <div class=\"amw-select__option-content\">\n @if (option.icon) {\n <mat-icon class=\"amw-select__option-icon\">{{ option.icon }}</mat-icon>\n }\n <div class=\"amw-select__option-text\">\n <span class=\"amw-select__option-label\" [innerHTML]=\"option.label\"></span>\n @if (option.description) {\n <span class=\"amw-select__option-description\">{{ option.description }}</span>\n }\n </div>\n </div>\n </mat-option>\n }\n </mat-optgroup>\n }\n </mat-select>\n\n <!-- Hint Text -->\n @if (hint && !hasValidationError) {\n <mat-hint class=\"amw-select__hint\">{{ hint }}</mat-hint>\n }\n\n <!-- Error Message -->\n @if (hasValidationError) {\n <mat-error class=\"amw-select__error\">\n {{ errorText }}\n </mat-error>\n }\n </mat-form-field>\n</div>\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation, OnInit, OnChanges, SimpleChanges } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { BaseComponent } from '../base/base.component';\nimport { AmwSize } from '../../../shared/types/amw-size.type';\nimport { RadioGroupOption, RadioGroupConfig } from './interfaces/radio-group.interface';\n\n/**\n * AMW Radio Group Component\n * A comprehensive wrapper around Angular Material Radio Group with enhanced functionality\n * Inherits functionality from select component but with radio button presentation\n */\n@Component({\n selector: 'amw-radio-group',\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatRadioModule,\n MatFormFieldModule,\n MatIconModule\n],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-radio-group.component.html',\n styleUrl: './amw-radio-group.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AmwRadioGroupComponent,\n multi: true\n }\n ]\n})\nexport class AmwRadioGroupComponent extends BaseComponent implements ControlValueAccessor, OnInit, OnChanges {\n // Basic radio group properties\n @Input() size: AmwSize = 'medium';\n @Input() override label: string = '';\n @Input() hint: string = '';\n @Input() override disabled: boolean = false;\n @Input() override required: boolean = false;\n @Input() name: string = '';\n @Input() orientation: 'horizontal' | 'vertical' = 'vertical';\n @Input() color: 'primary' | 'accent' | 'warn' = 'primary';\n\n // Options and configuration\n @Input() options: RadioGroupOption[] = [];\n @Input() config: RadioGroupConfig | null = null;\n\n // Value and change handling\n @Input() selectedValue: any = null;\n @Output() selectedValueChange = new EventEmitter<any>();\n @Output() selectionChange = new EventEmitter<RadioGroupOption>();\n\n // Internal state\n internalValue: any = null;\n isFocused: boolean = false;\n readonly componentId: string;\n\n // ControlValueAccessor implementation\n private onChange = (value: any) => { };\n private onTouched = () => { };\n\n constructor() {\n super();\n // Generate ID once during construction to avoid ExpressionChangedAfterItHasBeenCheckedError\n this.componentId = this.generateId();\n }\n\n ngOnInit(): void {\n this.applyConfig();\n // Sync value with selectedValue\n if (this.selectedValue !== null) {\n this.internalValue = this.selectedValue;\n this.value = this.selectedValue;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['config'] && this.config) {\n this.applyConfig();\n }\n }\n\n /**\n * Apply configuration to component properties\n */\n private applyConfig(): void {\n if (this.config) {\n this.options = this.config.options || [];\n this.size = this.config.size || this.size;\n this.label = this.config.label || this.label;\n this.hint = this.config.hint || this.hint;\n this.disabled = this.config.disabled ?? this.disabled;\n this.required = this.config.required ?? this.required;\n this.name = this.config.name || this.name;\n this.orientation = this.config.orientation || this.orientation;\n this.color = this.config.color || this.color;\n }\n }\n\n /**\n * Handle radio button selection change\n */\n onRadioChange(value: any): void {\n this.internalValue = value;\n this.selectedValue = value;\n this.value = value;\n this.selectedValueChange.emit(value);\n\n const selectedOption = this.options.find(option => option.value === value);\n if (selectedOption) {\n this.selectionChange.emit(selectedOption);\n }\n\n this.onChange(value);\n this.onTouched();\n }\n\n /**\n * Handle focus events\n */\n override onFocus(): void {\n this.isFocused = true;\n }\n\n /**\n * Handle blur events\n */\n override onBlur(): void {\n this.isFocused = false;\n this.onTouched();\n }\n\n /**\n * Get CSS classes for the radio group\n */\n get radioGroupClasses(): string {\n const classes = ['amw-radio-group'];\n\n if (this.size) {\n classes.push(`amw-radio-group--${this.size}`);\n }\n\n if (this.orientation) {\n classes.push(`amw-radio-group--${this.orientation}`);\n }\n\n if (this.disabled) {\n classes.push('amw-radio-group--disabled');\n }\n\n if (this.required) {\n classes.push('amw-radio-group--required');\n }\n\n if (this.isFocused) {\n classes.push('amw-radio-group--focused');\n }\n\n return classes.join(' ');\n }\n\n /**\n * Get CSS classes for individual radio buttons\n */\n getRadioButtonClasses(option: RadioGroupOption): string {\n const classes = ['amw-radio-group__option'];\n\n if (option.disabled) {\n classes.push('amw-radio-group__option--disabled');\n }\n\n return classes.join(' ');\n }\n\n /**\n * Track by function for ngFor\n */\n trackByValue(index: number, option: RadioGroupOption): any {\n return option.value;\n }\n\n /**\n * Generate unique ID for radio group\n */\n generateId(): string {\n return Math.random().toString(36).substr(2, 9);\n }\n\n // ControlValueAccessor implementation\n override writeValue(value: any): void {\n this.internalValue = value;\n this.selectedValue = value;\n this.value = value;\n }\n\n override registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n override registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n override setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","<div [class]=\"radioGroupClasses\">\n <!-- Label -->\n @if (label) {\n <label class=\"amw-radio-group__label\">\n {{ label }}\n @if (required) {\n <span class=\"amw-radio-group__required-indicator\">*</span>\n }\n </label>\n }\n\n <!-- Radio Group Container -->\n <div class=\"amw-radio-group__container\" [class]=\"'amw-radio-group__container--' + orientation\">\n <mat-radio-group\n [name]=\"name || 'amw-radio-group-' + componentId\"\n [value]=\"internalValue\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n (change)=\"onRadioChange($event.value)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n class=\"amw-radio-group__mat-radio-group\">\n\n <!-- Radio Button Options -->\n @for (option of options; track trackByValue($index, option)) {\n <mat-radio-button\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n [color]=\"color\"\n [class]=\"getRadioButtonClasses(option)\"\n class=\"amw-radio-group__radio-button\">\n <!-- Option Content -->\n <div class=\"amw-radio-group__option-content\">\n <!-- Icon -->\n @if (option.icon) {\n <mat-icon\n class=\"amw-radio-group__option-icon\">\n {{ option.icon }}\n </mat-icon>\n }\n <!-- Label and Description -->\n <div class=\"amw-radio-group__option-text\">\n <span class=\"amw-radio-group__option-label\">{{ option.label }}</span>\n @if (option.description) {\n <span\n class=\"amw-radio-group__option-description\">\n {{ option.description }}\n </span>\n }\n </div>\n </div>\n </mat-radio-button>\n }\n </mat-radio-group>\n </div>\n\n <!-- Hint Text -->\n @if (hint) {\n <div class=\"amw-radio-group__hint\">\n {{ hint }}\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, forwardRef, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\n\nimport { BaseComponent } from '../base/base.component';\nimport { AutocompleteOption } from './interfaces/autocomplete-option.interface';\nimport { AmwSize } from '../../../shared/types/amw-size.type';\nimport { AmwAppearance } from '../../../shared/types/amw-appearance.type';\n\n\n@Component({\n selector: 'amw-autocomplete',\n standalone: true,\n imports: [\n FormsModule,\n MatAutocompleteModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatChipsModule,\n MatButtonModule,\n MatOptionModule\n],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AmwAutocompleteComponent,\n multi: true\n }\n ],\n templateUrl: './amw-autocomplete.component.html',\n styleUrl: './amw-autocomplete.component.scss',\n encapsulation: ViewEncapsulation.None\n})\nexport class AmwAutocompleteComponent extends BaseComponent implements ControlValueAccessor {\n @Input() options: AutocompleteOption[] = [];\n @Input() override placeholder: string = '';\n @Input() override label: string = '';\n @Input() hint: string = '';\n @Input() override required: boolean = false;\n @Input() override disabled: boolean = false;\n @Input() readonly: boolean = false;\n @Input() multiple: boolean = false;\n @Input() clearable: boolean = true;\n @Input() size: AmwSize = 'medium';\n @Input() appearance: AmwAppearance = 'outline';\n @Input() minLength: number = 0;\n @Input() maxLength: number = 0;\n @Input() filterBy: string = 'label';\n @Input() displayWith: (value: any) => string = (value: any) => value?.label || value || '';\n\n @Output() optionSelected = new EventEmitter<AutocompleteOption>();\n @Output() inputChanged = new EventEmitter<string>();\n @Output() opened = new EventEmitter<void>();\n @Output() closed = new EventEmitter<void>();\n\n filteredOptions: AutocompleteOption[] = [];\n inputValue: string = '';\n selectedValue: any = null;\n selectedValues: any[] = [];\n\n private onChange = (value: any) => { };\n onTouched = () => { };\n\n ngOnInit(): void {\n this.filteredOptions = [...this.options];\n }\n\n ngOnChanges(): void {\n if (this.options) {\n this.filteredOptions = [...this.options];\n }\n }\n\n onInputChange(event: any): void {\n const value = event.target?.value || '';\n this.inputValue = value;\n this.inputChanged.emit(value);\n this.filterOptions(value);\n }\n\n onOptionSelected(option: AutocompleteOption): void {\n if (this.multiple) {\n this.addToSelection(option);\n } else {\n this.selectedValue = option.value;\n this.inputValue = option.label;\n this.onChange(this.selectedValue);\n }\n this.optionSelected.emit(option);\n }\n\n onChipRemoved(value: any): void {\n this.selectedValues = this.selectedValues.filter(v => v !== value);\n this.onChange(this.selectedValues);\n }\n\n onClear(): void {\n this.inputValue = '';\n this.selectedValue = null;\n this.selectedValues = [];\n this.filteredOptions = [...this.options];\n this.onChange(this.multiple ? [] : null);\n }\n\n onOpened(): void {\n this.opened.emit();\n }\n\n onClosed(): void {\n this.closed.emit();\n }\n\n private filterOptions(value: string): void {\n if (!value || value.length < this.minLength) {\n this.filteredOptions = [...this.options];\n return;\n }\n\n const filterValue = value.toLowerCase();\n this.filteredOptions = this.options.filter(option => {\n const fieldValue = this.getFieldValue(option, this.filterBy);\n return fieldValue.toLowerCase().includes(filterValue);\n });\n }\n\n private getFieldValue(option: AutocompleteOption, field: string): string {\n if (field === 'label') {\n return option.label;\n }\n if (field === 'value') {\n return String(option.value);\n }\n return String(option[field as keyof AutocompleteOption] || '');\n }\n\n private addToSelection(option: AutocompleteOption): void {\n if (!this.selectedValues.includes(option.value)) {\n this.selectedValues.push(option.value);\n this.onChange(this.selectedValues);\n }\n this.inputValue = '';\n }\n\n // ControlValueAccessor implementation\n override writeValue(value: any): void {\n if (this.multiple) {\n this.selectedValues = Array.isArray(value) ? value : [];\n } else {\n this.selectedValue = value;\n if (value) {\n const option = this.options.find(opt => opt.value === value);\n this.inputValue = option ? option.label : String(value);\n } else {\n this.inputValue = '';\n }\n }\n }\n\n override registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n override registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n override setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n getSelectedOption(value: any): AutocompleteOption | undefined {\n return this.options.find(option => option.value === value);\n }\n}\n","<div class=\"amw-autocomplete\" [class]=\"'amw-autocomplete--' + size\">\n <mat-form-field [appearance]=\"appearance\" class=\"amw-autocomplete__field\">\n @if (label) {\n <mat-label [innerHTML]=\"label\"></mat-label>\n }\n\n <input\n matInput\n [placeholder]=\"placeholder\"\n [value]=\"inputValue\"\n (input)=\"onInputChange($event)\"\n (blur)=\"onTouched()\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [attr.minlength]=\"minLength || null\"\n [attr.maxlength]=\"maxLength || null\"\n [matAutocomplete]=\"auto\"\n class=\"amw-autocomplete__input\">\n\n @if (!multiple && clearable && (selectedValue || inputValue)) {\n <mat-icon\n matSuffix\n (click)=\"onClear()\"\n class=\"amw-autocomplete__clear\">\n clear\n </mat-icon>\n }\n\n @if (hint) {\n <mat-hint class=\"amw-autocomplete__hint\">{{ hint }}</mat-hint>\n }\n </mat-form-field>\n\n <!-- Multiple selection chips -->\n @if (multiple && selectedValues.length > 0) {\n <div class=\"amw-autocomplete__chips\">\n <mat-chip-set>\n @for (value of selectedValues; track value) {\n <mat-chip\n [removable]=\"!disabled\"\n (removed)=\"onChipRemoved(value)\"\n class=\"amw-autocomplete__chip\">\n <span [innerHTML]=\"getSelectedOption(value)?.label || value\"></span>\n @if (!disabled) {\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n }\n </mat-chip>\n }\n </mat-chip-set>\n </div>\n }\n\n <!-- Autocomplete panel -->\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (opened)=\"onOpened()\"\n (closed)=\"onClosed()\"\n [displayWith]=\"displayWith\"\n class=\"amw-autocomplete__panel\">\n\n @for (option of filteredOptions; track option) {\n <mat-option\n [value]=\"option\"\n [disabled]=\"option.disabled\"\n (onSelectionChange)=\"onOptionSelected(option)\"\n class=\"amw-autocomplete__option\">\n <span [innerHTML]=\"option.label\"></span>\n </mat-option>\n }\n\n @if (filteredOptions.length === 0 && inputValue.length >= minLength) {\n <mat-option\n disabled\n class=\"amw-autocomplete__no-results\">\n No results found\n </mat-option>\n }\n </mat-autocomplete>\n</div>\n","import { Component, Input, Output, EventEmitter, forwardRef, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatNativeDateModule } from '@angular/material/core';\n\nimport { BaseComponent } from '../base/base.component';\nimport { AmwSize } from '../../../shared/types/amw-size.type';\nimport { AmwAppearance } from '../../../shared/types/amw-appearance.type';\n\n\n@Component({\n selector: 'amw-datepicker',\n standalone: true,\n imports: [\n FormsModule,\n MatDatepickerModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n MatNativeDateModule\n],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AmwDatepickerComponent,\n multi: true\n }\n ],\n templateUrl: './amw-datepicker.component.html',\n styleUrl: './amw-datepicker.component.scss',\n encapsulation: ViewEncapsulation.None\n})\nexport class AmwDatepickerComponent extends BaseComponent implements ControlValueAccessor {\n @Input() override placeholder: string = '';\n @Input() override label: string = '';\n @Input() hint: string = '';\n @Input() override required: boolean = false;\n @Input() override disabled: boolean = false;\n @Input() readonly: boolean = false;\n @Input() size: AmwSize = 'medium';\n @Input() appearance: AmwAppearance = 'outline';\n @Input() min: Date | null = null;\n @Input() max: Date | null = null;\n @Input() startAt: Date | null = null;\n @Input() touchUi: boolean = false;\n @Input() openOnFocus: boolean = true;\n @Input() clearable: boolean = true;\n @Input() format: string = 'MM/dd/yyyy';\n\n @Output() dateChange = new EventEmitter<Date | null>();\n @Output() opened = new EventEmitter<void>();\n @Output() closed = new EventEmitter<void>();\n\n selectedDate: Date | null = null;\n isOpen = false;\n\n private onChange = (value: Date | null) => { };\n onTouched = () => { };\n\n ngOnInit(): void {\n // Initialize if startAt is provided\n if (this.startAt && !this.selectedDate) {\n this.selectedDate = this.startAt;\n }\n }\n\n onDateChange(date: Date | null): void {\n this.selectedDate = date;\n this.onChange(date);\n this.dateChange.emit(date);\n }\n\n onOpened(): void {\n this.isOpen = true;\n this.opened.emit();\n }\n\n onClosed(): void {\n this.isOpen = false;\n this.closed.emit();\n }\n\n onClear(): void {\n this.onDateChange(null);\n }\n\n onInputChange(event: any): void {\n const value = event.target?.value || '';\n if (!value) {\n this.onDateChange(null);\n }\n }\n\n // ControlValueAccessor implementation\n override writeValue(value: Date | null): void {\n this.selectedDate = value;\n }\n\n override registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n\n override registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n override setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n getDisplayValue(): string {\n if (!this.selectedDate) return '';\n return this.selectedDate.toLocaleDateString();\n }\n}\n","<div class=\"amw-datepicker\" [class]=\"'amw-datepicker--' + size\">\n <mat-form-field [appearance]=\"appearance\" class=\"amw-datepicker__field\">\n @if (label) {\n <mat-label [innerHTML]=\"label\"></mat-label>\n }\n\n <input\n matInput\n [matDatepicker]=\"picker\"\n [placeholder]=\"placeholder\"\n [value]=\"selectedDate\"\n (dateChange)=\"onDateChange($event.value)\"\n (blur)=\"onTouched()\"\n (input)=\"onInputChange($event)\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [min]=\"min\"\n [max]=\"max\"\n class=\"amw-datepicker__input\">\n\n <mat-datepicker-toggle\n matSuffix\n [for]=\"picker\"\n [disabled]=\"disabled\"\n class=\"amw-datepicker__toggle\">\n </mat-datepicker-toggle>\n\n @if (clearable && selectedDate && !disabled) {\n <mat-icon\n matSuffix\n (click)=\"onClear()\"\n class=\"amw-datepicker__clear\">\n clear\n </mat-icon>\n }\n\n @if (hint) {\n <mat-hint class=\"amw-datepicker__hint\">{{ hint }}</mat-hint>\n }\n </mat-form-field>\n\n <mat-datepicker\n #picker\n [touchUi]=\"touchUi\"\n [startAt]=\"startAt\"\n (opened)=\"onOpened()\"\n (closed)=\"onClosed()\"\n class=\"amw-datepicker__panel\">\n </mat-datepicker>\n</div>\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation, forwardRef } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatRippleModule } from '@angular/material/core';\nimport { BaseComponent } from '../base/base.component';\nimport { AmwColor } from '../../../shared/types/amw-color.type';\nimport { AmwSize } from '../../../shared/types/amw-size.type';\n\n@Component({\n selector: 'amw-checkbox',\n standalone: true,\n imports: [FormsModule, ReactiveFormsModule, MatCheckboxModule, MatRippleModule],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-checkbox.component.html',\n styleUrl: './amw-checkbox.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AmwCheckboxComponent,\n multi: true\n }\n ]\n})\nexport class AmwCheckboxComponent extends BaseComponent implements ControlValueAccessor {\n @Input() color: AmwColor = 'primary';\n @Input() size: AmwSize = 'medium';\n @Input() override label: string = '';\n @Input() labelPosition: 'before' | 'after' = 'after';\n @Input() override disabled: boolean = false;\n @Input() override required: boolean = false;\n @Input() indeterminate: boolean = false;\n @Input() checked: boolean = false;\n @Input() name: string = '';\n @Input() tabIndex?: number;\n @Input() ariaLabel?: string;\n @Input() ariaLabelledby?: string;\n @Input() ariaDescribedby?: string;\n @Input() ariaRequired?: boolean;\n @Input() ariaInvalid?: boolean;\n @Input() override errorMessage: string = '';\n @Input() override hasError: boolean = false;\n @Input() disableRipple: boolean = false;\n @Input() disableCheckRipple: boolean = false;\n @Input() animationDuration: string = '225ms';\n @Input() animationTimingFunction: string = 'cubic-bezier(0.4, 0.0, 0.2, 1)';\n\n // Events\n @Output() change = new EventEmitter<{ checked: boolean; value: any }>();\n @Output() indeterminateChange = new EventEmitter<boolean>();\n @Output() override focus = new EventEmitter<FocusEvent>();\n @Output() override blur = new EventEmitter<FocusEvent>();\n\n // ControlValueAccessor implementation\n override _value: any = null;\n override _onChange = (value: any) => { };\n override _onTouched = () => { };\n\n override get value(): any {\n return this._value;\n }\n\n override set value(val: any) {\n this._value = val;\n this._onChange(val);\n }\n\n override writeValue(value: any): void {\n this._value = value;\n this.checked = !!value;\n }\n\n override registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n override registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n override setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onCheckboxChange(event: any): void {\n this.checked = event.checked;\n this.indeterminate = event.indeterminate;\n this.value = this.checked ? this.value : null;\n\n this.change.emit({\n checked: this.checked,\n value: this.value\n });\n\n this._onChange(this.value);\n this._onTouched();\n }\n\n onIndeterminateChange(event: boolean): void {\n this.indeterminate = event;\n this.indeterminateChange.emit(event);\n }\n\n override onFocus(event: FocusEvent): void {\n this.focus.emit(event);\n }\n\n override onBlur(event: FocusEvent): void {\n this.blur.emit(event);\n this._onTouched();\n }\n\n getCheckboxClasses(): string {\n const classes = ['amw-checkbox'];\n\n if (this.size) {\n classes.push(`amw-checkbox--${this.size}`);\n }\n\n if (this.color) {\n classes.push(`amw-checkbox--${this.color}`);\n }\n\n if (this.disabled) {\n classes.push('amw-checkbox--disabled');\n }\n\n if (this.hasError) {\n classes.push('amw-checkbox--error');\n }\n\n if (this.labelPosition === 'before') {\n classes.push('amw-checkbox--label-before');\n }\n\n return classes.join(' ');\n }\n}\n","<div [class]=\"getCheckboxClasses()\">\n <mat-checkbox\n [color]=\"color\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [indeterminate]=\"indeterminate\"\n [checked]=\"checked\"\n [value]=\"value\"\n [name]=\"name\"\n [tabIndex]=\"tabIndex\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n [attr.aria-required]=\"ariaRequired\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [disableRipple]=\"disableRipple\"\n [style.animation-duration]=\"animationDuration\"\n [style.animation-timing-function]=\"animationTimingFunction\"\n (change)=\"onCheckboxChange($event)\"\n (indeterminateChange)=\"onIndeterminateChange($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\">\n <span [innerHTML]=\"label\"></span>\n </mat-checkbox>\n\n @if (hasError && errorMessage) {\n <div class=\"amw-checkbox__error\">\n {{ errorMessage }}\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation, forwardRef } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatRippleModule } from '@angular/material/core';\nimport { BaseComponent } from '../base/base.component';\nimport { AmwColor } from '../../../shared/types/amw-color.type';\nimport { AmwSize } from '../../../shared/types/amw-size.type';\n\n@Component({\n selector: 'amw-radio',\n standalone: true,\n imports: [FormsModule, ReactiveFormsModule, MatRadioModule, MatRippleModule],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-radio.component.html',\n styleUrl: './amw-radio.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AmwRadioComponent,\n multi: true\n }\n ]\n})\nexport class AmwRadioComponent extends BaseComponent implements ControlValueAccessor {\n @Input() color: AmwColor = 'primary';\n @Input() size: AmwSize = 'medium';\n @Input() override label: string = '';\n @Input() labelPosition: 'before' | 'after' = 'after';\n @Input() override disabled: boolean = false;\n @Input() override required: boolean = false;\n @Input() checked: boolean = false;\n @Input() name: string = '';\n @Input() tabIndex?: number;\n @Input() ariaLabel?: string;\n @Input() ariaLabelledby?: string;\n @Input() ariaDescribedby?: string;\n @Input() ariaRequired?: boolean;\n @Input() ariaInvalid?: boolean;\n @Input() override errorMessage: string = '';\n @Input() override hasError: boolean = false;\n @Input() disableRipple: boolean = false;\n @Input() animationDuration: string = '225ms';\n @Input() animationTimingFunction: string = 'cubic-bezier(0.4, 0.0, 0.2, 1)';\n\n // Events\n @Output() change = new EventEmitter<{ checked: boolean; value: any }>();\n @Output() override focus = new EventEmitter<FocusEvent>();\n @Output() override blur = new EventEmitter<FocusEvent>();\n\n // ControlValueAccessor implementation\n override _value: any = null;\n override _onChange = (value: any) => { };\n override _onTouched = () => { };\n\n override get value(): any {\n return this._value;\n }\n\n override set value(val: any) {\n this._value = val;\n this._onChange(val);\n }\n\n override writeValue(value: any): void {\n this._value = value;\n this.checked = this._value === this.value;\n }\n\n override registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n override registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n override setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onRadioChange(event: any): void {\n this.checked = event.checked;\n this.value = this.checked ? this.value : null;\n\n this.change.emit({\n checked: this.checked,\n value: this.value\n });\n\n this._onChange(this.value);\n this._onTouched();\n }\n\n override onFocus(event: FocusEvent): void {\n this.focus.emit(event);\n }\n\n override onBlur(event: FocusEvent): void {\n this.blur.emit(event);\n this._onTouched();\n }\n\n getMaterialColor(): 'primary' | 'accent' | 'warn' {\n return this.color === 'basic' ? 'primary' : this.color as 'primary' | 'accent' | 'warn';\n }\n\n getRadioClasses(): string {\n const classes = ['amw-radio'];\n\n if (this.size) {\n classes.push(`amw-radio--${this.size}`);\n }\n\n if (this.color) {\n classes.push(`amw-radio--${this.color}`);\n }\n\n if (this.disabled) {\n classes.push('amw-radio--disabled');\n }\n\n if (this.hasError) {\n classes.push('amw-radio--error');\n }\n\n if (this.labelPosition === 'before') {\n classes.push('amw-radio--label-before');\n }\n\n return classes.join(' ');\n }\n}\n","<div [class]=\"getRadioClasses()\">\n <mat-radio-button\n [color]=\"getMaterialColor()\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [checked]=\"checked\"\n [value]=\"value\"\n [name]=\"name\"\n [tabIndex]=\"tabIndex\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n [attr.aria-required]=\"ariaRequired\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [disableRipple]=\"disableRipple\"\n [style.animation-duration]=\"animationDuration\"\n [style.animation-timing-function]=\"animationTimingFunction\"\n (change)=\"onRadioChange($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\">\n <span [innerHTML]=\"label\"></span>\n </mat-radio-button>\n\n @if (hasError && errorMessage) {\n <div class=\"amw-radio__error\">\n {{ errorMessage }}\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation, forwardRef } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { BaseComponent } from '../base/base.component';\nimport { AmwColor } from '../../../shared/types/amw-color.type';\n\n@Component({\n selector: 'amw-slider',\n standalone: true,\n imports: [FormsModule, ReactiveFormsModule, MatSliderModule],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-slider.component.html',\n styleUrl: './amw-slider.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AmwSliderComponent,\n multi: true\n }\n ]\n})\nexport class AmwSliderComponent extends BaseComponent implements ControlValueAccessor {\n @Input() color: AmwColor = 'primary';\n @Input() override disabled: boolean = false;\n @Input() min: number = 0;\n @Input() max: number = 100;\n @Input() step: number = 1;\n @Input() thumbLabel: boolean = false;\n @Input() tickInterval: number | 'auto' = 0;\n @Input() vertical: boolean = false;\n @Input() invert: boolean = false;\n @Input() ariaLabel?: string;\n @Input() ariaLabelledby?: string;\n @Input() ariaDescribedby?: string;\n @Input() tabIndex?: number;\n @Input() name?: string;\n @Input() id?: string;\n @Input() override errorMessage: string = '';\n @Input() override hasError: boolean = false;\n\n // Events\n @Output() change = new EventEmitter<{ value: number; source: any }>();\n @Output() input = new EventEmitter<{ value: number; source: any }>();\n @Output() override focus = new EventEmitter<FocusEvent>();\n @Output() override blur = new EventEmitter<FocusEvent>();\n\n // ControlValueAccessor implementation\n override _value: number = 0;\n override _onChange = (value: number) => { };\n override _onTouched = () => { };\n\n override get value(): number {\n return this._value;\n }\n\n override set value(val: number) {\n this._value = val;\n this._onChange(val);\n }\n\n override writeValue(value: number): void {\n this._value = value || 0;\n }\n\n override registerOnChange(fn: (value: number) => void): void {\n this._onChange = fn;\n }\n\n override registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n override setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onSliderChange(event: any): void {\n this.value = event.value;\n this.change.emit({\n value: this.value,\n source: event.source\n });\n this._onChange(this.value);\n this._onTouched();\n }\n\n onSliderInput(event: any): void {\n this.value = event.value;\n this.input.emit({\n value: this.value,\n source: event.source\n });\n }\n\n override onFocus(event: FocusEvent): void {\n this.focus.emit(event);\n }\n\n override onBlur(event: FocusEvent): void {\n this.blur.emit(event);\n this._onTouched();\n }\n\n getMaterialColor(): 'primary' | 'accent' | 'warn' {\n return this.color === 'basic' ? 'primary' : this.color as 'primary' | 'accent' | 'warn';\n }\n\n getSliderClasses(): string {\n const classes = ['amw-slider'];\n\n if (this.color) {\n classes.push(`amw-slider--${this.color}`);\n }\n\n if (this.disabled) {\n classes.push('amw-slider--disabled');\n }\n\n if (this.hasError) {\n classes.push('amw-slider--error');\n }\n\n if (this.vertical) {\n classes.push('amw-slider--vertical');\n }\n\n if (this.invert) {\n classes.push('amw-slider--invert');\n }\n\n return classes.join(' ');\n }\n\n}\n","<div [class]=\"getSliderClasses()\">\n <mat-slider\n [color]=\"getMaterialColor()\"\n [disabled]=\"disabled\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n [tabIndex]=\"tabIndex\">\n <input matSliderThumb\n [value]=\"value\"\n (valueChange)=\"onSliderChange($event)\"\n (input)=\"onSliderInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\">\n </mat-slider>\n\n @if (hasError && errorMessage) {\n <div class=\"amw-slider__error\">\n {{ errorMessage }}\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation, forwardRef } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { BaseComponent } from '../base/base.component';\nimport { AmwColor } from '../../../shared/types/amw-color.type';\n\n@Component({\n selector: 'amw-toggle',\n standalone: true,\n imports: [FormsModule, ReactiveFormsModule, MatSlideToggleModule],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-toggle.component.html',\n styleUrl: './amw-toggle.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AmwToggleComponent,\n multi: true\n }\n ]\n})\nexport class AmwToggleComponent extends BaseComponent implements ControlValueAccessor {\n @Input() color: AmwColor = 'primary';\n @Input() override disabled: boolean = false;\n @Input() override required: boolean = false;\n @Input() checked: boolean = false;\n @Input() name: string = '';\n @Input() tabIndex?: number;\n @Input() ariaLabel?: string;\n @Input() ariaLabelledby?: string;\n @Input() ariaDescribedby?: string;\n @Input() ariaRequired?: boolean;\n @Input() ariaInvalid?: boolean;\n @Input() override errorMessage: string = '';\n @Input() override hasError: boolean = false;\n @Input() disableRipple: boolean = false;\n @Input() labelPosition: 'before' | 'after' = 'after';\n @Input() override label: string = '';\n\n // Events\n @Output() change = new EventEmitter<{ checked: boolean; value: any }>();\n @Output() override focus = new EventEmitter<FocusEvent>();\n @Output() override blur = new EventEmitter<FocusEvent>();\n\n // ControlValueAccessor implementation\n override _value: any = null;\n override _onChange = (value: any) => { };\n override _onTouched = () => { };\n\n override get value(): any {\n return this._value;\n }\n\n override set value(val: any) {\n this._value = val;\n this._onChange(val);\n }\n\n override writeValue(value: any): void {\n this._value = value;\n this.checked = !!value;\n }\n\n override registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n override registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n override setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onToggleChange(event: any): void {\n this.checked = event.checked;\n this.value = this.checked ? this.value : null;\n\n this.change.emit({\n checked: this.checked,\n value: this.value\n });\n\n this._onChange(this.value);\n this._onTouched();\n }\n\n override onFocus(event: FocusEvent): void {\n this.focus.emit(event);\n }\n\n override onBlur(event: FocusEvent): void {\n this.blur.emit(event);\n this._onTouched();\n }\n\n getToggleClasses(): string {\n const classes = ['amw-toggle'];\n\n if (this.color) {\n classes.push(`amw-toggle--${this.color}`);\n }\n\n if (this.disabled) {\n classes.push('amw-toggle--disabled');\n }\n\n if (this.hasError) {\n classes.push('amw-toggle--error');\n }\n\n if (this.labelPosition === 'before') {\n classes.push('amw-toggle--label-before');\n }\n\n return classes.join(' ');\n }\n}\n","<div [class]=\"getToggleClasses()\">\n <mat-slide-toggle\n [color]=\"color\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [checked]=\"checked\"\n [name]=\"name\"\n [tabIndex]=\"tabIndex\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n [attr.aria-required]=\"ariaRequired\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [disableRipple]=\"disableRipple\"\n (change)=\"onToggleChange($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\">\n <span [innerHTML]=\"label\"></span>\n </mat-slide-toggle>\n\n @if (hasError && errorMessage) {\n <div class=\"amw-toggle__error\">\n {{ errorMessage }}\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation, forwardRef } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { BaseComponent } from '../base/base.component';\nimport { TextareaAppearance } from './interfaces/textarea-appearance.type';\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\n\n@Component({\n selector: 'amw-textarea',\n standalone: true,\n imports: [FormsModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-textarea.component.html',\n styleUrl: './amw-textarea.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AmwTextareaComponent,\n multi: true\n }\n ]\n})\nexport class AmwTextareaComponent extends BaseComponent implements ControlValueAccessor {\n @Input() appearance: MatFormFieldAppearance = 'outline';\n @Input() override disabled: boolean = false;\n @Input() override required: boolean = false;\n @Input() override placeholder: string = '';\n @Input() override label: string = '';\n @Input() hint: string = '';\n @Input() name: string = '';\n @Input() id: string = '';\n @Input() tabIndex?: number;\n @Input() maxLength?: number;\n @Input() minLength?: number;\n @Input() rows: number = 4;\n @Input() cols?: number;\n @Input() wrap: 'soft' | 'hard' | 'off' = 'soft';\n @Input() readonly: boolean = false;\n @Input() spellcheck: boolean = true;\n @Input() autocomplete?: string;\n @Input() ariaLabel?: string;\n @Input() ariaLabelledby?: string;\n @Input() ariaDescribedby?: string;\n @Input() ariaRequired?: boolean;\n @Input() ariaInvalid?: boolean;\n @Input() override errorMessage: string = '';\n @Input() override hasError: boolean = false;\n\n // Events\n @Output() change = new EventEmitter<string>();\n @Output() input = new EventEmitter<string>();\n @Output() override focus = new EventEmitter<FocusEvent>();\n @Output() override blur = new EventEmitter<FocusEvent>();\n\n // ControlValueAccessor implementation\n override _value: string = '';\n override _onChange = (value: string) => { };\n override _onTouched = () => { };\n\n override get value(): string {\n return this._value;\n }\n\n override set value(val: string) {\n this._value = val;\n this._onChange(val);\n }\n\n override writeValue(value: string): void {\n this._value = value || '';\n }\n\n override registerOnChange(fn: (value: string) => void): void {\n this._onChange = fn;\n }\n\n override registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n override setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onTextareaChange(event: any): void {\n this.value = event.target.value;\n this.change.emit(this.value);\n }\n\n onTextareaInput(event: any): void {\n this.value = event.target.value;\n this.input.emit(this.value);\n }\n\n override onFocus(event: FocusEvent): void {\n this.focus.emit(event);\n }\n\n override onBlur(event: FocusEvent): void {\n this.blur.emit(event);\n this._onTouched();\n }\n\n getTextareaClasses(): string {\n const classes = ['amw-textarea'];\n\n if (this.appearance) {\n classes.push(`amw-textarea--${this.appearance}`);\n }\n\n if (this.disabled) {\n classes.push('amw-textarea--disabled');\n }\n\n if (this.hasError) {\n classes.push('amw-textarea--error');\n }\n\n return classes.join(' ');\n }\n}\n","<div [class]=\"getTextareaClasses()\">\n <mat-form-field [appearance]=\"appearance\">\n @if (label) {\n <mat-label [innerHTML]=\"label\"></mat-label>\n }\n <textarea\n matInput\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [value]=\"value\"\n [name]=\"name\"\n [id]=\"id\"\n [tabIndex]=\"tabIndex\"\n [attr.maxlength]=\"maxLength\"\n [attr.minlength]=\"minLength\"\n [rows]=\"rows\"\n [cols]=\"cols\"\n [wrap]=\"wrap\"\n [readonly]=\"readonly\"\n [spellcheck]=\"spellcheck\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n [attr.aria-required]=\"ariaRequired\"\n [attr.aria-invalid]=\"ariaInvalid\"\n (change)=\"onTextareaChange($event)\"\n (input)=\"onTextareaInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\">\n </textarea>\n @if (hint) {\n <mat-hint>{{ hint }}</mat-hint>\n }\n @if (hasError && errorMessage) {\n <mat-error>{{ errorMessage }}</mat-error>\n }\n </mat-form-field>\n</div>\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation } from '@angular/core';\n\nimport { MatSliderModule } from '@angular/material/slider';\nimport { FormsModule, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BaseComponent } from '../base/base.component';\nimport { RangeSliderConfig } from './interfaces';\nimport { AmwColor } from '../../../shared/types/amw-color.type';\n\n@Component({\n selector: 'amw-range-slider',\n standalone: true,\n imports: [MatSliderModule, FormsModule],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-range-slider.component.html',\n styleUrl: './amw-range-slider.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AmwRangeSliderComponent,\n multi: true\n }\n ]\n})\nexport class AmwRangeSliderComponent extends BaseComponent implements ControlValueAccessor {\n @Input() min = 0;\n @Input() max = 100;\n @Input() step = 1;\n @Input() showTicks = false;\n @Input() showLabels = false;\n @Input() vertical = false;\n @Input() invert = false;\n @Input() thumbLabel = false;\n @Input() tickInterval = 1;\n @Input() valueText = '';\n @Input() startThumbLabel = '';\n @Input() endThumbLabel = '';\n @Input() color: AmwColor = 'primary';\n\n @Output() rangeChange = new EventEmitter<{ start: number; end: number }>();\n @Output() rangeValueChange = new EventEmitter<{ start: number; end: number }>();\n\n // Internal range values\n private _rangeValue: { start: number; end: number } = { start: this.min, end: this.max };\n\n @Input()\n get rangeValue(): { start: number; end: number } {\n return this._rangeValue;\n }\n\n set rangeValue(value: { start: number; end: number }) {\n if (this._rangeValue !== value) {\n this._rangeValue = value;\n this.value = value;\n this.rangeChange.emit(value);\n this.rangeValueChange.emit(value);\n }\n }\n\n get startValue(): number {\n return this._rangeValue.start;\n }\n\n set startValue(value: number) {\n if (this._rangeValue.start !== value) {\n this._rangeValue = { ...this._rangeValue, start: value };\n this.value = this._rangeValue;\n this.rangeChange.emit(this._rangeValue);\n }\n }\n\n get endValue(): number {\n return this._rangeValue.end;\n }\n\n set endValue(value: number) {\n if (this._rangeValue.end !== value) {\n this._rangeValue = { ...this._rangeValue, end: value };\n this.value = this._rangeValue;\n this.rangeChange.emit(this._rangeValue);\n }\n }\n\n onStartValueChange(value: number): void {\n this.startValue = value;\n }\n\n onEndValueChange(value: number): void {\n this.endValue = value;\n }\n\n getMaterialColor(): 'primary' | 'accent' | 'warn' {\n return this.color === 'basic' ? 'primary' : this.color as 'primary' | 'accent' | 'warn';\n }\n\n getConfig(): RangeSliderConfig {\n return {\n min: this.min,\n max: this.max,\n step: this.step,\n disabled: this.disabled,\n showTicks: this.showTicks,\n showLabels: this.showLabels,\n vertical: this.vertical,\n invert: this.invert,\n thumbLabel: this.thumbLabel,\n tickInterval: this.tickInterval,\n valueText: this.valueText,\n startThumbLabel: this.startThumbLabel,\n endThumbLabel: this.endThumbLabel\n };\n }\n}\n","<div class=\"amw-range-slider\"\n [class.amw-range-slider--disabled]=\"disabled\"\n [class.amw-range-slider--vertical]=\"vertical\">\n\n @if (label) {\n <label class=\"amw-range-slider__label\">{{ label }}</label>\n }\n\n <div class=\"amw-range-slider__container\">\n <!-- Range Slider with Start and End Thumbs -->\n <mat-slider\n class=\"amw-range-slider__slider\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [disabled]=\"disabled\"\n [showTickMarks]=\"showTicks\"\n [color]=\"getMaterialColor()\">\n <input matSliderStartThumb\n [ngModel]=\"startValue\"\n (ngModelChange)=\"onStartValueChange($event)\">\n <input matSliderEndThumb\n [ngModel]=\"endValue\"\n (ngModelChange)=\"onEndValueChange($event)\">\n </mat-slider>\n </div>\n\n @if (errorMessage || hasError) {\n <div class=\"amw-range-slider__error\">\n {{ errorMessage }}\n </div>\n }\n\n @if (startThumbLabel || endThumbLabel) {\n <div class=\"amw-range-slider__labels\">\n @if (startThumbLabel) {\n <span class=\"amw-range-slider__thumb-label amw-range-slider__thumb-label--start\">\n {{ startThumbLabel }}\n </span>\n }\n @if (endThumbLabel) {\n <span class=\"amw-range-slider__thumb-label amw-range-slider__thumb-label--end\">\n {{ endThumbLabel }}\n </span>\n }\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation } from '@angular/core';\n\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { FormsModule, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BaseComponent } from '../base/base.component';\nimport { SwitchConfig } from './interfaces';\nimport { AmwSize } from '../../../shared/types/amw-size.type';\nimport { AmwColor } from '../../../shared/types/amw-color.type';\n\n@Component({\n selector: 'amw-switch',\n standalone: true,\n imports: [MatSlideToggleModule, FormsModule],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-switch.component.html',\n styleUrl: './amw-switch.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AmwSwitchComponent,\n multi: true\n }\n ]\n})\nexport class AmwSwitchComponent extends BaseComponent implements ControlValueAccessor {\n @Input() checked = false;\n @Input() size: AmwSize = 'medium';\n @Input() color: AmwColor = 'primary';\n @Input() labelPosition: 'before' | 'after' = 'after';\n @Input() indeterminate = false;\n\n @Output() checkedChange = new EventEmitter<boolean>();\n @Output() switchChange = new EventEmitter<boolean>();\n\n onCheckedChange(checked: boolean): void {\n this.checked = checked;\n this.value = checked;\n this.checkedChange.emit(checked);\n this.switchChange.emit(checked);\n }\n\n getConfig(): SwitchConfig {\n return {\n checked: this.checked,\n disabled: this.disabled,\n size: this.size,\n color: this.color,\n labelPosition: this.labelPosition,\n indeterminate: this.indeterminate,\n required: this.required\n };\n }\n}\n\n","<div class=\"amw-switch\" \n [class.amw-switch--disabled]=\"disabled\"\n [class.amw-switch--small]=\"size === 'small'\"\n [class.amw-switch--large]=\"size === 'large'\"\n [class.amw-switch--label-before]=\"labelPosition === 'before'\">\n \n @if (label && labelPosition === 'before') {\n <label class=\"amw-switch__label amw-switch__label--before\">{{ label }}</label>\n }\n\n <mat-slide-toggle\n class=\"amw-switch__toggle\"\n [ngModel]=\"checked\"\n (ngModelChange)=\"onCheckedChange($event)\"\n [disabled]=\"disabled\"\n [color]=\"color\"\n [required]=\"required\">\n \n @if (label && labelPosition === 'after') {\n <span class=\"amw-switch__label amw-switch__label--after\">{{ label }}</span>\n }\n </mat-slide-toggle>\n\n @if (errorMessage || hasValidationError) {\n <div class=\"amw-switch__error\">\n {{ errorMessage || errorText }}\n </div>\n }\n</div>\n\n\n\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation, ElementRef, ViewChild, HostListener } from '@angular/core';\n\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatCardModule } from '@angular/material/card';\nimport { BaseComponent } from '../base/base.component';\nimport { FileInputConfig, FileValidationResult, FileUploadProgress, FileInputAccept } from './interfaces';\n\n@Component({\n selector: 'amw-file-input',\n standalone: true,\n imports: [FormsModule, MatButtonModule, MatIconModule, MatProgressBarModule, MatChipsModule, MatCardModule],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-file-input.component.html',\n styleUrl: './amw-file-input.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AmwFileInputComponent,\n multi: true\n }\n ]\n})\nexport class AmwFileInputComponent extends BaseComponent {\n @ViewChild('fileInput', { static: false }) fileInput!: ElementRef<HTMLInputElement>;\n\n @Input() multiple = false;\n @Input() accept: FileInputAccept = '*/*';\n @Input() maxSize = 10 * 1024 * 1024; // 10MB default\n @Input() minSize = 0;\n @Input() maxFiles = 10;\n @Input() showPreview = true;\n @Input() showProgress = true;\n @Input() allowDragDrop = true;\n @Input() showFileList = true;\n @Input() placeholderText = 'Choose files or drag and drop';\n @Input() buttonText = 'Browse Files';\n @Input() dropText = 'Drop files here';\n\n @Output() filesChange = new EventEmitter<File[]>();\n @Output() selectedFilesChange = new EventEmitter<File[]>();\n @Output() fileSelect = new EventEmitter<File[]>();\n @Output() fileRemove = new EventEmitter<File>();\n @Output() validationChange = new EventEmitter<FileValidationResult>();\n @Output() uploadProgress = new EventEmitter<FileUploadProgress[]>();\n\n @Input()\n get selectedFiles(): File[] {\n return this._selectedFiles;\n }\n\n set selectedFiles(files: File[]) {\n this._selectedFiles = files;\n this.value = files;\n this.filesChange.emit(files);\n this.selectedFilesChange.emit(files);\n }\n\n private _selectedFiles: File[] = [];\n isDragOver = false;\n validationResult: FileValidationResult = { valid: true, errors: [], files: [] };\n uploadProgresses: FileUploadProgress[] = [];\n\n @HostListener('dragover', ['$event'])\n onDragOver(event: DragEvent): void {\n if (!this.allowDragDrop || this.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver = true;\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event: DragEvent): void {\n if (!this.allowDragDrop || this.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver = false;\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event: DragEvent): void {\n if (!this.allowDragDrop || this.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver = false;\n\n const files = Array.from(event.dataTransfer?.files || []);\n this.handleFiles(files);\n }\n\n onFileInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files || []);\n this.handleFiles(files);\n }\n\n private handleFiles(files: File[]): void {\n const validation = this.validateFiles(files);\n this.validationResult = validation;\n this.validationChange.emit(validation);\n\n if (validation.valid) {\n if (this.multiple) {\n this._selectedFiles = [...this._selectedFiles, ...validation.files].slice(0, this.maxFiles);\n } else {\n this._selectedFiles = validation.files.slice(0, 1);\n }\n\n this.value = this._selectedFiles;\n this.filesChange.emit(this._selectedFiles);\n this.fileSelect.emit(validation.files);\n }\n }\n\n private validateFiles(files: File[]): FileValidationResult {\n const errors: string[] = [];\n const validFiles: File[] = [];\n\n if (files.length === 0) {\n return { valid: true, errors: [], files: [] };\n }\n\n if (!this.multiple && files.length > 1) {\n errors.push('Only one file is allowed');\n }\n\n if (files.length > this.maxFiles) {\n errors.push(`Maximum ${this.maxFiles} files allowed`);\n }\n\n for (const file of files) {\n // Check file size\n if (file.size > this.maxSize) {\n errors.push(`${file.name} is too large (max ${this.formatFileSize(this.maxSize)})`);\n continue;\n }\n\n if (file.size < this.minSize) {\n errors.push(`${file.name} is too small (min ${this.formatFileSize(this.minSize)})`);\n continue;\n }\n\n // Check file type\n if (this.accept !== '*/*' && !this.isFileTypeAccepted(file)) {\n errors.push(`${file.name} is not an accepted file type`);\n continue;\n }\n\n validFiles.push(file);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n files: validFiles\n };\n }\n\n private isFileTypeAccepted(file: File): boolean {\n if (this.accept === '*/*') return true;\n\n const acceptedTypes = this.accept.split(',').map(type => type.trim());\n return acceptedTypes.some(type => {\n if (type.endsWith('/*')) {\n return file.type.startsWith(type.slice(0, -1));\n }\n return file.type === type;\n });\n }\n\n formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n }\n\n removeFile(file: File): void {\n this._selectedFiles = this._selectedFiles.filter(f => f !== file);\n this.value = this._selectedFiles;\n this.filesChange.emit(this._selectedFiles);\n this.fileRemove.emit(file);\n }\n\n clearFiles(): void {\n this._selectedFiles = [];\n this.value = [];\n this.filesChange.emit([]);\n if (this.fileInput) {\n this.fileInput.nativeElement.value = '';\n }\n }\n\n openFileDialog(): void {\n if (!this.disabled && this.fileInput) {\n this.fileInput.nativeElement.click();\n }\n }\n\n getFileIcon(file: File): string {\n if (file.type.startsWith('image/')) return 'image';\n if (file.type.startsWith('video/')) return 'movie';\n if (file.type.startsWith('audio/')) return 'audiotrack';\n if (file.type.includes('pdf')) return 'picture_as_pdf';\n if (file.type.includes('text')) return 'description';\n return 'insert_drive_file';\n }\n\n getConfig(): FileInputConfig {\n return {\n multiple: this.multiple,\n accept: this.accept,\n maxSize: this.maxSize,\n minSize: this.minSize,\n maxFiles: this.maxFiles,\n disabled: this.disabled,\n required: this.required,\n showPreview: this.showPreview,\n showProgress: this.showProgress,\n allowDragDrop: this.allowDragDrop,\n showFileList: this.showFileList,\n placeholder: this.placeholderText,\n buttonText: this.buttonText,\n dropText: this.dropText\n };\n }\n}\n","<div class=\"amw-file-input\" \n [class.amw-file-input--disabled]=\"disabled\"\n [class.amw-file-input--drag-over]=\"isDragOver\"\n [class.amw-file-input--error]=\"!validationResult.valid\">\n \n @if (label) {\n <label class=\"amw-file-input__label\">{{ label }}</label>\n }\n\n <div class=\"amw-file-input__drop-zone\"\n (click)=\"openFileDialog()\"\n [class.amw-file-input__drop-zone--disabled]=\"disabled\">\n \n <input #fileInput\n type=\"file\"\n [multiple]=\"multiple\"\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n (change)=\"onFileInputChange($event)\"\n class=\"amw-file-input__input\">\n \n @if (isDragOver) {\n <div class=\"amw-file-input__drop-overlay\">\n <mat-icon class=\"amw-file-input__drop-icon\">cloud_upload</mat-icon>\n <p class=\"amw-file-input__drop-text\">{{ dropText }}</p>\n </div>\n } @else {\n <div class=\"amw-file-input__content\">\n <mat-icon class=\"amw-file-input__icon\">cloud_upload</mat-icon>\n <p class=\"amw-file-input__placeholder\">{{ placeholderText }}</p>\n <button mat-raised-button \n type=\"button\"\n [disabled]=\"disabled\"\n class=\"amw-file-input__button\">\n {{ buttonText }}\n </button>\n </div>\n }\n </div>\n\n @if (showFileList && selectedFiles.length > 0) {\n <div class=\"amw-file-input__file-list\">\n @for (file of selectedFiles; track file.name) {\n <mat-card class=\"amw-file-input__file-item\">\n <mat-card-content class=\"amw-file-input__file-content\">\n <mat-icon class=\"amw-file-input__file-icon\">{{ getFileIcon(file) }}</mat-icon>\n <div class=\"amw-file-input__file-info\">\n <span class=\"amw-file-input__file-name\">{{ file.name }}</span>\n <span class=\"amw-file-input__file-size\">{{ formatFileSize(file.size) }}</span>\n </div>\n <button mat-icon-button \n type=\"button\"\n (click)=\"removeFile(file)\"\n class=\"amw-file-input__remove-button\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-card-content>\n </mat-card>\n }\n \n @if (selectedFiles.length > 0) {\n <button mat-button \n type=\"button\"\n (click)=\"clearFiles()\"\n class=\"amw-file-input__clear-button\">\n Clear All\n </button>\n }\n </div>\n }\n\n @if (validationResult.errors.length > 0) {\n <div class=\"amw-file-input__errors\">\n @for (error of validationResult.errors; track error) {\n <div class=\"amw-file-input__error\">{{ error }}</div>\n }\n </div>\n }\n\n @if (errorMessage || hasValidationError) {\n <div class=\"amw-file-input__error-message\">\n {{ errorMessage || errorText }}\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation, OnChanges } from '@angular/core';\n\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { BaseComponent } from '../base/base.component';\nimport { TimepickerConfig } from './interfaces';\nimport { AmwSize } from '../../../shared/types/amw-size.type';\nimport { AmwColor } from '../../../shared/types/amw-color.type';\n\n@Component({\n selector: 'amw-timepicker',\n standalone: true,\n imports: [FormsModule, MatFormFieldModule, MatInputModule, MatIconModule, MatButtonModule],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-timepicker.component.html',\n styleUrl: './amw-timepicker.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AmwTimepickerComponent,\n multi: true\n }\n ]\n})\nexport class AmwTimepickerComponent extends BaseComponent implements OnChanges {\n @Input() override set value(val: string) {\n this._value = val;\n this.timeValue = val || '';\n this.updateTimeFromValue();\n }\n override get value(): string {\n return this._value || '';\n }\n @Input() config: TimepickerConfig = {};\n @Input() color: AmwColor = 'primary';\n @Input() size: AmwSize = 'medium';\n @Input() step = 15; // minutes\n @Input() format: '12h' | '24h' = '24h';\n @Input() showSeconds = false;\n @Input() override disabled = false;\n @Input() override required = false;\n\n @Output() timeChange = new EventEmitter<string>();\n @Output() timepickerChange = new EventEmitter<string>();\n\n timeValue = '';\n isOpen = false;\n hours = 0;\n minutes = 0;\n seconds = 0;\n ampm = 'AM';\n\n ngOnInit() {\n this.timeValue = this.value || '';\n this.updateTimeFromValue();\n }\n\n ngOnChanges() {\n if (this.value !== this.timeValue) {\n this.timeValue = this.value || '';\n this.updateTimeFromValue();\n }\n }\n\n override writeValue(value: any): void {\n this._value = value;\n this.timeValue = value || '';\n this.updateTimeFromValue();\n }\n\n onTimeChange() {\n this.value = this.timeValue;\n this.timeChange.emit(this.timeValue);\n this.timepickerChange.emit(this.timeValue);\n }\n\n toggleTimepicker() {\n if (!this.disabled) {\n this.isOpen = !this.isOpen;\n }\n }\n\n selectTime(hours: number, minutes: number, seconds: number = 0) {\n this.hours = hours;\n this.minutes = minutes;\n this.seconds = seconds;\n this.updateTimeValue();\n this.isOpen = false;\n }\n\n incrementHours() {\n if (this.hours < 23) {\n this.hours++;\n } else {\n this.hours = 0;\n }\n this.updateTimeValue();\n }\n\n decrementHours() {\n if (this.hours > 0) {\n this.hours--;\n } else {\n this.hours = 23;\n }\n this.updateTimeValue();\n }\n\n incrementMinutes() {\n if (this.minutes < 59) {\n this.minutes++;\n } else {\n this.minutes = 0;\n this.incrementHours();\n }\n this.updateTimeValue();\n }\n\n decrementMinutes() {\n if (this.minutes > 0) {\n this.minutes--;\n } else {\n this.minutes = 59;\n this.decrementHours();\n }\n this.updateTimeValue();\n }\n\n incrementSeconds() {\n if (this.seconds < 59) {\n this.seconds++;\n } else {\n this.seconds = 0;\n this.incrementMinutes();\n }\n this.updateTimeValue();\n }\n\n decrementSeconds() {\n if (this.seconds > 0) {\n this.seconds--;\n } else {\n this.seconds = 59;\n this.decrementMinutes();\n }\n this.updateTimeValue();\n }\n\n toggleAmPm() {\n this.ampm = this.ampm === 'AM' ? 'PM' : 'AM';\n this.updateTimeValue();\n }\n\n private updateTimeFromValue() {\n if (this.timeValue) {\n const timeParts = this.timeValue.split(':');\n if (timeParts.length >= 2) {\n this.hours = parseInt(timeParts[0], 10);\n this.minutes = parseInt(timeParts[1], 10);\n this.seconds = timeParts.length > 2 ? parseInt(timeParts[2], 10) : 0;\n\n if (this.format === '12h') {\n if (this.hours > 12) {\n this.hours -= 12;\n this.ampm = 'PM';\n } else if (this.hours === 0) {\n this.hours = 12;\n this.ampm = 'AM';\n } else if (this.hours === 12) {\n this.ampm = 'PM';\n } else {\n this.ampm = 'AM';\n }\n }\n }\n }\n }\n\n private updateTimeValue() {\n let displayHours = this.hours;\n\n if (this.format === '12h') {\n if (this.ampm === 'PM' && this.hours !== 12) {\n displayHours += 12;\n } else if (this.ampm === 'AM' && this.hours === 12) {\n displayHours = 0;\n }\n }\n\n const timeString = `${displayHours.toString().padStart(2, '0')}:${this.minutes.toString().padStart(2, '0')}${this.showSeconds ? `:${this.seconds.toString().padStart(2, '0')}` : ''}`;\n\n this.timeValue = timeString;\n this.value = timeString;\n this.timeChange.emit(timeString);\n this.timepickerChange.emit(timeString);\n }\n\n get displayHours(): number {\n if (this.format === '12h') {\n return this.hours === 0 ? 12 : this.hours > 12 ? this.hours - 12 : this.hours;\n }\n return this.hours;\n }\n\n override get isDisabled(): boolean {\n return this.disabled || this.isRequired;\n }\n}","<div class=\"amw-timepicker\" [class]=\"'amw-timepicker--' + size + ' amw-timepicker--' + color\">\n <mat-form-field [appearance]=\"config.appearance || 'outline'\" [class]=\"'mat-form-field--' + color\">\n @if (label) {\n <mat-label>{{ label }}</mat-label>\n }\n\n <input\n matInput\n [value]=\"timeValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"isDisabled\"\n [required]=\"required\"\n readonly\n (click)=\"toggleTimepicker()\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <button\n matSuffix\n mat-icon-button\n type=\"button\"\n [disabled]=\"isDisabled\"\n (click)=\"toggleTimepicker()\"\n aria-label=\"Open time picker\"\n >\n <mat-icon>access_time</mat-icon>\n </button>\n\n @if (hasValidationError) {\n <mat-error>\n {{ errorText }}\n </mat-error>\n }\n </mat-form-field>\n\n <!-- Time Picker Dropdown -->\n @if (isOpen) {\n <div class=\"amw-timepicker__dropdown\" (click)=\"$event.stopPropagation()\">\n <div class=\"amw-timepicker__header\">\n <span class=\"amw-timepicker__title\">Select Time</span>\n <button mat-icon-button (click)=\"isOpen = false\" aria-label=\"Close\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <div class=\"amw-timepicker__content\">\n <!-- Hours -->\n <div class=\"amw-timepicker__section\">\n <div class=\"amw-timepicker__label\">Hours</div>\n <div class=\"amw-timepicker__controls\">\n <button mat-icon-button (click)=\"incrementHours()\" [disabled]=\"isDisabled\">\n <mat-icon>keyboard_arrow_up</mat-icon>\n </button>\n <div class=\"amw-timepicker__value\">{{ displayHours.toString().padStart(2, '0') }}</div>\n <button mat-icon-button (click)=\"decrementHours()\" [disabled]=\"isDisabled\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </div>\n </div>\n <!-- Minutes -->\n <div class=\"amw-timepicker__section\">\n <div class=\"amw-timepicker__label\">Minutes</div>\n <div class=\"amw-timepicker__controls\">\n <button mat-icon-button (click)=\"incrementMinutes()\" [disabled]=\"isDisabled\">\n <mat-icon>keyboard_arrow_up</mat-icon>\n </button>\n <div class=\"amw-timepicker__value\">{{ minutes.toString().padStart(2, '0') }}</div>\n <button mat-icon-button (click)=\"decrementMinutes()\" [disabled]=\"isDisabled\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </div>\n </div>\n <!-- Seconds (if enabled) -->\n @if (showSeconds) {\n <div class=\"amw-timepicker__section\">\n <div class=\"amw-timepicker__label\">Seconds</div>\n <div class=\"amw-timepicker__controls\">\n <button mat-icon-button (click)=\"incrementSeconds()\" [disabled]=\"isDisabled\">\n <mat-icon>keyboard_arrow_up</mat-icon>\n </button>\n <div class=\"amw-timepicker__value\">{{ seconds.toString().padStart(2, '0') }}</div>\n <button mat-icon-button (click)=\"decrementSeconds()\" [disabled]=\"isDisabled\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </div>\n </div>\n }\n <!-- AM/PM (if 12h format) -->\n @if (format === '12h') {\n <div class=\"amw-timepicker__section\">\n <div class=\"amw-timepicker__label\">Period</div>\n <div class=\"amw-timepicker__controls\">\n <button\n mat-button\n [class]=\"'amw-timepicker__ampm amw-timepicker__ampm--' + (ampm === 'AM' ? 'active' : 'inactive')\"\n (click)=\"toggleAmPm()\"\n [disabled]=\"isDisabled\"\n >\n {{ ampm }}\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"amw-timepicker__actions\">\n <button mat-button (click)=\"isOpen = false\">Cancel</button>\n <button mat-button color=\"primary\" (click)=\"selectTime(hours, minutes, seconds)\">OK</button>\n </div>\n </div>\n }\n</div>","import { Component, Input, Output, EventEmitter, ViewEncapsulation, OnChanges } from '@angular/core';\n\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { BaseComponent } from '../base/base.component';\nimport { ColorPickerConfig, ColorPickerMode } from './interfaces';\nimport { AmwSize } from '../../../shared/types/amw-size.type';\n\n@Component({\n selector: 'amw-color-picker',\n standalone: true,\n imports: [FormsModule, MatFormFieldModule, MatInputModule, MatIconModule, MatButtonModule, MatChipsModule],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-color-picker.component.html',\n styleUrl: './amw-color-picker.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: AmwColorPickerComponent,\n multi: true\n }\n ]\n})\nexport class AmwColorPickerComponent extends BaseComponent implements OnChanges {\n @Input() override set value(val: string) {\n this._value = val;\n this.selectedColor = val || '';\n this.updateColorFromValue();\n }\n override get value(): string {\n return this._value || '';\n }\n @Input() config: ColorPickerConfig = {};\n @Input() mode: ColorPickerMode = 'palette';\n @Input() size: AmwSize = 'medium';\n @Input() showInput = true;\n @Input() showPreview = true;\n @Input() showPalette = true;\n @Input() showCustom = true;\n @Input() override disabled = false;\n @Input() override required = false;\n\n @Output() colorChange = new EventEmitter<string>();\n @Output() colorPickerChange = new EventEmitter<string>();\n\n selectedColor = '';\n isOpen = false;\n customColor = '#000000';\n paletteColors = [\n '#000000', '#434343', '#666666', '#999999', '#B7B7B7', '#CCCCCC', '#D9D9D9', '#EFEFEF', '#F3F3F3', '#FFFFFF',\n '#980000', '#FF0000', '#FF9900', '#FFFF00', '#00FF00', '#00FFFF', '#4A86E8', '#0000FF', '#9900FF', '#FF00FF',\n '#E6B8AF', '#F4CCCC', '#FCE5CD', '#FFF2CC', '#D5E8D4', '#D5E8D4', '#DAE8FC', '#D5E8D4', '#E1D5E7', '#F8CECC',\n '#DD7E6B', '#EA9999', '#F9CB9C', '#FFE599', '#B6D7A8', '#A2C4C9', '#A4C2F4', '#9FC5E8', '#B4A7D6', '#F4CCCC',\n '#CC4125', '#E06666', '#F6B26B', '#FFD966', '#93C47D', '#76A5AF', '#6D9EEB', '#6FA8DC', '#8E7CC3', '#F4CCCC'\n ];\n\n ngOnInit() {\n this.selectedColor = this.value || '';\n this.updateColorFromValue();\n }\n\n ngOnChanges() {\n if (this.value !== this.selectedColor) {\n this.selectedColor = this.value || '';\n this.updateColorFromValue();\n }\n }\n\n override writeValue(value: any): void {\n this._value = value;\n this.selectedColor = value || '';\n this.updateColorFromValue();\n }\n\n onColorChange() {\n this.value = this.selectedColor;\n this.colorChange.emit(this.selectedColor);\n this.colorPickerChange.emit(this.selectedColor);\n }\n\n toggleColorPicker() {\n if (!this.disabled) {\n this.isOpen = !this.isOpen;\n }\n }\n\n selectColor(color: string) {\n this.selectedColor = color;\n this.onColorChange();\n this.isOpen = false;\n }\n\n onCustomColorChange() {\n this.selectedColor = this.customColor;\n this.onColorChange();\n }\n\n onInputChange(event: Event) {\n const target = event.target as HTMLInputElement;\n this.selectedColor = target.value;\n this.onColorChange();\n }\n\n private updateColorFromValue() {\n if (this.selectedColor && this.isValidColor(this.selectedColor)) {\n this.customColor = this.selectedColor;\n }\n }\n\n private isValidColor(color: string): boolean {\n const s = new Option().style;\n s.color = color;\n return s.color !== '';\n }\n\n override get isDisabled(): boolean {\n return this.disabled || this.isRequired;\n }\n\n get displayColor(): string {\n return this.selectedColor || '#000000';\n }\n}\n","<div class=\"amw-color-picker\" [class]=\"'amw-color-picker--' + size + ' amw-color-picker--' + mode\">\n <mat-form-field [appearance]=\"config.appearance || 'outline'\">\n @if (label) {\n <mat-label>{{ label }}</mat-label>\n }\n\n <input\n matInput\n [value]=\"selectedColor\"\n [placeholder]=\"placeholder\"\n [disabled]=\"isDisabled\"\n [required]=\"required\"\n readonly\n (click)=\"toggleColorPicker()\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <button\n matSuffix\n mat-icon-button\n type=\"button\"\n [disabled]=\"isDisabled\"\n (click)=\"toggleColorPicker()\"\n aria-label=\"Open color picker\"\n >\n <mat-icon>palette</mat-icon>\n </button>\n\n @if (hasValidationError) {\n <mat-error>\n {{ errorText }}\n </mat-error>\n }\n </mat-form-field>\n\n <!-- Color Preview -->\n @if (showPreview && selectedColor) {\n <div class=\"amw-color-picker__preview\">\n <div\n class=\"amw-color-picker__preview-color\"\n [style.background-color]=\"displayColor\"\n [title]=\"selectedColor\"\n ></div>\n <span class=\"amw-color-picker__preview-text\">{{ selectedColor }}</span>\n </div>\n }\n\n <!-- Color Picker Dropdown -->\n @if (isOpen) {\n <div class=\"amw-color-picker__dropdown\" (click)=\"$event.stopPropagation()\">\n <div class=\"amw-color-picker__header\">\n <span class=\"amw-color-picker__title\">Select Color</span>\n <button mat-icon-button (click)=\"isOpen = false\" aria-label=\"Close\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <div class=\"amw-color-picker__content\">\n <!-- Palette Colors -->\n @if (showPalette) {\n <div class=\"amw-color-picker__palette\">\n <div class=\"amw-color-picker__palette-title\">Color Palette</div>\n <div class=\"amw-color-picker__palette-grid\">\n @for (color of paletteColors; track color) {\n <button\n mat-icon-button\n class=\"amw-color-picker__color-button\"\n [class.amw-color-picker__color-button--selected]=\"selectedColor === color\"\n [style.background-color]=\"color\"\n [title]=\"color\"\n (click)=\"selectColor(color)\"\n [disabled]=\"isDisabled\"\n >\n @if (selectedColor === color) {\n <mat-icon class=\"amw-color-picker__check-icon\">check</mat-icon>\n }\n </button>\n }\n </div>\n </div>\n }\n <!-- Custom Color Input -->\n @if (showCustom) {\n <div class=\"amw-color-picker__custom\">\n <div class=\"amw-color-picker__custom-title\">Custom Color</div>\n <div class=\"amw-color-picker__custom-input\">\n <input\n type=\"color\"\n [(ngModel)]=\"customColor\"\n (change)=\"onCustomColorChange()\"\n [disabled]=\"isDisabled\"\n class=\"amw-color-picker__color-input\"\n />\n <input\n type=\"text\"\n [(ngModel)]=\"customColor\"\n (input)=\"onCustomColorChange()\"\n [disabled]=\"isDisabled\"\n placeholder=\"#000000\"\n class=\"amw-color-picker__text-input\"\n />\n </div>\n </div>\n }\n <!-- Text Input -->\n @if (showInput) {\n <div class=\"amw-color-picker__text\">\n <div class=\"amw-color-picker__text-title\">Color Value</div>\n <input\n type=\"text\"\n [value]=\"selectedColor\"\n (input)=\"onInputChange($event)\"\n [disabled]=\"isDisabled\"\n placeholder=\"Enter color value\"\n class=\"amw-color-picker__text-field\"\n />\n </div>\n }\n </div>\n <div class=\"amw-color-picker__actions\">\n <button mat-button (click)=\"isOpen = false\">Cancel</button>\n <button mat-button color=\"primary\" (click)=\"selectColor(selectedColor)\">OK</button>\n </div>\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation, OnInit, OnChanges, SimpleChanges, OnDestroy, ChangeDetectorRef, forwardRef } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatDividerModule } from '@angular/material/divider';\n// import { MatRippleModule } from '@angular/material/ripple';\nimport { Subject, takeUntil, debounceTime, distinctUntilChanged } from 'rxjs';\n\nimport { Chip, ChipConfig, ChipEvent, ChipChangeEvent, ChipMenuItem } from './interfaces';\n\n/**\n * AMW Chips Component\n * A comprehensive wrapper around Angular Material Chips with enhanced functionality\n */\n@Component({\n selector: 'amw-chips',\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatChipsModule,\n MatIconModule,\n MatButtonModule,\n MatInputModule,\n MatFormFieldModule,\n MatAutocompleteModule,\n MatMenuModule,\n MatTooltipModule,\n MatDividerModule\n],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-chips.component.html',\n styleUrl: './amw-chips.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AmwChipsComponent),\n multi: true\n }\n ]\n})\nexport class AmwChipsComponent implements OnInit, OnChanges, OnDestroy, ControlValueAccessor {\n // Input properties\n @Input() config: ChipConfig = {};\n @Input() chips: Chip[] = [];\n @Input() placeholder: string = 'Add a chip...';\n @Input() disabled: boolean = false;\n @Input() required: boolean = false;\n @Input() maxChips: number | null = null;\n @Input() minChips: number = 0;\n @Input() addable: boolean = true;\n @Input() removable: boolean = true;\n @Input() selectable: boolean = false;\n @Input() multiple: boolean = false;\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\n @Input() appearance: 'filled' | 'outlined' = 'filled';\n @Input() showInput: boolean = true;\n @Input() allowDuplicates: boolean = false;\n @Input() showSuggestions: boolean = false;\n @Input() maxSuggestions: number = 10;\n @Input() showMenus: boolean = false;\n @Input() defaultMenuItems: ChipMenuItem[] = [];\n @Input() errorMessage: string = '';\n @Input() hasError: boolean = false;\n @Input() ariaLabel: string = '';\n @Input() ariaDescribedby: string = '';\n\n // Output events\n @Output() chipAdd = new EventEmitter<ChipEvent>();\n @Output() chipRemove = new EventEmitter<ChipEvent>();\n @Output() chipSelect = new EventEmitter<ChipEvent>();\n @Output() chipDeselect = new EventEmitter<ChipEvent>();\n @Output() chipEdit = new EventEmitter<ChipEvent>();\n @Output() chipMenuItemClick = new EventEmitter<{ chip: Chip, menuItem: ChipMenuItem }>();\n @Output() chipsChange = new EventEmitter<ChipChangeEvent>();\n @Output() inputChange = new EventEmitter<string>();\n\n // Internal properties\n internalChips: Chip[] = [];\n inputValue: string = '';\n\n /** Current chip for menu operations */\n currentChip: Chip | null = null;\n filteredSuggestions: Chip[] = [];\n selectedChips: Set<string> = new Set();\n isInputFocused: boolean = false;\n private destroy$ = new Subject<void>();\n private inputSubject$ = new Subject<string>();\n\n // ControlValueAccessor properties\n private onChange = (chips: Chip[]) => { };\n private onTouched = () => { };\n\n constructor(private cdr: ChangeDetectorRef) { }\n\n ngOnInit(): void {\n this.initializeComponent();\n this.setupInputSubscription();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['config'] && this.config) {\n this.applyConfig();\n // Force re-initialization of chips from config\n this.internalChips = [...(this.chips?.length ? this.chips : this.config?.chips || [])];\n this.updateSelectedChips();\n }\n if (changes['chips']) {\n this.internalChips = [...(this.chips?.length ? this.chips : this.config?.chips || [])];\n this.updateSelectedChips();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Initialize component with default values\n */\n private initializeComponent(): void {\n this.applyConfig();\n this.internalChips = [...(this.chips?.length ? this.chips : this.config?.chips || [])];\n this.updateSelectedChips();\n }\n\n /**\n * Apply configuration to component properties\n */\n private applyConfig(): void {\n if (!this.config) return;\n\n this.placeholder = this.config.placeholder || this.placeholder;\n this.disabled = this.config.disabled ?? this.disabled;\n this.required = this.config.required ?? this.required;\n this.maxChips = this.config.maxChips ?? this.maxChips;\n this.minChips = this.config.minChips ?? this.minChips;\n this.addable = this.config.addable ?? this.addable;\n this.removable = this.config.removable ?? this.removable;\n this.selectable = this.config.selectable ?? this.selectable;\n this.multiple = this.config.multiple ?? this.multiple;\n this.size = this.config.size || this.size;\n this.appearance = this.config.appearance || this.appearance;\n this.showInput = this.config.showInput ?? this.showInput;\n this.allowDuplicates = this.config.allowDuplicates ?? this.allowDuplicates;\n this.showSuggestions = this.config.showSuggestions ?? this.showSuggestions;\n this.maxSuggestions = this.config.maxSuggestions ?? this.maxSuggestions;\n this.showMenus = this.config.showMenus ?? this.showMenus;\n this.defaultMenuItems = this.config.defaultMenuItems || this.defaultMenuItems;\n this.errorMessage = this.config.errorMessage || this.errorMessage;\n this.hasError = this.config.hasError ?? this.hasError;\n this.ariaLabel = this.config.ariaLabel || this.ariaLabel;\n this.ariaDescribedby = this.config.ariaDescribedby || this.ariaDescribedby;\n\n // Update internal chips if config has chips\n if (this.config.chips) {\n this.internalChips = [...this.config.chips];\n this.updateSelectedChips();\n }\n }\n\n /**\n * Setup input subscription for debounced input changes\n */\n private setupInputSubscription(): void {\n this.inputSubject$\n .pipe(\n debounceTime(300),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n )\n .subscribe(value => {\n this.inputChange.emit(value);\n this.filterSuggestions(value);\n });\n }\n\n /**\n * Update selected chips set based on current chips\n */\n private updateSelectedChips(): void {\n this.selectedChips.clear();\n this.internalChips.forEach(chip => {\n if (chip.selected) {\n this.selectedChips.add(chip.id);\n }\n });\n }\n\n /**\n * Filter suggestions based on input value\n */\n private filterSuggestions(query: string): void {\n if (!this.showSuggestions || !query.trim()) {\n this.filteredSuggestions = [];\n return;\n }\n\n const filterFn = this.config.filterFn || this.defaultFilterFn;\n this.filteredSuggestions = filterFn(query, this.internalChips)\n .slice(0, this.maxSuggestions);\n }\n\n /**\n * Default filter function for suggestions\n */\n private defaultFilterFn = (query: string, chips: Chip[]): Chip[] => {\n const lowerQuery = query.toLowerCase();\n return chips.filter(chip =>\n chip.label.toLowerCase().includes(lowerQuery) &&\n !this.internalChips.some(existing => existing.id === chip.id)\n );\n };\n\n /**\n * Add a new chip\n */\n addChip(label: string): void {\n if (!this.addable || this.disabled || !label.trim()) return;\n if (this.maxChips && this.internalChips.length >= this.maxChips) return;\n\n const chip: Chip = {\n id: this.generateId(),\n label: label.trim(),\n removable: this.removable,\n disabled: this.disabled,\n selected: false\n };\n\n // Check for duplicates\n if (!this.allowDuplicates && this.internalChips.some(c => c.label === chip.label)) {\n return;\n }\n\n // Validate chip\n if (this.config.validator) {\n const validation = this.config.validator(chip);\n if (validation !== true) {\n this.errorMessage = typeof validation === 'string' ? validation : 'Invalid chip';\n this.hasError = true;\n return;\n }\n }\n\n // Use custom add function if provided\n if (this.config.onAdd) {\n const result = this.config.onAdd(chip);\n if (result instanceof Promise) {\n result.then((addedChip: Chip) => {\n this.internalChips.push(addedChip);\n this.emitChipEvent('add', addedChip, this.internalChips.length - 1);\n this.inputValue = '';\n this.cdr.detectChanges();\n });\n } else {\n this.internalChips.push(result);\n this.emitChipEvent('add', result, this.internalChips.length - 1);\n this.inputValue = '';\n }\n } else {\n this.internalChips.push(chip);\n this.emitChipEvent('add', chip, this.internalChips.length - 1);\n this.inputValue = '';\n }\n }\n\n /**\n * Remove a chip\n */\n removeChip(chip: Chip, index: number): void {\n if (!this.removable || this.disabled) return;\n if (this.internalChips.length <= this.minChips) return;\n\n // Use custom remove function if provided\n if (this.config.onRemove) {\n const result = this.config.onRemove(chip);\n if (result instanceof Promise) {\n result.then((shouldRemove: boolean) => {\n if (shouldRemove) {\n this.internalChips.splice(index, 1);\n this.selectedChips.delete(chip.id);\n this.emitChipEvent('remove', chip, index);\n this.cdr.detectChanges();\n }\n });\n } else if (result) {\n this.internalChips.splice(index, 1);\n this.selectedChips.delete(chip.id);\n this.emitChipEvent('remove', chip, index);\n }\n } else {\n this.internalChips.splice(index, 1);\n this.selectedChips.delete(chip.id);\n this.emitChipEvent('remove', chip, index);\n }\n }\n\n /**\n * Select a chip\n */\n selectChip(chip: Chip, index: number): void {\n if (!this.selectable || this.disabled || chip.disabled) return;\n\n if (this.multiple) {\n chip.selected = !chip.selected;\n if (chip.selected) {\n this.selectedChips.add(chip.id);\n this.emitChipEvent('select', chip, index);\n } else {\n this.selectedChips.delete(chip.id);\n this.emitChipEvent('deselect', chip, index);\n }\n } else {\n // Single selection - deselect all others\n this.internalChips.forEach((c, i) => {\n if (i !== index) {\n c.selected = false;\n this.selectedChips.delete(c.id);\n }\n });\n chip.selected = true;\n this.selectedChips.add(chip.id);\n this.emitChipEvent('select', chip, index);\n }\n\n this.cdr.detectChanges();\n }\n\n /**\n * Handle input key events\n */\n onInputKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n this.addChip(this.inputValue);\n } else if (event.key === 'Backspace' && !this.inputValue && this.internalChips.length > 0) {\n // Remove last chip when backspace is pressed on empty input\n const lastIndex = this.internalChips.length - 1;\n this.removeChip(this.internalChips[lastIndex], lastIndex);\n }\n }\n\n /**\n * Handle input value changes\n */\n onInputChange(value: string): void {\n this.inputValue = value;\n this.inputSubject$.next(value);\n }\n\n /**\n * Handle input focus\n */\n onInputFocus(): void {\n this.isInputFocused = true;\n if (this.inputValue) {\n this.filterSuggestions(this.inputValue);\n }\n }\n\n /**\n * Handle input blur\n */\n onInputBlur(): void {\n this.isInputFocused = false;\n this.onTouched();\n }\n\n /**\n * Clear all chips\n */\n clearChips(): void {\n if (this.disabled) return;\n this.internalChips = [];\n this.selectedChips.clear();\n this.emitChipEvent('clear', null as any, -1);\n }\n\n /**\n * Get selected chips\n */\n getSelectedChips(): Chip[] {\n return this.internalChips.filter(chip => chip.selected);\n }\n\n /**\n * Check if chip can be removed\n */\n canRemoveChip(chip: Chip): boolean {\n return this.removable && !this.disabled && chip.removable !== false;\n }\n\n /**\n * Check if chip can be selected\n */\n canSelectChip(chip: Chip): boolean {\n return this.selectable && !this.disabled && !chip.disabled;\n }\n\n /**\n * Track by function for chips\n */\n trackByChipId(index: number, chip: Chip): string {\n return chip.id;\n }\n\n /**\n * Display function for chip suggestions\n */\n displayChipLabel(chip: Chip): string {\n return chip ? chip.label : '';\n }\n\n /**\n * Handle suggestion selection\n */\n onSuggestionSelected(event: any): void {\n const chip = event.option.value;\n this.addChip(chip.label);\n }\n\n /**\n * Focus the input field\n */\n focusInput(): void {\n // This would be implemented to focus the hidden input\n // For now, we'll emit an event to show the input\n this.showInput = true;\n this.cdr.detectChanges();\n }\n\n /**\n * Get menu items for a chip\n */\n getChipMenuItems(chip: Chip): ChipMenuItem[] {\n if (chip.menuItems && chip.menuItems.length > 0) {\n return chip.menuItems.filter(item => item.visible !== false);\n }\n return this.defaultMenuItems.filter(item => item.visible !== false);\n }\n\n /**\n * Check if chip should show menu\n */\n shouldShowMenu(chip: Chip): boolean {\n return this.showMenus && !chip.disabled && this.getChipMenuItems(chip).length > 0;\n }\n\n /**\n * Get current menu items for the active chip\n */\n getCurrentMenuItems(): ChipMenuItem[] {\n if (!this.currentChip) return [];\n return this.getChipMenuItems(this.currentChip);\n }\n\n /**\n * Open menu for a specific chip\n */\n openMenu(chip: Chip, event: Event): void {\n event.stopPropagation();\n this.currentChip = chip;\n }\n\n /**\n * Handle menu item click\n */\n onMenuItemClick(chip: Chip, menuItem: ChipMenuItem): void {\n if (menuItem.disabled) return;\n\n // Execute custom action if provided\n if (menuItem.action) {\n menuItem.action(chip, menuItem);\n }\n\n // Execute config handler if provided\n if (this.config.onMenuItemClick) {\n this.config.onMenuItemClick(chip, menuItem);\n }\n\n // Emit event\n this.chipMenuItemClick.emit({ chip, menuItem });\n\n // Clear current chip\n this.currentChip = null;\n }\n\n /**\n * Generate unique ID for chip\n */\n private generateId(): string {\n return `chip_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n\n /**\n * Emit chip event\n */\n private emitChipEvent(type: 'add' | 'remove' | 'select' | 'deselect' | 'edit' | 'clear', chip: Chip | null, index: number): void {\n const event: ChipEvent = {\n chip: chip!,\n index,\n type\n };\n\n const changeEvent: ChipChangeEvent = {\n chips: [...this.internalChips],\n changedChip: chip || undefined,\n changeType: type,\n index: index >= 0 ? index : undefined\n };\n\n // Emit specific event\n switch (type) {\n case 'add':\n this.chipAdd.emit(event);\n break;\n case 'remove':\n this.chipRemove.emit(event);\n break;\n case 'select':\n this.chipSelect.emit(event);\n break;\n case 'deselect':\n this.chipDeselect.emit(event);\n break;\n case 'edit':\n this.chipEdit.emit(event);\n break;\n }\n\n // Emit general change event\n this.chipsChange.emit(changeEvent);\n this.onChange(this.internalChips);\n }\n\n // ControlValueAccessor implementation\n writeValue(value: Chip[]): void {\n this.internalChips = value ? [...value] : [];\n this.updateSelectedChips();\n this.cdr.detectChanges();\n }\n\n registerOnChange(fn: (value: Chip[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.detectChanges();\n }\n}\n","<div class=\"amw-chips\"\n [class]=\"config.classes\"\n [class.amw-chips--disabled]=\"disabled\"\n [class.amw-chips--error]=\"hasError\"\n [class.amw-chips--small]=\"size === 'small'\"\n [class.amw-chips--medium]=\"size === 'medium'\"\n [class.amw-chips--large]=\"size === 'large'\"\n [class.amw-chips--filled]=\"appearance === 'filled'\"\n [class.amw-chips--outlined]=\"appearance === 'outlined'\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-describedby]=\"ariaDescribedby\">\n\n <!-- Chips Container -->\n <mat-chip-set\n class=\"amw-chips__container\"\n [class.amw-chips__container--selectable]=\"selectable\"\n [class.amw-chips__container--multiple]=\"multiple\">\n\n <!-- Individual Chips -->\n @for (chip of internalChips; track trackByChipId(i, chip); let i = $index) {\n <mat-chip\n class=\"amw-chips__chip\"\n [class.amw-chips__chip--selected]=\"chip.selected\"\n [class.amw-chips__chip--disabled]=\"chip.disabled\"\n [class.amw-chips__chip--removable]=\"canRemoveChip(chip)\"\n [class.amw-chips__chip--selectable]=\"canSelectChip(chip)\"\n [class.amw-chips__chip--menu]=\"shouldShowMenu(chip)\"\n [class]=\"chip.classes\"\n [disabled]=\"chip.disabled\"\n [removable]=\"canRemoveChip(chip)\"\n [matTooltip]=\"chip.label\"\n [matTooltipDisabled]=\"chip.label.length < 20\"\n (click)=\"canSelectChip(chip) && selectChip(chip, i)\"\n (removed)=\"removeChip(chip, i)\"\n [attr.aria-label]=\"chip.label\"\n [attr.aria-selected]=\"chip.selected\"\n [attr.aria-disabled]=\"chip.disabled\">\n <!-- Chip Avatar (if provided) -->\n @if (chip.avatar) {\n <img\n class=\"amw-chips__chip-avatar\"\n [src]=\"chip.avatar\"\n [alt]=\"chip.label\">\n }\n <!-- Chip Icon (if provided) -->\n @if (chip.icon && !chip.avatar) {\n <mat-icon\n class=\"amw-chips__chip-icon\">\n {{ chip.icon }}\n </mat-icon>\n }\n <!-- Chip Label -->\n <span class=\"amw-chips__chip-label\">{{ chip.label }}</span>\n <!-- Menu Button -->\n @if (shouldShowMenu(chip)) {\n <button\n class=\"amw-chips__chip-menu\"\n mat-icon-button\n [matMenuTriggerFor]=\"chipMenu\"\n [attr.aria-label]=\"'Menu for ' + chip.label\"\n (click)=\"openMenu(chip, $event)\">\n <span class=\"amw-chips__menu-icon\">⋮</span>\n </button>\n }\n <!-- Remove Button -->\n @if (canRemoveChip(chip)) {\n <button\n class=\"amw-chips__chip-remove\"\n matChipRemove\n [attr.aria-label]=\"'Remove ' + chip.label\"\n (click)=\"$event.stopPropagation()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-chip>\n }\n </mat-chip-set>\n\n <!-- Chip Menu Template -->\n <mat-menu #chipMenu class=\"amw-chips__menu\">\n @for (menuItem of getCurrentMenuItems(); track menuItem; let isLast = $last) {\n <button\n mat-menu-item\n class=\"amw-chips__menu-item\"\n [class]=\"menuItem.classes\"\n [disabled]=\"menuItem.disabled\"\n (click)=\"onMenuItemClick(currentChip!, menuItem)\">\n @if (menuItem.icon) {\n <mat-icon class=\"amw-chips__menu-item-icon\">\n {{ menuItem.icon }}\n </mat-icon>\n }\n <span class=\"amw-chips__menu-item-label\">{{ menuItem.label }}</span>\n </button>\n }\n @if (getCurrentMenuItems().length > 1) {\n <mat-divider></mat-divider>\n }\n </mat-menu>\n\n <!-- Input Field (if enabled) -->\n @if (showInput && addable) {\n <mat-form-field\n class=\"amw-chips__input\"\n appearance=\"outline\"\n [class.amw-chips__input--focused]=\"isInputFocused\">\n @if (placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <input matInput\n class=\"amw-chips__input-field\"\n [(ngModel)]=\"inputValue\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"'Add chip input'\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n (keydown)=\"onInputKeydown($event)\"\n (input)=\"onInputChange($event.target.value)\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n [matAutocomplete]=\"suggestionsPanel\">\n <!-- Suggestions Panel -->\n <mat-autocomplete #suggestionsPanel=\"matAutocomplete\"\n class=\"amw-chips__suggestions\"\n [displayWith]=\"displayChipLabel\"\n (optionSelected)=\"onSuggestionSelected($event)\">\n @for (suggestion of filteredSuggestions; track trackByChipId($index, suggestion)) {\n <mat-option\n [value]=\"suggestion\"\n class=\"amw-chips__suggestion\">\n {{ suggestion.label }}\n </mat-option>\n }\n </mat-autocomplete>\n <!-- Error State -->\n @if (hasError && errorMessage) {\n <mat-error\n class=\"amw-chips__error\">\n {{ errorMessage }}\n </mat-error>\n }\n <!-- Hint Text -->\n @if (!hasError && (maxChips || minChips)) {\n <mat-hint\n class=\"amw-chips__hint\">\n @if (maxChips) {\n <span>Max {{ maxChips }} chips</span>\n }\n @if (minChips && maxChips) {\n <span> • </span>\n }\n @if (minChips) {\n <span>Min {{ minChips }} chips</span>\n }\n </mat-hint>\n }\n </mat-form-field>\n }\n\n <!-- Action Buttons -->\n @if (!showInput && addable) {\n <div\n class=\"amw-chips__actions\">\n <button mat-icon-button\n class=\"amw-chips__add-button\"\n [disabled]=\"disabled || (maxChips && internalChips.length >= maxChips)\"\n [matTooltip]=\"'Add chip'\"\n (click)=\"focusInput()\">\n <mat-icon>add</mat-icon>\n </button>\n @if (internalChips.length > 0) {\n <button\n mat-icon-button\n class=\"amw-chips__clear-button\"\n [disabled]=\"disabled\"\n [matTooltip]=\"'Clear all chips'\"\n (click)=\"clearChips()\">\n <mat-icon>clear_all</mat-icon>\n </button>\n }\n </div>\n }\n\n <!-- Hidden Input for Focus Management -->\n @if (!showInput && addable) {\n <input\n #hiddenInput\n class=\"amw-chips__hidden-input\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n (keydown)=\"onInputKeydown($event)\"\n (input)=\"onInputChange($event.target.value)\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\">\n }\n</div>\n","// Controls components will be exported here\nexport * from './base/base.component';\nexport * from './amw-button/amw-button.component';\nexport * from './amw-input/amw-input.component';\nexport * from './amw-select/amw-select.component';\nexport * from './amw-radio-group/amw-radio-group.component';\nexport * from './amw-autocomplete/amw-autocomplete.component';\nexport * from './amw-datepicker/amw-datepicker.component';\nexport * from './amw-checkbox/amw-checkbox.component';\nexport * from './amw-radio/amw-radio.component';\nexport * from './amw-slider/amw-slider.component';\nexport * from './amw-toggle/amw-toggle.component';\nexport * from './amw-textarea/amw-textarea.component';\nexport * from './amw-range-slider/amw-range-slider.component';\nexport * from './amw-switch/amw-switch.component';\nexport * from './amw-file-input/amw-file-input.component';\nexport * from './amw-timepicker/amw-timepicker.component';\nexport * from './amw-color-picker/amw-color-picker.component';\nexport * from './amw-chips/amw-chips.component';\n","import { Injectable } from '@angular/core';\nimport { CalendarItemType, CalendarItemTypeRegistry, CalendarItem, CalendarItemTimePattern } from '../interfaces/calendar-item.interface';\n\n/**\n * Service for managing calendar item type registrations\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class CalendarItemRegistryService {\n private registry: CalendarItemTypeRegistry = {};\n\n /**\n * Register a new calendar item type\n */\n registerItemType<T>(itemType: CalendarItemType<T>): void {\n this.registry[itemType.type] = itemType;\n }\n\n /**\n * Unregister a calendar item type\n */\n unregisterItemType(type: string): void {\n delete this.registry[type];\n }\n\n /**\n * Get all registered item types\n */\n getRegisteredTypes(): CalendarItemType<any>[] {\n return Object.values(this.registry);\n }\n\n /**\n * Get a specific item type\n */\n getItemType(type: string): CalendarItemType<any> | undefined {\n return this.registry[type];\n }\n\n /**\n * Check if a type is registered\n */\n isTypeRegistered(type: string): boolean {\n return type in this.registry;\n }\n\n /**\n * Get the number of registered types\n */\n getTypeCount(): number {\n return Object.keys(this.registry).length;\n }\n\n /**\n * Create a new item of the specified type\n */\n createItem<T>(type: string, date: Date, timePattern: CalendarItemTimePattern): CalendarItem<T> | null {\n const itemType = this.getItemType(type);\n if (!itemType) {\n console.warn(`Calendar item type '${type}' is not registered`);\n return null;\n }\n\n if (!itemType.timePatterns.includes(timePattern)) {\n console.warn(`Time pattern '${timePattern}' is not supported for type '${type}'`);\n return null;\n }\n\n return itemType.createItem(date, timePattern);\n }\n\n /**\n * Validate an item against its type definition\n */\n validateItem<T>(item: CalendarItem<T>): boolean {\n // For now, just validate that the item has required properties\n return !!(item.id && item.title && item.start);\n }\n\n /**\n * Get available time patterns for a type\n */\n getTimePatternsForType(type: string): CalendarItemTimePattern[] {\n const itemType = this.getItemType(type);\n return itemType?.timePatterns || [];\n }\n\n /**\n * Get default time pattern for a type\n */\n getDefaultTimePatternForType(type: string): CalendarItemTimePattern | null {\n const itemType = this.getItemType(type);\n return itemType?.defaultTimePattern || null;\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ContentChild, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { CalendarItem, CalendarItemEditorContext, CalendarItemTimePattern, CalendarItemTemplateContext } from './interfaces/calendar-item.interface';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'amw-calendar-item-editor',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatCheckboxModule\n],\n templateUrl: './amw-calendar-item-editor.component.html',\n styleUrls: ['./amw-calendar-item-editor.component.scss']\n})\nexport class AmwCalendarItemEditorComponent<T = any> implements OnInit, OnDestroy {\n @Input() context!: CalendarItemEditorContext<T>;\n @Output() save = new EventEmitter<CalendarItem<T>>();\n @Output() cancel = new EventEmitter<void>();\n @Output() delete = new EventEmitter<CalendarItem<T>>();\n\n // Custom field templates projected from parent\n @ContentChild('customFieldsTemplate') customFieldsTemplate?: TemplateRef<CalendarItemTemplateContext<T>>;\n @ContentChild('customReadonlyFieldsTemplate') customReadonlyFieldsTemplate?: TemplateRef<CalendarItemTemplateContext<T>>;\n\n item: CalendarItem<T> = {\n id: '',\n title: '',\n description: '',\n start: new Date(),\n end: new Date(),\n allDay: false,\n color: '#6750a4',\n timePattern: 'datetime',\n editable: true,\n deletable: true,\n draggable: true,\n data: {} as T\n };\n\n itemType = 'Event';\n startDate = '';\n startTime = '09:00';\n endTime = '10:00';\n completed = false;\n\n private destroy$ = new Subject<void>();\n\n get isEditing(): boolean {\n return this.context?.isEditing || false;\n }\n\n get customFieldsTemplateContext(): CalendarItemTemplateContext<T> {\n return {\n $implicit: this.item,\n item: this.item,\n data: this.item.data,\n isEditing: this.isEditing\n };\n }\n\n getHeaderTitle(): string {\n if (this.isEditing) {\n return this.item.id ? 'Edit Item' : 'Create Item';\n }\n return 'Item Details';\n }\n\n getFormattedDate(): string {\n return this.item.start.toLocaleDateString();\n }\n\n getFormattedTime(): string {\n if (this.item.allDay) {\n return 'All Day';\n }\n const start = this.item.start.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n if (this.item.end) {\n const end = this.item.end.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n return `${start} - ${end}`;\n }\n return start;\n }\n\n onEdit(): void {\n // Switch to edit mode\n this.context.isEditing = true;\n }\n\n ngOnInit(): void {\n if (this.context) {\n this.initializeFromContext();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private initializeFromContext(): void {\n if (this.context.item) {\n // Editing existing item\n this.item = { ...this.context.item };\n } else {\n // Creating new item\n this.item.start = this.context.startDate;\n this.item.end = this.context.endDate || this.context.startDate;\n }\n\n this.itemType = this.context.itemType;\n this.startDate = this.formatDateForInput(this.item.start);\n this.startTime = this.formatTimeForInput(this.item.start);\n this.endTime = this.item.end ? this.formatTimeForInput(this.item.end) : '10:00';\n this.completed = (this.item.data as any)?.completed || false;\n }\n\n private formatDateForInput(date: Date): string {\n return date.toISOString().split('T')[0];\n }\n\n private formatTimeForInput(date: Date): string {\n return date.toTimeString().slice(0, 5);\n }\n\n async onSave(): Promise<void> {\n // Update item with form data\n this.item.title = this.item.title || '';\n this.item.description = this.item.description || '';\n this.item.start = new Date(`${this.startDate}T${this.startTime}`);\n this.item.end = this.item.allDay ?\n new Date(`${this.startDate}T23:59:59`) :\n new Date(`${this.startDate}T${this.endTime}`);\n\n this.item.data = {\n ...this.item.data,\n itemType: this.itemType,\n completed: this.completed\n } as T;\n\n // Validate custom fields if validator is provided\n if (this.context?.validateCustomFields) {\n const isValid = await Promise.resolve(this.context.validateCustomFields(this.item.data));\n if (!isValid) {\n console.warn('Custom field validation failed');\n return;\n }\n }\n\n this.save.emit(this.item);\n }\n\n onCancel(): void {\n this.cancel.emit();\n }\n\n onDelete(): void {\n if (this.item.id) {\n this.delete.emit(this.item);\n }\n }\n\n}\n","<div class=\"amw-calendar-item-editor\">\n <div class=\"amw-calendar-item-editor__header\">\n <h3>{{ getHeaderTitle() }}</h3>\n </div>\n\n <div class=\"amw-calendar-item-editor__content\">\n <!-- Read-only view -->\n @if (!isEditing) {\n <div class=\"amw-calendar-item-editor__readonly\">\n <div class=\"amw-calendar-item-editor__field\">\n <label>Title:</label>\n <span class=\"amw-calendar-item-editor__value\">{{ item.title || 'No title' }}</span>\n </div>\n @if (item.description) {\n <div class=\"amw-calendar-item-editor__field\">\n <label>Description:</label>\n <span class=\"amw-calendar-item-editor__value\">{{ item.description }}</span>\n </div>\n }\n <div class=\"amw-calendar-item-editor__field\">\n <label>Type:</label>\n <span class=\"amw-calendar-item-editor__value\">{{ itemType }}</span>\n </div>\n <div class=\"amw-calendar-item-editor__field\">\n <label>Date:</label>\n <span class=\"amw-calendar-item-editor__value\">{{ getFormattedDate() }}</span>\n </div>\n @if (!item.allDay) {\n <div class=\"amw-calendar-item-editor__field\">\n <label>Time:</label>\n <span class=\"amw-calendar-item-editor__value\">{{ getFormattedTime() }}</span>\n </div>\n }\n @if (item.allDay) {\n <div class=\"amw-calendar-item-editor__field\">\n <label>Duration:</label>\n <span class=\"amw-calendar-item-editor__value\">All Day</span>\n </div>\n }\n @if (itemType === 'Task') {\n <div class=\"amw-calendar-item-editor__field\">\n <label>Status:</label>\n <span class=\"amw-calendar-item-editor__value\">{{ completed ? 'Completed' : 'Pending' }}</span>\n </div>\n }\n\n <!-- Custom readonly fields template outlet -->\n @if (customReadonlyFieldsTemplate || context.customReadonlyFieldsTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"customReadonlyFieldsTemplate || context.customReadonlyFieldsTemplate\"\n [ngTemplateOutletContext]=\"customFieldsTemplateContext\">\n </ng-container>\n }\n </div>\n }\n\n <!-- Edit/Create view -->\n @if (isEditing) {\n <div>\n <div class=\"amw-calendar-item-editor__field\">\n <label>Title:</label>\n <input type=\"text\"\n [(ngModel)]=\"item.title\"\n placeholder=\"Item title\"\n class=\"amw-calendar-item-editor__input\">\n </div>\n <div class=\"amw-calendar-item-editor__field\">\n <label>Description:</label>\n <textarea [(ngModel)]=\"item.description\"\n placeholder=\"Item description\"\n class=\"amw-calendar-item-editor__textarea\"></textarea>\n </div>\n <div class=\"amw-calendar-item-editor__field\">\n <label>Type:</label>\n <select [(ngModel)]=\"itemType\" class=\"amw-calendar-item-editor__select\">\n <option value=\"Event\">Event</option>\n <option value=\"Task\">Task</option>\n <option value=\"Meal\">Meal</option>\n <option value=\"Vacation\">Vacation</option>\n <option value=\"Appointment\">Appointment</option>\n </select>\n </div>\n <div class=\"amw-calendar-item-editor__field\">\n <label>Start Date:</label>\n <input type=\"date\"\n [(ngModel)]=\"startDate\"\n class=\"amw-calendar-item-editor__input\">\n </div>\n @if (!item.allDay) {\n <div class=\"amw-calendar-item-editor__field\">\n <label>Start Time:</label>\n <input type=\"time\"\n [(ngModel)]=\"startTime\"\n class=\"amw-calendar-item-editor__input\">\n </div>\n }\n @if (!item.allDay) {\n <div class=\"amw-calendar-item-editor__field\">\n <label>End Time:</label>\n <input type=\"time\"\n [(ngModel)]=\"endTime\"\n class=\"amw-calendar-item-editor__input\">\n </div>\n }\n <div class=\"amw-calendar-item-editor__field\">\n <label>\n <input type=\"checkbox\"\n [(ngModel)]=\"item.allDay\"\n class=\"amw-calendar-item-editor__checkbox\">\n All Day\n </label>\n </div>\n @if (itemType === 'Task') {\n <div class=\"amw-calendar-item-editor__field\">\n <label>\n <input type=\"checkbox\"\n [(ngModel)]=\"completed\"\n class=\"amw-calendar-item-editor__checkbox\">\n Completed\n </label>\n </div>\n }\n\n <!-- Custom editable fields template outlet -->\n @if (customFieldsTemplate || context.customFieldsTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"customFieldsTemplate || context.customFieldsTemplate\"\n [ngTemplateOutletContext]=\"customFieldsTemplateContext\">\n </ng-container>\n }\n </div>\n }\n </div>\n\n <div class=\"amw-calendar-item-editor__actions\">\n <button mat-button (click)=\"onCancel()\" class=\"amw-calendar-item-editor__action\">\n {{ isEditing ? 'Cancel' : 'Close' }}\n </button>\n @if (!isEditing && item.id) {\n <button\n mat-button\n (click)=\"onDelete()\"\n class=\"amw-calendar-item-editor__action amw-calendar-item-editor__action--danger\">\n Delete\n </button>\n }\n @if (!isEditing) {\n <button\n mat-raised-button\n (click)=\"onEdit()\"\n class=\"amw-calendar-item-editor__action amw-calendar-item-editor__action--primary\">\n Edit\n </button>\n }\n @if (isEditing) {\n <button\n mat-raised-button\n (click)=\"onSave()\"\n class=\"amw-calendar-item-editor__action amw-calendar-item-editor__action--primary\">\n {{ isEditing && item.id ? 'Save' : 'Create' }}\n </button>\n }\n @if (isEditing && item.id) {\n <button\n mat-button\n (click)=\"onDelete()\"\n class=\"amw-calendar-item-editor__action amw-calendar-item-editor__action--danger\">\n Delete\n </button>\n }\n </div>\n</div>\n","import { Injectable, ComponentRef, TemplateRef, ViewContainerRef, Injector } from '@angular/core';\nimport { Overlay, OverlayRef, OverlayConfig, PositionStrategy, GlobalPositionStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport { AmwCalendarItemEditorComponent } from '../amw-calendar-item-editor.component';\nimport { CalendarItemEditorContext } from '../interfaces/calendar-item.interface';\n\n/**\n * Service for managing calendar item editor popovers\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class CalendarItemPopoverService {\n private overlayRef: OverlayRef | null = null;\n\n constructor(private overlay: Overlay) { }\n\n /**\n * Open calendar item editor popover\n */\n openEditor<T>(\n context: CalendarItemEditorContext<T>,\n triggerElement?: HTMLElement,\n position: 'top' | 'bottom' | 'left' | 'right' = 'bottom'\n ): ComponentRef<AmwCalendarItemEditorComponent<T>> | null {\n // Close any existing popover\n this.closeEditor();\n\n // Create overlay configuration\n const config: OverlayConfig = {\n hasBackdrop: true,\n backdropClass: 'amw-calendar-item-editor-backdrop',\n positionStrategy: this.createPositionStrategy(triggerElement, position),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n width: 'auto',\n height: 'auto',\n // Remove maxWidth constraint that might be affecting positioning\n maxHeight: '90vh',\n // Ensure overlay is constrained to viewport\n panelClass: 'amw-calendar-item-editor-overlay'\n };\n\n // Create overlay\n this.overlayRef = this.overlay.create(config);\n\n // Create component portal\n const portal = new ComponentPortal(\n AmwCalendarItemEditorComponent,\n null,\n this.createInjector(context)\n );\n\n // Attach component to overlay\n const componentRef = this.overlayRef.attach(portal);\n\n // Set the context on the component instance\n componentRef.instance.context = context;\n\n // Handle backdrop click to close\n this.overlayRef.backdropClick().subscribe(() => {\n this.closeEditor();\n });\n\n return componentRef;\n }\n\n /**\n * Close the current editor popover\n */\n closeEditor(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n /**\n * Check if editor is open\n */\n isEditorOpen(): boolean {\n return this.overlayRef !== null;\n }\n\n /**\n * Create position strategy for the popover\n */\n private createPositionStrategy(\n triggerElement?: HTMLElement,\n position: 'top' | 'bottom' | 'left' | 'right' = 'bottom'\n ): PositionStrategy {\n console.log('createPositionStrategy called with:', { triggerElement, position });\n\n if (triggerElement) {\n console.log('Using trigger element for positioning:', triggerElement);\n const rect = triggerElement.getBoundingClientRect();\n console.log('Trigger element bounds:', rect);\n\n // Try a more direct approach - use global positioning with calculated coordinates\n const viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n\n // Calculate responsive popover dimensions based on viewport\n const popoverWidth = Math.min(400, viewportWidth * 0.4); // Max 40% of viewport width\n const popoverHeight = Math.min(300, viewportHeight * 0.4); // Max 40% of viewport height\n\n // Calculate position based on trigger element and preferred direction\n let x: number, y: number;\n\n switch (position) {\n case 'top':\n // Center horizontally, position above\n x = rect.left + (rect.width / 2) - (popoverWidth / 2);\n y = rect.top - popoverHeight - 8;\n break;\n case 'bottom':\n // Center horizontally, position below\n x = rect.left + (rect.width / 2) - (popoverWidth / 2);\n y = rect.bottom + 8;\n break;\n case 'left':\n // Center vertically, position to the left\n x = rect.left - popoverWidth - 8;\n y = rect.top + (rect.height / 2) - (popoverHeight / 2);\n break;\n case 'right':\n // Center vertically, position to the right\n x = rect.right + 8;\n y = rect.top + (rect.height / 2) - (popoverHeight / 2);\n break;\n default:\n // Default to bottom, centered\n x = rect.left + (rect.width / 2) - (popoverWidth / 2);\n y = rect.bottom + 8;\n }\n\n // Responsive viewport boundary adjustments\n const margin = Math.max(16, viewportWidth * 0.02); // 2% of viewport width, min 16px\n\n // Horizontal positioning with better fallbacks\n if (x < margin) {\n x = margin;\n } else if (x + popoverWidth > viewportWidth - margin) {\n // Try alternative positioning\n if (position === 'right' || position === 'left') {\n // For horizontal positioning, try the opposite side\n x = position === 'right' ? rect.left - popoverWidth - 8 : rect.right + 8;\n if (x < margin) x = margin;\n if (x + popoverWidth > viewportWidth - margin) x = viewportWidth - popoverWidth - margin;\n } else {\n // For vertical positioning, try centering\n x = Math.max(margin, Math.min(viewportWidth - popoverWidth - margin,\n rect.left + (rect.width / 2) - (popoverWidth / 2)));\n }\n }\n\n // Vertical positioning with better fallbacks\n if (y < margin) {\n y = margin;\n } else if (y + popoverHeight > viewportHeight - margin) {\n // Try alternative positioning\n if (position === 'top' || position === 'bottom') {\n // For vertical positioning, try the opposite side\n y = position === 'bottom' ? rect.top - popoverHeight - 8 : rect.bottom + 8;\n if (y < margin) y = margin;\n if (y + popoverHeight > viewportHeight - margin) y = viewportHeight - popoverHeight - margin;\n } else {\n // For horizontal positioning, try centering\n y = Math.max(margin, Math.min(viewportHeight - popoverHeight - margin,\n rect.top + (rect.height / 2) - (popoverHeight / 2)));\n }\n }\n\n const positionStrategy = this.overlay.position().global()\n .left(`${x}px`)\n .top(`${y}px`);\n\n return positionStrategy;\n } else {\n // Center on screen\n return this.overlay.position().global()\n .centerHorizontally()\n .centerVertically();\n }\n }\n\n /**\n * Create injector with context data\n */\n private createInjector<T>(context: CalendarItemEditorContext<T>): Injector {\n return Injector.create({\n providers: [\n { provide: 'CALENDAR_ITEM_EDITOR_CONTEXT', useValue: context }\n ]\n });\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, OnDestroy, ChangeDetectorRef, SimpleChanges, ViewEncapsulation, ComponentRef, ContentChild, TemplateRef } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { Subject, takeUntil } from 'rxjs';\nimport { CalendarEvent, CalendarEventChangeEvent, CalendarConfig, CalendarView, CalendarNavigationEvent } from './interfaces';\nimport { CalendarItem, CalendarItemChangeEvent, CalendarItemEditorContext, CalendarItemTimePattern, CalendarItemTemplateContext } from './interfaces/calendar-item.interface';\nimport { CalendarItemConfig } from './interfaces/calendar-item-config.interface';\nimport { CalendarItemRegistryService } from './services/calendar-item-registry.service';\nimport { CalendarItemPopoverService } from './services/calendar-item-popover.service';\nimport { AmwCalendarItemDialogComponent, CalendarItemDialogData } from './amw-calendar-item-dialog.component';\nimport { MatDialog } from '@angular/material/dialog';\n\n/**\n * Base calendar component with shared logic\n * This component contains the common TypeScript logic for both calendar variants\n */\n@Component({\n selector: 'amw-calendar-base',\n standalone: true,\n imports: [FormsModule],\n template: '<div>Base calendar component - not meant to be used directly</div>',\n encapsulation: ViewEncapsulation.None\n})\nexport abstract class AmwCalendarBaseComponent<T = any> implements OnInit, OnChanges, OnDestroy {\n // Input properties\n @Input() events: CalendarEvent<T>[] = [];\n @Input() config: CalendarConfig<T> | null = null;\n @Input() currentDate: Date = new Date();\n @Input() view: CalendarView = 'month';\n @Input() loading: boolean = false;\n @Input() disabled: boolean = false;\n\n // New item system properties\n @Input() items: CalendarItem<T>[] = [];\n @Input() itemConfig: CalendarItemConfig<T> | null = null;\n @Input() useNewItemSystem: boolean = false;\n\n // Output events (legacy)\n @Output() eventChange = new EventEmitter<CalendarEventChangeEvent<T>>();\n @Output() eventClick = new EventEmitter<CalendarEvent<T>>();\n @Output() eventDoubleClick = new EventEmitter<CalendarEvent<T>>();\n @Output() eventEdit = new EventEmitter<CalendarEvent<T>>();\n @Output() eventDelete = new EventEmitter<CalendarEvent<T>>();\n @Output() eventMove = new EventEmitter<{ event: CalendarEvent<T>; newStart: Date; newEnd?: Date; allDay?: boolean }>();\n @Output() navigationChange = new EventEmitter<CalendarNavigationEvent>();\n @Output() viewChange = new EventEmitter<CalendarView>();\n @Output() dateChange = new EventEmitter<Date>();\n\n // New item system output events\n @Output() itemChange = new EventEmitter<CalendarItemChangeEvent<T>>();\n @Output() itemClick = new EventEmitter<CalendarItem<T>>();\n @Output() itemDoubleClick = new EventEmitter<CalendarItem<T>>();\n @Output() itemCreate = new EventEmitter<{ date: Date; time?: Date }>();\n @Output() itemEdit = new EventEmitter<CalendarItem<T>>();\n @Output() itemDelete = new EventEmitter<CalendarItem<T>>();\n @Output() itemMove = new EventEmitter<{ item: CalendarItem<T>; newStart: Date; newEnd?: Date }>();\n\n // Custom field templates\n @ContentChild('customFieldsTemplate') customFieldsTemplate?: TemplateRef<CalendarItemTemplateContext<T>>;\n @ContentChild('customReadonlyFieldsTemplate') customReadonlyFieldsTemplate?: TemplateRef<CalendarItemTemplateContext<T>>;\n @Input() validateCustomFields?: (data: T) => boolean | Promise<boolean>;\n\n // Internal properties\n protected internalEvents: CalendarEvent<T>[] = [];\n protected internalConfig: CalendarConfig<T>;\n protected internalItems: CalendarItem<T>[] = [];\n protected internalItemConfig: CalendarItemConfig<T>;\n protected destroy$ = new Subject<void>();\n\n // View properties\n currentView: CalendarView = 'month';\n selectedDate: Date = new Date();\n isDragging = false;\n dragStartEvent: CalendarEvent<T> | null = null;\n dragStartPosition: { x: number; y: number } | null = null;\n\n // Editor state\n private editorRef: ComponentRef<any> | null = null;\n\n\n constructor(\n protected cdr: ChangeDetectorRef,\n protected itemRegistry: CalendarItemRegistryService,\n protected popoverService: CalendarItemPopoverService,\n protected dialog: MatDialog\n ) {\n this.internalConfig = this.getDefaultConfig();\n this.internalItemConfig = this.getDefaultItemConfig();\n }\n\n ngOnInit(): void {\n this.initializeComponent();\n if (this.useNewItemSystem) {\n this.initializeItemComponent();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Apply config first so it's available for event processing\n if (changes['config'] && this.config) {\n this.applyConfig();\n }\n\n if (changes['events']) {\n this.internalEvents = this.processEvents(this.events || []);\n }\n\n if (changes['items']) {\n this.internalItems = [...(this.items || [])];\n }\n if (changes['itemConfig'] && this.itemConfig) {\n this.applyItemConfig();\n }\n if (changes['useNewItemSystem']) {\n if (this.useNewItemSystem) {\n this.initializeItemComponent();\n }\n }\n if (changes['currentDate']) {\n this.selectedDate = new Date(this.currentDate);\n }\n if (changes['view']) {\n this.currentView = this.view;\n }\n\n // Manually trigger change detection to prevent ExpressionChangedAfterItHasBeenCheckedError\n // This is needed because items/events might be set during parent's change detection\n if (changes['items'] || changes['events']) {\n setTimeout(() => this.cdr.detectChanges(), 0);\n }\n }\n\n /**\n * Process events and compute derived properties to avoid change detection issues\n */\n private processEvents(events: CalendarEvent<T>[]): CalendarEvent<T>[] {\n return events.map(event => {\n // Create a copy and add computed color to avoid change detection issues\n const processedEvent = { ...event };\n\n // Pre-compute the color\n if (!processedEvent.color) {\n if (this.internalConfig.eventColor) {\n processedEvent.color = this.internalConfig.eventColor(event);\n } else {\n processedEvent.color = '#6750a4'; // Default color\n }\n }\n\n return processedEvent;\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Initialize component with default values\n */\n protected initializeComponent(): void {\n this.internalEvents = [...(this.events || [])];\n this.selectedDate = new Date(this.currentDate);\n this.currentView = this.view;\n this.applyConfig();\n }\n\n /**\n * Apply configuration to component properties\n */\n protected applyConfig(): void {\n if (!this.config) return;\n\n this.internalConfig = {\n ...this.getDefaultConfig(),\n ...this.config\n };\n }\n\n /**\n * Get default configuration\n */\n protected getDefaultConfig(): CalendarConfig<T> {\n return {\n displayProperty: 'title' as keyof T,\n editable: true,\n deletable: true,\n draggable: true,\n defaultDuration: 60,\n minDuration: 15,\n maxDuration: 480,\n timeSlotInterval: 30,\n startHour: 6,\n endHour: 22,\n showWeekends: true,\n showTime: true,\n allowCreate: true\n };\n }\n\n /**\n * Track events by ID for ngFor performance\n */\n trackByEventId(index: number, event: CalendarEvent<T>): string {\n return event.id || `event-${index}`;\n }\n\n /**\n * Get events for a specific date\n */\n getEventsForDate(date: Date): CalendarEvent<T>[] {\n const targetDate = new Date(date);\n targetDate.setHours(0, 0, 0, 0);\n\n const events = this.internalEvents.filter(event => {\n const eventDate = new Date(event.start);\n eventDate.setHours(0, 0, 0, 0);\n return eventDate.getTime() === targetDate.getTime();\n });\n\n // If using new item system, also include items\n if (this.useNewItemSystem) {\n const items = this.getItemsForDate(date);\n // Convert items to events for display compatibility\n const itemEvents = items.map(item => this.convertItemToEvent(item));\n events.push(...itemEvents);\n }\n\n return events;\n }\n\n /**\n * Get events for a specific time range\n */\n getEventsForTimeRange(start: Date, end: Date): CalendarEvent<T>[] {\n const events = this.internalEvents.filter(event => {\n const eventStart = new Date(event.start);\n const eventEnd = event.end ? new Date(event.end) : eventStart;\n\n return (eventStart >= start && eventStart < end) ||\n (eventEnd > start && eventEnd <= end) ||\n (eventStart <= start && eventEnd >= end);\n });\n\n // If using new item system, also include items\n if (this.useNewItemSystem) {\n const items = this.getItemsForDateRange(start, end);\n // Convert items to events for display compatibility\n const itemEvents = items.map(item => this.convertItemToEvent(item));\n events.push(...itemEvents);\n }\n\n return events;\n }\n\n /**\n * Get display text for an event\n */\n getEventDisplayText(event: CalendarEvent<T>): string {\n if (event.title) {\n return event.title;\n }\n\n if (this.internalConfig.displayProperty && event.data) {\n const value = event.data[this.internalConfig.displayProperty];\n return value ? String(value) : 'Untitled';\n }\n\n return 'Untitled';\n }\n\n /**\n * Get event color (pre-computed during event processing)\n */\n getEventColor(event: CalendarEvent<T>): string {\n // Color is pre-computed in processEvents() to avoid change detection issues\n return event.color || '#6750a4';\n }\n\n /**\n * Check if event is editable\n */\n isEventEditable(event: CalendarEvent<T>): boolean {\n return event.editable !== false && this.internalConfig.editable !== false;\n }\n\n /**\n * Check if event is deletable\n */\n isEventDeletable(event: CalendarEvent<T>): boolean {\n return event.deletable !== false && this.internalConfig.deletable !== false;\n }\n\n /**\n * Check if event is draggable\n */\n isEventDraggable(event: CalendarEvent<T>): boolean {\n return event.draggable !== false && this.internalConfig.draggable !== false;\n }\n\n\n /**\n * Edit an event\n */\n editEvent(event: CalendarEvent<T>): void {\n if (!this.isEventEditable(event)) return;\n\n this.eventEdit.emit(event);\n }\n\n /**\n * Delete an event\n */\n deleteEvent(event: CalendarEvent<T>): void {\n if (!this.isEventDeletable(event)) return;\n\n this.eventDelete.emit(event);\n }\n\n /**\n * Move an event\n */\n moveEvent(event: CalendarEvent<T>, newStart: Date, newEnd?: Date, allDay?: boolean): void {\n if (!this.isEventDraggable(event)) return;\n\n this.eventMove.emit({ event, newStart, newEnd, allDay });\n }\n\n /**\n * Handle event click\n */\n onEventClick(event: CalendarEvent<T>, clickEvent?: Event): void {\n console.log('[Calendar] Event clicked:', event.title, event.id);\n\n if (clickEvent) {\n clickEvent.stopPropagation();\n }\n\n // Get the actual event container element for positioning\n const eventElement = clickEvent?.currentTarget as HTMLElement;\n\n // Open popover editor in read-only mode\n this.openEventEditor(event, eventElement);\n\n this.eventClick.emit(event);\n }\n\n\n\n\n\n /**\n * Open event editor in edit mode\n */\n private openEventEditor(event: CalendarEvent<T>, triggerElement?: HTMLElement): void {\n if (this.disabled || !event.editable) {\n return;\n }\n\n // Convert CalendarEvent to CalendarItem for editing\n const item: CalendarItem<T> = {\n id: event.id,\n title: event.title || '',\n description: event.description || '',\n start: event.start,\n end: event.end,\n allDay: event.allDay || false,\n color: event.color,\n timePattern: event.allDay ? 'date' : 'datetime',\n editable: event.editable,\n deletable: event.deletable,\n draggable: event.draggable,\n data: event.data\n };\n\n // Get item type from event data and normalize case\n const rawItemType = (event.data as any)?.itemType || 'Event';\n const itemType = rawItemType.toLowerCase();\n\n\n // Open the popover editor in read-only mode\n this.openItemEditorReadOnly(\n itemType,\n event.start,\n triggerElement,\n item\n );\n }\n\n /**\n * Open item editor in read-only mode\n */\n private openItemEditorReadOnly(\n itemType: string,\n date: Date,\n triggerElement?: HTMLElement,\n existingItem?: CalendarItem<T>\n ): void {\n console.log('[Calendar] Opening readonly editor for:', existingItem?.title, existingItem?.id);\n\n const itemTypeDef = this.itemRegistry.getItemType(itemType);\n if (!itemTypeDef) {\n console.warn(`Item type '${itemType}' not found`);\n return;\n }\n\n // Calculate position based on viewport midpoint\n // Top 50% = bottom, Bottom 50% = top\n // Left 50% = right, Right 50% = left\n let preferredPosition: 'top' | 'bottom' | 'left' | 'right' = 'bottom';\n\n if (triggerElement) {\n const rect = triggerElement.getBoundingClientRect();\n const viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n\n // Calculate element center point\n const elementCenterY = rect.top + (rect.height / 2);\n const elementCenterX = rect.left + (rect.width / 2);\n\n // Calculate viewport midpoints\n const viewportMidY = viewportHeight / 2;\n const viewportMidX = viewportWidth / 2;\n\n // Determine vertical position (top 50% = show below, bottom 50% = show above)\n const isInTopHalf = elementCenterY < viewportMidY;\n\n // Determine horizontal position (left 50% = show right, right 50% = show left)\n const isInLeftHalf = elementCenterX < viewportMidX;\n\n // Combine vertical and horizontal positioning\n // Prefer vertical positioning, use horizontal only if there's more horizontal space\n const verticalSpace = isInTopHalf ?\n (viewportHeight - rect.bottom) : rect.top;\n const horizontalSpace = isInLeftHalf ?\n (viewportWidth - rect.right) : rect.left;\n\n if (horizontalSpace > verticalSpace * 1.5) {\n // Use horizontal positioning\n preferredPosition = isInLeftHalf ? 'right' : 'left';\n } else {\n // Use vertical positioning\n preferredPosition = isInTopHalf ? 'bottom' : 'top';\n }\n }\n\n const context: CalendarItemEditorContext<T> = {\n itemType,\n timePattern: existingItem?.timePattern || itemTypeDef.defaultTimePattern,\n startDate: date,\n endDate: undefined,\n isEditing: false, // Read-only mode\n item: existingItem,\n triggerElement,\n position: preferredPosition,\n customFieldsTemplate: this.customFieldsTemplate,\n customReadonlyFieldsTemplate: this.customReadonlyFieldsTemplate,\n validateCustomFields: this.validateCustomFields\n };\n\n\n this.editorRef = this.popoverService.openEditor(context, triggerElement, preferredPosition);\n if (this.editorRef) {\n this.editorRef.instance.save.subscribe((item: CalendarItem<T>) => {\n if (existingItem) {\n this.onItemUpdate(item);\n } else {\n this.onItemSave(item);\n }\n });\n this.editorRef.instance.cancel.subscribe(() => {\n this.onItemEditorCancel();\n });\n this.editorRef.instance.delete.subscribe((item: CalendarItem<T>) => {\n this.onItemDelete(item);\n });\n }\n }\n\n /**\n * Add new event\n */\n private addEvent(event: CalendarEvent<T>): void {\n this.eventChange.emit({\n type: 'add',\n event: event\n });\n }\n\n /**\n * Update event\n */\n private updateEvent(event: CalendarEvent<T>): void {\n this.eventChange.emit({\n type: 'update',\n event: event\n });\n }\n\n\n /**\n * Handle event double click\n */\n onEventDoubleClick(event: CalendarEvent<T>): void {\n this.eventDoubleClick.emit(event);\n }\n\n /**\n * Mark event as complete\n */\n markEventComplete(event: CalendarEvent<T>): void {\n if (event.data && typeof event.data === 'object') {\n (event.data as any).completed = true;\n this.eventChange.emit({\n type: 'update',\n event: event\n });\n }\n }\n\n /**\n * Mark event as incomplete\n */\n markEventIncomplete(event: CalendarEvent<T>): void {\n if (event.data && typeof event.data === 'object') {\n (event.data as any).completed = false;\n this.eventChange.emit({\n type: 'update',\n event: event\n });\n }\n }\n\n /**\n * Handle event details button click\n */\n onEventDetails(event: CalendarEvent<T>): void {\n this.eventDoubleClick.emit(event);\n }\n\n /**\n * Navigate to previous period\n */\n navigatePrevious(): void {\n const previousDate = new Date(this.selectedDate);\n\n switch (this.currentView) {\n case 'month':\n previousDate.setMonth(previousDate.getMonth() - 1);\n break;\n case 'week':\n previousDate.setDate(previousDate.getDate() - 7);\n break;\n case 'day':\n previousDate.setDate(previousDate.getDate() - 1);\n break;\n }\n\n this.navigateToDate(previousDate);\n }\n\n /**\n * Navigate to next period\n */\n navigateNext(): void {\n const nextDate = new Date(this.selectedDate);\n\n switch (this.currentView) {\n case 'month':\n nextDate.setMonth(nextDate.getMonth() + 1);\n break;\n case 'week':\n nextDate.setDate(nextDate.getDate() + 7);\n break;\n case 'day':\n nextDate.setDate(nextDate.getDate() + 1);\n break;\n }\n\n this.navigateToDate(nextDate);\n }\n\n /**\n * Navigate to today\n */\n navigateToday(): void {\n this.navigateToDate(new Date());\n }\n\n /**\n * Navigate to specific date\n */\n navigateToDate(date: Date): void {\n const previousDate = new Date(this.selectedDate);\n this.selectedDate = new Date(date);\n\n this.navigationChange.emit({\n view: this.currentView,\n date: this.selectedDate,\n previousDate\n });\n\n this.dateChange.emit(this.selectedDate);\n }\n\n /**\n * Change view\n */\n changeView(view: CalendarView): void {\n this.currentView = view;\n this.viewChange.emit(view);\n }\n\n /**\n * Get formatted date string for display\n */\n getFormattedDate(date: Date, format: 'short' | 'medium' | 'long' = 'medium'): string {\n if (!date || !(date instanceof Date) || isNaN(date.getTime())) {\n return '';\n }\n\n return date.toLocaleDateString('en-US', {\n weekday: format === 'short' ? 'short' : 'long',\n year: 'numeric',\n month: format === 'short' ? 'short' : 'long',\n day: 'numeric'\n });\n }\n\n /**\n * Get formatted time string for display\n */\n getFormattedTime(date: Date): string {\n return date.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true\n });\n }\n\n /**\n * Check if two dates are the same day\n */\n isSameDay(date1: Date, date2: Date): boolean {\n return date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate();\n }\n\n /**\n * Check if date is today\n */\n isToday(date: Date): boolean {\n return this.isSameDay(date, new Date());\n }\n\n /**\n * Check if date is in current month\n */\n isCurrentMonth(date: Date): boolean {\n return date.getMonth() === this.selectedDate.getMonth() &&\n date.getFullYear() === this.selectedDate.getFullYear();\n }\n\n /**\n * Get CSS classes for an event\n */\n getEventClasses(event: CalendarEvent<T>): string[] {\n const classes = ['amw-calendar__event'];\n\n if (event.cssClass) {\n if (Array.isArray(event.cssClass)) {\n classes.push(...event.cssClass);\n } else {\n classes.push(event.cssClass);\n }\n }\n\n if (event.allDay) {\n classes.push('amw-calendar__event--all-day');\n }\n\n if (this.isEventEditable(event)) {\n classes.push('amw-calendar__event--editable');\n }\n\n if (this.isEventDraggable(event)) {\n classes.push('amw-calendar__event--draggable');\n }\n\n return classes;\n }\n\n // ==========================================================================\n // NEW ITEM SYSTEM METHODS\n // ==========================================================================\n\n /**\n * Get default item configuration\n */\n protected getDefaultItemConfig(): CalendarItemConfig<T> {\n return {\n displayProperty: 'title' as keyof T,\n editable: true,\n deletable: true,\n draggable: true,\n defaultDuration: 60,\n minDuration: 15,\n maxDuration: 480,\n timeSlotInterval: 30,\n startHour: 6,\n endHour: 22,\n showWeekends: true,\n showTime: true,\n allowCreate: true,\n allowedTimePatterns: ['date', 'date-range', 'datetime', 'datetime-range'],\n defaultTimePattern: 'datetime'\n };\n }\n\n /**\n * Initialize component with new item system\n */\n protected initializeItemComponent(): void {\n this.internalItems = [...(this.items || [])];\n this.selectedDate = new Date(this.currentDate);\n this.currentView = this.view;\n this.applyItemConfig();\n }\n\n /**\n * Apply item configuration\n */\n protected applyItemConfig(): void {\n if (!this.itemConfig) return;\n\n this.internalItemConfig = {\n ...this.getDefaultItemConfig(),\n ...this.itemConfig\n };\n }\n\n /**\n * Handle cell click for item creation\n */\n onCellClickForItem(date: Date, time?: Date, triggerElement?: HTMLElement): void {\n if (this.disabled || !this.internalItemConfig.allowCreate) {\n return;\n }\n\n const availableTypes = this.itemRegistry.getRegisteredTypes();\n if (availableTypes.length === 0) {\n console.warn('No calendar item types registered');\n return;\n }\n\n // If only one type, use it directly\n if (availableTypes.length === 1) {\n this.openItemEditor(availableTypes[0].type, date, time, triggerElement);\n } else {\n // Show type selection (for now, just use the first type)\n // TODO: Implement type selection UI\n this.openItemEditor(availableTypes[0].type, date, time, triggerElement);\n }\n }\n\n /**\n * Handle add button click for item creation\n */\n onAddButtonClickForItem(triggerElement?: HTMLElement): void {\n if (this.disabled || !this.internalItemConfig.allowCreate) return;\n\n const availableTypes = this.itemRegistry.getRegisteredTypes();\n if (availableTypes.length === 0) {\n console.warn('No calendar item types registered');\n return;\n }\n\n // If only one type, use it directly\n if (availableTypes.length === 1) {\n this.openItemEditor(availableTypes[0].type, this.selectedDate, undefined, triggerElement);\n } else {\n // Show type selection (for now, just use the first type)\n // TODO: Implement type selection UI\n this.openItemEditor(availableTypes[0].type, this.selectedDate, undefined, triggerElement);\n }\n }\n\n /**\n * Open item editor popover\n */\n private openItemEditor(\n itemType: string,\n date: Date,\n time?: Date,\n triggerElement?: HTMLElement,\n existingItem?: CalendarItem<T>\n ): void {\n\n const itemTypeDef = this.itemRegistry.getItemType(itemType);\n if (!itemTypeDef) {\n console.warn(`Item type '${itemType}' not found`);\n return;\n }\n\n // Calculate position based on viewport midpoint\n // Top 50% = bottom, Bottom 50% = top\n // Left 50% = right, Right 50% = left\n let preferredPosition: 'top' | 'bottom' | 'left' | 'right' = 'bottom';\n\n if (triggerElement) {\n const rect = triggerElement.getBoundingClientRect();\n const viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n\n // Calculate element center point\n const elementCenterY = rect.top + (rect.height / 2);\n const elementCenterX = rect.left + (rect.width / 2);\n\n // Calculate viewport midpoints\n const viewportMidY = viewportHeight / 2;\n const viewportMidX = viewportWidth / 2;\n\n // Determine vertical position (top 50% = show below, bottom 50% = show above)\n const isInTopHalf = elementCenterY < viewportMidY;\n\n // Determine horizontal position (left 50% = show right, right 50% = show left)\n const isInLeftHalf = elementCenterX < viewportMidX;\n\n // Combine vertical and horizontal positioning\n // Prefer vertical positioning, use horizontal only if there's more horizontal space\n const verticalSpace = isInTopHalf ?\n (viewportHeight - rect.bottom) : rect.top;\n const horizontalSpace = isInLeftHalf ?\n (viewportWidth - rect.right) : rect.left;\n\n if (horizontalSpace > verticalSpace * 1.5) {\n // Use horizontal positioning\n preferredPosition = isInLeftHalf ? 'right' : 'left';\n } else {\n // Use vertical positioning\n preferredPosition = isInTopHalf ? 'bottom' : 'top';\n }\n }\n\n const context: CalendarItemEditorContext<T> = {\n itemType,\n timePattern: existingItem?.timePattern || itemTypeDef.defaultTimePattern,\n startDate: date,\n endDate: time ? new Date(time) : undefined,\n isEditing: true, // Always start in editing mode (create or edit)\n item: existingItem,\n triggerElement,\n position: preferredPosition,\n customFieldsTemplate: this.customFieldsTemplate,\n customReadonlyFieldsTemplate: this.customReadonlyFieldsTemplate,\n validateCustomFields: this.validateCustomFields\n };\n\n this.editorRef = this.popoverService.openEditor(context, triggerElement, preferredPosition);\n\n if (this.editorRef) {\n this.editorRef.instance.save.subscribe((item: CalendarItem<T>) => {\n if (existingItem) {\n this.onItemUpdate(item);\n } else {\n this.onItemSave(item);\n }\n });\n\n this.editorRef.instance.cancel.subscribe(() => {\n this.onItemEditorCancel();\n });\n\n this.editorRef.instance.delete.subscribe((item: CalendarItem<T>) => {\n this.onItemDelete(item);\n });\n }\n }\n\n /**\n * Handle item save\n */\n private onItemSave(item: CalendarItem<T>): void {\n this.internalItems.push(item);\n this.itemChange.emit({\n type: 'create',\n item\n });\n\n // Also emit eventChange for calendar display\n const event = this.convertItemToEvent(item);\n this.eventChange.emit({\n type: 'add',\n event\n });\n\n this.popoverService.closeEditor();\n this.editorRef = null;\n this.cdr.detectChanges();\n }\n\n /**\n * Handle item update\n */\n private onItemUpdate(item: CalendarItem<T>): void {\n console.log('[Calendar] Updating item:', item.title, item.id);\n console.log('[Calendar] internalItems before update:', this.internalItems.map(i => ({ id: i.id, title: i.title })));\n\n const index = this.internalItems.findIndex(i => i.id === item.id);\n if (index !== -1) {\n this.internalItems[index] = item;\n console.log('[Calendar] internalItems after update:', this.internalItems.map(i => ({ id: i.id, title: i.title })));\n\n this.itemChange.emit({\n type: 'update',\n item\n });\n\n // Also emit eventChange for calendar display\n const event = this.convertItemToEvent(item);\n this.eventChange.emit({\n type: 'update',\n event\n });\n\n this.popoverService.closeEditor();\n this.editorRef = null;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Handle item delete\n */\n private onItemDelete(item: CalendarItem<T>): void {\n const index = this.internalItems.findIndex(i => i.id === item.id);\n if (index !== -1) {\n this.internalItems.splice(index, 1);\n this.itemChange.emit({\n type: 'delete',\n item\n });\n\n // Also emit eventChange for calendar display\n const event = this.convertItemToEvent(item);\n this.eventChange.emit({\n type: 'delete',\n event\n });\n\n this.popoverService.closeEditor();\n this.editorRef = null;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Handle item editor cancel\n */\n private onItemEditorCancel(): void {\n console.log('[Calendar] Editor canceled');\n console.log('[Calendar] internalItems on cancel:', this.internalItems.map(i => ({ id: i.id, title: i.title })));\n this.popoverService.closeEditor();\n this.editorRef = null;\n }\n\n\n\n /**\n * Get items for a specific date\n */\n getItemsForDate(date: Date): CalendarItem<T>[] {\n return this.internalItems.filter(item => {\n const itemDate = new Date(item.start);\n return this.isSameDay(itemDate, date);\n });\n }\n\n /**\n * Get items for a specific date range\n */\n getItemsForDateRange(startDate: Date, endDate: Date): CalendarItem<T>[] {\n return this.internalItems.filter(item => {\n const itemStart = new Date(item.start);\n const itemEnd = item.end ? new Date(item.end) : itemStart;\n\n return (itemStart >= startDate && itemStart <= endDate) ||\n (itemEnd >= startDate && itemEnd <= endDate) ||\n (itemStart <= startDate && itemEnd >= endDate);\n });\n }\n\n /**\n * Convert calendar item to event for display compatibility\n */\n private convertItemToEvent(item: CalendarItem<T>): CalendarEvent<T> {\n // Ensure color is always set to avoid change detection issues\n let eventColor = item.color;\n if (!eventColor) {\n if (this.internalConfig?.eventColor) {\n eventColor = this.internalConfig.eventColor({ ...item, data: item.data } as CalendarEvent<T>);\n } else {\n eventColor = '#6750a4'; // Default color\n }\n }\n\n return {\n id: item.id,\n title: item.title,\n description: item.description,\n start: item.start,\n end: item.end,\n allDay: item.allDay,\n color: eventColor,\n editable: item.editable,\n deletable: item.deletable,\n draggable: item.draggable,\n data: item.data\n };\n }\n\n /**\n * Check if item is editable\n */\n isItemEditable(item: CalendarItem<T>): boolean {\n return !!(this.internalItemConfig.editable && (item as any).editable !== false);\n }\n\n /**\n * Check if item is deletable\n */\n isItemDeletable(item: CalendarItem<T>): boolean {\n return !!(this.internalItemConfig.deletable && (item as any).deletable !== false);\n }\n\n /**\n * Check if item is draggable\n */\n isItemDraggable(item: CalendarItem<T>): boolean {\n return !!(this.internalItemConfig.draggable && (item as any).draggable !== false);\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, OnDestroy, ChangeDetectorRef, SimpleChanges, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDialogModule, MatDialog } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { AmwCalendarBaseComponent } from './amw-calendar-base.component';\nimport { CalendarEvent, CalendarEventChangeEvent, CalendarConfig, CalendarView, CalendarNavigationEvent } from './interfaces';\nimport { CalendarItem, CalendarItemChangeEvent } from './interfaces/calendar-item.interface';\nimport { CalendarItemConfig } from './interfaces/calendar-item-config.interface';\nimport { CalendarItemRegistryService } from './services/calendar-item-registry.service';\nimport { CalendarItemPopoverService } from './services/calendar-item-popover.service';\n\n/**\n * AMW Calendar Full Component\n * Full-screen calendar component for workspace display with month, week, and day views\n */\n@Component({\n selector: 'amw-calendar-full',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n MatMenuModule,\n MatCardModule,\n MatChipsModule,\n MatDialogModule,\n MatProgressSpinnerModule\n],\n templateUrl: './amw-calendar-full.component.html',\n styleUrl: './amw-calendar-full.component.scss',\n encapsulation: ViewEncapsulation.None\n})\nexport class AmwCalendarFullComponent<T = any> extends AmwCalendarBaseComponent<T> implements OnInit, OnChanges, OnDestroy {\n // Additional input properties for full calendar\n @Input() showNavigation: boolean = true;\n @Input() showViewSwitcher: boolean = true;\n @Input() showTodayButton: boolean = true;\n @Input() showCreateButton: boolean = true;\n @Input() height: string = '600px';\n\n // Additional output events\n @Output() cellClick = new EventEmitter<{ date: Date; time?: Date }>();\n @Output() cellDoubleClick = new EventEmitter<{ date: Date; time?: Date }>();\n\n // View-specific properties\n monthDays: Date[] = [];\n weekDays: Date[] = [];\n dayHours: Date[] = [];\n currentWeekStart: Date = new Date();\n currentMonthStart: Date = new Date();\n\n // UI state\n dragOverTarget: string | null = null;\n\n constructor(\n cdr: ChangeDetectorRef,\n itemRegistry: CalendarItemRegistryService,\n popoverService: CalendarItemPopoverService,\n dialog: MatDialog\n ) {\n super(cdr, itemRegistry, popoverService, dialog);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.generateCalendarData();\n }\n\n override ngOnChanges(changes: SimpleChanges): void {\n super.ngOnChanges(changes);\n\n if (changes['selectedDate'] || changes['currentView']) {\n this.generateCalendarData();\n }\n }\n\n /**\n * Generate calendar data for current view\n */\n generateCalendarData(): void {\n switch (this.currentView) {\n case 'month':\n this.generateMonthData();\n break;\n case 'week':\n this.generateWeekData();\n break;\n case 'day':\n this.generateDayData();\n break;\n }\n }\n\n /**\n * Generate month view data\n */\n generateMonthData(): void {\n const year = this.selectedDate.getFullYear();\n const month = this.selectedDate.getMonth();\n\n // First day of the month\n const firstDay = new Date(year, month, 1);\n this.currentMonthStart = new Date(firstDay);\n\n // Last day of the month\n const lastDay = new Date(year, month + 1, 0);\n\n // Start from the beginning of the week containing the first day\n const startDate = new Date(firstDay);\n startDate.setDate(startDate.getDate() - firstDay.getDay());\n\n // End at the end of the week containing the last day\n const endDate = new Date(lastDay);\n endDate.setDate(endDate.getDate() + (6 - lastDay.getDay()));\n\n this.monthDays = [];\n const current = new Date(startDate);\n\n while (current <= endDate) {\n this.monthDays.push(new Date(current));\n current.setDate(current.getDate() + 1);\n }\n }\n\n /**\n * Generate week view data\n */\n generateWeekData(): void {\n const startOfWeek = new Date(this.selectedDate);\n const day = startOfWeek.getDay();\n const diff = startOfWeek.getDate() - day;\n startOfWeek.setDate(diff);\n\n this.currentWeekStart = new Date(startOfWeek);\n this.weekDays = [];\n\n for (let i = 0; i < 7; i++) {\n const date = new Date(startOfWeek);\n date.setDate(date.getDate() + i);\n this.weekDays.push(date);\n }\n\n // Generate hour slots for week view time grid\n this.dayHours = [];\n const startHour = this.internalConfig.startHour || 6;\n const endHour = this.internalConfig.endHour || 22;\n\n for (let hour = startHour; hour <= endHour; hour++) {\n const date = new Date(this.selectedDate);\n date.setHours(hour, 0, 0, 0);\n this.dayHours.push(date);\n }\n }\n\n /**\n * Generate day view data\n */\n generateDayData(): void {\n this.dayHours = [];\n const startHour = this.internalConfig.startHour || 6;\n const endHour = this.internalConfig.endHour || 22;\n\n for (let hour = startHour; hour <= endHour; hour++) {\n const date = new Date(this.selectedDate);\n date.setHours(hour, 0, 0, 0);\n this.dayHours.push(date);\n }\n }\n\n /**\n * Handle cell click\n */\n onCellClick(date: Date, time?: Date): void {\n this.cellClick.emit({ date, time });\n }\n\n /**\n * Handle cell double click\n */\n onCellDoubleClick(date: Date, time?: Date): void {\n this.cellDoubleClick.emit({ date, time });\n }\n\n\n /**\n * Handle drag start\n */\n onDragStart(event: DragEvent, calendarEvent: CalendarEvent<T>): void {\n if (!this.isEventDraggable(calendarEvent)) return;\n\n this.isDragging = true;\n this.dragStartEvent = calendarEvent;\n this.dragStartPosition = { x: event.clientX, y: event.clientY };\n\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', calendarEvent.id);\n }\n }\n\n /**\n * Handle drag end\n */\n onDragEnd(): void {\n this.isDragging = false;\n this.dragStartEvent = null;\n this.dragStartPosition = null;\n this.dragOverTarget = null;\n }\n\n /**\n * Handle drop\n */\n onDrop(event: DragEvent, targetDate: Date, targetTime?: Date, isAllDay: boolean = false): void {\n event.preventDefault();\n\n if (!this.dragStartEvent) return;\n\n // Determine new start time and allDay status\n let newStart: Date;\n let newEnd: Date;\n let shouldBeAllDay = isAllDay;\n\n if (isAllDay) {\n // Dropping on all-day area - set to start of day\n newStart = new Date(targetDate);\n newStart.setHours(0, 0, 0, 0);\n newEnd = new Date(newStart);\n newEnd.setHours(23, 59, 59, 999);\n } else if (targetTime) {\n // Dropping on a specific time slot - combine date and time\n newStart = new Date(targetDate);\n newStart.setHours(targetTime.getHours(), targetTime.getMinutes(), 0, 0);\n\n const duration = this.dragStartEvent.end && !this.dragStartEvent.allDay\n ? this.dragStartEvent.end.getTime() - this.dragStartEvent.start.getTime()\n : (this.internalConfig.defaultDuration || 60) * 60 * 1000;\n\n newEnd = new Date(newStart.getTime() + duration);\n } else {\n // Month view - use target date\n newStart = new Date(targetDate);\n newStart.setHours(0, 0, 0, 0);\n newEnd = new Date(newStart);\n newEnd.setHours(23, 59, 59, 999);\n shouldBeAllDay = true;\n }\n\n this.moveEvent(this.dragStartEvent, newStart, newEnd, shouldBeAllDay);\n this.onDragEnd();\n }\n\n /**\n * Handle drag over\n */\n onDragOver(event: DragEvent, targetId?: string): void {\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move';\n }\n if (targetId) {\n this.dragOverTarget = targetId;\n }\n }\n\n /**\n * Handle drag leave\n */\n onDragLeave(event: DragEvent, targetId?: string): void {\n if (targetId && this.dragOverTarget === targetId) {\n this.dragOverTarget = null;\n }\n }\n\n /**\n * Get events for a specific time slot\n */\n getEventsForTimeSlot(hour: number): CalendarEvent<T>[] {\n const start = new Date(this.selectedDate);\n start.setHours(hour, 0, 0, 0);\n\n const end = new Date(start);\n end.setHours(hour + 1, 0, 0, 0);\n\n return this.getEventsForTimeRange(start, end);\n }\n\n /**\n * Get all-day events for a specific date\n */\n getAllDayEventsForDate(date: Date): CalendarEvent<T>[] {\n const eventsForDate = this.getEventsForDate(date);\n return eventsForDate.filter(event => event.allDay);\n }\n\n /**\n * Get timed events for a specific time slot (excludes all-day events)\n */\n getTimedEventsForTimeSlot(hour: number): CalendarEvent<T>[] {\n const eventsForSlot = this.getEventsForTimeSlot(hour);\n return eventsForSlot.filter(event => !event.allDay);\n }\n\n /**\n * Get all timed events for the selected date (excludes all-day events)\n */\n getTimedEventsForDate(date?: Date): CalendarEvent<T>[] {\n const targetDate = date || this.selectedDate;\n const eventsForDate = this.getEventsForDate(targetDate);\n return eventsForDate.filter(event => !event.allDay);\n }\n\n /**\n * Get event position and size for day view\n */\n getEventPosition(event: CalendarEvent<T>): { top: string; height: string; left?: string; right?: string; width?: string; position?: string } {\n const startHour = this.internalConfig.startHour || 6;\n const slotHeight = 70; // Match exact CSS height\n\n const eventStart = new Date(event.start);\n const eventEnd = event.end ? new Date(event.end) : new Date(eventStart.getTime() + (this.internalConfig.defaultDuration || 60) * 60 * 1000);\n\n // Calculate minutes from start of day (6 AM)\n const startMinutes = eventStart.getHours() * 60 + eventStart.getMinutes();\n const endMinutes = eventEnd.getHours() * 60 + eventEnd.getMinutes();\n const startHourMinutes = startHour * 60;\n\n // Position relative to the first hour slot (6 AM)\n const top = ((startMinutes - startHourMinutes) / 60) * slotHeight;\n const height = ((endMinutes - startMinutes) / 60) * slotHeight;\n\n\n return {\n position: 'absolute',\n top: `${top}px`,\n height: `${height}px`,\n left: '104px', // 80px (hour label width) + 12px (padding) + 12px (gap)\n right: '4px',\n width: 'auto' // Let width be determined by left and right positioning\n };\n }\n\n /**\n * Get event position and size for week view\n */\n getEventPositionForWeek(event: CalendarEvent<T>): { top: string; height: string; position?: string } {\n const startHour = this.internalConfig.startHour || 6;\n const slotHeight = 70; // Match exact CSS height\n\n const eventStart = new Date(event.start);\n const eventEnd = event.end ? new Date(event.end) : new Date(eventStart.getTime() + (this.internalConfig.defaultDuration || 60) * 60 * 1000);\n\n // Calculate minutes from start of day\n const startMinutes = eventStart.getHours() * 60 + eventStart.getMinutes();\n const endMinutes = eventEnd.getHours() * 60 + eventEnd.getMinutes();\n const startHourMinutes = startHour * 60;\n\n // Position relative to the first hour slot\n const top = ((startMinutes - startHourMinutes) / 60) * slotHeight;\n const height = ((endMinutes - startMinutes) / 60) * slotHeight;\n\n return {\n position: 'absolute',\n top: `${top}px`,\n height: `${height}px`\n };\n }\n\n /**\n * Get week day names\n */\n getWeekDayNames(): string[] {\n return ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n }\n\n /**\n * Get month names\n */\n getMonthNames(): string[] {\n return [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n ];\n }\n\n /**\n * Get current month name\n */\n getCurrentMonthName(): string {\n return this.getMonthNames()[this.selectedDate.getMonth()];\n }\n\n /**\n * Get current year\n */\n getCurrentYear(): number {\n return this.selectedDate.getFullYear();\n }\n\n /**\n * Get current week range\n */\n getCurrentWeekRange(): string {\n if (!this.weekDays || this.weekDays.length < 7) {\n return '';\n }\n\n const start = this.weekDays[0];\n const end = this.weekDays[6];\n\n if (!start || !end) {\n return '';\n }\n\n return `${this.getFormattedDate(start, 'short')} - ${this.getFormattedDate(end, 'short')}`;\n }\n\n /**\n * Check if date is weekend\n */\n isWeekend(date: Date): boolean {\n const day = date.getDay();\n return day === 0 || day === 6;\n }\n\n /**\n * Override changeView to regenerate calendar data\n */\n override changeView(view: CalendarView): void {\n super.changeView(view);\n this.generateCalendarData();\n }\n\n /**\n * Handle create button click\n */\n onCreateButtonClick(event: Event): void {\n event.stopPropagation();\n this.onAddButtonClickForItem(event.target as HTMLElement);\n }\n\n /**\n * Check if date is in current view\n */\n isInCurrentView(date: Date): boolean {\n switch (this.currentView) {\n case 'month':\n return this.isCurrentMonth(date);\n case 'week':\n return date >= this.weekDays[0] && date <= this.weekDays[6];\n case 'day':\n return this.isSameDay(date, this.selectedDate);\n default:\n return false;\n }\n }\n\n /**\n * Generate a unique ID for a drop target cell\n */\n getCellId(date: Date, hour?: Date, type: string = 'cell'): string {\n const dateStr = date.toISOString().split('T')[0];\n const hourStr = hour ? `-${hour.getHours()}` : '';\n return `${type}-${dateStr}${hourStr}`;\n }\n\n /**\n * Check if a cell is currently being hovered during drag\n */\n isCellDraggedOver(cellId: string): boolean {\n return this.dragOverTarget === cellId;\n }\n}\n","<div class=\"amw-calendar-full\"\n [class]=\"internalConfig.cssClass\"\n [class.amw-calendar-full--loading]=\"loading\"\n [class.amw-calendar-full--disabled]=\"disabled\"\n [style.height]=\"height\">\n\n <!-- Loading Spinner -->\n @if (loading) {\n <div class=\"amw-calendar-full__loading\">\n <mat-spinner diameter=\"40\"></mat-spinner>\n <p>Loading calendar...</p>\n </div>\n }\n\n <!-- Calendar Header -->\n @if (showNavigation) {\n <div class=\"amw-calendar-full__header\">\n <!-- Navigation Controls -->\n <div class=\"amw-calendar-full__navigation\">\n <button mat-icon-button\n (click)=\"navigatePrevious()\"\n [disabled]=\"disabled\"\n matTooltip=\"Previous\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button mat-button\n (click)=\"navigateToday()\"\n [disabled]=\"disabled\"\n matTooltip=\"Today\">\n Today\n </button>\n <button mat-icon-button\n (click)=\"navigateNext()\"\n [disabled]=\"disabled\"\n matTooltip=\"Next\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n <!-- Current Date/Period Display -->\n <div class=\"amw-calendar-full__current-period\">\n @if (currentView === 'month') {\n <h2>\n {{ getCurrentMonthName() }} {{ getCurrentYear() }}\n </h2>\n }\n @if (currentView === 'week') {\n <h2>\n {{ getCurrentWeekRange() }}\n </h2>\n }\n @if (currentView === 'day') {\n <h2>\n {{ getFormattedDate(selectedDate, 'long') }}\n </h2>\n }\n </div>\n <!-- View Switcher -->\n @if (showViewSwitcher) {\n <div class=\"amw-calendar-full__view-switcher\">\n <button mat-button\n [class.amw-calendar-full__view-button--active]=\"currentView === 'month'\"\n (click)=\"changeView('month')\"\n [disabled]=\"disabled\">\n Month\n </button>\n <button mat-button\n [class.amw-calendar-full__view-button--active]=\"currentView === 'week'\"\n (click)=\"changeView('week')\"\n [disabled]=\"disabled\">\n Week\n </button>\n <button mat-button\n [class.amw-calendar-full__view-button--active]=\"currentView === 'day'\"\n (click)=\"changeView('day')\"\n [disabled]=\"disabled\">\n Day\n </button>\n </div>\n }\n <!-- Create Event/Item Button -->\n @if (showCreateButton && (internalConfig.allowCreate || internalItemConfig.allowCreate)) {\n <div class=\"amw-calendar-full__actions\">\n <button mat-raised-button\n color=\"primary\"\n #createButton\n (click)=\"onCreateButtonClick($event)\"\n [disabled]=\"disabled\">\n <mat-icon>add</mat-icon>\n {{ useNewItemSystem ? 'Create Item' : 'Create Event' }}\n </button>\n </div>\n }\n </div>\n }\n\n <!-- Calendar Content -->\n <div class=\"amw-calendar-full__content\">\n\n <!-- Month View -->\n @if (currentView === 'month') {\n <div class=\"amw-calendar-full__month-view\">\n <!-- Week Day Headers -->\n <div class=\"amw-calendar-full__week-header\">\n @for (dayName of getWeekDayNames(); track dayName) {\n <div\n class=\"amw-calendar-full__week-day-header\">\n {{ dayName }}\n </div>\n }\n </div>\n <!-- Month Grid -->\n <div class=\"amw-calendar-full__month-grid\">\n @for (date of monthDays; track date; let i = $index) {\n <div\n class=\"amw-calendar-full__month-cell\"\n [class.amw-calendar-full__month-cell--current-month]=\"isCurrentMonth(date)\"\n [class.amw-calendar-full__month-cell--today]=\"isToday(date)\"\n [class.amw-calendar-full__month-cell--weekend]=\"isWeekend(date)\"\n [class.amw-calendar-full__month-cell--drag-over]=\"isCellDraggedOver(getCellId(date, undefined, 'month'))\"\n #cellElement\n (click)=\"useNewItemSystem ? onCellClickForItem(date, undefined, cellElement) : onCellClick(date)\"\n (dblclick)=\"useNewItemSystem ? onCellClickForItem(date, undefined, cellElement) : onCellDoubleClick(date)\"\n (dragover)=\"onDragOver($event, getCellId(date, undefined, 'month'))\"\n (dragleave)=\"onDragLeave($event, getCellId(date, undefined, 'month'))\"\n (drop)=\"onDrop($event, date)\">\n <div class=\"amw-calendar-full__cell-date\">\n {{ date.getDate() }}\n </div>\n <div class=\"amw-calendar-full__cell-events\">\n @for (event of getEventsForDate(date); track trackByEventId($index, event)) {\n <div\n class=\"amw-calendar-full__event amw-calendar__event\"\n [class.amw-calendar__event--all-day]=\"event.allDay\"\n [class.amw-calendar__event--editable]=\"isEventEditable(event)\"\n [class.amw-calendar__event--draggable]=\"isEventDraggable(event)\"\n [ngClass]=\"event.cssClass\"\n [style.background-color]=\"event.color || '#6750a4'\"\n (click)=\"onEventClick(event, $event)\"\n (dblclick)=\"onEventDoubleClick(event)\"\n [draggable]=\"isEventDraggable(event)\"\n (dragstart)=\"onDragStart($event, event)\"\n (dragend)=\"onDragEnd()\">\n <span class=\"amw-calendar-full__event-title\">\n {{ getEventDisplayText(event) }}\n </span>\n @if (event.description) {\n <span\n class=\"amw-calendar-full__event-description\">\n {{ event.description }}\n </span>\n }\n @if (!event.allDay && internalConfig.showTime) {\n <span\n class=\"amw-calendar-full__event-time\">\n {{ getFormattedTime(event.start) }}\n </span>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Week View -->\n @if (currentView === 'week') {\n <div class=\"amw-calendar-full__week-view\">\n <!-- Week Day Headers with Time Label -->\n <div class=\"amw-calendar-full__week-time-grid-header\">\n <div class=\"amw-calendar-full__week-time-label\">Time</div>\n @for (date of weekDays; track date) {\n <div\n class=\"amw-calendar-full__week-day-header\"\n [class.amw-calendar-full__week-day-header--today]=\"isToday(date)\"\n [class.amw-calendar-full__week-day-header--weekend]=\"isWeekend(date)\">\n <div class=\"amw-calendar-full__week-day-name\">\n {{ getWeekDayNames()[date.getDay()] }}\n </div>\n <div class=\"amw-calendar-full__week-day-date\">\n {{ date.getDate() }}\n </div>\n </div>\n }\n </div>\n\n <!-- All-Day Events Row -->\n <div class=\"amw-calendar-full__week-allday-row\">\n <div class=\"amw-calendar-full__week-allday-label\">All Day</div>\n @for (date of weekDays; track date) {\n <div class=\"amw-calendar-full__week-allday-cell\"\n [class.amw-calendar-full__week-allday-cell--drag-over]=\"isCellDraggedOver(getCellId(date, undefined, 'week-allday'))\"\n (dragover)=\"onDragOver($event, getCellId(date, undefined, 'week-allday'))\"\n (dragleave)=\"onDragLeave($event, getCellId(date, undefined, 'week-allday'))\"\n (drop)=\"onDrop($event, date, undefined, true)\">\n @for (event of getAllDayEventsForDate(date); track trackByEventId($index, event)) {\n <div\n class=\"amw-calendar-full__event amw-calendar-full__event--allday amw-calendar__event\"\n [class.amw-calendar__event--all-day]=\"event.allDay\"\n [class.amw-calendar__event--editable]=\"isEventEditable(event)\"\n [class.amw-calendar__event--draggable]=\"isEventDraggable(event)\"\n [ngClass]=\"event.cssClass\"\n [style.background-color]=\"event.color || '#6750a4'\"\n (click)=\"onEventClick(event, $event)\"\n (dblclick)=\"onEventDoubleClick(event)\"\n [draggable]=\"isEventDraggable(event)\"\n (dragstart)=\"onDragStart($event, event)\"\n (dragend)=\"onDragEnd()\">\n <span class=\"amw-calendar-full__event-title\">\n {{ getEventDisplayText(event) }}\n </span>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Time Grid -->\n <div class=\"amw-calendar-full__week-time-grid\">\n @for (hour of dayHours; track hour; let i = $index) {\n <div class=\"amw-calendar-full__week-hour-row\">\n <!-- Hour Label -->\n <div class=\"amw-calendar-full__week-hour-label\">\n {{ getFormattedTime(hour) }}\n </div>\n <!-- Day Columns -->\n @for (date of weekDays; track date) {\n <div\n class=\"amw-calendar-full__week-hour-cell\"\n [class.amw-calendar-full__week-hour-cell--today]=\"isToday(date)\"\n [class.amw-calendar-full__week-hour-cell--weekend]=\"isWeekend(date)\"\n [class.amw-calendar-full__week-hour-cell--drag-over]=\"isCellDraggedOver(getCellId(date, hour, 'week'))\"\n (click)=\"onCellClick(date, hour)\"\n (dblclick)=\"onCellDoubleClick(date, hour)\"\n (dragover)=\"onDragOver($event, getCellId(date, hour, 'week'))\"\n (dragleave)=\"onDragLeave($event, getCellId(date, hour, 'week'))\"\n (drop)=\"onDrop($event, date, hour)\">\n <!-- Events will be positioned absolutely within day columns -->\n </div>\n }\n </div>\n }\n\n <!-- Absolutely positioned timed events for each day -->\n @for (date of weekDays; track date; let dayIndex = $index) {\n <div class=\"amw-calendar-full__week-day-events\"\n [style.left]=\"'calc(80px + (100% - 80px) * ' + dayIndex + ' / 7)'\"\n [style.width]=\"'calc((100% - 80px) / 7)'\">\n @for (event of getTimedEventsForDate(date); track trackByEventId($index, event)) {\n <div\n class=\"amw-calendar-full__event amw-calendar__event\"\n [class.amw-calendar__event--all-day]=\"event.allDay\"\n [class.amw-calendar__event--editable]=\"isEventEditable(event)\"\n [class.amw-calendar__event--draggable]=\"isEventDraggable(event)\"\n [ngClass]=\"event.cssClass\"\n [style.background-color]=\"event.color || '#6750a4'\"\n [style]=\"getEventPositionForWeek(event)\"\n (click)=\"onEventClick(event, $event)\"\n (dblclick)=\"onEventDoubleClick(event)\"\n [draggable]=\"isEventDraggable(event)\"\n (dragstart)=\"onDragStart($event, event)\"\n (dragend)=\"onDragEnd()\">\n <span class=\"amw-calendar-full__event-title\">\n {{ getEventDisplayText(event) }}\n </span>\n <span class=\"amw-calendar-full__event-time\">\n {{ getFormattedTime(event.start) }}\n </span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Day View -->\n @if (currentView === 'day') {\n <div class=\"amw-calendar-full__day-view\">\n <!-- Fixed Header Section -->\n <div class=\"amw-calendar-full__day-fixed-header\">\n <!-- Day Header -->\n <div class=\"amw-calendar-full__day-header\">\n <h3>{{ getFormattedDate(selectedDate, 'long') }}</h3>\n </div>\n <!-- All-Day Events Section -->\n <div class=\"amw-calendar-full__allday-section\">\n <div class=\"amw-calendar-full__allday-label\">\n All Day\n </div>\n <div class=\"amw-calendar-full__allday-events\"\n [class.amw-calendar-full__allday-events--drag-over]=\"isCellDraggedOver(getCellId(selectedDate, undefined, 'day-allday'))\"\n (dragover)=\"onDragOver($event, getCellId(selectedDate, undefined, 'day-allday'))\"\n (dragleave)=\"onDragLeave($event, getCellId(selectedDate, undefined, 'day-allday'))\"\n (drop)=\"onDrop($event, selectedDate, undefined, true)\">\n @for (event of getAllDayEventsForDate(selectedDate); track trackByEventId($index, event)) {\n <div\n class=\"amw-calendar-full__event amw-calendar-full__event--allday amw-calendar__event\"\n [class.amw-calendar__event--all-day]=\"event.allDay\"\n [class.amw-calendar__event--editable]=\"isEventEditable(event)\"\n [class.amw-calendar__event--draggable]=\"isEventDraggable(event)\"\n [ngClass]=\"event.cssClass\"\n [style.background-color]=\"event.color || '#6750a4'\"\n (click)=\"onEventClick(event, $event)\"\n (dblclick)=\"onEventDoubleClick(event)\"\n [draggable]=\"isEventDraggable(event)\"\n (dragstart)=\"onDragStart($event, event)\"\n (dragend)=\"onDragEnd()\">\n <span class=\"amw-calendar-full__event-title\">\n {{ getEventDisplayText(event) }}\n </span>\n @if (event.description) {\n <span\n class=\"amw-calendar-full__event-description\">\n {{ event.description }}\n </span>\n }\n </div>\n }\n </div>\n </div>\n </div>\n <!-- Scrollable Hours Section -->\n <div class=\"amw-calendar-full__day-scrollable-content\">\n <div class=\"amw-calendar-full__day-grid\">\n <!-- Hour slots -->\n @for (hour of dayHours; track hour; let i = $index) {\n <div\n class=\"amw-calendar-full__day-hour\"\n [class.amw-calendar-full__day-hour--drag-over]=\"isCellDraggedOver(getCellId(selectedDate, hour, 'day'))\"\n (click)=\"onCellClick(selectedDate, hour)\"\n (dblclick)=\"onCellDoubleClick(selectedDate, hour)\"\n (dragover)=\"onDragOver($event, getCellId(selectedDate, hour, 'day'))\"\n (dragleave)=\"onDragLeave($event, getCellId(selectedDate, hour, 'day'))\"\n (drop)=\"onDrop($event, selectedDate, hour)\">\n <div class=\"amw-calendar-full__hour-label\">\n {{ getFormattedTime(hour) }}\n </div>\n <div class=\"amw-calendar-full__hour-content\">\n <!-- Empty content area for hour slots -->\n </div>\n </div>\n }\n <!-- Events positioned relative to entire day grid -->\n @for (event of getTimedEventsForDate(); track trackByEventId($index, event)) {\n <div\n class=\"amw-calendar-full__event amw-calendar__event\"\n [class.amw-calendar__event--all-day]=\"event.allDay\"\n [class.amw-calendar__event--editable]=\"isEventEditable(event)\"\n [class.amw-calendar__event--draggable]=\"isEventDraggable(event)\"\n [ngClass]=\"event.cssClass\"\n [style.background-color]=\"event.color || '#6750a4'\"\n [style]=\"getEventPosition(event)\"\n (click)=\"onEventClick(event, $event)\"\n (dblclick)=\"onEventDoubleClick(event)\"\n [draggable]=\"isEventDraggable(event)\"\n (dragstart)=\"onDragStart($event, event)\"\n (dragend)=\"onDragEnd()\">\n <span class=\"amw-calendar-full__event-title\">\n {{ getEventDisplayText(event) }}\n </span>\n @if (event.description) {\n <span\n class=\"amw-calendar-full__event-description\">\n {{ event.description }}\n </span>\n }\n @if (!event.allDay) {\n <span\n class=\"amw-calendar-full__event-time\">\n {{ getFormattedTime(event.start) }} - {{ getFormattedTime(event.end || event.start) }}\n </span>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, OnDestroy, ChangeDetectorRef, SimpleChanges, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AmwCalendarBaseComponent } from './amw-calendar-base.component';\nimport { CalendarEvent, CalendarEventChangeEvent, CalendarConfig, CalendarView, CalendarNavigationEvent } from './interfaces';\nimport { CalendarItemRegistryService } from './services/calendar-item-registry.service';\nimport { CalendarItemPopoverService } from './services/calendar-item-popover.service';\n\n/**\n * AMW Calendar Mini Component\n * Small summary calendar component for single day/week view\n */\n@Component({\n selector: 'amw-calendar-mini',\n standalone: true,\n imports: [\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n MatCardModule,\n MatChipsModule,\n MatProgressSpinnerModule\n],\n templateUrl: './amw-calendar-mini.component.html',\n styleUrl: './amw-calendar-mini.component.scss',\n encapsulation: ViewEncapsulation.None\n})\nexport class AmwCalendarMiniComponent<T = any> extends AmwCalendarBaseComponent<T> implements OnInit, OnChanges, OnDestroy {\n // Additional input properties for mini calendar\n @Input() showWeekView: boolean = false;\n @Input() maxEventsPerDay: number = 3;\n @Input() showMoreButton: boolean = true;\n @Input() compactMode: boolean = false;\n @Input() showNavigation: boolean = true;\n\n // Additional output events\n @Output() showMoreClick = new EventEmitter<Date>();\n @Output() weekViewToggle = new EventEmitter<boolean>();\n\n // View-specific properties\n weekDays: Date[] = [];\n currentWeekStart: Date = new Date();\n showWeekViewInternal: boolean = false;\n\n // UI state\n isExpanded = false;\n\n constructor(\n cdr: ChangeDetectorRef,\n itemRegistry: CalendarItemRegistryService,\n popoverService: CalendarItemPopoverService,\n dialog: MatDialog\n ) {\n super(cdr, itemRegistry, popoverService, dialog);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.showWeekViewInternal = this.showWeekView;\n this.generateWeekData();\n }\n\n override ngOnChanges(changes: SimpleChanges): void {\n super.ngOnChanges(changes);\n\n if (changes['selectedDate'] || changes['showWeekView']) {\n this.showWeekViewInternal = this.showWeekView;\n this.generateWeekData();\n }\n }\n\n /**\n * Generate week data for mini calendar\n */\n generateWeekData(): void {\n const startOfWeek = new Date(this.selectedDate);\n const day = startOfWeek.getDay();\n const diff = startOfWeek.getDate() - day;\n startOfWeek.setDate(diff);\n\n this.currentWeekStart = new Date(startOfWeek);\n this.weekDays = [];\n\n for (let i = 0; i < 7; i++) {\n const date = new Date(startOfWeek);\n date.setDate(date.getDate() + i);\n this.weekDays.push(date);\n }\n }\n\n /**\n * Toggle week view\n */\n toggleWeekView(): void {\n this.showWeekViewInternal = !this.showWeekViewInternal;\n this.weekViewToggle.emit(this.showWeekViewInternal);\n\n if (this.showWeekViewInternal) {\n this.generateWeekData();\n }\n }\n\n /**\n * Navigate to previous day/week\n */\n override navigatePrevious(): void {\n if (this.showWeekViewInternal) {\n const previousWeek = new Date(this.currentWeekStart);\n previousWeek.setDate(previousWeek.getDate() - 7);\n this.navigateToDate(previousWeek);\n } else {\n super.navigatePrevious();\n }\n }\n\n /**\n * Navigate to next day/week\n */\n override navigateNext(): void {\n if (this.showWeekViewInternal) {\n const nextWeek = new Date(this.currentWeekStart);\n nextWeek.setDate(nextWeek.getDate() + 7);\n this.navigateToDate(nextWeek);\n } else {\n super.navigateNext();\n }\n }\n\n /**\n * Override changeView to regenerate calendar data\n */\n override changeView(view: CalendarView): void {\n super.changeView(view);\n if (this.showWeekViewInternal) {\n this.generateWeekData();\n }\n }\n\n /**\n * Get events for a specific date (limited by maxEventsPerDay)\n */\n getEventsForDateLimited(date: Date): CalendarEvent<T>[] {\n const events = this.getEventsForDate(date);\n return events.slice(0, this.maxEventsPerDay);\n }\n\n /**\n * Get remaining events count for a date\n */\n getRemainingEventsCount(date: Date): number {\n const totalEvents = this.getEventsForDate(date).length;\n return Math.max(0, totalEvents - this.maxEventsPerDay);\n }\n\n /**\n * Handle show more button click\n */\n onShowMoreClick(date: Date): void {\n this.showMoreClick.emit(date);\n }\n\n /**\n * Get day of week name\n */\n getDayOfWeekName(date: Date): string {\n const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n return dayNames[date.getDay()];\n }\n\n /**\n * Get month name\n */\n getMonthName(date: Date): string {\n const monthNames = [\n 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'\n ];\n return monthNames[date.getMonth()];\n }\n\n /**\n * Get formatted date for mini display\n */\n getFormattedDateMini(date: Date): string {\n if (this.compactMode) {\n return `${date.getDate()}`;\n }\n return `${this.getDayOfWeekName(date)} ${date.getDate()}`;\n }\n\n /**\n * Get current week range for display\n */\n getCurrentWeekRange(): string {\n const start = this.weekDays[0];\n const end = this.weekDays[6];\n\n if (this.compactMode) {\n return `${start.getDate()}-${end.getDate()} ${this.getMonthName(start)}`;\n }\n\n return `${this.getFormattedDate(start, 'short')} - ${this.getFormattedDate(end, 'short')}`;\n }\n\n /**\n * Check if date is weekend\n */\n isWeekend(date: Date): boolean {\n const day = date.getDay();\n return day === 0 || day === 6;\n }\n\n /**\n * Check if date is in current week\n */\n isInCurrentWeek(date: Date): boolean {\n return date >= this.weekDays[0] && date <= this.weekDays[6];\n }\n\n /**\n * Get event display text for mini view\n */\n getEventDisplayTextMini(event: CalendarEvent<T>): string {\n const text = this.getEventDisplayText(event);\n if (this.compactMode && text.length > 20) {\n return text.substring(0, 17) + '...';\n }\n return text;\n }\n\n /**\n * Get CSS classes for mini event\n */\n getMiniEventClasses(event: CalendarEvent<T>): string[] {\n const classes = ['amw-calendar-mini__event'];\n\n if (event.allDay) {\n classes.push('amw-calendar-mini__event--all-day');\n }\n\n if (this.compactMode) {\n classes.push('amw-calendar-mini__event--compact');\n }\n\n return classes;\n }\n\n /**\n * Get CSS classes for mini day\n */\n getMiniDayClasses(date: Date): string[] {\n const classes = ['amw-calendar-mini__day'];\n\n if (this.isToday(date)) {\n classes.push('amw-calendar-mini__day--today');\n }\n\n if (this.isWeekend(date)) {\n classes.push('amw-calendar-mini__day--weekend');\n }\n\n if (this.showWeekViewInternal && this.isInCurrentWeek(date)) {\n classes.push('amw-calendar-mini__day--current-week');\n }\n\n if (this.compactMode) {\n classes.push('amw-calendar-mini__day--compact');\n }\n\n return classes;\n }\n\n /**\n * Handle day click\n */\n onDayClick(date: Date): void {\n if (!this.showWeekViewInternal) {\n this.navigateToDate(date);\n }\n }\n\n /**\n * Handle day double click\n */\n onDayDoubleClick(date: Date): void {\n this.onAddButtonClickForItem();\n }\n\n /**\n * Handle event click in mini view\n */\n onMiniEventClick(event: CalendarEvent<T>): void {\n this.onEventClick(event);\n }\n\n /**\n * Handle event double click in mini view\n */\n onMiniEventDoubleClick(event: CalendarEvent<T>): void {\n this.onEventDoubleClick(event);\n }\n\n /**\n * Get time display for mini event\n */\n getMiniEventTime(event: CalendarEvent<T>): string {\n if (event.allDay) {\n return 'All day';\n }\n\n if (this.compactMode) {\n return this.getFormattedTime(event.start);\n }\n\n const startTime = this.getFormattedTime(event.start);\n const endTime = event.end ? this.getFormattedTime(event.end) : '';\n\n return endTime ? `${startTime} - ${endTime}` : startTime;\n }\n}\n","<div class=\"amw-calendar-mini\"\n [class]=\"internalConfig.cssClass\"\n [class.amw-calendar-mini--loading]=\"loading\"\n [class.amw-calendar-mini--disabled]=\"disabled\"\n [class.amw-calendar-mini--compact]=\"compactMode\"\n [class.amw-calendar-mini--week-view]=\"showWeekViewInternal\">\n\n <!-- Loading Spinner -->\n @if (loading) {\n <div class=\"amw-calendar-mini__loading\">\n <mat-spinner diameter=\"24\"></mat-spinner>\n </div>\n }\n\n <!-- Header -->\n @if (showNavigation) {\n <div class=\"amw-calendar-mini__header\">\n <!-- Navigation Controls -->\n <div class=\"amw-calendar-mini__navigation\">\n <button mat-icon-button\n (click)=\"navigatePrevious()\"\n [disabled]=\"disabled\"\n matTooltip=\"Previous\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button mat-button\n (click)=\"navigateToday()\"\n [disabled]=\"disabled\"\n matTooltip=\"Today\">\n Today\n </button>\n <button mat-icon-button\n (click)=\"navigateNext()\"\n [disabled]=\"disabled\"\n matTooltip=\"Next\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n <!-- Current Date/Period Display -->\n <div class=\"amw-calendar-mini__current-period\">\n @if (!showWeekViewInternal) {\n <h3>\n {{ getFormattedDate(selectedDate, 'medium') }}\n </h3>\n }\n @if (showWeekViewInternal) {\n <h3>\n {{ getCurrentWeekRange() }}\n </h3>\n }\n </div>\n <!-- Week View Toggle -->\n <div class=\"amw-calendar-mini__view-toggle\">\n <button mat-icon-button\n (click)=\"toggleWeekView()\"\n [disabled]=\"disabled\"\n [matTooltip]=\"showWeekViewInternal ? 'Show single day' : 'Show week view'\">\n <mat-icon>{{ showWeekViewInternal ? 'view_day' : 'view_week' }}</mat-icon>\n </button>\n </div>\n </div>\n }\n\n <!-- Content -->\n <div class=\"amw-calendar-mini__content\">\n\n <!-- Single Day View -->\n @if (!showWeekViewInternal) {\n <div class=\"amw-calendar-mini__day-view\">\n <mat-card class=\"amw-calendar-mini__day-card\">\n <mat-card-header>\n <mat-card-title>\n {{ getFormattedDate(selectedDate, 'long') }}\n </mat-card-title>\n <mat-card-subtitle>\n {{ getEventsForDate(selectedDate).length }} event{{ getEventsForDate(selectedDate).length !== 1 ? 's' : '' }}\n </mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <!-- Events List -->\n <div class=\"amw-calendar-mini__events-list\">\n @for (event of getEventsForDateLimited(selectedDate); track event) {\n <div\n class=\"amw-calendar-mini__event\"\n [class]=\"getMiniEventClasses(event).join(' ')\"\n [style.border-left-color]=\"getEventColor(event)\"\n (click)=\"onMiniEventClick(event)\"\n (dblclick)=\"onMiniEventDoubleClick(event)\">\n <div class=\"amw-calendar-mini__event-content\">\n <div class=\"amw-calendar-mini__event-title\">\n {{ getEventDisplayTextMini(event) }}\n </div>\n @if (event.description && !compactMode) {\n <div\n class=\"amw-calendar-mini__event-description\">\n {{ event.description }}\n </div>\n }\n <div class=\"amw-calendar-mini__event-time\">\n {{ getMiniEventTime(event) }}\n </div>\n </div>\n <div class=\"amw-calendar-mini__event-actions\">\n @if (isEventEditable(event)) {\n <button\n mat-icon-button\n (click)=\"editEvent(event)\"\n matTooltip=\"Edit\">\n <mat-icon>edit</mat-icon>\n </button>\n }\n @if (isEventDeletable(event)) {\n <button\n mat-icon-button\n (click)=\"deleteEvent(event)\"\n matTooltip=\"Delete\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n <button mat-icon-button\n (click)=\"onEventDetails(event)\"\n matTooltip=\"Details\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </div>\n }\n <!-- Show More Button -->\n @if (showMoreButton && getRemainingEventsCount(selectedDate) > 0) {\n <div\n class=\"amw-calendar-mini__show-more\">\n <button mat-button\n (click)=\"onShowMoreClick(selectedDate)\"\n [disabled]=\"disabled\">\n +{{ getRemainingEventsCount(selectedDate) }} more\n </button>\n </div>\n }\n <!-- No Events Message -->\n @if (getEventsForDate(selectedDate).length === 0) {\n <div\n class=\"amw-calendar-mini__no-events\">\n <mat-icon>event_available</mat-icon>\n <p>No events scheduled</p>\n </div>\n }\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n }\n\n <!-- Week View -->\n @if (showWeekViewInternal) {\n <div class=\"amw-calendar-mini__week-view\">\n <div class=\"amw-calendar-mini__week-grid\">\n @for (date of weekDays; track date) {\n <div\n class=\"amw-calendar-mini__week-day\"\n [class]=\"getMiniDayClasses(date).join(' ')\"\n (click)=\"onDayClick(date)\"\n (dblclick)=\"onDayDoubleClick(date)\">\n <!-- Day Header -->\n <div class=\"amw-calendar-mini__day-header\">\n <div class=\"amw-calendar-mini__day-name\">\n {{ getDayOfWeekName(date) }}\n </div>\n <div class=\"amw-calendar-mini__day-date\">\n {{ date.getDate() }}\n </div>\n </div>\n <!-- Day Events -->\n <div class=\"amw-calendar-mini__day-events\">\n @for (event of getEventsForDateLimited(date); track event) {\n <div\n class=\"amw-calendar-mini__event\"\n [class]=\"getMiniEventClasses(event).join(' ')\"\n [style.border-left-color]=\"getEventColor(event)\"\n (click)=\"onMiniEventClick(event)\"\n (dblclick)=\"onMiniEventDoubleClick(event)\">\n <div class=\"amw-calendar-mini__event-content\">\n <div class=\"amw-calendar-mini__event-title\">\n {{ getEventDisplayTextMini(event) }}\n </div>\n @if (!event.allDay && !compactMode) {\n <div\n class=\"amw-calendar-mini__event-time\">\n {{ getFormattedTime(event.start) }}\n </div>\n }\n </div>\n <div class=\"amw-calendar-mini__event-actions\">\n @if (isEventEditable(event)) {\n <button\n mat-icon-button\n (click)=\"editEvent(event)\"\n matTooltip=\"Edit\">\n <mat-icon>edit</mat-icon>\n </button>\n }\n @if (isEventDeletable(event)) {\n <button\n mat-icon-button\n (click)=\"deleteEvent(event)\"\n matTooltip=\"Delete\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n <button mat-icon-button\n (click)=\"onEventDetails(event)\"\n matTooltip=\"Details\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n </div>\n }\n <!-- Show More Button -->\n @if (showMoreButton && getRemainingEventsCount(date) > 0) {\n <div\n class=\"amw-calendar-mini__show-more\">\n <button mat-button\n (click)=\"onShowMoreClick(date)\"\n [disabled]=\"disabled\">\n +{{ getRemainingEventsCount(date) }}\n </button>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation, forwardRef, ContentChild, TemplateRef, OnInit, OnDestroy, Inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatDialogModule, MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { BaseComponent } from '../../../controls/components/base/base.component';\nimport { DialogConfig, DialogType, DialogSize, DialogPosition } from './interfaces';\n\n/**\n * Angular Material Wrap Dialog Component\n * \n * A comprehensive dialog component that wraps Angular Material's mat-dialog\n * with additional features and Material 3 theming support.\n * \n * @example\n * ```html\n * <amw-dialog\n * [title]=\"'Confirm Action'\"\n * [content]=\"'Are you sure you want to proceed?'\"\n * [type]=\"'confirm'\"\n * [size]=\"'medium'\"\n * [actions]=\"dialogActions\"\n * [loading]=\"false\"\n * (actionClick)=\"onActionClick($event)\"\n * (closeClick)=\"onCloseClick()\">\n * </amw-dialog>\n * ```\n * \n * @example\n * ```typescript\n * export class MyComponent {\n * dialogActions = [\n * { label: 'Cancel', action: 'cancel', color: 'warn' },\n * { label: 'Confirm', action: 'confirm', color: 'primary' }\n * ];\n * \n * onActionClick(event: { action: any; index: number }) {\n * if (event.action.action === 'confirm') {\n * this.performAction();\n * }\n * }\n * \n * onCloseClick() {\n * this.dialogRef.close();\n * }\n * }\n * ```\n */\n@Component({\n selector: 'amw-dialog',\n standalone: true,\n imports: [\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n MatProgressSpinnerModule\n ],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: forwardRef(() => AmwDialogComponent),\n multi: true\n }\n ],\n templateUrl: './amw-dialog.component.html'\n})\nexport class AmwDialogComponent extends BaseComponent implements OnInit, OnDestroy {\n @Input() config: DialogConfig = {};\n @Input() type: DialogType = 'standard';\n @Input() size: DialogSize = 'medium';\n @Input() position: DialogPosition = 'center';\n @Input() title = '';\n @Input() content = '';\n @Input() actions: { label: string; icon?: string; color?: 'primary' | 'accent' | 'warn'; disabled?: boolean; action?: string }[] = [];\n @Input() showCloseButton = true;\n @Input() showHeader = true;\n @Input() showFooter = true;\n @Input() loading = false;\n @Input() override disabled = false;\n @Input() closable = true;\n @Input() backdrop = true;\n @Input() escapeKeyClose = true;\n @Input() clickOutsideClose = true;\n @Input() maxWidth = '';\n @Input() maxHeight = '';\n @Input() minWidth = '';\n @Input() minHeight = '';\n @Input() width = '';\n @Input() height = '';\n @Input() autoFocus = true;\n @Input() restoreFocus = true;\n @Input() hasBackdrop = true;\n @Input() backdropClass = '';\n @Input() panelClass = '';\n\n @Output() dialogOpen = new EventEmitter<void>();\n @Output() dialogClose = new EventEmitter<any>();\n @Output() dialogAfterOpen = new EventEmitter<void>();\n @Output() dialogAfterClose = new EventEmitter<any>();\n @Output() actionClick = new EventEmitter<{ action: any; index: number }>();\n @Output() closeClick = new EventEmitter<void>();\n\n @ContentChild('dialogHeader') headerTemplate?: TemplateRef<any>;\n @ContentChild('dialogContent') contentTemplate?: TemplateRef<any>;\n @ContentChild('dialogFooter') footerTemplate?: TemplateRef<any>;\n\n private dialogRef?: MatDialogRef<any>;\n\n constructor(\n private dialog: MatDialog,\n @Inject(MAT_DIALOG_DATA) public data: any = {},\n private matDialogRef: MatDialogRef<AmwDialogComponent>\n ) {\n super();\n\n // Initialize properties from injected data\n if (this.data) {\n this.title = this.data.title || this.title;\n this.content = this.data.content || this.content;\n this.type = this.data.type ? this.sanitizeClassName(this.data.type) as DialogType : this.type;\n this.size = this.data.size ? this.sanitizeClassName(this.data.size) as DialogSize : this.size;\n this.position = this.data.position ? this.sanitizeClassName(this.data.position) as DialogPosition : this.position;\n this.actions = this.data.actions || this.actions;\n this.showCloseButton = this.data.showCloseButton !== undefined ? this.data.showCloseButton : this.showCloseButton;\n this.showHeader = this.data.showHeader !== undefined ? this.data.showHeader : this.showHeader;\n this.showFooter = this.data.showFooter !== undefined ? this.data.showFooter : this.showFooter;\n this.loading = this.data.loading || this.loading;\n this.disabled = this.data.disabled || this.disabled;\n this.closable = this.data.closable !== undefined ? this.data.closable : this.closable;\n this.backdrop = this.data.backdrop !== undefined ? this.data.backdrop : this.backdrop;\n this.escapeKeyClose = this.data.escapeKeyClose !== undefined ? this.data.escapeKeyClose : this.escapeKeyClose;\n this.clickOutsideClose = this.data.clickOutsideClose !== undefined ? this.data.clickOutsideClose : this.clickOutsideClose;\n this.autoFocus = this.data.autoFocus !== undefined ? this.data.autoFocus : this.autoFocus;\n this.restoreFocus = this.data.restoreFocus !== undefined ? this.data.restoreFocus : this.restoreFocus;\n this.hasBackdrop = this.data.hasBackdrop !== undefined ? this.data.hasBackdrop : this.hasBackdrop;\n this.backdropClass = this.data.backdropClass ? this.sanitizeClassName(this.data.backdropClass) : this.backdropClass;\n this.panelClass = this.data.panelClass ? this.sanitizeClassName(this.data.panelClass) : this.panelClass;\n }\n }\n\n ngOnInit() {\n // Auto-open dialog if configured\n if (this.config.autoOpen) {\n this.open();\n }\n }\n\n ngOnDestroy() {\n if (this.dialogRef) {\n this.dialogRef.close();\n }\n }\n\n open() {\n if (this.disabled || this.loading) {\n return;\n }\n\n const dialogConfig = this.getDialogConfig();\n\n this.dialogRef = this.dialog.open(AmwDialogComponent, {\n ...dialogConfig,\n data: {\n title: this.title,\n content: this.content,\n actions: this.actions,\n showCloseButton: this.showCloseButton,\n showHeader: this.showHeader,\n showFooter: this.showFooter,\n loading: this.loading,\n disabled: this.disabled,\n closable: this.closable,\n type: this.type,\n size: this.size,\n headerTemplate: this.headerTemplate,\n contentTemplate: this.contentTemplate,\n footerTemplate: this.footerTemplate,\n onActionClick: (action: any, index: number) => this.onActionClick(action, index),\n onCloseClick: () => this.onCloseClick()\n }\n });\n\n this.dialogRef.afterOpened().subscribe(() => {\n this.dialogAfterOpen.emit();\n });\n\n this.dialogRef.afterClosed().subscribe((result) => {\n this.dialogAfterClose.emit(result);\n });\n\n this.dialogOpen.emit();\n }\n\n close(result?: any) {\n if (this.matDialogRef) {\n this.matDialogRef.close(result);\n this.dialogClose.emit(result);\n }\n }\n\n onActionClick(action: any, index: number) {\n if (!action.disabled && !this.disabled && !this.loading) {\n this.actionClick.emit({ action, index });\n\n // Handle built-in actions\n if (action.action === 'close') {\n this.close(action);\n } else if (action.action === 'cancel') {\n this.close('cancel');\n } else if (action.action === 'confirm') {\n this.close('confirm');\n }\n }\n }\n\n onCloseClick() {\n if (this.closable && !this.disabled && !this.loading) {\n this.closeClick.emit();\n this.close('close');\n }\n }\n\n get dialogClasses(): string {\n const classes = ['amw-dialog'];\n\n // Default to 'standard' if no type is specified\n const dialogType = this.type && typeof this.type === 'string' && this.type.trim() ? this.type : 'standard';\n const cleanType = this.sanitizeClassName(dialogType);\n if (cleanType) {\n classes.push(`amw-dialog--${cleanType}`);\n }\n if (this.size && typeof this.size === 'string' && this.size.trim()) {\n const cleanSize = this.sanitizeClassName(this.size);\n if (cleanSize) {\n classes.push(`amw-dialog--${cleanSize}`);\n }\n }\n if (this.position && typeof this.position === 'string' && this.position.trim()) {\n const cleanPosition = this.sanitizeClassName(this.position);\n if (cleanPosition) {\n classes.push(`amw-dialog--${cleanPosition}`);\n }\n }\n if (this.disabled) classes.push('amw-dialog--disabled');\n if (this.loading) classes.push('amw-dialog--loading');\n\n const result = classes.join(' ');\n\n // Additional validation to ensure no whitespace in individual class names\n const validatedClasses = result.split(' ').map(cls => {\n if (cls && cls.trim() !== cls) {\n return cls.trim();\n }\n return cls;\n }).filter(cls => cls && cls.length > 0);\n\n return validatedClasses.join(' ');\n }\n\n private sanitizeClassName(value: string): string {\n if (!value || typeof value !== 'string') return '';\n\n // First, ensure we have a string and trim it\n let sanitized = String(value).trim();\n\n // If empty after trim, return empty string\n if (!sanitized) return '';\n\n // Replace any whitespace (including tabs, newlines, etc.) with hyphens\n sanitized = sanitized.replace(/\\s+/g, '-');\n\n // Remove any characters that are not alphanumeric, hyphens, or underscores\n sanitized = sanitized.replace(/[^a-zA-Z0-9-_]/g, '');\n\n // Replace multiple consecutive hyphens with single hyphen\n sanitized = sanitized.replace(/-+/g, '-');\n\n // Remove leading and trailing hyphens\n sanitized = sanitized.replace(/^-+|-+$/g, '');\n\n // Final check: ensure no whitespace characters remain\n sanitized = sanitized.replace(/\\s/g, '');\n\n // Return empty string if nothing valid remains\n return sanitized || '';\n }\n\n private getDialogConfig() {\n const config: any = {\n width: this.getDialogWidth(),\n height: this.getDialogHeight(),\n maxWidth: this.maxWidth || this.getMaxWidth(),\n maxHeight: this.maxHeight || this.getMaxHeight(),\n minWidth: this.minWidth || this.getMinWidth(),\n minHeight: this.minHeight || this.getMinHeight(),\n position: this.getDialogPosition(),\n hasBackdrop: this.hasBackdrop,\n backdropClass: this.backdropClass || this.getBackdropClass(),\n panelClass: this.panelClass || this.getPanelClass(),\n disableClose: !this.closable || !this.escapeKeyClose,\n autoFocus: this.autoFocus,\n restoreFocus: this.restoreFocus,\n closeOnNavigation: true\n };\n\n // Apply custom config\n if (this.config) {\n Object.assign(config, this.config);\n }\n\n return config;\n }\n\n private getDialogWidth(): string {\n if (this.width) return this.width;\n\n switch (this.size) {\n case 'small': return '300px';\n case 'medium': return '500px';\n case 'large': return '800px';\n case 'fullscreen': return '100vw';\n default: return '500px';\n }\n }\n\n private getDialogHeight(): string {\n if (this.height) return this.height;\n\n switch (this.size) {\n case 'small': return '200px';\n case 'medium': return '400px';\n case 'large': return '600px';\n case 'fullscreen': return '100vh';\n default: return '400px';\n }\n }\n\n private getMaxWidth(): string {\n switch (this.size) {\n case 'small': return '400px';\n case 'medium': return '600px';\n case 'large': return '900px';\n case 'fullscreen': return '100vw';\n default: return '600px';\n }\n }\n\n private getMaxHeight(): string {\n switch (this.size) {\n case 'small': return '300px';\n case 'medium': return '500px';\n case 'large': return '700px';\n case 'fullscreen': return '100vh';\n default: return '500px';\n }\n }\n\n private getMinWidth(): string {\n switch (this.size) {\n case 'small': return '250px';\n case 'medium': return '400px';\n case 'large': return '600px';\n case 'fullscreen': return '100vw';\n default: return '400px';\n }\n }\n\n private getMinHeight(): string {\n switch (this.size) {\n case 'small': return '150px';\n case 'medium': return '300px';\n case 'large': return '400px';\n case 'fullscreen': return '100vh';\n default: return '300px';\n }\n }\n\n private getDialogPosition() {\n switch (this.position) {\n case 'top': return { top: '20px' };\n case 'bottom': return { bottom: '20px' };\n case 'left': return { left: '20px' };\n case 'right': return { right: '20px' };\n case 'center': return {};\n default: return {};\n }\n }\n\n private getBackdropClass(): string {\n const classes = ['amw-dialog-backdrop'];\n\n if (this.type) classes.push(`amw-dialog-backdrop--${this.type}`);\n if (this.size) classes.push(`amw-dialog-backdrop--${this.size}`);\n\n return classes.join(' ');\n }\n\n private getPanelClass(): string {\n const classes = ['amw-dialog-panel'];\n\n if (this.type) classes.push(`amw-dialog-panel--${this.type}`);\n if (this.size) classes.push(`amw-dialog-panel--${this.size}`);\n if (this.position) classes.push(`amw-dialog-panel--${this.position}`);\n\n return classes.join(' ');\n }\n}","<div [class]=\"dialogClasses\">\n <!-- Header -->\n @if (showHeader) {\n <div class=\"amw-dialog__header\">\n @if (headerTemplate) {\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"></ng-container>\n } @else {\n <h2 class=\"amw-dialog__title\">\n @if (type === 'warning' || type === 'alert') {\n <mat-icon class=\"dialog-icon\">warning</mat-icon>\n }\n @if (type === 'error') {\n <mat-icon class=\"dialog-icon\">error</mat-icon>\n }\n @if (type === 'success') {\n <mat-icon class=\"dialog-icon\">check_circle</mat-icon>\n }\n @if (type === 'info') {\n <mat-icon class=\"dialog-icon\">info</mat-icon>\n }\n @if (type === 'confirm') {\n <mat-icon class=\"dialog-icon\">help</mat-icon>\n }\n @if (!type || type === 'standard') {\n <mat-icon class=\"dialog-icon\">info</mat-icon>\n }\n {{ title }}\n </h2>\n @if (showCloseButton) {\n <button\n mat-icon-button\n class=\"amw-dialog__close\"\n (click)=\"onCloseClick()\"\n [disabled]=\"!closable || disabled || loading\">\n <mat-icon>close</mat-icon>\n </button>\n }\n }\n </div>\n }\n\n <!-- Content -->\n <div class=\"amw-dialog__content\">\n @if (contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"></ng-container>\n } @else {\n <div class=\"dialog-content\">\n @switch (type) {\n <!-- Success Message -->\n @case ('success') {\n <div class=\"success-message\">\n <mat-icon class=\"success-icon\">check_circle</mat-icon>\n <div>\n <p class=\"success-text\" [innerHTML]=\"content\"></p>\n </div>\n </div>\n }\n <!-- Alert Message -->\n @case ('alert') {\n <div class=\"alert-message\">\n <mat-icon class=\"alert-icon\">warning</mat-icon>\n <div>\n <p class=\"alert-text\" [innerHTML]=\"content\"></p>\n </div>\n </div>\n }\n <!-- Info Message -->\n @case ('info') {\n <div class=\"info-message\">\n <mat-icon class=\"info-icon\">info</mat-icon>\n <div>\n <p class=\"info-text\" [innerHTML]=\"content\"></p>\n </div>\n </div>\n }\n <!-- Warning Message -->\n @case ('warning') {\n <div class=\"alert-message\">\n <mat-icon class=\"alert-icon\">warning</mat-icon>\n <div>\n <p class=\"alert-text\" [innerHTML]=\"content\"></p>\n </div>\n </div>\n }\n <!-- Error Message -->\n @case ('error') {\n <div class=\"alert-message\">\n <mat-icon class=\"alert-icon\">error</mat-icon>\n <div>\n <p class=\"alert-text\" [innerHTML]=\"content\"></p>\n </div>\n </div>\n }\n <!-- Confirm Message -->\n @case ('confirm') {\n <div class=\"info-message\">\n <mat-icon class=\"info-icon\">help_outline</mat-icon>\n <div>\n <p class=\"info-text\" [innerHTML]=\"content\"></p>\n </div>\n </div>\n }\n <!-- Default/Standard Message -->\n @default {\n <div>\n <p [innerHTML]=\"content\"></p>\n </div>\n }\n }\n </div>\n }\n\n </div>\n\n <!-- Footer -->\n @if (showFooter && actions.length > 0) {\n <div class=\"amw-dialog__footer\">\n @if (footerTemplate) {\n <ng-container [ngTemplateOutlet]=\"footerTemplate\"></ng-container>\n } @else {\n @for (action of actions; track action; let i = $index) {\n <button\n mat-button\n [color]=\"action.color || 'primary'\"\n [disabled]=\"action.disabled || disabled || loading\"\n (click)=\"onActionClick(action, i)\"\n class=\"amw-dialog__action\">\n @if (action.icon) {\n <mat-icon class=\"amw-dialog__action-icon\">{{ action.icon }}</mat-icon>\n }\n {{ action.label }}\n </button>\n }\n }\n </div>\n }\n\n <!-- Loading Overlay -->\n @if (loading) {\n <div class=\"amw-dialog__loading\">\n <mat-spinner diameter=\"40\"></mat-spinner>\n <p>Loading...</p>\n </div>\n }\n</div>","import { Injectable, ComponentRef, Type } from '@angular/core';\nimport { MatDialog, MatDialogRef, MatDialogConfig } from '@angular/material/dialog';\nimport { Observable } from 'rxjs';\nimport { AmwDialogComponent } from '../components/amw-dialog/amw-dialog.component';\nimport { DialogConfig, DialogType, DialogSize, DialogPosition } from '../components/amw-dialog/interfaces';\nimport { DialogOptions } from '../interfaces/dialog-options';\n\n/**\n * Service for managing dialogs programmatically\n * \n * Provides convenient methods for creating and managing various types of dialogs\n * including alerts, confirmations, prompts, and custom dialogs.\n * \n * @example\n * ```typescript\n * constructor(private dialogService: DialogService) {}\n * \n * showAlert() {\n * this.dialogService.alert('Operation completed!', 'Success');\n * }\n * \n * confirmAction() {\n * this.dialogService.confirm('Are you sure?', 'Confirm').subscribe(result => {\n * if (result === 'confirm') {\n * // Handle confirmation\n * }\n * });\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DialogService {\n constructor(private dialog: MatDialog) { }\n\n /**\n * Opens a standard dialog with custom configuration\n * \n * @param options - Dialog configuration options\n * @returns MatDialogRef for the opened dialog\n * \n * @example\n * ```typescript\n * const dialogRef = this.dialogService.open({\n * title: 'Custom Dialog',\n * content: 'This is a custom dialog',\n * type: 'info',\n * size: 'medium',\n * actions: [\n * { label: 'OK', action: 'close', color: 'primary' }\n * ]\n * });\n * \n * dialogRef.afterClosed().subscribe(result => {\n * console.log('Dialog closed with result:', result);\n * });\n * ```\n */\n open(options: DialogOptions): MatDialogRef<any> {\n const config = this.getDialogConfig(options);\n return this.dialog.open(AmwDialogComponent, config);\n }\n\n /**\n * Opens an alert dialog with a single OK button\n * \n * @param message - Alert message to display\n * @param title - Dialog title (default: 'Alert')\n * @returns MatDialogRef for the opened dialog\n * \n * @example\n * ```typescript\n * this.dialogService.alert('Operation completed successfully!', 'Success');\n * ```\n */\n alert(message: string, title: string = 'Alert'): MatDialogRef<any> {\n return this.open({\n title,\n content: message,\n type: 'alert',\n actions: [\n { label: 'OK', action: 'close', color: 'primary' }\n ],\n size: 'small'\n });\n }\n\n /**\n * Opens a confirmation dialog with Cancel and Confirm buttons\n * \n * @param message - Confirmation message to display\n * @param title - Dialog title (default: 'Confirm')\n * @returns Observable that emits the result when dialog closes\n * \n * @example\n * ```typescript\n * this.dialogService.confirm('Are you sure you want to delete this item?', 'Delete Item')\n * .subscribe(result => {\n * if (result === 'confirm') {\n * this.deleteItem();\n * }\n * });\n * ```\n */\n confirm(message: string, title: string = 'Confirm'): Observable<any> {\n const dialogRef = this.open({\n title,\n content: message,\n type: 'confirm',\n actions: [\n { label: 'Cancel', action: 'cancel', color: 'warn' },\n { label: 'Confirm', action: 'confirm', color: 'primary' }\n ],\n size: 'small'\n });\n\n return dialogRef.afterClosed();\n }\n\n /**\n * Opens a prompt dialog for user input\n * \n * @param message - Prompt message to display\n * @param title - Dialog title (default: 'Prompt')\n * @param defaultValue - Default input value (default: '')\n * @returns Observable that emits the result when dialog closes\n * \n * @example\n * ```typescript\n * this.dialogService.prompt('Enter your name:', 'User Input', 'John Doe')\n * .subscribe(result => {\n * if (result === 'confirm') {\n * console.log('User input:', result);\n * }\n * });\n * ```\n */\n prompt(message: string, title: string = 'Prompt', defaultValue: string = ''): Observable<any> {\n const dialogRef = this.open({\n title,\n content: message,\n type: 'prompt',\n actions: [\n { label: 'Cancel', action: 'cancel', color: 'warn' },\n { label: 'OK', action: 'confirm', color: 'primary' }\n ],\n size: 'medium',\n data: { defaultValue }\n });\n\n return dialogRef.afterClosed();\n }\n\n /**\n * Opens an informational dialog\n * \n * @param message - Information message to display\n * @param title - Dialog title (default: 'Information')\n * @returns MatDialogRef for the opened dialog\n * \n * @example\n * ```typescript\n * this.dialogService.info('This feature is coming soon!', 'Feature Notice');\n * ```\n */\n info(message: string, title: string = 'Information'): MatDialogRef<any> {\n return this.open({\n title,\n content: message,\n type: 'info',\n actions: [\n { label: 'Got it', action: 'close', color: 'primary' }\n ],\n size: 'small'\n });\n }\n\n /**\n * Opens a warning dialog with Cancel and Proceed buttons\n * \n * @param message - Warning message to display\n * @param title - Dialog title (default: 'Warning')\n * @returns Observable that emits the result when dialog closes\n * \n * @example\n * ```typescript\n * this.dialogService.warning('This action cannot be undone!', 'Warning')\n * .subscribe(result => {\n * if (result === 'confirm') {\n * this.performDestructiveAction();\n * }\n * });\n * ```\n */\n warning(message: string, title: string = 'Warning'): Observable<any> {\n const dialogRef = this.open({\n title,\n content: message,\n type: 'warning',\n actions: [\n { label: 'Cancel', action: 'cancel' },\n { label: 'Proceed', action: 'confirm', color: 'warn' }\n ],\n size: 'small'\n });\n\n return dialogRef.afterClosed();\n }\n\n /**\n * Opens an error dialog\n * \n * @param message - Error message to display\n * @param title - Dialog title (default: 'Error')\n * @returns MatDialogRef for the opened dialog\n * \n * @example\n * ```typescript\n * this.dialogService.error('Failed to save data. Please try again.', 'Save Error');\n * ```\n */\n error(message: string, title: string = 'Error'): MatDialogRef<any> {\n return this.open({\n title,\n content: message,\n type: 'error',\n actions: [\n { label: 'OK', action: 'close', color: 'primary' }\n ],\n size: 'small'\n });\n }\n\n /**\n * Opens a success dialog\n * \n * @param message - Success message to display\n * @param title - Dialog title (default: 'Success')\n * @returns MatDialogRef for the opened dialog\n * \n * @example\n * ```typescript\n * this.dialogService.success('Data saved successfully!', 'Success');\n * ```\n */\n success(message: string, title: string = 'Success'): MatDialogRef<any> {\n return this.open({\n title,\n content: message,\n type: 'success',\n actions: [\n { label: 'Great!', action: 'close', color: 'primary' }\n ],\n size: 'small'\n });\n }\n\n /**\n * Opens a loading dialog with spinner\n * \n * @param message - Loading message to display (default: 'Loading...')\n * @param title - Dialog title (default: 'Please wait')\n * @returns MatDialogRef for the opened dialog\n * \n * @example\n * ```typescript\n * const loadingDialog = this.dialogService.loading('Processing your request...', 'Please wait');\n * \n * // Simulate async operation\n * setTimeout(() => {\n * loadingDialog.close();\n * this.dialogService.success('Complete!', 'Success');\n * }, 3000);\n * ```\n */\n loading(message: string = 'Loading...', title: string = 'Please wait'): MatDialogRef<any> {\n return this.open({\n title,\n content: message,\n loading: true,\n closable: false,\n actions: [\n { label: 'Cancel', action: 'cancel', disabled: true }\n ],\n size: 'small'\n });\n }\n\n /**\n * Opens a custom dialog with any Angular component\n * \n * @param component - Angular component to display in dialog\n * @param config - Optional MatDialog configuration\n * @returns MatDialogRef for the opened dialog\n * \n * @example\n * ```typescript\n * const dialogRef = this.dialogService.openComponent(MyCustomComponent, {\n * width: '600px',\n * height: '400px',\n * data: { userId: 123 }\n * });\n * ```\n */\n openComponent<T>(component: Type<T>, config?: MatDialogConfig): MatDialogRef<T> {\n return this.dialog.open(component, config);\n }\n\n /**\n * Closes all currently open dialogs\n * \n * @example\n * ```typescript\n * this.dialogService.closeAll();\n * ```\n */\n closeAll(): void {\n this.dialog.closeAll();\n }\n\n /**\n * Gets all currently open dialogs\n * \n * @returns Array of MatDialogRef instances for open dialogs\n * \n * @example\n * ```typescript\n * const openDialogs = this.dialogService.getOpenDialogs();\n * console.log(`Currently ${openDialogs.length} dialogs are open`);\n * ```\n */\n getOpenDialogs(): MatDialogRef<any>[] {\n return this.dialog.openDialogs;\n }\n\n /**\n * Checks if any dialogs are currently open\n * \n * @returns True if any dialogs are open, false otherwise\n * \n * @example\n * ```typescript\n * if (this.dialogService.hasOpenDialogs()) {\n * console.log('Some dialogs are still open');\n * }\n * ```\n */\n hasOpenDialogs(): boolean {\n return this.dialog.openDialogs.length > 0;\n }\n\n private getDialogConfig(options: DialogOptions): MatDialogConfig {\n const backdropClass = this.getBackdropClass(options.type) || 'amw-dialog-backdrop';\n const panelClass = this.getPanelClass(options.type, options.size) || 'amw-dialog-panel';\n\n // Final validation to ensure no whitespace in class names\n if (backdropClass.includes(' ') || panelClass.includes(' ')) {\n // Handle whitespace in class names if needed\n }\n\n const config: MatDialogConfig = {\n data: {\n title: options.title || '',\n content: options.content || '',\n type: options.type || 'standard',\n size: options.size || 'medium',\n position: options.position || 'center',\n actions: options.actions || [],\n showCloseButton: options.showCloseButton !== false,\n showHeader: options.showHeader !== false,\n showFooter: options.showFooter !== false,\n loading: options.loading || false,\n disabled: options.disabled || false,\n closable: options.closable !== false,\n backdrop: options.backdrop !== false,\n escapeKeyClose: options.escapeKeyClose !== false,\n clickOutsideClose: options.clickOutsideClose !== false,\n autoFocus: options.autoFocus !== false,\n restoreFocus: options.restoreFocus !== false,\n hasBackdrop: options.hasBackdrop !== false,\n data: options.data\n },\n width: options.width || this.getDefaultWidth(options.size),\n height: options.height || this.getDefaultHeight(options.size),\n maxWidth: options.maxWidth || this.getDefaultMaxWidth(options.size),\n maxHeight: options.maxHeight || this.getDefaultMaxHeight(options.size),\n minWidth: options.minWidth || this.getDefaultMinWidth(options.size),\n minHeight: options.minHeight || this.getDefaultMinHeight(options.size),\n hasBackdrop: options.hasBackdrop !== false,\n backdropClass: backdropClass,\n panelClass: panelClass,\n disableClose: options.closable === false,\n autoFocus: options.autoFocus !== false,\n restoreFocus: options.restoreFocus !== false,\n closeOnNavigation: true\n };\n\n // Apply position\n if (options.position) {\n config.position = this.getPosition(options.position);\n }\n\n return config;\n }\n\n private getDefaultWidth(size?: DialogSize): string {\n switch (size) {\n case 'small': return '300px';\n case 'medium': return '500px';\n case 'large': return '800px';\n case 'fullscreen': return '100vw';\n default: return '500px';\n }\n }\n\n private getDefaultHeight(size?: DialogSize): string {\n switch (size) {\n case 'small': return 'auto';\n case 'medium': return 'auto';\n case 'large': return 'auto';\n case 'fullscreen': return '100vh';\n default: return 'auto';\n }\n }\n\n private getDefaultMaxWidth(size?: DialogSize): string {\n switch (size) {\n case 'small': return '400px';\n case 'medium': return '600px';\n case 'large': return '900px';\n case 'fullscreen': return '100vw';\n default: return '600px';\n }\n }\n\n private getDefaultMaxHeight(size?: DialogSize): string {\n switch (size) {\n case 'small': return '80vh';\n case 'medium': return '85vh';\n case 'large': return '90vh';\n case 'fullscreen': return '100vh';\n default: return '85vh';\n }\n }\n\n private getDefaultMinWidth(size?: DialogSize): string {\n switch (size) {\n case 'small': return '250px';\n case 'medium': return '400px';\n case 'large': return '600px';\n case 'fullscreen': return '100vw';\n default: return '400px';\n }\n }\n\n private getDefaultMinHeight(size?: DialogSize): string {\n switch (size) {\n case 'small': return 'auto';\n case 'medium': return 'auto';\n case 'large': return 'auto';\n case 'fullscreen': return '100vh';\n default: return 'auto';\n }\n }\n\n private getPosition(position: DialogPosition): any {\n switch (position) {\n case 'top': return { top: '20px' };\n case 'bottom': return { bottom: '20px' };\n case 'left': return { left: '20px' };\n case 'right': return { right: '20px' };\n case 'center': return {};\n default: return {};\n }\n }\n\n private getBackdropClass(type?: DialogType): string {\n // Angular Material expects a single class name, not multiple classes\n const baseClass = 'amw-dialog-backdrop';\n\n if (type && typeof type === 'string' && type.trim()) {\n const cleanType = this.sanitizeClassName(type);\n if (cleanType) {\n return `${baseClass}-${cleanType}`;\n }\n }\n\n console.log('getBackdropClass input:', type, 'output:', baseClass);\n return baseClass;\n }\n\n private getPanelClass(type?: DialogType, size?: DialogSize): string {\n // Angular Material expects a single class name, not multiple classes\n const baseClass = 'amw-dialog-panel';\n\n if (type && typeof type === 'string' && type.trim()) {\n const cleanType = this.sanitizeClassName(type);\n if (cleanType) {\n return `${baseClass}-${cleanType}`;\n }\n }\n\n if (size && typeof size === 'string' && size.trim()) {\n const cleanSize = this.sanitizeClassName(size);\n if (cleanSize) {\n return `${baseClass}-${cleanSize}`;\n }\n }\n\n console.log('getPanelClass input:', { type, size }, 'output:', baseClass);\n return baseClass;\n }\n\n private sanitizeClassName(value: string): string {\n if (!value || typeof value !== 'string') return '';\n\n // First, ensure we have a string and trim it\n let sanitized = String(value).trim();\n\n // If empty after trim, return empty string\n if (!sanitized) return '';\n\n // Replace any whitespace (including tabs, newlines, etc.) with hyphens\n sanitized = sanitized.replace(/\\s+/g, '-');\n\n // Remove any characters that are not alphanumeric, hyphens, or underscores\n sanitized = sanitized.replace(/[^a-zA-Z0-9-_]/g, '');\n\n // Replace multiple consecutive hyphens with single hyphen\n sanitized = sanitized.replace(/-+/g, '-');\n\n // Remove leading and trailing hyphens\n sanitized = sanitized.replace(/^-+|-+$/g, '');\n\n // Final check: ensure no whitespace characters remain\n sanitized = sanitized.replace(/\\s/g, '');\n\n // Return empty string if nothing valid remains\n return sanitized || '';\n }\n}\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation, OnInit, OnChanges, SimpleChanges, OnDestroy, ChangeDetectorRef, Inject } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatSortModule, Sort } from '@angular/material/sort';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { Subject, takeUntil } from 'rxjs';\n\n// import { BaseComponent } from '../base/base.component';\nimport {\n DataTableConfig,\n DataTableColumn,\n DataTableAction,\n DataTableSort,\n DataTableFilter,\n DataTablePagination,\n DataTableSelectionEvent,\n DataTableEditEvent\n} from './interfaces/data-table.interface';\nimport { DialogService } from '../../services/dialog.service';\n\n/**\n * AMW Data Table Component\n * A comprehensive data table with sorting, filtering, pagination, selection, and editing capabilities\n */\n@Component({\n selector: 'amw-data-table',\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatTableModule,\n MatPaginatorModule,\n MatSortModule,\n MatCheckboxModule,\n MatButtonModule,\n MatIconModule,\n MatInputModule,\n MatFormFieldModule,\n MatSelectModule,\n MatMenuModule,\n MatTooltipModule,\n MatProgressSpinnerModule,\n MatChipsModule,\n MatSlideToggleModule,\n OverlayModule\n],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-data-table.component.html',\n styleUrl: './amw-data-table.component.scss'\n})\nexport class AmwDataTableComponent implements OnInit, OnChanges, OnDestroy {\n // Input properties\n @Input() data: any[] = [];\n @Input() config: DataTableConfig | null = null;\n @Input() loading: boolean = false;\n @Input() loadingMessage: string = 'Loading...';\n @Input() emptyMessage: string = 'No data available';\n\n // Output events\n @Output() sortChange = new EventEmitter<DataTableSort>();\n @Output() filterChange = new EventEmitter<DataTableFilter[]>();\n @Output() pageChange = new EventEmitter<PageEvent>();\n @Output() selectionChange = new EventEmitter<DataTableSelectionEvent>();\n @Output() editChange = new EventEmitter<DataTableEditEvent>();\n @Output() actionClick = new EventEmitter<{ action: DataTableAction; row: any; index: number }>();\n\n // Internal state\n displayedColumns: string[] = [];\n filteredData: any[] = [];\n selectedRows: Set<any> = new Set();\n editingRow: any = null;\n editingIndex: number = -1;\n editingValues: { [key: string]: any } = {};\n editingErrors: { [key: string]: string[] } = {};\n editingState: { [key: string]: boolean } = {};\n customSaveHandler: ((row: any, index: number) => void) | null = null;\n fieldEditingState: { [key: string]: { row: any; index: number; column: string; originalValue: any; columnWidth?: number } } = {};\n\n // Pagination\n pagination: DataTablePagination = {\n pageIndex: 0,\n pageSize: 10,\n length: 0,\n pageSizeOptions: [5, 10, 25, 50, 100],\n showFirstLastButtons: true,\n hidePageSize: false\n };\n\n // Sorting\n currentSort: DataTableSort | null = null;\n\n // Filtering\n globalFilter: string = '';\n columnFilters: { [key: string]: any } = {};\n\n // Destroy subject\n private destroy$ = new Subject<void>();\n\n constructor(\n private cdr: ChangeDetectorRef,\n @Inject(DialogService) private dialogService: DialogService\n ) {\n // Component initialization\n }\n\n ngOnInit(): void {\n this.initializeComponent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['data'] || changes['config']) {\n this.initializeComponent();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n if (this.config) {\n this.setupColumns();\n this.setupPagination();\n this.applyFilters();\n }\n }\n\n /**\n * Setup table columns\n */\n private setupColumns(): void {\n if (!this.config?.columns) return;\n\n this.displayedColumns = this.config.columns\n .filter(col => col.visible !== false)\n .map(col => col.property);\n\n // Add selection column if enabled\n if (this.config.selectable && this.config.selectionMode !== 'none') {\n if (this.config.selectionPosition === 'start') {\n this.displayedColumns.unshift('select');\n } else {\n this.displayedColumns.push('select');\n }\n }\n\n // Add actions column if enabled\n if (this.config.actions && this.config.actions.length > 0) {\n if (this.config.actionsPosition === 'start') {\n this.displayedColumns.unshift('actions');\n } else {\n this.displayedColumns.push('actions');\n }\n }\n }\n\n /**\n * Setup pagination\n */\n private setupPagination(): void {\n if (!this.config?.paginated) return;\n\n this.pagination = {\n pageIndex: 0,\n pageSize: this.config.defaultPageSize || 10,\n length: this.data.length,\n pageSizeOptions: this.config.pageSizeOptions || [5, 10, 25, 50, 100],\n showFirstLastButtons: this.config.showFirstLastButtons !== false,\n hidePageSize: this.config.showPageSizeSelector === false\n };\n }\n\n /**\n * Apply filters to data\n */\n private applyFilters(): void {\n let filtered = [...this.data];\n\n // Apply global filter\n if (this.globalFilter) {\n filtered = filtered.filter(row =>\n this.config?.columns?.some(col =>\n col.filterable !== false &&\n this.matchesFilter(row[col.property], this.globalFilter, col)\n )\n );\n }\n\n // Apply column filters\n Object.keys(this.columnFilters).forEach(column => {\n const filterValue = this.columnFilters[column];\n if (filterValue !== null && filterValue !== undefined && filterValue !== '') {\n const columnConfig = this.getColumnConfig(column);\n filtered = filtered.filter(row =>\n this.matchesFilter(row[column], filterValue, columnConfig)\n );\n }\n });\n\n this.filteredData = filtered;\n this.pagination.length = filtered.length;\n\n // Reset pagination if needed\n if (this.pagination.pageIndex > 0 && this.pagination.pageIndex * this.pagination.pageSize >= filtered.length) {\n this.pagination.pageIndex = 0;\n }\n\n // Apply sorting if active\n if (this.currentSort) {\n this.applySorting();\n }\n }\n\n /**\n * Check if value matches filter\n */\n private matchesFilter(value: any, filter: any, column?: DataTableColumn): boolean {\n if (value === null || value === undefined) return false;\n\n const strValue = String(value).toLowerCase();\n const strFilter = String(filter).toLowerCase();\n\n // For global filter, always use string contains matching\n if (!column) {\n return strValue.includes(strFilter);\n }\n\n // Handle different column types for column-specific filters\n if (column.type === 'number') {\n const numValue = Number(value);\n const numFilter = Number(filter);\n if (!isNaN(numValue) && !isNaN(numFilter)) {\n return numValue === numFilter;\n }\n // Fallback to string contains for partial number matches\n return strValue.includes(strFilter);\n }\n\n if (column.type === 'date') {\n const dateValue = new Date(value);\n const dateFilter = new Date(filter);\n if (!isNaN(dateValue.getTime()) && !isNaN(dateFilter.getTime())) {\n return dateValue.toDateString() === dateFilter.toDateString();\n }\n // Fallback to string contains for partial date matches\n return strValue.includes(strFilter);\n }\n\n if (column.type === 'boolean') {\n const boolValue = Boolean(value);\n const boolFilter = filter === 'true' || filter === '1' || filter === 'yes' || filter === 'on';\n return boolValue === boolFilter;\n }\n\n // Default string contains filter\n return strValue.includes(strFilter);\n }\n\n /**\n * Handle sort change\n */\n onSortChange(sort: Sort): void {\n if (!sort.active || !sort.direction) {\n this.currentSort = null;\n this.sortChange.emit(this.currentSort!);\n return;\n }\n\n this.currentSort = {\n column: sort.active,\n direction: sort.direction as 'asc' | 'desc'\n };\n\n // Apply sorting to filtered data\n this.applySorting();\n this.sortChange.emit(this.currentSort);\n }\n\n /**\n * Apply sorting to filtered data\n */\n private applySorting(): void {\n if (!this.currentSort) {\n return;\n }\n\n const column = this.getColumnConfig(this.currentSort.column);\n if (!column) return;\n\n this.filteredData.sort((a, b) => {\n let aValue = a[this.currentSort!.column];\n let bValue = b[this.currentSort!.column];\n\n // Handle null/undefined values\n if (aValue === null || aValue === undefined) aValue = '';\n if (bValue === null || bValue === undefined) bValue = '';\n\n // Apply custom formatter if available\n if (column.formatter) {\n aValue = column.formatter(aValue);\n bValue = column.formatter(bValue);\n }\n\n // Convert to strings for comparison\n const aStr = String(aValue).toLowerCase();\n const bStr = String(bValue).toLowerCase();\n\n let comparison = 0;\n if (aStr > bStr) {\n comparison = 1;\n } else if (aStr < bStr) {\n comparison = -1;\n }\n\n return this.currentSort!.direction === 'asc' ? comparison : -comparison;\n });\n }\n\n /**\n * Handle page change\n */\n onPageChange(event: PageEvent): void {\n const previousPageIndex = this.pagination.pageIndex;\n\n this.pagination.pageIndex = event.pageIndex;\n this.pagination.pageSize = event.pageSize;\n this.pagination.length = event.length;\n\n // Emit pagination event\n this.pageChange.emit({\n pageIndex: event.pageIndex,\n pageSize: event.pageSize,\n length: event.length,\n previousPageIndex: previousPageIndex\n });\n }\n\n /**\n * Get paginated data\n */\n getPaginatedData(): any[] {\n if (!this.config?.paginated) {\n return this.filteredData;\n }\n\n const startIndex = this.pagination.pageIndex * this.pagination.pageSize;\n const endIndex = startIndex + this.pagination.pageSize;\n\n return this.filteredData.slice(startIndex, endIndex);\n }\n\n /**\n * Get total pages\n */\n getTotalPages(): number {\n return Math.ceil(this.pagination.length / this.pagination.pageSize);\n }\n\n /**\n * Check if there are more pages\n */\n hasNextPage(): boolean {\n return this.pagination.pageIndex < this.getTotalPages() - 1;\n }\n\n /**\n * Check if there are previous pages\n */\n hasPreviousPage(): boolean {\n return this.pagination.pageIndex > 0;\n }\n\n /**\n * Handle global filter change\n */\n onGlobalFilterChange(): void {\n this.applyFilters();\n }\n\n /**\n * Handle column filter change\n */\n onColumnFilterChange(column: string, value: any): void {\n this.columnFilters[column] = value;\n this.applyFilters();\n }\n\n /**\n * Handle row selection\n */\n onRowSelectionChange(row: any, selected: boolean): void {\n if (selected) {\n this.selectedRows.add(row);\n } else {\n this.selectedRows.delete(row);\n }\n\n this.selectionChange.emit({\n selected: Array.from(this.selectedRows),\n mode: this.config?.selectionMode || 'multiple',\n allSelected: this.isAllSelected(),\n someSelected: this.selectedRows.size > 0,\n count: this.selectedRows.size\n });\n }\n\n /**\n * Handle master selection\n */\n onMasterSelectionChange(selected: boolean): void {\n const currentPageData = this.getPaginatedData();\n\n if (selected) {\n currentPageData.forEach(row => this.selectedRows.add(row));\n } else {\n currentPageData.forEach(row => this.selectedRows.delete(row));\n }\n\n this.selectionChange.emit({\n selected: Array.from(this.selectedRows),\n mode: this.config?.selectionMode || 'multiple',\n allSelected: selected,\n someSelected: false,\n count: this.selectedRows.size\n });\n }\n\n /**\n * Check if all rows are selected\n */\n isAllSelected(): boolean {\n const currentPageData = this.getPaginatedData();\n return currentPageData.length > 0 &&\n currentPageData.every(row => this.selectedRows.has(row));\n }\n\n /**\n * Check if some rows are selected\n */\n isSomeSelected(): boolean {\n return this.selectedRows.size > 0 && !this.isAllSelected();\n }\n\n /**\n * Check if row is selected\n */\n isRowSelected(row: any): boolean {\n return this.selectedRows.has(row);\n }\n\n /**\n * Handle action click\n */\n onActionClick(action: DataTableAction, row: any, index: number): void {\n // Check if action is disabled\n if (action.disabled || (action.disabledFn && action.disabledFn(row, index))) {\n return;\n }\n\n // Check if action is visible\n if (action.visible === false || (action.visibilityFn && !action.visibilityFn(row, index))) {\n return;\n }\n\n // Handle special edit action - trigger inline editing mode\n if (action.id === 'edit' && this.config?.editable) {\n // Store the custom save handler if it exists\n this.customSaveHandler = action.handler || null;\n this.startEditing(row, index);\n return;\n }\n\n // Handle confirmation if required\n if (action.confirmMessage) {\n this.dialogService.confirm(action.confirmMessage, 'Confirm Action').subscribe((result: any) => {\n if (result === 'confirm') {\n this.executeAction(action, row, index);\n }\n });\n return;\n }\n\n // Execute action handler if provided\n this.executeAction(action, row, index);\n }\n\n /**\n * Execute action handler\n */\n private executeAction(action: DataTableAction, row: any, index: number): void {\n if (action.handler) {\n action.handler(row, index);\n }\n\n // Emit action click event\n this.actionClick.emit({ action, row, index });\n }\n\n /**\n * Check if action is visible\n */\n isActionVisible(action: DataTableAction, row: any, index: number): boolean {\n if (action.visible === false) return false;\n if (action.visibilityFn) return action.visibilityFn(row, index);\n return true;\n }\n\n /**\n * Check if action is disabled\n */\n isActionDisabled(action: DataTableAction, row: any, index: number): boolean {\n if (action.disabled) return true;\n if (action.disabledFn) return action.disabledFn(row, index);\n return false;\n }\n\n /**\n * Get actions for a row\n */\n getRowActions(row: any, index: number): DataTableAction[] {\n if (!this.config?.actions) return [];\n\n return this.config.actions.filter(action =>\n this.isActionVisible(action, row, index)\n );\n }\n\n /**\n * Check if actions are available\n */\n hasActions(): boolean {\n return !!(this.config?.actions && this.config.actions.length > 0);\n }\n\n /**\n * Check if there's a custom edit action defined\n */\n hasCustomEditAction(): boolean {\n return !!(this.config?.actions && this.config.actions.some(action =>\n action.id === 'edit' || action.label?.toLowerCase().includes('edit')\n ));\n }\n\n /**\n * Start editing a specific field\n */\n startFieldEditing(row: any, index: number, column: string, event?: Event): void {\n const fieldKey = `${index}-${column}`;\n\n // Capture the current column width\n let columnWidth: number | undefined;\n if (event && event.target) {\n const cellElement = (event.target as HTMLElement).closest('td');\n if (cellElement) {\n columnWidth = cellElement.offsetWidth;\n }\n }\n\n this.fieldEditingState[fieldKey] = {\n row,\n index,\n column,\n originalValue: row[column],\n columnWidth\n };\n }\n\n /**\n * Cancel editing a specific field\n */\n cancelFieldEditing(row: any, index: number, column: string): void {\n const fieldKey = `${index}-${column}`;\n const fieldState = this.fieldEditingState[fieldKey];\n if (fieldState) {\n // Restore original value\n row[column] = fieldState.originalValue;\n delete this.fieldEditingState[fieldKey];\n }\n }\n\n /**\n * Save editing a specific field\n */\n saveFieldEditing(row: any, index: number, column: string): void {\n const fieldKey = `${index}-${column}`;\n const fieldState = this.fieldEditingState[fieldKey];\n if (fieldState) {\n // Emit field edit change event\n this.editChange.emit({\n row,\n index,\n column,\n value: row[column],\n originalValue: fieldState.originalValue,\n valid: true,\n errors: []\n });\n delete this.fieldEditingState[fieldKey];\n }\n }\n\n /**\n * Check if a field is being edited\n */\n isFieldEditing(row: any, index: number, column: string): boolean {\n const fieldKey = `${index}-${column}`;\n return fieldKey in this.fieldEditingState;\n }\n\n /**\n * Get the field editing state\n */\n getFieldEditingState(row: any, index: number, column: string): { row: any; index: number; column: string; originalValue: any; columnWidth?: number } | null {\n const fieldKey = `${index}-${column}`;\n return this.fieldEditingState[fieldKey] || null;\n }\n\n /**\n * Get the column width for a field\n */\n getFieldColumnWidth(row: any, index: number, column: string): number | undefined {\n const fieldState = this.getFieldEditingState(row, index, column);\n return fieldState?.columnWidth;\n }\n\n /**\n * Clear field editing state for a specific row\n */\n clearFieldEditingForRow(index: number): void {\n Object.keys(this.fieldEditingState).forEach(key => {\n if (key.startsWith(`${index}-`)) {\n delete this.fieldEditingState[key];\n }\n });\n }\n\n /**\n * Start editing a row\n */\n startEditing(row: any, index: number): void {\n if (!this.config?.editable) return;\n\n // Clear any existing field editing state for this row\n this.clearFieldEditingForRow(index);\n\n this.editingRow = row;\n this.editingIndex = index;\n this.editingValues = { ...row };\n this.editingErrors = {};\n this.editingState = {};\n\n // Mark all columns as not being edited initially\n this.config.columns?.forEach(col => {\n this.editingState[col.property] = false;\n });\n }\n\n /**\n * Cancel editing\n */\n cancelEditing(): void {\n this.editingRow = null;\n this.editingIndex = -1;\n this.editingValues = {};\n this.editingErrors = {};\n this.editingState = {};\n this.customSaveHandler = null;\n this.fieldEditingState = {}; // Clear individual field editing state\n }\n\n /**\n * Save editing changes\n */\n saveEditing(): void {\n if (!this.editingRow || !this.validateEditing()) return;\n\n // Update the original row with edited values\n Object.keys(this.editingValues).forEach(key => {\n this.editingRow[key] = this.editingValues[key];\n });\n\n // Call custom save handler if it exists\n if (this.customSaveHandler) {\n this.customSaveHandler(this.editingRow, this.editingIndex);\n }\n\n // Emit edit change event\n this.editChange.emit({\n row: this.editingRow,\n index: this.editingIndex,\n column: '',\n value: this.editingValues,\n originalValue: {},\n valid: true,\n errors: []\n });\n\n this.cancelEditing();\n }\n\n /**\n * Validate editing values\n */\n validateEditing(): boolean {\n this.editingErrors = {};\n let isValid = true;\n\n this.config?.columns?.forEach(col => {\n if (col.editable && col.validation) {\n const value = this.editingValues[col.property];\n const errors: string[] = [];\n\n // Required validation\n if (col.validation.required && (!value || value === '')) {\n errors.push(`${col.label} is required`);\n }\n\n // Min length validation\n if (col.validation.minLength && value && value.length < col.validation.minLength) {\n errors.push(`${col.label} must be at least ${col.validation.minLength} characters`);\n }\n\n // Max length validation\n if (col.validation.maxLength && value && value.length > col.validation.maxLength) {\n errors.push(`${col.label} must be no more than ${col.validation.maxLength} characters`);\n }\n\n // Min value validation\n if (col.validation.min !== undefined && value !== undefined && value < col.validation.min) {\n errors.push(`${col.label} must be at least ${col.validation.min}`);\n }\n\n // Max value validation\n if (col.validation.max !== undefined && value !== undefined && value > col.validation.max) {\n errors.push(`${col.label} must be no more than ${col.validation.max}`);\n }\n\n // Pattern validation\n if (col.validation.pattern && value && !col.validation.pattern.test(value)) {\n errors.push(`${col.label} format is invalid`);\n }\n\n // Custom validation\n if (col.validation.custom && value !== undefined) {\n const customResult = col.validation.custom(value);\n if (customResult !== true) {\n errors.push(typeof customResult === 'string' ? customResult : `${col.label} is invalid`);\n }\n }\n\n if (errors.length > 0) {\n this.editingErrors[col.property] = errors;\n isValid = false;\n }\n }\n });\n\n return isValid;\n }\n\n /**\n * Check if a row is being edited\n */\n isRowEditing(row: any): boolean {\n return this.editingRow === row;\n }\n\n /**\n * Check if a cell is being edited\n */\n isCellEditing(property: string): boolean {\n return this.editingState[property] === true;\n }\n\n /**\n * Start editing a cell\n */\n startCellEditing(property: string): void {\n if (!this.isRowEditing(this.editingRow)) return;\n this.editingState[property] = true;\n }\n\n /**\n * Stop editing a cell\n */\n stopCellEditing(property: string): void {\n this.editingState[property] = false;\n }\n\n /**\n * Get editing value for a property\n */\n getEditingValue(property: string): any {\n return this.editingValues[property] !== undefined ? this.editingValues[property] : this.editingRow[property];\n }\n\n /**\n * Set editing value for a property\n */\n setEditingValue(property: string, value: any): void {\n this.editingValues[property] = value;\n }\n\n /**\n * Get editing errors for a property\n */\n getEditingErrors(property: string): string[] {\n return this.editingErrors[property] || [];\n }\n\n /**\n * Check if editing has changes\n */\n hasEditingChanges(): boolean {\n return Object.keys(this.editingValues).length > 0;\n }\n\n /**\n * Get column sort state for ARIA\n */\n getColumnSortState(property: string): string {\n if (!this.currentSort || this.currentSort.column !== property) {\n return 'none';\n }\n return this.currentSort.direction === 'asc' ? 'ascending' : 'descending';\n }\n\n /**\n * Get column configuration\n */\n getColumnConfig(property: string): DataTableColumn | undefined {\n return this.config?.columns?.find(col => col.property === property);\n }\n\n /**\n * Get cell value\n */\n getCellValue(row: any, property: string): any {\n return row[property];\n }\n\n /**\n * Get formatted cell value\n */\n getFormattedCellValue(row: any, property: string): string {\n const column = this.getColumnConfig(property);\n const value = this.getCellValue(row, property);\n\n if (column?.formatter) {\n return column.formatter(value);\n }\n\n if (column?.renderer) {\n return column.renderer(value, row);\n }\n\n return String(value || '');\n }\n\n /**\n * Get CSS classes for row\n */\n getRowClasses(row: any, index: number): string {\n const classes = ['amw-data-table__row'];\n\n if (this.isRowSelected(row)) {\n classes.push('amw-data-table__row--selected');\n }\n\n if (this.editingRow === row) {\n classes.push('amw-data-table__row--editing');\n }\n\n if (this.config?.striped && index % 2 === 1) {\n classes.push('amw-data-table__row--striped');\n }\n\n return classes.join(' ');\n }\n\n /**\n * Get CSS classes for cell\n */\n getCellClasses(property: string): string {\n const classes = ['amw-data-table__cell'];\n const column = this.getColumnConfig(property);\n\n if (column?.cssClass) {\n classes.push(column.cssClass);\n }\n\n if (column?.align) {\n classes.push(`amw-data-table__cell--${column.align}`);\n }\n\n return classes.join(' ');\n }\n}\n","<div class=\"amw-data-table\"\n [class]=\"'amw-data-table--' + (config?.density || 'comfortable')\"\n role=\"table\"\n [attr.aria-label]=\"'Data table'\"\n [attr.aria-rowcount]=\"pagination.length\"\n [attr.aria-colcount]=\"displayedColumns.length\">\n\n <!-- Loading State -->\n @if (loading) {\n <div class=\"amw-data-table__loading\">\n <mat-spinner diameter=\"40\"></mat-spinner>\n <p class=\"amw-data-table__loading-message\">{{ loadingMessage }}</p>\n </div>\n }\n\n <!-- Table Container -->\n @if (!loading) {\n <div class=\"amw-data-table__container\">\n <!-- Table Header -->\n @if (config?.showHeader !== false) {\n <div class=\"amw-data-table__header\">\n <!-- Global Search -->\n @if (config?.filterable !== false) {\n <div class=\"amw-data-table__search\">\n <mat-form-field appearance=\"outline\" class=\"amw-data-table__search-field\">\n <mat-label>Search</mat-label>\n <input\n matInput\n [(ngModel)]=\"globalFilter\"\n (ngModelChange)=\"onGlobalFilterChange()\"\n placeholder=\"Search all columns...\">\n <mat-icon matSuffix>search</mat-icon>\n </mat-form-field>\n </div>\n }\n <!-- Table Actions -->\n <div class=\"amw-data-table__actions\">\n @if (config?.showRefresh !== false) {\n <button\n mat-icon-button\n matTooltip=\"Refresh\">\n <mat-icon>refresh</mat-icon>\n </button>\n }\n @if (config?.showColumnVisibility !== false) {\n <button\n mat-icon-button\n matTooltip=\"Column Visibility\">\n <mat-icon>view_column</mat-icon>\n </button>\n }\n @if (config?.showExport !== false) {\n <button\n mat-icon-button\n matTooltip=\"Export\">\n <mat-icon>download</mat-icon>\n </button>\n }\n @if (config?.showSettings !== false) {\n <button\n mat-icon-button\n matTooltip=\"Settings\">\n <mat-icon>settings</mat-icon>\n </button>\n }\n </div>\n </div>\n }\n <!-- Table -->\n <div class=\"amw-data-table__table-container\">\n <table mat-table\n [dataSource]=\"getPaginatedData()\"\n matSort\n (matSortChange)=\"onSortChange($event)\"\n class=\"amw-data-table__table\"\n role=\"table\"\n [attr.aria-label]=\"'Data table'\"\n [attr.aria-rowcount]=\"pagination.length\"\n [attr.aria-colcount]=\"displayedColumns.length\">\n <!-- Selection Column -->\n @if (config?.selectable && config?.selectionMode !== 'none') {\n <ng-container matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef role=\"columnheader\" scope=\"col\">\n @if (config?.selectionMode === 'multiple') {\n <mat-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (change)=\"onMasterSelectionChange($event.checked)\"\n [attr.aria-label]=\"'Select all rows'\"\n [attr.aria-describedby]=\"'select-all-description'\">\n </mat-checkbox>\n }\n <span id=\"select-all-description\" class=\"sr-only\">Select all rows in the table</span>\n </th>\n <td mat-cell *matCellDef=\"let row; let i = index\" role=\"gridcell\">\n <mat-checkbox\n [checked]=\"isRowSelected(row)\"\n (change)=\"onRowSelectionChange(row, $event.checked)\"\n [attr.aria-label]=\"'Select row ' + (i + 1) + ', ' + (row.name || row.id || 'item')\"\n [attr.aria-describedby]=\"'select-row-' + i + '-description'\">\n </mat-checkbox>\n <span [id]=\"'select-row-' + i + '-description'\" class=\"sr-only\">Select this row</span>\n </td>\n </ng-container>\n }\n <!-- Data Columns -->\n @for (column of config?.columns; track column) {\n <ng-container [matColumnDef]=\"column.property\">\n <th\n mat-header-cell\n *matHeaderCellDef\n [class]=\"getCellClasses(column.property)\"\n [mat-sort-header]=\"column.sortable !== false ? column.property : ''\"\n [disabled]=\"column.sortable === false\"\n role=\"columnheader\"\n scope=\"col\"\n [attr.aria-sort]=\"getColumnSortState(column.property)\"\n [attr.aria-label]=\"column.label + (column.sortable !== false ? ', sortable' : '')\"\n [attr.aria-describedby]=\"column.tooltip ? 'column-' + column.property + '-description' : null\">\n {{ column.label }}\n @if (column.tooltip) {\n <mat-icon\n matTooltip=\"{{ column.tooltip }}\"\n class=\"amw-data-table__header-tooltip\"\n [id]=\"'column-' + column.property + '-description'\"\n [attr.aria-label]=\"'More information about ' + column.label\">\n help_outline\n </mat-icon>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let row; let i = index\"\n [class]=\"getCellClasses(column.property)\">\n <!-- Editable cell (row-level editing) -->\n @if (column.editable && isRowEditing(row) && isCellEditing(column.property)) {\n <div class=\"amw-data-table__edit-cell\">\n <!-- Text input -->\n @if (!column.editor || column.editor.type === 'input') {\n <mat-form-field appearance=\"outline\" class=\"amw-data-table__edit-field\">\n <input\n matInput\n [value]=\"getEditingValue(column.property)\"\n (input)=\"setEditingValue(column.property, $event.target.value)\"\n (blur)=\"stopCellEditing(column.property)\"\n (keydown.enter)=\"stopCellEditing(column.property)\"\n (keydown.escape)=\"cancelEditing()\"\n [type]=\"column.type === 'number' ? 'number' : 'text'\">\n </mat-form-field>\n }\n <!-- Select input -->\n @if (column.editor?.type === 'select') {\n <mat-form-field appearance=\"outline\" class=\"amw-data-table__edit-field\">\n <mat-select\n [value]=\"getEditingValue(column.property)\"\n (selectionChange)=\"setEditingValue(column.property, $event.value)\"\n (blur)=\"stopCellEditing(column.property)\"\n panelClass=\"amw-data-table__select-panel\">\n @for (option of column.editor?.options; track option) {\n <mat-option [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- Checkbox input -->\n @if (column.editor?.type === 'checkbox') {\n <mat-checkbox\n [checked]=\"getEditingValue(column.property)\"\n (change)=\"setEditingValue(column.property, $event.checked)\"\n (blur)=\"stopCellEditing(column.property)\">\n </mat-checkbox>\n }\n </div>\n }\n <!-- Editable cell (field-level editing) -->\n @if (column.editable && isFieldEditing(row, i, column.property)) {\n <div\n class=\"amw-data-table__edit-cell\"\n [style.width.px]=\"getFieldColumnWidth(row, i, column.property)\">\n <div class=\"amw-data-table__field-container\">\n <!-- Text input -->\n @if (!column.editor || column.editor.type === 'input') {\n <mat-form-field appearance=\"outline\" class=\"amw-data-table__edit-field\">\n <input\n matInput\n [value]=\"row[column.property]\"\n (input)=\"row[column.property] = $event.target.value\"\n (keydown.enter)=\"saveFieldEditing(row, i, column.property)\"\n (keydown.escape)=\"cancelFieldEditing(row, i, column.property)\"\n [type]=\"column.type === 'number' ? 'number' : 'text'\">\n </mat-form-field>\n }\n <!-- Select input -->\n @if (column.editor?.type === 'select') {\n <mat-form-field appearance=\"outline\" class=\"amw-data-table__edit-field\">\n <mat-select\n [value]=\"row[column.property]\"\n (selectionChange)=\"row[column.property] = $event.value\"\n panelClass=\"amw-data-table__select-panel\">\n @for (option of column.editor?.options; track option) {\n <mat-option [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- Checkbox input -->\n @if (column.editor?.type === 'checkbox') {\n <mat-checkbox\n [checked]=\"row[column.property]\"\n (change)=\"row[column.property] = $event.checked\">\n </mat-checkbox>\n }\n <!-- Field action buttons -->\n <div class=\"amw-data-table__field-actions\">\n <button mat-icon-button (click)=\"saveFieldEditing(row, i, column.property)\"\n matTooltip=\"Save changes\" class=\"amw-data-table__field-action\">\n <mat-icon>check</mat-icon>\n </button>\n <button mat-icon-button (click)=\"cancelFieldEditing(row, i, column.property)\"\n matTooltip=\"Cancel changes\" class=\"amw-data-table__field-action\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n }\n <!-- Read-only cell -->\n @if (!(column.editable && (isRowEditing(row) && isCellEditing(column.property) || isFieldEditing(row, i, column.property)))) {\n <div\n class=\"amw-data-table__readonly-cell\"\n [class.amw-data-table__readonly-cell--editable]=\"column.editable\">\n <span [innerHTML]=\"getFormattedCellValue(row, column.property)\"></span>\n @if (column.editable) {\n <mat-icon\n class=\"amw-data-table__edit-icon\"\n (click)=\"startFieldEditing(row, i, column.property, $event)\"\n matTooltip=\"Edit field\">edit</mat-icon>\n }\n </div>\n }\n </td>\n </ng-container>\n }\n <!-- Actions Column -->\n @if (hasActions()) {\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let row; let i = index\">\n <div class=\"amw-data-table__actions-cell\">\n <!-- Edit/Save/Cancel buttons -->\n @if (config?.editable && !isRowEditing(row) && !hasCustomEditAction()) {\n <button\n mat-icon-button\n matTooltip=\"Edit row\"\n (click)=\"startEditing(row, i)\">\n <mat-icon>edit</mat-icon>\n </button>\n }\n @if (config?.editable && isRowEditing(row)) {\n <button\n mat-icon-button\n color=\"primary\"\n matTooltip=\"Save changes\"\n (click)=\"saveEditing()\">\n <mat-icon>save</mat-icon>\n </button>\n }\n @if (config?.editable && isRowEditing(row)) {\n <button\n mat-icon-button\n matTooltip=\"Cancel editing\"\n (click)=\"cancelEditing()\">\n <mat-icon>cancel</mat-icon>\n </button>\n }\n <!-- Other actions (hidden during edit mode) -->\n @if (!isRowEditing(row)) {\n @for (action of getRowActions(row, i); track action) {\n <button\n mat-icon-button\n [disabled]=\"isActionDisabled(action, row, i)\"\n [matTooltip]=\"action.tooltip || action.label\"\n [class]=\"action.cssClass\"\n (click)=\"onActionClick(action, row, i)\">\n @if (action.icon) {\n <mat-icon>{{ action.icon }}</mat-icon>\n }\n @if (!action.icon) {\n <span>{{ action.label }}</span>\n }\n </button>\n }\n }\n </div>\n </td>\n </ng-container>\n }\n <!-- Table Header -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\" class=\"amw-data-table__header-row\"></tr>\n <!-- Table Rows -->\n <tr\n mat-row\n *matRowDef=\"let row; let i = index; columns: displayedColumns\"\n [class]=\"getRowClasses(row, i)\"\n class=\"amw-data-table__data-row\">\n </tr>\n <!-- No Data Row -->\n @if (getPaginatedData().length === 0) {\n <tr class=\"amw-data-table__no-data-row\">\n <td [colSpan]=\"displayedColumns.length\" class=\"amw-data-table__no-data-cell\">\n <div class=\"amw-data-table__no-data\">\n <mat-icon class=\"amw-data-table__no-data-icon\">inbox</mat-icon>\n <p class=\"amw-data-table__no-data-message\">{{ emptyMessage }}</p>\n </div>\n </td>\n </tr>\n }\n </table>\n </div>\n <!-- Table Footer -->\n @if (config?.showFooter !== false) {\n <div class=\"amw-data-table__footer\">\n <!-- Pagination -->\n @if (config?.paginated !== false) {\n <mat-paginator\n [pageIndex]=\"pagination.pageIndex\"\n [pageSize]=\"pagination.pageSize\"\n [length]=\"pagination.length\"\n [pageSizeOptions]=\"pagination.pageSizeOptions\"\n [showFirstLastButtons]=\"pagination.showFirstLastButtons\"\n [hidePageSize]=\"pagination.hidePageSize\"\n (page)=\"onPageChange($event)\"\n class=\"amw-data-table__paginator\">\n </mat-paginator>\n }\n <!-- Total Count -->\n @if (config?.showTotalCount !== false) {\n <div class=\"amw-data-table__total-count\">\n <span class=\"amw-data-table__total-count-text\">\n {{ config?.totalCountLabel || 'Total' }}: {{ pagination.length }}\n </span>\n </div>\n }\n </div>\n }\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewEncapsulation, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { Subject, takeUntil } from 'rxjs';\nimport { BaseComponent } from '../../../controls/components/base/base.component';\nimport { StepperConfig, StepperStep } from './interfaces';\n\n/**\n * Angular Material Wrap Stepper Component\n * \n * A flexible stepper component that provides step-by-step navigation\n * with comprehensive configuration options and accessibility support.\n * \n * @example\n * ```html\n * <amw-stepper\n * [config]=\"stepperConfig\"\n * [steps]=\"stepperSteps\"\n * [currentStep]=\"0\"\n * (stepChange)=\"onStepChange($event)\"\n * (completed)=\"onStepperCompleted()\">\n * </amw-stepper>\n * ```\n */\n@Component({\n selector: 'amw-stepper',\n standalone: true,\n imports: [\n CommonModule,\n MatStepperModule,\n MatButtonModule,\n MatIconModule,\n MatCardModule,\n MatDividerModule\n ],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-stepper.component.html',\n styleUrl: './amw-stepper.component.scss'\n})\nexport class AmwStepperComponent extends BaseComponent implements OnInit, OnDestroy {\n /** Stepper configuration */\n @Input() config?: StepperConfig;\n\n /** Array of stepper steps */\n @Input() steps: StepperStep[] = [];\n\n /** Current active step index */\n @Input() currentStep: number = 0;\n\n /** Whether the stepper is disabled */\n @Input() override disabled: boolean = false;\n\n /** Whether the stepper is linear (must complete steps in order) */\n @Input() linear: boolean = true;\n\n /** Whether the stepper is vertical */\n @Input() vertical: boolean = false;\n\n /** Whether to show step labels */\n @Input() showLabels: boolean = true;\n\n /** Whether to show step icons */\n @Input() showIcons: boolean = true;\n\n /** Whether to show step descriptions */\n @Input() showDescriptions: boolean = true;\n\n /** Whether to show navigation buttons */\n @Input() showNavigation: boolean = true;\n\n /** Whether to show completion button */\n @Input() showCompletion: boolean = true;\n\n /** Step change event */\n @Output() stepChange = new EventEmitter<number>();\n\n /** Stepper completed event */\n @Output() completed = new EventEmitter<void>();\n\n /** Step validation event */\n @Output() stepValidated = new EventEmitter<{ stepIndex: number; isValid: boolean }>();\n\n /** Current stepper configuration */\n currentConfig: StepperConfig = {};\n\n /** Subject for component destruction */\n private destroy$ = new Subject<void>();\n\n /** Whether the stepper is currently completing */\n isCompleting = false;\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {\n this.initializeConfig();\n this.validateSteps();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Initializes the stepper configuration\n */\n private initializeConfig(): void {\n this.currentConfig = {\n orientation: 'horizontal',\n linear: true,\n showLabels: true,\n showIcons: true,\n showDescriptions: true,\n showNavigation: true,\n showCompletion: true,\n allowBackNavigation: true,\n allowSkipSteps: false,\n validateSteps: true,\n animationDuration: 300,\n animationEasing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n ...this.config\n };\n }\n\n /**\n * Validates all steps\n */\n private validateSteps(): void {\n this.steps.forEach((step, index) => {\n if (step.validator) {\n const isValid = step.validator(step);\n step.isValid = isValid;\n this.stepValidated.emit({ stepIndex: index, isValid });\n }\n });\n }\n\n /**\n * Goes to the next step\n */\n nextStep(): void {\n if (this.canGoNext()) {\n const nextStep = this.currentStep + 1;\n this.goToStep(nextStep);\n }\n }\n\n /**\n * Goes to the previous step\n */\n previousStep(): void {\n if (this.canGoBack()) {\n const prevStep = this.currentStep - 1;\n this.goToStep(prevStep);\n }\n }\n\n /**\n * Goes to a specific step\n */\n goToStep(stepIndex: number): void {\n if (this.isValidStepIndex(stepIndex) && this.canGoToStep(stepIndex)) {\n this.currentStep = stepIndex;\n this.stepChange.emit(stepIndex);\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Completes the stepper\n */\n completeStepper(): void {\n if (this.canComplete()) {\n this.isCompleting = true;\n this.completed.emit();\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Resets the stepper\n */\n resetStepper(): void {\n this.currentStep = 0;\n this.isCompleting = false;\n this.steps.forEach(step => {\n step.isCompleted = false;\n step.isValid = true;\n });\n this.cdr.detectChanges();\n }\n\n /**\n * Checks if can go to next step\n */\n canGoNext(): boolean {\n return this.currentStep < this.steps.length - 1 &&\n (!this.currentConfig.linear || this.isCurrentStepValid());\n }\n\n /**\n * Checks if can go to previous step\n */\n canGoBack(): boolean {\n return this.currentStep > 0 && (this.currentConfig.allowBackNavigation ?? true);\n }\n\n /**\n * Checks if can go to specific step\n */\n canGoToStep(stepIndex: number): boolean {\n if (!this.isValidStepIndex(stepIndex)) return false;\n\n if (this.currentConfig.linear) {\n // In linear mode, can only go to current step or next step\n return stepIndex <= this.currentStep + 1;\n }\n\n return true;\n }\n\n /**\n * Checks if can complete stepper\n */\n canComplete(): boolean {\n return this.currentStep === this.steps.length - 1 &&\n this.isCurrentStepValid() &&\n !this.isCompleting;\n }\n\n /**\n * Checks if current step is valid\n */\n isCurrentStepValid(): boolean {\n const currentStep = this.steps[this.currentStep];\n return currentStep ? (currentStep.isValid ?? true) : true;\n }\n\n /**\n * Checks if step index is valid\n */\n private isValidStepIndex(stepIndex: number): boolean {\n return stepIndex >= 0 && stepIndex < this.steps.length;\n }\n\n /**\n * Gets the current step\n */\n getCurrentStep(): StepperStep | undefined {\n return this.steps[this.currentStep];\n }\n\n /**\n * Gets the progress percentage\n */\n getProgress(): number {\n return ((this.currentStep + 1) / this.steps.length) * 100;\n }\n\n /**\n * Checks if step is completed\n */\n isStepCompleted(stepIndex: number): boolean {\n return this.steps[stepIndex]?.isCompleted ?? false;\n }\n\n /**\n * Checks if step is active\n */\n isStepActive(stepIndex: number): boolean {\n return stepIndex === this.currentStep;\n }\n\n /**\n * Checks if step is accessible\n */\n isStepAccessible(stepIndex: number): boolean {\n if (!this.currentConfig.linear) return true;\n return stepIndex <= this.currentStep + 1;\n }\n}\n","<div class=\"amw-stepper\" \n [class.amw-stepper--vertical]=\"currentConfig.orientation === 'vertical'\"\n [class.amw-stepper--horizontal]=\"currentConfig.orientation === 'horizontal'\"\n [class.amw-stepper--linear]=\"currentConfig.linear\"\n [class.amw-stepper--disabled]=\"disabled\"\n [attr.data-current-step]=\"currentStep\"\n [attr.data-total-steps]=\"steps.length\">\n\n <!-- Stepper Header -->\n <div class=\"amw-stepper__header\" *ngIf=\"currentConfig.showLabels || currentConfig.showIcons\">\n <div class=\"amw-stepper__progress\" \n [style.width.%]=\"getProgress()\"\n [attr.data-progress]=\"getProgress()\">\n </div>\n \n <div class=\"amw-stepper__steps\">\n <div *ngFor=\"let step of steps; let i = index\" \n class=\"amw-stepper__step\"\n [class.amw-stepper__step--active]=\"isStepActive(i)\"\n [class.amw-stepper__step--completed]=\"isStepCompleted(i)\"\n [class.amw-stepper__step--disabled]=\"step.isDisabled\"\n [class.amw-stepper__step--optional]=\"step.isOptional\"\n [class.amw-stepper__step--accessible]=\"isStepAccessible(i)\"\n [attr.data-step-index]=\"i\"\n (click)=\"goToStep(i)\">\n \n <!-- Step Icon -->\n <div class=\"amw-stepper__step-icon\" *ngIf=\"currentConfig.showIcons\">\n <mat-icon *ngIf=\"step.icon && !isStepCompleted(i)\">{{ step.icon }}</mat-icon>\n <mat-icon *ngIf=\"isStepCompleted(i)\">check</mat-icon>\n <span *ngIf=\"!step.icon && !isStepCompleted(i)\" class=\"amw-stepper__step-number\">{{ i + 1 }}</span>\n </div>\n\n <!-- Step Content -->\n <div class=\"amw-stepper__step-content\">\n <div class=\"amw-stepper__step-label\" *ngIf=\"currentConfig.showLabels\">\n {{ step.label }}\n <span *ngIf=\"step.isOptional\" class=\"amw-stepper__step-optional\">(Optional)</span>\n </div>\n <div class=\"amw-stepper__step-description\" *ngIf=\"currentConfig.showDescriptions && step.description\">\n {{ step.description }}\n </div>\n </div>\n\n <!-- Step Status Indicator -->\n <div class=\"amw-stepper__step-status\">\n <mat-icon *ngIf=\"isStepCompleted(i)\" class=\"amw-stepper__step-check\">check</mat-icon>\n <mat-icon *ngIf=\"step.isValid === false\" class=\"amw-stepper__step-error\">error</mat-icon>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Stepper Content -->\n <div class=\"amw-stepper__content\">\n <div class=\"amw-stepper__step-panel\" \n *ngFor=\"let step of steps; let i = index\"\n [class.amw-stepper__step-panel--active]=\"isStepActive(i)\"\n [class.amw-stepper__step-panel--completed]=\"isStepCompleted(i)\"\n [attr.data-step-index]=\"i\">\n \n <!-- Step Content -->\n <div class=\"amw-stepper__step-body\" *ngIf=\"isStepActive(i)\">\n <div class=\"amw-stepper__step-title\">\n <h3>{{ step.label }}</h3>\n <p *ngIf=\"step.description\">{{ step.description }}</p>\n </div>\n \n <div class=\"amw-stepper__step-main\">\n <ng-content [ngSwitch]=\"i\">\n <ng-container *ngFor=\"let stepContent of steps; let j = index\">\n <ng-container *ngSwitchCase=\"j\">\n <div *ngIf=\"stepContent.content\" [innerHTML]=\"stepContent.content\"></div>\n </ng-container>\n </ng-container>\n </ng-content>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Stepper Navigation -->\n <div class=\"amw-stepper__navigation\" *ngIf=\"currentConfig.showNavigation && !isCompleting\">\n <div class=\"amw-stepper__nav-buttons\">\n <!-- Previous Button -->\n <button mat-button \n class=\"amw-stepper__nav-button amw-stepper__nav-button--previous\"\n [disabled]=\"!canGoBack() || disabled\"\n (click)=\"previousStep()\">\n <mat-icon>arrow_back</mat-icon>\n Previous\n </button>\n\n <!-- Next Button -->\n <button mat-button \n class=\"amw-stepper__nav-button amw-stepper__nav-button--next\"\n [disabled]=\"!canGoNext() || disabled\"\n (click)=\"nextStep()\">\n Next\n <mat-icon>arrow_forward</mat-icon>\n </button>\n\n <!-- Complete Button -->\n <button mat-raised-button \n color=\"primary\"\n class=\"amw-stepper__nav-button amw-stepper__nav-button--complete\"\n [disabled]=\"!canComplete() || disabled\"\n (click)=\"completeStepper()\"\n *ngIf=\"currentConfig.showCompletion && currentStep === steps.length - 1\">\n <mat-icon>check</mat-icon>\n Complete\n </button>\n </div>\n\n <!-- Stepper Progress -->\n <div class=\"amw-stepper__progress-info\">\n <span class=\"amw-stepper__progress-text\">\n Step {{ currentStep + 1 }} of {{ steps.length }}\n </span>\n <div class=\"amw-stepper__progress-bar\">\n <div class=\"amw-stepper__progress-fill\" \n [style.width.%]=\"getProgress()\">\n </div>\n </div>\n </div>\n </div>\n\n <!-- Stepper Completion -->\n <div class=\"amw-stepper__completion\" *ngIf=\"isCompleting\">\n <div class=\"amw-stepper__completion-content\">\n <mat-icon class=\"amw-stepper__completion-icon\">check_circle</mat-icon>\n <h3>Stepper Completed!</h3>\n <p>All steps have been completed successfully.</p>\n <button mat-button (click)=\"resetStepper()\">\n Start Over\n </button>\n </div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewEncapsulation, ChangeDetectorRef, ContentChildren, QueryList, TemplateRef } from '@angular/core';\n\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { Subject, takeUntil } from 'rxjs';\nimport { BaseComponent } from '../../../controls/components/base/base.component';\nimport { TabsConfig, TabItem } from './interfaces';\n\n/**\n * Angular Material Wrap Tabs Component\n * \n * A flexible tabs component that provides tabbed navigation\n * with comprehensive configuration options and accessibility support.\n * \n * @example\n * ```html\n * <amw-tabs\n * [config]=\"tabsConfig\"\n * [tabs]=\"tabItems\"\n * [activeTab]=\"0\"\n * (tabChange)=\"onTabChange($event)\"\n * (tabClose)=\"onTabClose($event)\">\n * </amw-tabs>\n * ```\n */\n@Component({\n selector: 'amw-tabs',\n standalone: true,\n imports: [\n MatTabsModule,\n MatButtonModule,\n MatIconModule,\n MatCardModule,\n MatDividerModule\n],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-tabs.component.html',\n styleUrl: './amw-tabs.component.scss'\n})\nexport class AmwTabsComponent extends BaseComponent implements OnInit, OnDestroy {\n /** Tabs configuration */\n @Input() config?: TabsConfig;\n\n /** Array of tab items */\n @Input() tabs: TabItem[] = [];\n\n /** Active tab index */\n @Input() activeTab: number = 0;\n\n /** Whether the tabs are disabled */\n @Input() override disabled: boolean = false;\n\n /** Whether to show tab icons */\n @Input() showIcons: boolean = true;\n\n /** Whether to show tab badges */\n @Input() showBadges: boolean = true;\n\n /** Whether to show close buttons */\n @Input() showCloseButtons: boolean = false;\n\n /** Whether tabs are closable */\n @Input() closable: boolean = false;\n\n /** Whether tabs are draggable */\n @Input() draggable: boolean = false;\n\n /** Tab change event */\n @Output() tabChange = new EventEmitter<number>();\n\n /** Tab close event */\n @Output() tabClose = new EventEmitter<number>();\n\n /** Tab add event */\n @Output() tabAdd = new EventEmitter<void>();\n\n /** Tab reorder event */\n @Output() tabReorder = new EventEmitter<{ from: number; to: number }>();\n\n /** Current tabs configuration */\n currentConfig: TabsConfig = {};\n\n /** Subject for component destruction */\n private destroy$ = new Subject<void>();\n\n /** Whether tabs are being reordered */\n isReordering = false;\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {\n this.initializeConfig();\n this.validateTabs();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Initializes the tabs configuration\n */\n private initializeConfig(): void {\n this.currentConfig = {\n orientation: 'horizontal',\n alignment: 'start',\n showIcons: true,\n showBadges: true,\n showCloseButtons: false,\n closable: false,\n draggable: false,\n animationDuration: 300,\n animationEasing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n ...this.config\n };\n }\n\n /**\n * Validates all tabs\n */\n private validateTabs(): void {\n this.tabs.forEach((tab, index) => {\n if (tab.validator) {\n const isValid = tab.validator(tab);\n tab.isValid = isValid;\n }\n });\n }\n\n /**\n * Changes the active tab\n */\n changeTab(tabIndex: number): void {\n if (this.isValidTabIndex(tabIndex) && this.canActivateTab(tabIndex)) {\n this.activeTab = tabIndex;\n this.tabChange.emit(tabIndex);\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Closes a tab\n */\n closeTab(tabIndex: number): void {\n if (this.isValidTabIndex(tabIndex) && this.canCloseTab(tabIndex)) {\n this.tabs.splice(tabIndex, 1);\n\n // Adjust active tab if necessary\n if (this.activeTab >= this.tabs.length) {\n this.activeTab = Math.max(0, this.tabs.length - 1);\n }\n\n this.tabClose.emit(tabIndex);\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Adds a new tab\n */\n addTab(): void {\n const newTab: TabItem = {\n label: `Tab ${this.tabs.length + 1}`,\n content: '',\n isDisabled: false,\n isClosable: true\n };\n\n this.tabs.push(newTab);\n this.activeTab = this.tabs.length - 1;\n this.tabAdd.emit();\n this.cdr.detectChanges();\n }\n\n /**\n * Reorders tabs\n */\n reorderTabs(fromIndex: number, toIndex: number): void {\n if (this.isValidTabIndex(fromIndex) && this.isValidTabIndex(toIndex)) {\n const tab = this.tabs.splice(fromIndex, 1)[0];\n this.tabs.splice(toIndex, 0, tab);\n\n // Update active tab index\n if (this.activeTab === fromIndex) {\n this.activeTab = toIndex;\n } else if (this.activeTab > fromIndex && this.activeTab <= toIndex) {\n this.activeTab--;\n } else if (this.activeTab < fromIndex && this.activeTab >= toIndex) {\n this.activeTab++;\n }\n\n this.tabReorder.emit({ from: fromIndex, to: toIndex });\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Checks if tab index is valid\n */\n private isValidTabIndex(tabIndex: number): boolean {\n return tabIndex >= 0 && tabIndex < this.tabs.length;\n }\n\n /**\n * Checks if tab can be activated\n */\n private canActivateTab(tabIndex: number): boolean {\n const tab = this.tabs[tabIndex];\n return tab && !tab.isDisabled;\n }\n\n /**\n * Checks if tab can be closed\n */\n private canCloseTab(tabIndex: number): boolean {\n const tab = this.tabs[tabIndex];\n return tab && tab.isClosable !== false && this.tabs.length > 1;\n }\n\n /**\n * Gets the active tab\n */\n getActiveTab(): TabItem | undefined {\n return this.tabs[this.activeTab];\n }\n\n /**\n * Checks if tab is active\n */\n isTabActive(tabIndex: number): boolean {\n return tabIndex === this.activeTab;\n }\n\n /**\n * Checks if tab is disabled\n */\n isTabDisabled(tabIndex: number): boolean {\n return this.tabs[tabIndex]?.isDisabled || false;\n }\n\n /**\n * Checks if tab is closable\n */\n isTabClosable(tabIndex: number): boolean {\n return this.tabs[tabIndex]?.isClosable !== false;\n }\n\n /**\n * Gets tab badge count\n */\n getTabBadgeCount(tabIndex: number): number {\n return this.tabs[tabIndex]?.badgeCount || 0;\n }\n\n /**\n * Checks if tab has badge\n */\n hasTabBadge(tabIndex: number): boolean {\n return this.getTabBadgeCount(tabIndex) > 0;\n }\n\n /**\n * Handles drag start\n */\n onDragStart(event: DragEvent, tabIndex: number): void {\n if (this.currentConfig.draggable) {\n event.dataTransfer?.setData('text/plain', tabIndex.toString());\n this.isReordering = true;\n }\n }\n\n /**\n * Handles drag over\n */\n onDragOver(event: DragEvent): void {\n if (this.currentConfig.draggable) {\n event.preventDefault();\n }\n }\n\n /**\n * Handles drop\n */\n onDrop(event: DragEvent, targetIndex: number): void {\n if (this.currentConfig.draggable) {\n event.preventDefault();\n const sourceIndex = parseInt(event.dataTransfer?.getData('text/plain') || '0');\n this.reorderTabs(sourceIndex, targetIndex);\n this.isReordering = false;\n }\n }\n\n /**\n * Handles drag end\n */\n onDragEnd(): void {\n this.isReordering = false;\n }\n}\n","<div class=\"amw-tabs\"\n [class.amw-tabs--vertical]=\"currentConfig.orientation === 'vertical'\"\n [class.amw-tabs--horizontal]=\"currentConfig.orientation === 'horizontal'\"\n [class.amw-tabs--disabled]=\"disabled\"\n [class.amw-tabs--draggable]=\"currentConfig.draggable\"\n [attr.data-active-tab]=\"activeTab\"\n [attr.data-total-tabs]=\"tabs.length\">\n\n <!-- Tabs Header -->\n <div class=\"amw-tabs__header\"\n [class.amw-tabs__header--vertical]=\"currentConfig.orientation === 'vertical'\"\n [class.amw-tabs__header--horizontal]=\"currentConfig.orientation === 'horizontal'\">\n\n <!-- Tabs List -->\n <div class=\"amw-tabs__list\"\n [class.amw-tabs__list--vertical]=\"currentConfig.orientation === 'vertical'\"\n [class.amw-tabs__list--horizontal]=\"currentConfig.orientation === 'horizontal'\">\n\n @for (tab of tabs; track tab; let i = $index) {\n <div\n class=\"amw-tabs__tab\"\n [class.amw-tabs__tab--active]=\"isTabActive(i)\"\n [class.amw-tabs__tab--disabled]=\"isTabDisabled(i)\"\n [class.amw-tabs__tab--invalid]=\"tab.isValid === false\"\n [class.amw-tabs__tab--dragging]=\"isReordering\"\n [attr.data-tab-index]=\"i\"\n [draggable]=\"currentConfig.draggable\"\n (click)=\"changeTab(i)\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd()\">\n <!-- Tab Content -->\n <div class=\"amw-tabs__tab-content\">\n <!-- Tab Icon -->\n @if (currentConfig.showIcons && tab.icon) {\n <mat-icon\n class=\"amw-tabs__tab-icon\">\n {{ tab.icon }}\n </mat-icon>\n }\n <!-- Tab Label -->\n <span class=\"amw-tabs__tab-label\">{{ tab.label }}</span>\n <!-- Tab Badge -->\n @if (currentConfig.showBadges && hasTabBadge(i)) {\n <span\n class=\"amw-tabs__tab-badge\"\n [style.background-color]=\"tab.badgeColor || 'var(--mat-sys-error, #f44336)'\">\n {{ getTabBadgeCount(i) }}\n </span>\n }\n </div>\n <!-- Tab Close Button -->\n @if (currentConfig.showCloseButtons && isTabClosable(i)) {\n <button\n mat-icon-button\n class=\"amw-tabs__tab-close\"\n (click)=\"closeTab(i); $event.stopPropagation()\"\n [disabled]=\"disabled\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Add Tab Button -->\n @if (currentConfig.showAddButton) {\n <button\n mat-icon-button\n class=\"amw-tabs__add-button\"\n (click)=\"addTab()\"\n [disabled]=\"disabled\">\n <mat-icon>add</mat-icon>\n </button>\n }\n </div>\n\n <!-- Tabs Content -->\n <div class=\"amw-tabs__content\">\n @for (tab of tabs; track tab; let i = $index) {\n <div\n class=\"amw-tabs__panel\"\n [class.amw-tabs__panel--active]=\"isTabActive(i)\"\n [attr.data-tab-index]=\"i\">\n <!-- Tab Panel Content -->\n <div class=\"amw-tabs__panel-body\">\n @if (tab.label || tab.icon) {\n <div class=\"amw-tabs__panel-header\">\n <div class=\"amw-tabs__panel-title\">\n @if (tab.icon) {\n <mat-icon class=\"amw-tabs__panel-icon\">{{ tab.icon }}</mat-icon>\n }\n @if (tab.label) {\n <h3>{{ tab.label }}</h3>\n }\n </div>\n @if (currentConfig.showCloseButtons && isTabClosable(i)) {\n <div class=\"amw-tabs__panel-actions\">\n <button mat-icon-button\n (click)=\"closeTab(i)\"\n [disabled]=\"disabled\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"amw-tabs__panel-main\">\n <div class=\"amw-tabs__panel-content\" [innerHTML]=\"tab.content\">\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Empty State -->\n @if (tabs.length === 0) {\n <div class=\"amw-tabs__empty\">\n <div class=\"amw-tabs__empty-content\">\n <mat-icon class=\"amw-tabs__empty-icon\">tab</mat-icon>\n <h3>No tabs available</h3>\n <p>Add a new tab to get started</p>\n @if (currentConfig.showAddButton) {\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"addTab()\"\n [disabled]=\"disabled\">\n <mat-icon>add</mat-icon>\n Add Tab\n </button>\n }\n </div>\n </div>\n }\n</div>\n\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewEncapsulation, ChangeDetectorRef } from '@angular/core';\n\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { Subject, takeUntil } from 'rxjs';\nimport { BaseComponent } from '../../../controls/components/base/base.component';\nimport { AccordionConfig, AccordionPanel } from './interfaces';\n\n/**\n * Angular Material Wrap Accordion Component\n * \n * A flexible accordion component that provides collapsible panels\n * with comprehensive configuration options and accessibility support.\n * \n * @example\n * ```html\n * <amw-accordion\n * [config]=\"accordionConfig\"\n * [panels]=\"accordionPanels\"\n * [expandedPanels]=\"[0, 2]\"\n * (panelToggle)=\"onPanelToggle($event)\"\n * (panelExpand)=\"onPanelExpand($event)\"\n * (panelCollapse)=\"onPanelCollapse($event)\">\n * </amw-accordion>\n * ```\n */\n@Component({\n selector: 'amw-accordion',\n standalone: true,\n imports: [\n MatExpansionModule,\n MatButtonModule,\n MatIconModule,\n MatCardModule,\n MatDividerModule\n],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-accordion.component.html',\n styleUrl: './amw-accordion.component.scss'\n})\nexport class AmwAccordionComponent extends BaseComponent implements OnInit, OnDestroy {\n /** Accordion configuration */\n @Input() config?: AccordionConfig;\n\n /** Array of accordion panels */\n @Input() panels: AccordionPanel[] = [];\n\n /** Array of expanded panel indices */\n @Input() expandedPanels: number[] = [];\n\n /** Whether the accordion is disabled */\n @Input() override disabled: boolean = false;\n\n /** Whether multiple panels can be expanded */\n @Input() multiExpand: boolean = true;\n\n /** Whether to show panel icons */\n @Input() showIcons: boolean = true;\n\n /** Whether to show panel descriptions */\n @Input() showDescriptions: boolean = true;\n\n /** Whether to show panel badges */\n @Input() showBadges: boolean = true;\n\n /** Panel toggle event */\n @Output() panelToggle = new EventEmitter<{ panelIndex: number; isExpanded: boolean }>();\n\n /** Panel expand event */\n @Output() panelExpand = new EventEmitter<number>();\n\n /** Panel collapse event */\n @Output() panelCollapse = new EventEmitter<number>();\n\n /** Panel validation event */\n @Output() panelValidated = new EventEmitter<{ panelIndex: number; isValid: boolean }>();\n\n /** Current accordion configuration */\n currentConfig: AccordionConfig = {};\n\n /** Subject for component destruction */\n private destroy$ = new Subject<void>();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {\n this.initializeConfig();\n this.validatePanels();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Initializes the accordion configuration\n */\n private initializeConfig(): void {\n this.currentConfig = {\n multiExpand: true,\n showIcons: true,\n showDescriptions: true,\n showBadges: true,\n animationDuration: 300,\n animationEasing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n ...this.config\n };\n }\n\n /**\n * Validates all panels\n */\n private validatePanels(): void {\n this.panels.forEach((panel, index) => {\n if (panel.validator) {\n const isValid = panel.validator(panel);\n panel.isValid = isValid;\n this.panelValidated.emit({ panelIndex: index, isValid });\n }\n });\n }\n\n /**\n * Toggles a panel\n */\n togglePanel(panelIndex: number): void {\n if (this.isValidPanelIndex(panelIndex) && this.canTogglePanel(panelIndex)) {\n const isExpanded = this.isPanelExpanded(panelIndex);\n\n if (isExpanded) {\n this.collapsePanel(panelIndex);\n } else {\n this.expandPanel(panelIndex);\n }\n }\n }\n\n /**\n * Expands a panel\n */\n expandPanel(panelIndex: number): void {\n if (this.isValidPanelIndex(panelIndex) && this.canExpandPanel(panelIndex)) {\n if (!this.currentConfig.multiExpand) {\n // Close all other panels\n this.expandedPanels = [];\n }\n\n if (!this.isPanelExpanded(panelIndex)) {\n this.expandedPanels.push(panelIndex);\n this.panelExpand.emit(panelIndex);\n this.panelToggle.emit({ panelIndex, isExpanded: true });\n this.cdr.detectChanges();\n }\n }\n }\n\n /**\n * Collapses a panel\n */\n collapsePanel(panelIndex: number): void {\n if (this.isValidPanelIndex(panelIndex)) {\n const index = this.expandedPanels.indexOf(panelIndex);\n if (index > -1) {\n this.expandedPanels.splice(index, 1);\n this.panelCollapse.emit(panelIndex);\n this.panelToggle.emit({ panelIndex, isExpanded: false });\n this.cdr.detectChanges();\n }\n }\n }\n\n /**\n * Expands all panels\n */\n expandAll(): void {\n this.expandedPanels = this.panels.map((_, index) => index);\n this.panels.forEach((_, index) => {\n this.panelExpand.emit(index);\n this.panelToggle.emit({ panelIndex: index, isExpanded: true });\n });\n this.cdr.detectChanges();\n }\n\n /**\n * Collapses all panels\n */\n collapseAll(): void {\n this.panels.forEach((_, index) => {\n this.panelCollapse.emit(index);\n this.panelToggle.emit({ panelIndex: index, isExpanded: false });\n });\n this.expandedPanels = [];\n this.cdr.detectChanges();\n }\n\n /**\n * Checks if panel index is valid\n */\n private isValidPanelIndex(panelIndex: number): boolean {\n return panelIndex >= 0 && panelIndex < this.panels.length;\n }\n\n /**\n * Checks if panel can be toggled\n */\n private canTogglePanel(panelIndex: number): boolean {\n const panel = this.panels[panelIndex];\n return panel && !panel.isDisabled && !this.disabled;\n }\n\n /**\n * Checks if panel can be expanded\n */\n private canExpandPanel(panelIndex: number): boolean {\n return this.canTogglePanel(panelIndex);\n }\n\n /**\n * Checks if panel is expanded\n */\n isPanelExpanded(panelIndex: number): boolean {\n return this.expandedPanels.includes(panelIndex);\n }\n\n /**\n * Checks if panel is disabled\n */\n isPanelDisabled(panelIndex: number): boolean {\n return this.panels[panelIndex]?.isDisabled || this.disabled;\n }\n\n /**\n * Checks if panel is valid\n */\n isPanelValid(panelIndex: number): boolean {\n return this.panels[panelIndex]?.isValid !== false;\n }\n\n /**\n * Gets panel badge count\n */\n getPanelBadgeCount(panelIndex: number): number {\n return this.panels[panelIndex]?.badgeCount || 0;\n }\n\n /**\n * Checks if panel has badge\n */\n hasPanelBadge(panelIndex: number): boolean {\n return this.getPanelBadgeCount(panelIndex) > 0;\n }\n\n /**\n * Gets the number of expanded panels\n */\n getExpandedCount(): number {\n return this.expandedPanels.length;\n }\n\n /**\n * Checks if all panels are expanded\n */\n areAllExpanded(): boolean {\n return this.expandedPanels.length === this.panels.length;\n }\n\n /**\n * Checks if all panels are collapsed\n */\n areAllCollapsed(): boolean {\n return this.expandedPanels.length === 0;\n }\n}\n","<div class=\"amw-accordion\"\n [class.amw-accordion--disabled]=\"disabled\"\n [class.amw-accordion--multi-expand]=\"currentConfig.multiExpand\"\n [attr.data-expanded-count]=\"getExpandedCount()\"\n [attr.data-total-panels]=\"panels.length\">\n\n <!-- Accordion Header -->\n @if (currentConfig.showExpandCollapseAll) {\n <div class=\"amw-accordion__header\">\n <div class=\"amw-accordion__header-content\">\n <h3 class=\"amw-accordion__header-title\">Accordion</h3>\n <div class=\"amw-accordion__header-actions\">\n <button mat-button\n (click)=\"expandAll()\"\n [disabled]=\"areAllExpanded() || disabled\">\n <mat-icon>expand_more</mat-icon>\n Expand All\n </button>\n <button mat-button\n (click)=\"collapseAll()\"\n [disabled]=\"areAllCollapsed() || disabled\">\n <mat-icon>expand_less</mat-icon>\n Collapse All\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Accordion Panels -->\n <div class=\"amw-accordion__panels\">\n <mat-accordion class=\"amw-accordion__mat-accordion\"\n [multi]=\"currentConfig.multiExpand\">\n\n @for (panel of panels; track panel; let i = $index) {\n <mat-expansion-panel\n class=\"amw-accordion__panel\"\n [class.amw-accordion__panel--expanded]=\"isPanelExpanded(i)\"\n [class.amw-accordion__panel--disabled]=\"isPanelDisabled(i)\"\n [class.amw-accordion__panel--invalid]=\"!isPanelValid(i)\"\n [expanded]=\"isPanelExpanded(i)\"\n [disabled]=\"isPanelDisabled(i)\"\n (opened)=\"expandPanel(i)\"\n (closed)=\"collapsePanel(i)\"\n [attr.data-panel-index]=\"i\">\n <!-- Panel Header -->\n <mat-expansion-panel-header class=\"amw-accordion__panel-header\">\n <div class=\"amw-accordion__panel-header-content\">\n <!-- Panel Icon -->\n @if (currentConfig.showIcons && panel.icon) {\n <mat-icon\n class=\"amw-accordion__panel-icon\">\n {{ panel.icon }}\n </mat-icon>\n }\n <!-- Panel Title -->\n <div class=\"amw-accordion__panel-title\">\n <h4 class=\"amw-accordion__panel-title-text\">{{ panel.title }}</h4>\n @if (currentConfig.showDescriptions && panel.description) {\n <p\n class=\"amw-accordion__panel-description\">\n {{ panel.description }}\n </p>\n }\n </div>\n <!-- Panel Badge -->\n @if (currentConfig.showBadges && hasPanelBadge(i)) {\n <span\n class=\"amw-accordion__panel-badge\"\n [style.background-color]=\"panel.badgeColor || 'var(--mat-sys-error, #f44336)'\">\n {{ getPanelBadgeCount(i) }}\n </span>\n }\n </div>\n </mat-expansion-panel-header>\n <!-- Panel Content -->\n <div class=\"amw-accordion__panel-content\">\n <div class=\"amw-accordion__panel-body\">\n <!-- Panel Actions -->\n @if (currentConfig.showPanelActions) {\n <div class=\"amw-accordion__panel-actions\">\n <button mat-icon-button\n (click)=\"togglePanel(i)\"\n [disabled]=\"isPanelDisabled(i)\">\n <mat-icon>{{ isPanelExpanded(i) ? 'expand_less' : 'expand_more' }}</mat-icon>\n </button>\n </div>\n }\n <!-- Panel Main Content -->\n <div class=\"amw-accordion__panel-main\">\n <div class=\"amw-accordion__panel-text\" [innerHTML]=\"panel.content\">\n </div>\n </div>\n </div>\n </div>\n </mat-expansion-panel>\n }\n </mat-accordion>\n </div>\n\n <!-- Empty State -->\n @if (panels.length === 0) {\n <div class=\"amw-accordion__empty\">\n <div class=\"amw-accordion__empty-content\">\n <mat-icon class=\"amw-accordion__empty-icon\">expand_more</mat-icon>\n <h3>No panels available</h3>\n <p>Add some panels to get started</p>\n </div>\n </div>\n }\n</div>\n","// Calendar components\nexport * from './amw-calendar/amw-calendar-full.component';\nexport * from './amw-calendar/amw-calendar-mini.component';\nexport * from './amw-calendar/amw-calendar-base.component';\n\n// Data table component\nexport * from './amw-data-table/amw-data-table.component';\n\n// Stepper component\nexport * from './amw-stepper/amw-stepper.component';\n\n// Tabs component\nexport * from './amw-tabs/amw-tabs.component';\n\n// Accordion component\nexport * from './amw-accordion/amw-accordion.component';","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { CardConfig, CardVariant, CardElevation } from '../components/amw-card/interfaces';\nimport { AmwSize } from '../../shared/types/amw-size.type';\n\n/**\n * Represents a card data object with all configurable properties\n */\nexport interface CardData {\n /** Unique identifier for the card */\n id: string;\n /** Card title text */\n title: string;\n /** Card subtitle text */\n subtitle?: string;\n /** Card content text */\n content: string;\n /** Image URL for the card */\n image?: string;\n /** Alt text for the card image */\n imageAlt?: string;\n /** Array of action buttons */\n actions?: Array<{\n /** Button label text */\n label: string;\n /** Material icon name */\n icon?: string;\n /** Button color theme */\n color?: 'primary' | 'accent' | 'warn';\n /** Whether button is disabled */\n disabled?: boolean;\n /** Action identifier for event handling */\n action?: string;\n }>;\n /** Card configuration object */\n config?: CardConfig;\n /** Card visual variant */\n variant?: CardVariant;\n /** Card size variant */\n size?: AmwSize;\n /** Card elevation level */\n elevation?: CardElevation;\n /** Whether card is clickable */\n clickable?: boolean;\n /** Whether card is disabled */\n disabled?: boolean;\n /** Whether card is in loading state */\n loading?: boolean;\n /** Whether to show header section */\n showHeader?: boolean;\n /** Whether to show content section */\n showContent?: boolean;\n /** Whether to show footer section */\n showFooter?: boolean;\n /** Whether to show actions section */\n showActions?: boolean;\n /** Footer content text */\n footerContent?: string;\n /** Height of the card image */\n imageHeight?: string;\n /** Position of the card image */\n imagePosition?: 'top' | 'bottom';\n /** Custom metadata for the card */\n metadata?: any;\n /** Card creation timestamp */\n createdAt?: Date;\n /** Card last update timestamp */\n updatedAt?: Date;\n}\n\n/**\n * Filter options for card queries\n */\nexport interface CardFilter {\n /** Search term to filter by title, subtitle, or content */\n search?: string;\n /** Filter by card variant */\n variant?: CardVariant;\n /** Filter by card size */\n size?: AmwSize;\n /** Filter by disabled state */\n disabled?: boolean;\n /** Filter by loading state */\n loading?: boolean;\n /** Filter by clickable state */\n clickable?: boolean;\n /** Filter by presence of image */\n hasImage?: boolean;\n /** Filter by presence of actions */\n hasActions?: boolean;\n /** Filter by tags */\n tags?: string[];\n /** Filter by date range */\n dateRange?: {\n /** Start date */\n start: Date;\n /** End date */\n end: Date;\n };\n}\n\n/**\n * Sort options for card queries\n */\nexport interface CardSort {\n /** Field to sort by */\n field: keyof CardData;\n /** Sort direction */\n direction: 'asc' | 'desc';\n}\n\n/**\n * Service for managing cards programmatically\n * \n * Provides comprehensive card management including CRUD operations,\n * filtering, sorting, statistics, and data persistence.\n * \n * @example\n * ```typescript\n * constructor(private cardService: CardService) {}\n * \n * ngOnInit() {\n * // Subscribe to cards\n * this.cardService.cards$.subscribe(cards => {\n * this.cards = cards;\n * });\n * \n * // Add a new card\n * this.cardService.addCard({\n * title: 'New Card',\n * content: 'Card content',\n * variant: 'elevated',\n * size: 'medium'\n * });\n * \n * // Filter cards\n * this.cardService.filterCards({ variant: 'elevated' });\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class CardService {\n private cardsSubject = new BehaviorSubject<CardData[]>([]);\n private filteredCardsSubject = new BehaviorSubject<CardData[]>([]);\n private currentFilter: CardFilter = {};\n private currentSort: CardSort = { field: 'createdAt', direction: 'desc' };\n\n public cards$ = this.cardsSubject.asObservable();\n public filteredCards$ = this.filteredCardsSubject.asObservable();\n\n constructor() {\n // Initialize with some sample cards\n this.initializeSampleCards();\n }\n\n /**\n * Gets all cards\n * \n * @returns Array of all card data objects\n * \n * @example\n * ```typescript\n * const allCards = this.cardService.getCards();\n * console.log(`Total cards: ${allCards.length}`);\n * ```\n */\n getCards(): CardData[] {\n return this.cardsSubject.value;\n }\n\n /**\n * Gets currently filtered cards\n * \n * @returns Array of filtered card data objects\n * \n * @example\n * ```typescript\n * const filteredCards = this.cardService.getFilteredCards();\n * console.log(`Filtered cards: ${filteredCards.length}`);\n * ```\n */\n getFilteredCards(): CardData[] {\n return this.filteredCardsSubject.value;\n }\n\n /**\n * Adds a new card to the collection\n * \n * @param card - Card data without id, createdAt, and updatedAt (auto-generated)\n * @returns The created card with generated id and timestamps\n * \n * @example\n * ```typescript\n * const newCard = this.cardService.addCard({\n * title: 'New Card',\n * content: 'This is a new card',\n * variant: 'elevated',\n * size: 'medium',\n * clickable: true\n * });\n * console.log('Created card with ID:', newCard.id);\n * ```\n */\n addCard(card: Omit<CardData, 'id' | 'createdAt' | 'updatedAt'>): CardData {\n const newCard: CardData = {\n ...card,\n id: this.generateId(),\n createdAt: new Date(),\n updatedAt: new Date()\n };\n\n const cards = [...this.cardsSubject.value, newCard];\n this.cardsSubject.next(cards);\n this.applyFilters();\n return newCard;\n }\n\n /**\n * Updates an existing card\n * \n * @param id - ID of the card to update\n * @param updates - Partial card data with properties to update\n * @returns Updated card data or null if card not found\n * \n * @example\n * ```typescript\n * const updatedCard = this.cardService.updateCard('card_123', {\n * title: 'Updated Title',\n * loading: false\n * });\n * \n * if (updatedCard) {\n * console.log('Card updated successfully');\n * } else {\n * console.log('Card not found');\n * }\n * ```\n */\n updateCard(id: string, updates: Partial<CardData>): CardData | null {\n const cards = this.cardsSubject.value;\n const index = cards.findIndex(card => card.id === id);\n\n if (index === -1) {\n return null;\n }\n\n const updatedCard = {\n ...cards[index],\n ...updates,\n id, // Ensure ID doesn't change\n updatedAt: new Date()\n };\n\n cards[index] = updatedCard;\n this.cardsSubject.next([...cards]);\n this.applyFilters();\n return updatedCard;\n }\n\n /**\n * Removes a card from the collection\n * \n * @param id - ID of the card to remove\n * @returns True if card was removed, false if not found\n * \n * @example\n * ```typescript\n * const removed = this.cardService.removeCard('card_123');\n * if (removed) {\n * console.log('Card removed successfully');\n * } else {\n * console.log('Card not found');\n * }\n * ```\n */\n removeCard(id: string): boolean {\n const cards = this.cardsSubject.value;\n const index = cards.findIndex(card => card.id === id);\n\n if (index === -1) {\n return false;\n }\n\n cards.splice(index, 1);\n this.cardsSubject.next([...cards]);\n this.applyFilters();\n return true;\n }\n\n /**\n * Gets a card by its ID\n * \n * @param id - ID of the card to retrieve\n * @returns Card data or null if not found\n * \n * @example\n * ```typescript\n * const card = this.cardService.getCardById('card_123');\n * if (card) {\n * console.log('Found card:', card.title);\n * } else {\n * console.log('Card not found');\n * }\n * ```\n */\n getCardById(id: string): CardData | null {\n return this.cardsSubject.value.find(card => card.id === id) || null;\n }\n\n /**\n * Applies filters to the card collection\n * \n * @param filter - Filter options to apply\n * \n * @example\n * ```typescript\n * // Filter by variant and search term\n * this.cardService.filterCards({\n * variant: 'elevated',\n * search: 'important'\n * });\n * \n * // Filter by date range\n * this.cardService.filterCards({\n * dateRange: {\n * start: new Date('2024-01-01'),\n * end: new Date('2024-12-31')\n * }\n * });\n * ```\n */\n filterCards(filter: CardFilter): void {\n this.currentFilter = { ...this.currentFilter, ...filter };\n this.applyFilters();\n }\n\n /**\n * Clears all applied filters\n * \n * @example\n * ```typescript\n * this.cardService.clearFilters();\n * // All cards will now be visible\n * ```\n */\n clearFilters(): void {\n this.currentFilter = {};\n this.applyFilters();\n }\n\n /**\n * Sorts cards by specified field and direction\n * \n * @param sort - Sort configuration\n * \n * @example\n * ```typescript\n * // Sort by title ascending\n * this.cardService.sortCards({\n * field: 'title',\n * direction: 'asc'\n * });\n * \n * // Sort by creation date descending\n * this.cardService.sortCards({\n * field: 'createdAt',\n * direction: 'desc'\n * });\n * ```\n */\n sortCards(sort: CardSort): void {\n this.currentSort = sort;\n this.applyFilters();\n }\n\n /**\n * Searches cards by title, subtitle, or content\n * \n * @param query - Search query string\n * \n * @example\n * ```typescript\n * this.cardService.searchCards('important');\n * // Will show only cards containing 'important' in title, subtitle, or content\n * ```\n */\n searchCards(query: string): void {\n this.filterCards({ search: query });\n }\n\n /**\n * Get cards by variant\n */\n getCardsByVariant(variant: CardVariant): CardData[] {\n return this.cardsSubject.value.filter(card => card.variant === variant);\n }\n\n /**\n * Get cards by size\n */\n getCardsBySize(size: AmwSize): CardData[] {\n return this.cardsSubject.value.filter(card => card.size === size);\n }\n\n /**\n * Get clickable cards\n */\n getClickableCards(): CardData[] {\n return this.cardsSubject.value.filter(card => card.clickable);\n }\n\n /**\n * Get cards with images\n */\n getCardsWithImages(): CardData[] {\n return this.cardsSubject.value.filter(card => !!card.image);\n }\n\n /**\n * Get cards with actions\n */\n getCardsWithActions(): CardData[] {\n return this.cardsSubject.value.filter(card => card.actions && card.actions.length > 0);\n }\n\n /**\n * Duplicates an existing card\n * \n * @param id - ID of the card to duplicate\n * @returns Duplicated card data or null if original not found\n * \n * @example\n * ```typescript\n * const duplicatedCard = this.cardService.duplicateCard('card_123');\n * if (duplicatedCard) {\n * console.log('Card duplicated with ID:', duplicatedCard.id);\n * }\n * ```\n */\n duplicateCard(id: string): CardData | null {\n const originalCard = this.getCardById(id);\n if (!originalCard) {\n return null;\n }\n\n const { id: originalId, createdAt, updatedAt, ...cardData } = originalCard;\n return this.addCard({\n ...cardData,\n title: `${cardData.title} (Copy)`\n });\n }\n\n /**\n * Bulk update cards\n */\n bulkUpdateCards(ids: string[], updates: Partial<CardData>): CardData[] {\n const cards = this.cardsSubject.value;\n const updatedCards: CardData[] = [];\n\n cards.forEach(card => {\n if (ids.includes(card.id)) {\n const updatedCard = {\n ...card,\n ...updates,\n id: card.id, // Ensure ID doesn't change\n updatedAt: new Date()\n };\n updatedCards.push(updatedCard);\n }\n });\n\n if (updatedCards.length > 0) {\n const newCards = cards.map(card => {\n const updated = updatedCards.find(uc => uc.id === card.id);\n return updated || card;\n });\n\n this.cardsSubject.next(newCards);\n this.applyFilters();\n }\n\n return updatedCards;\n }\n\n /**\n * Bulk delete cards\n */\n bulkDeleteCards(ids: string[]): number {\n const cards = this.cardsSubject.value;\n const filteredCards = cards.filter(card => !ids.includes(card.id));\n const deletedCount = cards.length - filteredCards.length;\n\n this.cardsSubject.next(filteredCards);\n this.applyFilters();\n\n return deletedCount;\n }\n\n /**\n * Exports all cards to JSON string\n * \n * @returns JSON string representation of all cards\n * \n * @example\n * ```typescript\n * const jsonData = this.cardService.exportCards();\n * // Save to file or send to server\n * ```\n */\n exportCards(): string {\n return JSON.stringify(this.cardsSubject.value, null, 2);\n }\n\n /**\n * Imports cards from JSON string\n * \n * @param jsonData - JSON string containing card data\n * @returns Array of imported card data\n * \n * @example\n * ```typescript\n * const importedCards = this.cardService.importCards(jsonString);\n * console.log(`Imported ${importedCards.length} cards`);\n * ```\n */\n importCards(jsonData: string): CardData[] {\n try {\n const importedCards = JSON.parse(jsonData);\n if (Array.isArray(importedCards)) {\n const validCards = importedCards.map(card => ({\n ...card,\n id: this.generateId(),\n createdAt: new Date(),\n updatedAt: new Date()\n }));\n\n const cards = [...this.cardsSubject.value, ...validCards];\n this.cardsSubject.next(cards);\n this.applyFilters();\n return validCards;\n }\n } catch (error) {\n console.error('Error importing cards:', error);\n }\n return [];\n }\n\n /**\n * Gets comprehensive statistics about the card collection\n * \n * @returns Statistics object with counts and breakdowns\n * \n * @example\n * ```typescript\n * const stats = this.cardService.getCardStatistics();\n * console.log(`Total cards: ${stats.total}`);\n * console.log(`Clickable cards: ${stats.clickable}`);\n * console.log(`Cards with images: ${stats.withImages}`);\n * ```\n */\n getCardStatistics(): {\n total: number;\n byVariant: Record<CardVariant, number>;\n bySize: Record<AmwSize, number>;\n clickable: number;\n withImages: number;\n withActions: number;\n disabled: number;\n loading: number;\n } {\n const cards = this.cardsSubject.value;\n\n const stats = {\n total: cards.length,\n byVariant: {} as Record<CardVariant, number>,\n bySize: {} as Record<AmwSize, number>,\n clickable: 0,\n withImages: 0,\n withActions: 0,\n disabled: 0,\n loading: 0\n };\n\n cards.forEach(card => {\n // Count by variant\n const variant = card.variant || 'elevated';\n stats.byVariant[variant] = (stats.byVariant[variant] || 0) + 1;\n\n // Count by size\n const size = card.size || 'medium';\n stats.bySize[size] = (stats.bySize[size] || 0) + 1;\n\n // Count other properties\n if (card.clickable) stats.clickable++;\n if (card.image) stats.withImages++;\n if (card.actions && card.actions.length > 0) stats.withActions++;\n if (card.disabled) stats.disabled++;\n if (card.loading) stats.loading++;\n });\n\n return stats;\n }\n\n private applyFilters(): void {\n let filteredCards = [...this.cardsSubject.value];\n\n // Apply search filter\n if (this.currentFilter.search) {\n const searchTerm = this.currentFilter.search.toLowerCase();\n filteredCards = filteredCards.filter(card =>\n card.title.toLowerCase().includes(searchTerm) ||\n card.subtitle?.toLowerCase().includes(searchTerm) ||\n card.content.toLowerCase().includes(searchTerm)\n );\n }\n\n // Apply variant filter\n if (this.currentFilter.variant) {\n filteredCards = filteredCards.filter(card => card.variant === this.currentFilter.variant);\n }\n\n // Apply size filter\n if (this.currentFilter.size) {\n filteredCards = filteredCards.filter(card => card.size === this.currentFilter.size);\n }\n\n // Apply boolean filters\n if (this.currentFilter.disabled !== undefined) {\n filteredCards = filteredCards.filter(card => card.disabled === this.currentFilter.disabled);\n }\n\n if (this.currentFilter.loading !== undefined) {\n filteredCards = filteredCards.filter(card => card.loading === this.currentFilter.loading);\n }\n\n if (this.currentFilter.clickable !== undefined) {\n filteredCards = filteredCards.filter(card => card.clickable === this.currentFilter.clickable);\n }\n\n if (this.currentFilter.hasImage !== undefined) {\n filteredCards = filteredCards.filter(card => !!card.image === this.currentFilter.hasImage);\n }\n\n if (this.currentFilter.hasActions !== undefined) {\n filteredCards = filteredCards.filter(card =>\n (card.actions && card.actions.length > 0) === this.currentFilter.hasActions\n );\n }\n\n // Apply date range filter\n if (this.currentFilter.dateRange) {\n const { start, end } = this.currentFilter.dateRange;\n filteredCards = filteredCards.filter(card => {\n const cardDate = card.createdAt || new Date();\n return cardDate >= start && cardDate <= end;\n });\n }\n\n // Apply sorting\n filteredCards.sort((a, b) => {\n const aValue = a[this.currentSort.field];\n const bValue = b[this.currentSort.field];\n\n if (aValue === bValue) return 0;\n\n const comparison = aValue < bValue ? -1 : 1;\n return this.currentSort.direction === 'asc' ? comparison : -comparison;\n });\n\n this.filteredCardsSubject.next(filteredCards);\n }\n\n private generateId(): string {\n return 'card_' + Math.random().toString(36).substr(2, 9);\n }\n\n private initializeSampleCards(): void {\n const sampleCards: CardData[] = [\n {\n id: 'card_1',\n title: 'Welcome Card',\n subtitle: 'Getting Started',\n content: 'This is a sample card to help you get started with the card service.',\n variant: 'elevated',\n size: 'medium',\n clickable: true,\n actions: [\n { label: 'Learn More', icon: 'info', color: 'primary' },\n { label: 'Get Started', icon: 'play_arrow', color: 'accent' }\n ],\n createdAt: new Date(),\n updatedAt: new Date()\n },\n {\n id: 'card_2',\n title: 'Image Card',\n subtitle: 'Visual Content',\n content: 'This card demonstrates image support with proper aspect ratios.',\n image: 'https://picsum.photos/400/200?random=1',\n imageAlt: 'Sample image',\n variant: 'outlined',\n size: 'large',\n clickable: true,\n actions: [\n { label: 'View', icon: 'visibility', color: 'primary' }\n ],\n createdAt: new Date(),\n updatedAt: new Date()\n },\n {\n id: 'card_3',\n title: 'Loading Card',\n subtitle: 'Processing',\n content: 'This card is currently in a loading state.',\n variant: 'filled',\n size: 'small',\n loading: true,\n disabled: true,\n actions: [\n { label: 'Cancel', icon: 'cancel', color: 'warn', disabled: true }\n ],\n createdAt: new Date(),\n updatedAt: new Date()\n }\n ];\n\n this.cardsSubject.next(sampleCards);\n this.applyFilters();\n }\n}\n","import { Component, Input, ViewEncapsulation, ChangeDetectorRef } from '@angular/core';\n\n\n@Component({\n selector: 'amw-tooltip',\n standalone: true,\n imports: [],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-tooltip.component.html',\n styleUrls: ['./amw-tooltip.component.scss']\n})\nexport class AmwTooltipComponent {\n @Input() content: string = '';\n @Input() allowHtml: boolean = false;\n @Input() maxWidth: string = '200px';\n @Input() class: string = '';\n\n constructor(public cdr: ChangeDetectorRef) { }\n}\n","<div [class]=\"'amw-tooltip ' + class\" [style.max-width]=\"maxWidth\">\n @if (allowHtml) {\n <span [innerHTML]=\"allowHtml ? content : ''\"></span>\n\n }\n @else {\n <span>{{ content }}</span>\n }\n</div>","import { Directive, ElementRef, Input, OnDestroy, ComponentRef, HostListener, Injector } from '@angular/core';\nimport { Overlay, OverlayRef, OverlayConfig } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { AmwTooltipComponent } from './amw-tooltip.component';\n\nexport interface TooltipConfig {\n content: string;\n position?: 'top' | 'bottom' | 'left' | 'right' | 'auto';\n disabled?: boolean;\n maxWidth?: string;\n class?: string;\n allowHtml?: boolean;\n}\n\n@Directive({\n selector: '[amwTooltip]',\n standalone: true\n})\nexport class AmwTooltipDirective implements OnDestroy {\n @Input('amwTooltip') tooltipConfig: TooltipConfig | string = '';\n @Input() tooltipPosition: 'top' | 'bottom' | 'left' | 'right' | 'auto' = 'auto';\n @Input() tooltipDisabled: boolean = false;\n @Input() tooltipMaxWidth: string = '200px';\n @Input() tooltipClass: string = '';\n @Input() tooltipAllowHtml: boolean = false;\n\n private overlayRef: OverlayRef | null = null;\n private tooltipComponent: ComponentRef<AmwTooltipComponent> | null = null;\n private isVisible = false;\n\n constructor(\n private elementRef: ElementRef,\n private overlay: Overlay,\n private injector: Injector\n ) { }\n\n ngOnDestroy(): void {\n this.destroyTooltip();\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n this.show();\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.hide();\n }\n\n @HostListener('focus')\n onFocus(): void {\n this.show();\n }\n\n @HostListener('blur')\n onBlur(): void {\n this.hide();\n }\n\n private show(): void {\n if (this.tooltipDisabled || this.isVisible) {\n return;\n }\n\n const config = this.getConfig();\n if (!config.content) {\n return;\n }\n\n this.createTooltip(config);\n }\n\n private hide(): void {\n this.destroyTooltip();\n }\n\n private getConfig(): TooltipConfig {\n if (typeof this.tooltipConfig === 'string') {\n return {\n content: this.tooltipConfig,\n position: this.tooltipPosition,\n disabled: this.tooltipDisabled,\n maxWidth: this.tooltipMaxWidth,\n class: this.tooltipClass,\n allowHtml: this.tooltipAllowHtml\n };\n }\n return this.tooltipConfig;\n }\n\n private createTooltip(config: TooltipConfig): void {\n if (this.overlayRef) {\n this.destroyTooltip();\n }\n\n const overlayConfig = this.getOverlayConfig(config);\n this.overlayRef = this.overlay.create(overlayConfig);\n\n // Create tooltip component\n const tooltipPortal = new ComponentPortal(AmwTooltipComponent, null, this.injector);\n this.tooltipComponent = this.overlayRef.attach(tooltipPortal);\n\n // Set tooltip content and configuration\n const position = config.position || this.tooltipPosition || 'top';\n const positionClass = `amw-tooltip--${position}`;\n const customClass = config.class || '';\n const combinedClass = customClass ? `${positionClass} ${customClass}` : positionClass;\n\n this.tooltipComponent.instance.content = config.content;\n this.tooltipComponent.instance.allowHtml = config.allowHtml || false;\n this.tooltipComponent.instance.maxWidth = config.maxWidth || '200px';\n this.tooltipComponent.instance.class = combinedClass;\n\n // Manually trigger change detection for dynamically created component\n this.tooltipComponent.instance.cdr.detectChanges();\n\n this.isVisible = true;\n }\n\n private destroyTooltip(): void {\n if (this.tooltipComponent) {\n this.tooltipComponent.destroy();\n this.tooltipComponent = null;\n }\n\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n\n this.isVisible = false;\n }\n\n private getOverlayConfig(config: TooltipConfig): OverlayConfig {\n const position = config.position || this.tooltipPosition;\n\n if (position === 'auto') {\n return this.getAutoPositionConfig();\n }\n\n const positionStrategy = this.overlay.position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(this.getPositionConfigs(position))\n .withPush(false);\n\n return {\n positionStrategy,\n hasBackdrop: false,\n panelClass: ['amw-tooltip-panel', config.class || ''].filter(Boolean)\n };\n }\n\n private getAutoPositionConfig(): OverlayConfig {\n const positionStrategy = this.overlay.position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions([\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' },\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top' },\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' },\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' }\n ])\n .withPush(true);\n\n return {\n positionStrategy,\n hasBackdrop: false,\n panelClass: ['amw-tooltip-panel']\n };\n }\n\n private getPositionConfigs(position: string): any[] {\n const configs: any[] = [];\n\n switch (position) {\n case 'top':\n configs.push({ originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' });\n break;\n case 'bottom':\n configs.push({ originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top' });\n break;\n case 'left':\n configs.push({ originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' });\n break;\n case 'right':\n configs.push({ originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' });\n break;\n }\n\n return configs;\n }\n}\n","import { Directive, ElementRef, EventEmitter, HostListener, Output, OnInit, OnDestroy, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[amwClickOutside]',\n standalone: true\n})\nexport class AmwClickOutsideDirective implements OnInit, OnDestroy {\n @Output() amwClickOutside = new EventEmitter<Event>();\n\n private documentClickListener?: () => void;\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2\n ) { }\n\n ngOnInit(): void {\n // Add document click listener\n this.documentClickListener = this.renderer.listen('document', 'click', (event: Event) => {\n this.onDocumentClick(event);\n });\n }\n\n ngOnDestroy(): void {\n // Remove document click listener\n if (this.documentClickListener) {\n this.documentClickListener();\n }\n }\n\n @HostListener('click', ['$event'])\n onHostClick(event: Event): void {\n // Stop propagation to prevent document click from firing\n event.stopPropagation();\n }\n\n private onDocumentClick(event: Event): void {\n const clickedInside = this.elementRef.nativeElement.contains(event.target);\n if (!clickedInside) {\n this.amwClickOutside.emit(event);\n }\n }\n}\n","import { Directive, ElementRef, Input, OnInit, AfterViewInit, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[amwAutoFocus]',\n standalone: true\n})\nexport class AmwAutoFocusDirective implements OnInit, AfterViewInit {\n @Input() amwAutoFocus: boolean = true;\n @Input() amwAutoFocusDelay: number = 0;\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2\n ) { }\n\n ngOnInit(): void {\n // Focus immediately if no delay\n if (this.amwAutoFocus && this.amwAutoFocusDelay === 0) {\n this.focusElement();\n }\n }\n\n ngAfterViewInit(): void {\n // Focus with delay if specified\n if (this.amwAutoFocus && this.amwAutoFocusDelay > 0) {\n setTimeout(() => {\n this.focusElement();\n }, this.amwAutoFocusDelay);\n }\n }\n\n private focusElement(): void {\n const element = this.elementRef.nativeElement;\n\n // Check if element is focusable\n if (this.isFocusable(element)) {\n element.focus();\n } else {\n // If not directly focusable, try to find a focusable child\n const focusableChild = element.querySelector('input, textarea, select, button, [tabindex]:not([tabindex=\"-1\"])');\n if (focusableChild) {\n focusableChild.focus();\n }\n }\n }\n\n private isFocusable(element: HTMLElement): boolean {\n const focusableElements = ['input', 'textarea', 'select', 'button', 'a'];\n const tagName = element.tagName.toLowerCase();\n\n if (focusableElements.includes(tagName)) {\n return true;\n }\n\n // Check if element has tabindex and is not disabled\n const tabIndex = element.getAttribute('tabindex');\n if (tabIndex !== null && tabIndex !== '-1') {\n return true;\n }\n\n return false;\n }\n}\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, Output, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[amwCopyToClipboard]',\n standalone: true\n})\nexport class AmwCopyToClipboardDirective {\n @Input() amwCopyToClipboard: string = '';\n @Input() amwCopySuccessMessage: string = 'Copied to clipboard!';\n @Input() amwCopyErrorMessage: string = 'Failed to copy to clipboard';\n @Input() amwCopyShowToast: boolean = true;\n\n @Output() amwCopySuccess = new EventEmitter<string>();\n @Output() amwCopyError = new EventEmitter<Error>();\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2\n ) { }\n\n @HostListener('click', ['$event'])\n onClick(event: Event): void {\n event.preventDefault();\n this.copyToClipboard();\n }\n\n private async copyToClipboard(): Promise<void> {\n const textToCopy = this.getTextToCopy();\n\n if (!textToCopy) {\n this.handleError(new Error('No text to copy'));\n return;\n }\n\n try {\n // Try modern clipboard API first\n if (navigator.clipboard && window.isSecureContext) {\n await navigator.clipboard.writeText(textToCopy);\n this.handleSuccess(textToCopy);\n } else {\n // Fallback for older browsers\n this.fallbackCopyToClipboard(textToCopy);\n }\n } catch (error) {\n this.handleError(error as Error);\n }\n }\n\n private getTextToCopy(): string {\n // If text is provided via input, use it\n if (this.amwCopyToClipboard) {\n return this.amwCopyToClipboard;\n }\n\n // Otherwise, try to get text from the element\n const element = this.elementRef.nativeElement;\n\n // Check if element has a value property (input, textarea)\n if (element.value !== undefined) {\n return element.value;\n }\n\n // Check if element has textContent\n if (element.textContent) {\n return element.textContent.trim();\n }\n\n // Check if element has innerText\n if (element.innerText) {\n return element.innerText.trim();\n }\n\n return '';\n }\n\n private fallbackCopyToClipboard(text: string): void {\n const textArea = document.createElement('textarea');\n textArea.value = text;\n\n // Make the textarea invisible\n textArea.style.position = 'fixed';\n textArea.style.left = '-999999px';\n textArea.style.top = '-999999px';\n\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n try {\n const successful = document.execCommand('copy');\n if (successful) {\n this.handleSuccess(text);\n } else {\n this.handleError(new Error('Copy command failed'));\n }\n } catch (error) {\n this.handleError(error as Error);\n } finally {\n document.body.removeChild(textArea);\n }\n }\n\n private handleSuccess(text: string): void {\n this.amwCopySuccess.emit(text);\n\n if (this.amwCopyShowToast) {\n this.showToast(this.amwCopySuccessMessage, 'success');\n }\n }\n\n private handleError(error: Error): void {\n this.amwCopyError.emit(error);\n\n if (this.amwCopyShowToast) {\n this.showToast(this.amwCopyErrorMessage, 'error');\n }\n }\n\n private showToast(message: string, type: 'success' | 'error'): void {\n // Create a simple toast notification\n const toast = document.createElement('div');\n toast.textContent = message;\n toast.style.cssText = `\n position: fixed;\n top: 20px;\n right: 20px;\n background: ${type === 'success' ? '#4caf50' : '#f44336'};\n color: white;\n padding: 12px 24px;\n border-radius: 4px;\n box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n z-index: 10000;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n `;\n\n document.body.appendChild(toast);\n\n // Remove toast after 3 seconds\n setTimeout(() => {\n if (document.body.contains(toast)) {\n document.body.removeChild(toast);\n }\n }, 3000);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'amwCurrency',\n standalone: true\n})\nexport class AmwCurrencyPipe implements PipeTransform {\n transform(\n value: number | string | null | undefined,\n currencyCode: string = 'USD',\n display: 'symbol' | 'code' | 'name' = 'symbol',\n digitsInfo: string = '1.2-2',\n locale: string = 'en-US'\n ): string | null {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n\n const numericValue = typeof value === 'string' ? parseFloat(value) : value;\n\n if (isNaN(numericValue)) {\n return null;\n }\n\n try {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: currencyCode,\n currencyDisplay: display,\n minimumFractionDigits: this.getMinFractionDigits(digitsInfo),\n maximumFractionDigits: this.getMaxFractionDigits(digitsInfo)\n }).format(numericValue);\n } catch (error) {\n console.warn('AmwCurrencyPipe: Invalid locale or currency code', error);\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n currencyDisplay: display,\n minimumFractionDigits: this.getMinFractionDigits(digitsInfo),\n maximumFractionDigits: this.getMaxFractionDigits(digitsInfo)\n }).format(numericValue);\n }\n }\n\n private getMinFractionDigits(digitsInfo: string): number {\n const parts = digitsInfo.split('.');\n if (parts.length > 1) {\n const fractionParts = parts[1].split('-');\n return parseInt(fractionParts[0], 10) || 0;\n }\n return 0;\n }\n\n private getMaxFractionDigits(digitsInfo: string): number {\n const parts = digitsInfo.split('.');\n if (parts.length > 1) {\n const fractionParts = parts[1].split('-');\n return parseInt(fractionParts[1] || fractionParts[0], 10) || 2;\n }\n return 2;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'amwDate',\n standalone: true\n})\nexport class AmwDatePipe implements PipeTransform {\n transform(\n value: Date | string | number | null | undefined,\n format: string = 'medium',\n timezone?: string,\n locale: string = 'en-US'\n ): string | null {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n\n let date: Date;\n\n if (value instanceof Date) {\n date = value;\n } else if (typeof value === 'string' || typeof value === 'number') {\n date = new Date(value);\n } else {\n return null;\n }\n\n if (isNaN(date.getTime())) {\n return null;\n }\n\n try {\n const options = this.getDateOptions(format);\n return new Intl.DateTimeFormat(locale, options).format(date);\n } catch (error) {\n console.warn('AmwDatePipe: Invalid locale or format', error);\n const fallbackOptions = this.getDateOptions(format);\n return new Intl.DateTimeFormat('en-US', fallbackOptions).format(date);\n }\n }\n\n private getDateOptions(format: string): Intl.DateTimeFormatOptions {\n const formatMap: { [key: string]: Intl.DateTimeFormatOptions } = {\n 'short': {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n },\n 'medium': {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n },\n 'long': {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n },\n 'full': {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n weekday: 'long',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n },\n 'date': {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n },\n 'time': {\n hour: '2-digit',\n minute: '2-digit'\n },\n 'datetime': {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n }\n };\n\n return formatMap[format] || formatMap['medium'];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'amwTextTransform',\n standalone: true\n})\nexport class AmwTextTransformPipe implements PipeTransform {\n transform(\n value: string | null | undefined,\n transform: 'uppercase' | 'lowercase' | 'capitalize' | 'titlecase' | 'camelcase' | 'kebabcase' | 'snakecase' = 'uppercase'\n ): string | null {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n\n switch (transform) {\n case 'uppercase':\n return value.toUpperCase();\n case 'lowercase':\n return value.toLowerCase();\n case 'capitalize':\n return this.capitalize(value);\n case 'titlecase':\n return this.titleCase(value);\n case 'camelcase':\n return this.camelCase(value);\n case 'kebabcase':\n return this.kebabCase(value);\n case 'snakecase':\n return this.snakeCase(value);\n default:\n return value;\n }\n }\n\n private capitalize(value: string): string {\n return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();\n }\n\n private titleCase(value: string): string {\n return value.replace(/\\w\\S*/g, (txt) =>\n txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()\n );\n }\n\n private camelCase(value: string): string {\n return value.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase();\n }).replace(/\\s+/g, '');\n }\n\n private kebabCase(value: string): string {\n return value\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n }\n\n private snakeCase(value: string): string {\n return value\n .replace(/([a-z])([A-Z])/g, '$1_$2')\n .replace(/[\\s-]+/g, '_')\n .toLowerCase();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\nexport interface Message {\n id: string;\n type: 'info' | 'success' | 'warning' | 'error';\n title: string;\n content: string;\n timestamp: Date;\n duration?: number;\n dismissible?: boolean;\n actions?: MessageAction[];\n}\n\nexport interface MessageAction {\n label: string;\n action: () => void;\n style?: 'primary' | 'secondary' | 'danger';\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AmwMessagingService {\n private messagesSubject = new BehaviorSubject<Message[]>([]);\n private messageIdCounter = 0;\n\n public messages$: Observable<Message[]> = this.messagesSubject.asObservable();\n\n constructor() { }\n\n /**\n * Add a new message to the message queue\n */\n addMessage(message: Omit<Message, 'id' | 'timestamp'>): string {\n const id = this.generateMessageId();\n const fullMessage: Message = {\n ...message,\n id,\n timestamp: new Date(),\n dismissible: message.dismissible !== false,\n duration: message.duration || this.getDefaultDuration(message.type)\n };\n\n const currentMessages = this.messagesSubject.value;\n this.messagesSubject.next([...currentMessages, fullMessage]);\n\n // Auto-dismiss if duration is specified\n if (fullMessage.duration && fullMessage.duration > 0) {\n setTimeout(() => {\n this.removeMessage(id);\n }, fullMessage.duration);\n }\n\n return id;\n }\n\n /**\n * Remove a message by ID\n */\n removeMessage(id: string): void {\n const currentMessages = this.messagesSubject.value;\n const filteredMessages = currentMessages.filter(msg => msg.id !== id);\n this.messagesSubject.next(filteredMessages);\n }\n\n /**\n * Clear all messages\n */\n clearMessages(): void {\n this.messagesSubject.next([]);\n }\n\n /**\n * Clear messages by type\n */\n clearMessagesByType(type: Message['type']): void {\n const currentMessages = this.messagesSubject.value;\n const filteredMessages = currentMessages.filter(msg => msg.type !== type);\n this.messagesSubject.next(filteredMessages);\n }\n\n /**\n * Get current messages\n */\n getMessages(): Message[] {\n return this.messagesSubject.value;\n }\n\n /**\n * Convenience methods for different message types\n */\n info(title: string, content: string, options?: Partial<Message>): string {\n return this.addMessage({ type: 'info', title, content, ...options });\n }\n\n success(title: string, content: string, options?: Partial<Message>): string {\n return this.addMessage({ type: 'success', title, content, ...options });\n }\n\n warning(title: string, content: string, options?: Partial<Message>): string {\n return this.addMessage({ type: 'warning', title, content, ...options });\n }\n\n error(title: string, content: string, options?: Partial<Message>): string {\n return this.addMessage({ type: 'error', title, content, ...options });\n }\n\n private generateMessageId(): string {\n return `msg_${++this.messageIdCounter}_${Date.now()}`;\n }\n\n private getDefaultDuration(type: Message['type']): number {\n const durations = {\n info: 5000,\n success: 3000,\n warning: 7000,\n error: 10000\n };\n return durations[type];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nexport interface LoadingState {\n isLoading: boolean;\n message?: string;\n progress?: number;\n overlay?: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AmwLoadingService {\n private loadingSubject = new BehaviorSubject<LoadingState>({ isLoading: false });\n private loadingStack: string[] = [];\n\n public loading$: Observable<LoadingState> = this.loadingSubject.asObservable();\n\n constructor() { }\n\n /**\n * Show loading with optional message and progress\n */\n show(message?: string, options?: { progress?: number; overlay?: boolean }): string {\n const id = this.generateLoadingId();\n this.loadingStack.push(id);\n\n const state: LoadingState = {\n isLoading: true,\n message,\n progress: options?.progress,\n overlay: options?.overlay !== false\n };\n\n this.loadingSubject.next(state);\n return id;\n }\n\n /**\n * Hide loading by ID\n */\n hide(id?: string): void {\n if (id) {\n const index = this.loadingStack.indexOf(id);\n if (index > -1) {\n this.loadingStack.splice(index, 1);\n }\n } else {\n this.loadingStack = [];\n }\n\n if (this.loadingStack.length === 0) {\n this.loadingSubject.next({ isLoading: false });\n }\n }\n\n /**\n * Update loading message\n */\n updateMessage(message: string): void {\n const currentState = this.loadingSubject.value;\n if (currentState.isLoading) {\n this.loadingSubject.next({ ...currentState, message });\n }\n }\n\n /**\n * Update loading progress (0-100)\n */\n updateProgress(progress: number): void {\n const currentState = this.loadingSubject.value;\n if (currentState.isLoading) {\n this.loadingSubject.next({ ...currentState, progress: Math.max(0, Math.min(100, progress)) });\n }\n }\n\n /**\n * Check if currently loading\n */\n isLoading(): boolean {\n return this.loadingSubject.value.isLoading;\n }\n\n /**\n * Get current loading state\n */\n getCurrentState(): LoadingState {\n return this.loadingSubject.value;\n }\n\n /**\n * Clear all loading states\n */\n clear(): void {\n this.loadingStack = [];\n this.loadingSubject.next({ isLoading: false });\n }\n\n private generateLoadingId(): string {\n return `loading_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nexport interface Notification {\n id: string;\n type: 'info' | 'success' | 'warning' | 'error';\n title: string;\n message: string;\n timestamp: Date;\n duration?: number;\n persistent?: boolean;\n actions?: NotificationAction[];\n icon?: string;\n sound?: boolean;\n}\n\nexport interface NotificationAction {\n label: string;\n action: () => void;\n style?: 'primary' | 'secondary' | 'danger';\n}\n\nexport interface NotificationOptions {\n duration?: number;\n persistent?: boolean;\n sound?: boolean;\n icon?: string;\n actions?: NotificationAction[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AmwNotificationService {\n private notificationsSubject = new BehaviorSubject<Notification[]>([]);\n private notificationIdCounter = 0;\n\n public notifications$: Observable<Notification[]> = this.notificationsSubject.asObservable();\n\n constructor() { }\n\n /**\n * Show a notification\n */\n show(\n type: Notification['type'],\n title: string,\n message: string,\n options?: NotificationOptions\n ): string {\n const id = this.generateNotificationId();\n const notification: Notification = {\n id,\n type,\n title,\n message,\n timestamp: new Date(),\n duration: options?.duration || this.getDefaultDuration(type),\n persistent: options?.persistent || false,\n sound: options?.sound !== false,\n icon: options?.icon || this.getDefaultIcon(type),\n actions: options?.actions\n };\n\n const currentNotifications = this.notificationsSubject.value;\n this.notificationsSubject.next([...currentNotifications, notification]);\n\n // Play sound if enabled\n if (notification.sound) {\n this.playNotificationSound(type);\n }\n\n // Auto-dismiss if not persistent and duration is specified\n if (!notification.persistent && notification.duration && notification.duration > 0) {\n setTimeout(() => {\n this.dismiss(id);\n }, notification.duration);\n }\n\n return id;\n }\n\n /**\n * Dismiss a notification by ID\n */\n dismiss(id: string): void {\n const currentNotifications = this.notificationsSubject.value;\n const filteredNotifications = currentNotifications.filter(notif => notif.id !== id);\n this.notificationsSubject.next(filteredNotifications);\n }\n\n /**\n * Clear all notifications\n */\n clear(): void {\n this.notificationsSubject.next([]);\n }\n\n /**\n * Clear notifications by type\n */\n clearByType(type: Notification['type']): void {\n const currentNotifications = this.notificationsSubject.value;\n const filteredNotifications = currentNotifications.filter(notif => notif.type !== type);\n this.notificationsSubject.next(filteredNotifications);\n }\n\n /**\n * Get current notifications\n */\n getNotifications(): Notification[] {\n return this.notificationsSubject.value;\n }\n\n /**\n * Convenience methods for different notification types\n */\n info(title: string, message: string, options?: NotificationOptions): string {\n return this.show('info', title, message, options);\n }\n\n success(title: string, message: string, options?: NotificationOptions): string {\n return this.show('success', title, message, options);\n }\n\n warning(title: string, message: string, options?: NotificationOptions): string {\n return this.show('warning', title, message, options);\n }\n\n error(title: string, message: string, options?: NotificationOptions): string {\n return this.show('error', title, message, options);\n }\n\n /**\n * Request browser notification permission\n */\n async requestPermission(): Promise<NotificationPermission> {\n if ('Notification' in window) {\n return await Notification.requestPermission();\n }\n return 'denied';\n }\n\n /**\n * Show browser notification\n */\n async showBrowserNotification(\n title: string,\n message?: string,\n options?: NotificationOptions\n ): Promise<void> {\n if ('Notification' in window && Notification.permission === 'granted') {\n const notification = new Notification(title, {\n body: message,\n icon: options?.icon,\n badge: options?.icon\n });\n\n if (options?.duration) {\n setTimeout(() => notification.close(), options.duration);\n }\n }\n }\n\n private generateNotificationId(): string {\n return `notif_${++this.notificationIdCounter}_${Date.now()}`;\n }\n\n private getDefaultDuration(type: Notification['type']): number {\n const durations = {\n info: 5000,\n success: 3000,\n warning: 7000,\n error: 10000\n };\n return durations[type];\n }\n\n private getDefaultIcon(type: Notification['type']): string {\n const icons = {\n info: 'info',\n success: 'check_circle',\n warning: 'warning',\n error: 'error'\n };\n return icons[type];\n }\n\n private playNotificationSound(type: Notification['type']): void {\n // Simple sound implementation - in a real app, you might use audio files\n const audioContext = new (window.AudioContext || (window as any).webkitAudioContext)();\n const oscillator = audioContext.createOscillator();\n const gainNode = audioContext.createGain();\n\n oscillator.connect(gainNode);\n gainNode.connect(audioContext.destination);\n\n const frequencies = {\n info: 440,\n success: 523,\n warning: 659,\n error: 330\n };\n\n oscillator.frequency.setValueAtTime(frequencies[type], audioContext.currentTime);\n oscillator.type = 'sine';\n\n gainNode.gain.setValueAtTime(0.1, audioContext.currentTime);\n gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.5);\n\n oscillator.start(audioContext.currentTime);\n oscillator.stop(audioContext.currentTime + 0.5);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpResponse, HttpHeaders } from '@angular/common/http';\nimport { Observable, from, of, defer } from 'rxjs';\nimport { map, catchError, switchMap } from 'rxjs/operators';\n\nexport interface StoredCacheEntry {\n url: string;\n response: {\n body: any;\n status: number;\n statusText: string;\n headers: { [key: string]: string };\n url: string;\n };\n timestamp: number;\n timeout: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class IndexedDbStorageService {\n private dbName = 'HttpCacheDB';\n private storeName = 'cache';\n private version = 1;\n private db$: Observable<IDBDatabase>;\n\n constructor() {\n this.db$ = this.initDB();\n }\n\n /**\n * Initialize IndexedDB and return as Observable\n */\n private initDB(): Observable<IDBDatabase> {\n return defer(() => from(new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(this.dbName, this.version);\n\n request.onerror = () => {\n console.error('IndexedDB failed to open:', request.error);\n reject(request.error);\n };\n\n request.onsuccess = () => {\n resolve(request.result);\n };\n\n request.onupgradeneeded = (event: IDBVersionChangeEvent) => {\n const db = (event.target as IDBOpenDBRequest).result;\n\n // Create object store if it doesn't exist\n if (!db.objectStoreNames.contains(this.storeName)) {\n const objectStore = db.createObjectStore(this.storeName, { keyPath: 'url' });\n objectStore.createIndex('timestamp', 'timestamp', { unique: false });\n }\n };\n })));\n }\n\n /**\n * Get a cached entry from IndexedDB as Observable\n */\n get(url: string): Observable<HttpResponse<any> | null> {\n return this.db$.pipe(\n map(db => from(new Promise<HttpResponse<any> | null>((resolve, reject) => {\n const transaction = db.transaction([this.storeName], 'readonly');\n const store = transaction.objectStore(this.storeName);\n const request = store.get(url);\n\n request.onsuccess = () => {\n const entry: StoredCacheEntry | undefined = request.result;\n\n if (!entry) {\n resolve(null);\n return;\n }\n\n // Check if expired\n const now = Date.now();\n const age = now - entry.timestamp;\n if (age > entry.timeout) {\n // Delete expired entry (don't wait for completion)\n this.delete(url).subscribe();\n resolve(null);\n return;\n }\n\n // Reconstruct HttpResponse\n const headers = new HttpHeaders(entry.response.headers);\n const response = new HttpResponse({\n body: entry.response.body,\n status: entry.response.status,\n statusText: entry.response.statusText,\n headers: headers,\n url: entry.response.url\n });\n\n resolve(response);\n };\n\n request.onerror = () => {\n console.error('Error reading from IndexedDB:', request.error);\n resolve(null);\n };\n }))),\n switchMap(promise => promise),\n catchError(error => {\n console.error('IndexedDB get error:', error);\n return of(null);\n })\n );\n }\n\n /**\n * Store a cached entry in IndexedDB as Observable\n */\n put(url: string, response: HttpResponse<any>, timeout: number): Observable<void> {\n return this.db$.pipe(\n map(db => from(new Promise<void>((resolve, reject) => {\n const transaction = db.transaction([this.storeName], 'readwrite');\n const store = transaction.objectStore(this.storeName);\n\n // Serialize HttpResponse for storage\n const entry: StoredCacheEntry = {\n url,\n response: {\n body: response.body,\n status: response.status,\n statusText: response.statusText,\n headers: this.extractHeaders(response),\n url: response.url || url\n },\n timestamp: Date.now(),\n timeout\n };\n\n const request = store.put(entry);\n\n request.onsuccess = () => resolve();\n request.onerror = () => {\n console.error('Error writing to IndexedDB:', request.error);\n reject(request.error);\n };\n }))),\n switchMap(promise => promise),\n catchError(error => {\n console.error('IndexedDB put error:', error);\n return of(undefined);\n })\n );\n }\n\n /**\n * Delete a specific cached entry as Observable\n */\n delete(url: string): Observable<void> {\n return this.db$.pipe(\n map(db => from(new Promise<void>((resolve, reject) => {\n const transaction = db.transaction([this.storeName], 'readwrite');\n const store = transaction.objectStore(this.storeName);\n const request = store.delete(url);\n\n request.onsuccess = () => resolve();\n request.onerror = () => {\n console.error('Error deleting from IndexedDB:', request.error);\n reject(request.error);\n };\n }))),\n switchMap(promise => promise),\n catchError(error => {\n console.error('IndexedDB delete error:', error);\n return of(undefined);\n })\n );\n }\n\n /**\n * Clear all cached entries as Observable\n */\n clear(): Observable<void> {\n return this.db$.pipe(\n map(db => from(new Promise<void>((resolve, reject) => {\n const transaction = db.transaction([this.storeName], 'readwrite');\n const store = transaction.objectStore(this.storeName);\n const request = store.clear();\n\n request.onsuccess = () => resolve();\n request.onerror = () => {\n console.error('Error clearing IndexedDB:', request.error);\n reject(request.error);\n };\n }))),\n switchMap(promise => promise),\n catchError(error => {\n console.error('IndexedDB clear error:', error);\n return of(undefined);\n })\n );\n }\n\n /**\n * Get all URLs in the cache as Observable\n */\n getAllKeys(): Observable<string[]> {\n return this.db$.pipe(\n map(db => from(new Promise<string[]>((resolve, reject) => {\n const transaction = db.transaction([this.storeName], 'readonly');\n const store = transaction.objectStore(this.storeName);\n const request = store.getAllKeys();\n\n request.onsuccess = () => resolve(request.result as string[]);\n request.onerror = () => {\n console.error('Error getting keys from IndexedDB:', request.error);\n resolve([]);\n };\n }))),\n switchMap(promise => promise),\n catchError(error => {\n console.error('IndexedDB getAllKeys error:', error);\n return of([]);\n })\n );\n }\n\n /**\n * Get the number of cached entries as Observable\n */\n count(): Observable<number> {\n return this.db$.pipe(\n map(db => from(new Promise<number>((resolve, reject) => {\n const transaction = db.transaction([this.storeName], 'readonly');\n const store = transaction.objectStore(this.storeName);\n const request = store.count();\n\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => {\n console.error('Error counting IndexedDB entries:', request.error);\n resolve(0);\n };\n }))),\n switchMap(promise => promise),\n catchError(error => {\n console.error('IndexedDB count error:', error);\n return of(0);\n })\n );\n }\n\n /**\n * Remove all expired entries as Observable\n */\n pruneExpired(): Observable<number> {\n return this.db$.pipe(\n map(db => from(new Promise<number>((resolve, reject) => {\n const transaction = db.transaction([this.storeName], 'readwrite');\n const store = transaction.objectStore(this.storeName);\n const request = store.openCursor();\n const now = Date.now();\n let deletedCount = 0;\n\n request.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest).result as IDBCursorWithValue;\n if (cursor) {\n const entry: StoredCacheEntry = cursor.value;\n const age = now - entry.timestamp;\n if (age > entry.timeout) {\n cursor.delete();\n deletedCount++;\n }\n cursor.continue();\n } else {\n resolve(deletedCount);\n }\n };\n\n request.onerror = () => {\n console.error('Error pruning IndexedDB:', request.error);\n resolve(0);\n };\n }))),\n switchMap(promise => promise),\n catchError(error => {\n console.error('IndexedDB pruneExpired error:', error);\n return of(0);\n })\n );\n }\n\n /**\n * Extract headers from HttpResponse\n */\n private extractHeaders(response: HttpResponse<any>): { [key: string]: string } {\n const headers: { [key: string]: string } = {};\n if (response.headers) {\n response.headers.keys().forEach(key => {\n const value = response.headers.get(key);\n if (value) {\n headers[key] = value;\n }\n });\n }\n return headers;\n }\n\n /**\n * Get estimated storage usage as Observable\n */\n getStorageEstimate(): Observable<{ usage: number; quota: number; percentage: number } | null> {\n if ('storage' in navigator && 'estimate' in navigator.storage) {\n return from(navigator.storage.estimate()).pipe(\n map(estimate => ({\n usage: estimate.usage || 0,\n quota: estimate.quota || 0,\n percentage: estimate.quota ? ((estimate.usage || 0) / estimate.quota) * 100 : 0\n })),\n catchError(error => {\n console.error('Error getting storage estimate:', error);\n return of(null);\n })\n );\n }\n return of(null);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\n\nexport interface CacheSyncMessage {\n type: 'put' | 'delete' | 'clear' | 'prune';\n url?: string;\n timestamp?: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CacheSyncService {\n private channelName = 'http-cache-sync';\n private channel: BroadcastChannel | null = null;\n private messages$ = new Subject<CacheSyncMessage>();\n\n constructor() {\n this.initBroadcastChannel();\n }\n\n /**\n * Initialize BroadcastChannel for cross-tab communication\n */\n private initBroadcastChannel(): void {\n if (typeof BroadcastChannel !== 'undefined') {\n try {\n this.channel = new BroadcastChannel(this.channelName);\n\n this.channel.onmessage = (event: MessageEvent<CacheSyncMessage>) => {\n // Notify subscribers about cache changes from other tabs\n this.messages$.next(event.data);\n };\n\n this.channel.onmessageerror = (error) => {\n console.error('BroadcastChannel error:', error);\n };\n } catch (error) {\n console.warn('BroadcastChannel not available:', error);\n }\n } else {\n console.warn('BroadcastChannel API not supported in this browser');\n }\n }\n\n /**\n * Broadcast a cache update to other tabs\n */\n broadcast(message: CacheSyncMessage): void {\n if (this.channel) {\n try {\n this.channel.postMessage(message);\n } catch (error) {\n console.error('Error broadcasting message:', error);\n }\n }\n }\n\n /**\n * Get an observable of cache sync messages from other tabs\n */\n getMessages(): Observable<CacheSyncMessage> {\n return this.messages$.asObservable();\n }\n\n /**\n * Notify other tabs that a cache entry was added\n */\n notifyPut(url: string): void {\n this.broadcast({\n type: 'put',\n url,\n timestamp: Date.now()\n });\n }\n\n /**\n * Notify other tabs that a cache entry was deleted\n */\n notifyDelete(url: string): void {\n this.broadcast({\n type: 'delete',\n url,\n timestamp: Date.now()\n });\n }\n\n /**\n * Notify other tabs that the cache was cleared\n */\n notifyClear(): void {\n this.broadcast({\n type: 'clear',\n timestamp: Date.now()\n });\n }\n\n /**\n * Notify other tabs that expired entries were pruned\n */\n notifyPrune(): void {\n this.broadcast({\n type: 'prune',\n timestamp: Date.now()\n });\n }\n\n /**\n * Close the BroadcastChannel\n */\n destroy(): void {\n if (this.channel) {\n this.channel.close();\n this.channel = null;\n }\n }\n}\n\n\n\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { HttpResponse } from '@angular/common/http';\nimport { Observable, of, Subject } from 'rxjs';\nimport { map, switchMap, tap, shareReplay, takeUntil, catchError } from 'rxjs/operators';\nimport { IndexedDbStorageService } from './indexed-db-storage.service';\nimport { CacheSyncService } from './cache-sync.service';\n\nexport interface CacheEntry {\n response: HttpResponse<any>;\n timestamp: number;\n timeout: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpCacheService implements OnDestroy {\n // In-memory cache for fast access (L1 cache)\n private memoryCache = new Map<string, CacheEntry>();\n\n // Track ongoing operations to prevent race conditions\n private ongoingGets = new Map<string, Observable<HttpResponse<any> | null>>();\n\n private destroy$ = new Subject<void>();\n\n constructor(\n private indexedDbStorage: IndexedDbStorageService,\n private cacheSyncService: CacheSyncService\n ) {\n this.initCrossTabSync();\n this.loadMemoryCacheFromIndexedDB();\n }\n\n /**\n * Initialize cross-tab synchronization\n */\n private initCrossTabSync(): void {\n this.cacheSyncService.getMessages()\n .pipe(takeUntil(this.destroy$))\n .subscribe(message => {\n switch (message.type) {\n case 'put':\n if (message.url) {\n // Refresh this entry from IndexedDB\n this.indexedDbStorage.get(message.url)\n .pipe(takeUntil(this.destroy$))\n .subscribe(response => {\n if (response) {\n this.memoryCache.set(message.url!, {\n response,\n timestamp: Date.now(),\n timeout: 0 // Will be corrected from stored data\n });\n }\n });\n }\n break;\n case 'delete':\n if (message.url) {\n this.memoryCache.delete(message.url);\n }\n break;\n case 'clear':\n this.memoryCache.clear();\n break;\n case 'prune':\n this.pruneMemoryCache();\n break;\n }\n });\n }\n\n /**\n * Load frequently accessed items into memory cache on startup\n */\n private loadMemoryCacheFromIndexedDB(): void {\n this.indexedDbStorage.getAllKeys()\n .pipe(\n takeUntil(this.destroy$),\n tap(keys => {\n // Load a limited number of recent entries into memory\n const maxMemoryCacheSize = 50;\n const keysToLoad = keys.slice(0, maxMemoryCacheSize);\n\n keysToLoad.forEach(key => {\n this.indexedDbStorage.get(key)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n });\n })\n )\n .subscribe();\n }\n\n /**\n * Get a cached response as Observable (checks memory first, then IndexedDB)\n * @param url The URL to check in the cache\n * @returns Observable of the cached HttpResponse or null if not found/expired\n */\n get(url: string): Observable<HttpResponse<any> | null> {\n // Check if there's already an ongoing get for this URL\n const ongoing = this.ongoingGets.get(url);\n if (ongoing) {\n return ongoing;\n }\n\n // Create the get operation\n const get$ = this.getInternal(url).pipe(\n tap(() => this.ongoingGets.delete(url)),\n shareReplay(1)\n );\n\n this.ongoingGets.set(url, get$);\n return get$;\n }\n\n private getInternal(url: string): Observable<HttpResponse<any> | null> {\n // Check memory cache first (L1)\n const memoryEntry = this.memoryCache.get(url);\n if (memoryEntry) {\n const now = Date.now();\n const age = now - memoryEntry.timestamp;\n\n if (age <= memoryEntry.timeout) {\n return of(memoryEntry.response);\n } else {\n // Expired in memory, remove it\n this.memoryCache.delete(url);\n }\n }\n\n // Check IndexedDB (L2)\n return this.indexedDbStorage.get(url).pipe(\n tap(response => {\n // Add to memory cache for faster future access if found\n if (response) {\n this.memoryCache.set(url, {\n response,\n timestamp: Date.now(),\n timeout: 300000 // Default 5 min, will be overwritten on next put\n });\n }\n })\n );\n }\n\n /**\n * Store a response in both memory and IndexedDB as Observable\n * @param url The URL to cache\n * @param response The HttpResponse to cache\n * @param timeout The timeout in milliseconds\n * @returns Observable that completes when caching is done\n */\n put(url: string, response: HttpResponse<any>, timeout: number): Observable<void> {\n const entry: CacheEntry = {\n response,\n timestamp: Date.now(),\n timeout\n };\n\n // Store in memory cache (L1) - synchronous\n this.memoryCache.set(url, entry);\n\n // Store in IndexedDB (L2) - asynchronous\n return this.indexedDbStorage.put(url, response, timeout).pipe(\n tap(() => {\n // Notify other tabs after successful storage\n this.cacheSyncService.notifyPut(url);\n }),\n catchError(error => {\n console.error('Error storing in cache:', error);\n return of(undefined);\n })\n );\n }\n\n /**\n * Delete a specific cached entry from both memory and IndexedDB as Observable\n * @param url The URL to clear from the cache\n * @returns Observable that completes when deletion is done\n */\n delete(url: string): Observable<void> {\n // Remove from memory cache\n this.memoryCache.delete(url);\n\n // Remove from IndexedDB\n return this.indexedDbStorage.delete(url).pipe(\n tap(() => {\n // Notify other tabs\n this.cacheSyncService.notifyDelete(url);\n }),\n catchError(error => {\n console.error('Error deleting from cache:', error);\n return of(undefined);\n })\n );\n }\n\n /**\n * Clear all cached entries from both memory and IndexedDB as Observable\n * @returns Observable that completes when clearing is done\n */\n clear(): Observable<void> {\n // Clear memory cache\n this.memoryCache.clear();\n\n // Clear IndexedDB\n return this.indexedDbStorage.clear().pipe(\n tap(() => {\n // Notify other tabs\n this.cacheSyncService.notifyClear();\n }),\n catchError(error => {\n console.error('Error clearing cache:', error);\n return of(undefined);\n })\n );\n }\n\n /**\n * Get the number of cached entries in memory\n * Note: This is the memory cache size, not IndexedDB\n */\n size(): number {\n return this.memoryCache.size;\n }\n\n /**\n * Get the total number of cached entries including IndexedDB as Observable\n * @returns Observable of the total number of entries\n */\n totalSize(): Observable<number> {\n return this.indexedDbStorage.count();\n }\n\n /**\n * Remove all expired entries from both memory and IndexedDB as Observable\n * @returns Observable of the number of deleted entries\n */\n pruneExpired(): Observable<number> {\n // Prune memory cache\n this.pruneMemoryCache();\n\n // Prune IndexedDB\n return this.indexedDbStorage.pruneExpired().pipe(\n tap(deletedCount => {\n // Notify other tabs\n this.cacheSyncService.notifyPrune();\n console.log(`Pruned ${deletedCount} expired entries from IndexedDB`);\n }),\n catchError(error => {\n console.error('Error pruning cache:', error);\n return of(0);\n })\n );\n }\n\n /**\n * Prune expired entries from memory cache only\n */\n private pruneMemoryCache(): void {\n const now = Date.now();\n const keysToDelete: string[] = [];\n\n this.memoryCache.forEach((entry, key) => {\n const age = now - entry.timestamp;\n if (age > entry.timeout) {\n keysToDelete.push(key);\n }\n });\n\n keysToDelete.forEach(key => this.memoryCache.delete(key));\n }\n\n /**\n * Get storage usage statistics as Observable\n * @returns Observable of storage statistics\n */\n getStorageStats(): Observable<{\n memorySize: number;\n indexedDbSize: number;\n storageEstimate: { usage: number; quota: number; percentage: number } | null;\n }> {\n return this.indexedDbStorage.count().pipe(\n switchMap(indexedDbSize =>\n this.indexedDbStorage.getStorageEstimate().pipe(\n map(storageEstimate => ({\n memorySize: this.memoryCache.size,\n indexedDbSize,\n storageEstimate\n }))\n )\n ),\n catchError(error => {\n console.error('Error getting storage stats:', error);\n return of({\n memorySize: this.memoryCache.size,\n indexedDbSize: 0,\n storageEstimate: null\n });\n })\n );\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.cacheSyncService.destroy();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of, BehaviorSubject } from 'rxjs';\nimport { map, catchError, tap } from 'rxjs/operators';\n\nexport interface CacheConfig {\n [key: string]: number; // URL pattern -> timeout in milliseconds\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CacheConfigService {\n private config$ = new BehaviorSubject<CacheConfig>({});\n private configLoaded = false;\n\n constructor(private http: HttpClient) {\n // Delay loading to avoid circular dependency issues\n setTimeout(() => this.loadConfig(), 0);\n }\n\n /**\n * Load the cache configuration from assets/cache-map.json\n */\n private loadConfig(): void {\n this.http.get<CacheConfig>('assets/cache-map.json')\n .pipe(\n catchError(error => {\n console.warn('Failed to load cache-map.json, caching will be disabled', error);\n return of({});\n }),\n tap(() => this.configLoaded = true)\n )\n .subscribe(config => this.config$.next(config));\n }\n\n /**\n * Get the cache configuration as an observable\n */\n getConfig(): Observable<CacheConfig> {\n return this.config$.asObservable();\n }\n\n /**\n * Get the cache configuration synchronously (may be empty if not loaded yet)\n */\n getConfigSync(): CacheConfig {\n return this.config$.value;\n }\n\n /**\n * Check if configuration has been loaded\n */\n isConfigLoaded(): boolean {\n return this.configLoaded;\n }\n\n /**\n * Get the timeout for a specific URL based on the configured patterns\n * @param url The URL to check\n * @returns The timeout in milliseconds or null if no match found\n */\n getTimeoutForUrl(url: string): number | null {\n const config = this.config$.value;\n\n // Remove query parameters and hash for matching\n const cleanUrl = url.split('?')[0].split('#')[0];\n\n // Try exact match first\n if (config[cleanUrl] !== undefined) {\n return config[cleanUrl];\n }\n\n // Try pattern matching with placeholders\n const normalizedUrl = this.normalizeApiPrefix(cleanUrl);\n for (const pattern in config) {\n if (this.matchesPattern(normalizedUrl, pattern)) {\n return config[pattern];\n }\n if (this.matchesPartialPath(normalizedUrl, pattern)) {\n return config[pattern];\n }\n }\n\n return null;\n }\n\n /**\n * Normalize API prefix in URL for partial path matching\n * Removes /api/, /API/, /Api, etc. from the beginning of URLs\n * \n * Examples:\n * - \"/api/SomeController/Thing\" -> \"SomeController/Thing\"\n * - \"/API/users/123\" -> \"users/123\"\n * - \"/Api/products\" -> \"products\"\n * - \"/other/path\" -> \"/other/path\" (unchanged)\n * \n * @param url The URL to normalize\n * @returns The normalized URL without API prefix\n */\n private normalizeApiPrefix(url: string): string {\n // Match /api/, /API/, /Api, etc. (case insensitive) at the start\n const apiPrefixRegex = /^\\/api\\//i;\n return url.replace(apiPrefixRegex, '/');\n }\n\n /**\n * Convert a pattern string to a regex pattern\n * Handles placeholders like :id, :param, and wildcards like *\n * \n * @param pattern The pattern string to convert\n * @returns The regex pattern string\n */\n private patternToRegex(pattern: string): string {\n return pattern\n .replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&') // Escape special regex chars\n .replace(/\\*/g, '.*') // * becomes .*\n .replace(/:id/g, '\\\\d+') // :id becomes \\d+\n .replace(/:param/g, '[^/]+') // :param becomes [^/]+\n .replace(/:(\\w+)/g, '[^/]+'); // :anything becomes [^/]+\n }\n\n /**\n * Check if a URL matches a pattern with placeholders\n * Placeholders can be:\n * - :id for numeric IDs\n * - :param for any path segment\n * - * for any sequence of characters\n * \n * Examples:\n * - /api/users/:id matches /api/users/123\n * - /api/products/:id/reviews matches /api/products/456/reviews\n * - /api/search/* matches /api/search/anything/else\n * \n * @param url The URL to test\n * @param pattern The pattern to match against\n * @returns True if the URL matches the pattern\n */\n private matchesPattern(url: string, pattern: string): boolean {\n const regexPattern = '^' + this.patternToRegex(pattern) + '$';\n const regex = new RegExp(regexPattern);\n return regex.test(url);\n }\n\n /**\n * Check if a URL contains a partial path pattern\n * This allows patterns like \"SomeController/Thing\" to match URLs like \"/api/SomeController/Thing\"\n * \n * Examples:\n * - \"SomeController/Thing\" matches \"/api/SomeController/Thing\"\n * - \"users\" matches \"/api/users\" but NOT \"/api/users/123\"\n * - \"users/:id\" matches \"/api/users/123\"\n * - \"products/:id\" matches \"/api/products/123\"\n * \n * @param url The URL to test\n * @param pattern The partial path pattern to match against\n * @returns True if the URL contains the pattern\n */\n private matchesPartialPath(url: string, pattern: string): boolean {\n // Skip patterns that start with / (these are handled by exact/pattern matching)\n if (pattern.startsWith('/')) {\n return false;\n }\n\n // Convert pattern to regex and add word boundaries to ensure exact segment matching\n let regexPattern = this.patternToRegex(pattern);\n\n // Add word boundaries around the pattern to ensure it matches complete path segments\n // This prevents \"users\" from matching \"users/123\" or \"myusers\"\n regexPattern = '\\\\b' + regexPattern + '\\\\b';\n\n const regex = new RegExp(regexPattern);\n return regex.test(url);\n }\n\n /**\n * Check if a URL should be cached\n * @param url The URL to check\n * @returns True if the URL should be cached\n */\n shouldCache(url: string): boolean {\n return this.getTimeoutForUrl(url) !== null;\n }\n}\n\n\n\n","import { inject, Injectable } from '@angular/core';\nimport {\n HttpInterceptorFn,\n HttpResponse,\n HttpInterceptor,\n HttpRequest,\n HttpHandler\n} from '@angular/common/http';\nimport { of, Observable } from 'rxjs';\nimport { tap, switchMap, shareReplay } from 'rxjs/operators';\nimport { HttpCacheService } from './http-cache.service';\nimport { CacheConfigService } from './cache-config.service';\n\n/**\n * Shared caching logic for both functional and class-based interceptors\n */\nfunction processCacheRequest(\n req: HttpRequest<any>,\n next: HttpHandler,\n cacheService: HttpCacheService,\n configService: CacheConfigService,\n debugPrefix: string = '[HTTP Cache]'\n): Observable<any> {\n // Only cache GET requests\n if (req.method !== 'GET') {\n console.log(`${debugPrefix} Skipping non-GET request: ${req.method}`);\n return next.handle(req);\n }\n\n // Only cache requests to /api/ endpoints\n if (!req.url.includes('/api/')) {\n console.log(`${debugPrefix} Skipping non-API request: ${req.url}`);\n return next.handle(req);\n }\n\n // Check if this URL should be cached\n const timeout = configService.getTimeoutForUrl(req.url);\n console.log(`${debugPrefix} Timeout for ${req.url}: ${timeout}ms`);\n if (timeout === null) {\n console.log(`${debugPrefix} No cache timeout configured for: ${req.url}`);\n return next.handle(req);\n }\n\n // Try to get the response from cache (returns Observable)\n return cacheService.get(req.url).pipe(\n switchMap(cachedResponse => {\n if (cachedResponse) {\n console.log(`${debugPrefix} Serving cached response for: ${req.url}`);\n return of(cachedResponse.clone());\n }\n\n // Make the request and cache the response\n console.log(`${debugPrefix} Making HTTP request for: ${req.url} (timeout: ${timeout}ms)`);\n return next.handle(req).pipe(\n tap(event => {\n if (event instanceof HttpResponse) {\n console.log(`${debugPrefix} Caching response for: ${req.url}`);\n // Subscribe to the put operation but don't block the response\n cacheService.put(req.url, event, timeout).subscribe({\n next: () => console.log(`${debugPrefix} Successfully cached: ${req.url}`),\n error: (err) => console.error(`${debugPrefix} Failed to cache: ${req.url}`, err)\n });\n }\n }),\n shareReplay(1) // Prevent duplicate requests\n );\n })\n );\n}\n\n/**\n * Class-based HTTP Cache Interceptor\n * \n * This interceptor caches HTTP GET responses based on URL patterns\n * configured in assets/cache-map.json\n * \n * Features:\n * - Persistent storage using IndexedDB\n * - Cross-tab synchronization using BroadcastChannel\n * - Two-tier caching (memory + IndexedDB)\n * - In-flight request deduplication\n * - Automatic expiration based on configured timeouts\n */\n@Injectable()\nexport class HttpCacheInterceptor implements HttpInterceptor {\n constructor(\n private cacheService: HttpCacheService,\n private configService: CacheConfigService\n ) { }\n\n intercept(req: HttpRequest<any>, next: HttpHandler) {\n return processCacheRequest(req, next, this.cacheService, this.configService);\n }\n}\n\n/**\n * Functional HTTP Cache Interceptor\n * \n * Usage:\n * ```typescript\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideHttpClient(withInterceptors([httpCacheInterceptor]))\n * ]\n * };\n * ```\n */\nexport const httpCacheInterceptor: HttpInterceptorFn = (req, next) => {\n console.log(`[HTTP Cache Interceptor] Intercepting: ${req.method} ${req.url}`);\n\n try {\n console.log(`[HTTP Cache Interceptor] Injecting services for: ${req.url}`);\n const cacheService = inject(HttpCacheService);\n const configService = inject(CacheConfigService);\n console.log(`[HTTP Cache Interceptor] Services injected successfully`);\n\n // Convert functional interceptor signature to class-based signature\n const nextHandler: HttpHandler = {\n handle: (req: HttpRequest<any>) => next(req)\n };\n\n return processCacheRequest(req, nextHandler, cacheService, configService, '[HTTP Cache Interceptor]');\n } catch (error) {\n console.warn('[HTTP Cache] Service injection failed, bypassing cache:', error);\n return next(req);\n }\n};\n","import { Injectable } from '@angular/core';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { delay } from 'rxjs/operators';\nimport { ListPageDataSource } from '../interfaces/list-page-data-source.interface';\nimport { ListPageData } from '../interfaces/list-page-data.interface';\n\n/**\n * Default implementation of ListPageDataSource\n * Provides mock data for development and testing\n */\n@Injectable()\nexport class DefaultListPageDataSource implements ListPageDataSource {\n constructor() { }\n\n getData(params: any): Observable<ListPageData> {\n // Mock data for demo\n const mockItems = [\n { id: 1, name: 'Item 1', status: 'Active' },\n { id: 2, name: 'Item 2', status: 'Inactive' },\n { id: 3, name: 'Item 3', status: 'Active' }\n ];\n\n return new BehaviorSubject({\n items: mockItems,\n totalCount: mockItems.length,\n pageIndex: params.pageIndex,\n pageSize: params.pageSize,\n sortField: params.sortField,\n sortDirection: params.sortDirection,\n filters: params.filters,\n searchQuery: params.searchQuery\n }).pipe(delay(500));\n }\n\n deleteItems(ids: string[]): Observable<boolean> {\n return new BehaviorSubject(true).pipe(delay(500));\n }\n\n exportData(format: string, filters: { [key: string]: any }): Observable<any> {\n return new BehaviorSubject({ success: true, data: 'Export completed' }).pipe(delay(500));\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewEncapsulation, ChangeDetectorRef, Inject, Optional, Injectable } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup } from '@angular/forms';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatSortModule, Sort } from '@angular/material/sort';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatSnackBarModule, MatSnackBar } from '@angular/material/snack-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { Subject, takeUntil, BehaviorSubject, Observable, of } from 'rxjs';\nimport { delay } from 'rxjs/operators';\nimport { InjectionToken } from '@angular/core';\n\n// Injection tokens\nexport const LIST_PAGE_DATA_SOURCE = new InjectionToken<ListPageDataSource>('ListPageDataSource');\n\n// Import interfaces\nimport {\n ListPageConfig,\n ListPageColumn,\n ListPageFilter,\n ListPageData,\n ListPageDataSource\n} from './interfaces';\nimport { DefaultListPageDataSource } from './services/default-list-page-data-source.service';\n\n\n@Component({\n selector: 'amw-list-page',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatTableModule,\n MatPaginatorModule,\n MatSortModule,\n MatCheckboxModule,\n MatButtonModule,\n MatIconModule,\n MatInputModule,\n MatFormFieldModule,\n MatSelectModule,\n MatChipsModule,\n MatDividerModule,\n MatTabsModule,\n MatExpansionModule,\n MatTooltipModule,\n MatSnackBarModule,\n MatProgressSpinnerModule\n ],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-list-page.component.html',\n styleUrl: './amw-list-page.component.scss',\n providers: [\n { provide: LIST_PAGE_DATA_SOURCE, useFactory: () => new DefaultListPageDataSource() }\n ]\n})\nexport class AmwListPageComponent implements OnInit, OnDestroy {\n @Input() config: ListPageConfig = { columns: [] };\n @Input() dataSource?: ListPageDataSource;\n @Input() realTimeUpdates = false;\n @Input() autoRefresh = false;\n @Input() refreshInterval = 30000; // 30 seconds\n\n @Output() itemSelect = new EventEmitter<{ item: any; selected: boolean }>();\n @Output() actionClick = new EventEmitter<{ action: string; item: any }>();\n @Output() bulkActionClick = new EventEmitter<{ action: string; items: any[] }>();\n @Output() filterChange = new EventEmitter<{ filters: { [key: string]: any }; searchQuery: string }>();\n @Output() sortChange = new EventEmitter<{ field: string; direction: 'asc' | 'desc' }>();\n @Output() pageChange = new EventEmitter<{ pageIndex: number; pageSize: number }>();\n\n // Current state\n currentConfig: ListPageConfig = { columns: [] };\n currentData: ListPageData = {\n items: [],\n totalCount: 0,\n pageIndex: 0,\n pageSize: 10,\n sortField: undefined,\n sortDirection: 'asc',\n filters: {},\n searchQuery: ''\n };\n\n // UI state\n loading = false;\n error: string | null = null;\n selectedItems: Set<any> = new Set();\n searchQuery = '';\n currentFilters: { [key: string]: any } = {};\n\n // Subject for component destruction\n private destroy$ = new Subject<void>();\n\n constructor(\n private cdr: ChangeDetectorRef,\n private snackBar: MatSnackBar,\n @Optional() @Inject(LIST_PAGE_DATA_SOURCE) private injectedDataSource?: ListPageDataSource\n ) { }\n\n ngOnInit(): void {\n this.initializeConfig();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private initializeConfig(): void {\n this.currentConfig = {\n title: 'List Page',\n subtitle: 'Browse and manage data',\n showSearch: true,\n showFilters: true,\n showBulkActions: true,\n showColumnVisibility: true,\n showDensity: true,\n showExport: true,\n showRefresh: true,\n customActions: [],\n customClasses: [],\n customStyles: {},\n ...this.config\n };\n }\n\n private loadData(): void {\n this.loading = true;\n this.error = null;\n\n const dataSource = this.dataSource || this.injectedDataSource;\n if (!dataSource) {\n this.error = 'No data source provided';\n this.loading = false;\n return;\n }\n\n const params = {\n pageIndex: this.currentData.pageIndex,\n pageSize: this.currentData.pageSize,\n sortField: this.currentData.sortField,\n sortDirection: this.currentData.sortDirection,\n filters: this.currentFilters,\n searchQuery: this.searchQuery\n };\n\n dataSource.getData(params).pipe(\n takeUntil(this.destroy$)\n ).subscribe({\n next: (data) => {\n this.currentData = data;\n this.loading = false;\n this.cdr.detectChanges();\n },\n error: (err) => {\n this.error = err.message || 'Failed to load data';\n this.loading = false;\n this.cdr.detectChanges();\n }\n });\n }\n\n // Public methods for template\n onSearch(): void {\n this.currentData.pageIndex = 0;\n this.loadData();\n }\n\n onFilterChange(): void {\n this.currentData.pageIndex = 0;\n this.loadData();\n }\n\n onSortChange(event: Sort): void {\n this.currentData.sortField = event.active;\n this.currentData.sortDirection = event.direction as 'asc' | 'desc';\n this.loadData();\n }\n\n onPageChange(event: PageEvent): void {\n this.currentData.pageIndex = event.pageIndex;\n this.currentData.pageSize = event.pageSize;\n this.loadData();\n }\n\n onItemSelect(item: any, selected: boolean): void {\n if (selected) {\n this.selectedItems.add(item);\n } else {\n this.selectedItems.delete(item);\n }\n this.itemSelect.emit({ item, selected });\n }\n\n onSelectAll(selected: boolean): void {\n if (selected) {\n this.currentData.items.forEach(item => this.selectedItems.add(item));\n } else {\n this.selectedItems.clear();\n }\n }\n\n isSelected(item: any): boolean {\n return this.selectedItems.has(item);\n }\n\n isAllSelected(): boolean {\n return this.currentData.items.length > 0 && this.selectedItems.size === this.currentData.items.length;\n }\n\n isIndeterminate(): boolean {\n return this.selectedItems.size > 0 && this.selectedItems.size < this.currentData.items.length;\n }\n\n onBulkAction(action: any): void {\n const selectedItems = Array.from(this.selectedItems);\n action.onClick(selectedItems);\n this.bulkActionClick.emit({ action: action.key, items: selectedItems });\n }\n\n onActionClick(action: string, item: any): void {\n this.actionClick.emit({ action, item });\n }\n\n onRefresh(): void {\n this.loadData();\n }\n\n onExport(): void {\n try {\n const displayedColumns = this.getDisplayedColumns();\n const headers = displayedColumns.map(key => this.getColumnTitle(key));\n\n // Create CSV content\n const csvRows = [headers.join(',')];\n\n // Add data rows\n this.currentData.items.forEach(item => {\n const row = displayedColumns.map(key => {\n const value = item[key];\n // Handle values that might contain commas, quotes, or newlines\n if (value === null || value === undefined) {\n return '';\n }\n const stringValue = String(value);\n if (stringValue.includes(',') || stringValue.includes('\"') || stringValue.includes('\\n')) {\n return `\"${stringValue.replace(/\"/g, '\"\"')}\"`;\n }\n return stringValue;\n });\n csvRows.push(row.join(','));\n });\n\n const csvContent = csvRows.join('\\n');\n\n // Create and download the file\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const link = document.createElement('a');\n const url = URL.createObjectURL(blob);\n const fileName = `${this.currentConfig.title || 'export'}_${new Date().toISOString().split('T')[0]}.csv`;\n\n link.setAttribute('href', url);\n link.setAttribute('download', fileName);\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n\n this.snackBar.open(`Exported ${this.currentData.items.length} items to ${fileName}`, 'Close', { duration: 3000 });\n } catch (error) {\n console.error('Export failed:', error);\n this.snackBar.open('Export failed. Please try again.', 'Close', { duration: 3000 });\n }\n }\n\n getDisplayedColumns(): string[] {\n return this.currentConfig.columns\n .filter(col => col.visible !== false)\n .map(col => col.key);\n }\n\n getColumnTitle(key: string): string {\n const column = this.currentConfig.columns.find(col => col.key === key);\n return column?.title || key;\n }\n\n isColumnSortable(key: string): boolean {\n const column = this.currentConfig.columns.find(col => col.key === key);\n return column?.sortable !== false;\n }\n\n hasActiveFilters(): boolean {\n return Object.keys(this.currentFilters).length > 0 || this.searchQuery.length > 0;\n }\n\n getActiveFilterCount(): number {\n let count = this.searchQuery.length > 0 ? 1 : 0;\n count += Object.keys(this.currentFilters).length;\n return count;\n }\n\n clearFilters(): void {\n this.currentFilters = {};\n this.searchQuery = '';\n this.onFilterChange();\n }\n\n getRowId(index: number, item: any): any {\n return item.id || index;\n }\n}","<div class=\"amw-list-page\" [ngClass]=\"currentConfig.customClasses\" [ngStyle]=\"currentConfig.customStyles\">\n <!-- Header -->\n <div class=\"amw-list-page__header\">\n <div class=\"amw-list-page__header-content\">\n <div class=\"amw-list-page__header-text\">\n <h1 class=\"amw-list-page__title\">{{ currentConfig.title }}</h1>\n @if (currentConfig.subtitle) {\n <p class=\"amw-list-page__subtitle\">{{ currentConfig.subtitle }}</p>\n }\n </div>\n\n <div class=\"amw-list-page__header-actions\">\n <button mat-icon-button (click)=\"onRefresh()\" matTooltip=\"Refresh\">\n <mat-icon>refresh</mat-icon>\n </button>\n <button mat-icon-button (click)=\"onExport()\" matTooltip=\"Export\">\n <mat-icon>download</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <!-- Search and Filters -->\n @if (currentConfig.showSearch || currentConfig.showFilters) {\n <div class=\"amw-list-page__controls\">\n @if (currentConfig.showSearch) {\n <div class=\"amw-list-page__search\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Search</mat-label>\n <input matInput\n name=\"listSearchQuery\"\n [(ngModel)]=\"searchQuery\"\n (keyup.enter)=\"onSearch()\"\n placeholder=\"Search...\">\n <mat-icon matSuffix>search</mat-icon>\n </mat-form-field>\n <button mat-raised-button color=\"primary\" (click)=\"onSearch()\">Search</button>\n </div>\n }\n @if (currentConfig.showFilters && currentConfig.filters && currentConfig.filters.length > 0) {\n <div class=\"amw-list-page__filters\">\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>filter_list</mat-icon>\n Filters\n @if (hasActiveFilters()) {\n <span class=\"amw-list-page__filter-count\">\n ({{ getActiveFilterCount() }})\n </span>\n }\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div class=\"amw-list-page__filters-content\">\n <div class=\"amw-list-page__filters-grid\">\n @for (filter of currentConfig.filters; track filter) {\n <div class=\"amw-list-page__filter-field\">\n @if (filter.type === 'text') {\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ filter.label }}</mat-label>\n <input matInput\n name=\"listFilter_{{ filter.key }}\"\n [(ngModel)]=\"currentFilters[filter.key]\"\n [placeholder]=\"filter.placeholder || ''\">\n </mat-form-field>\n }\n @if (filter.type === 'select') {\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ filter.label }}</mat-label>\n <mat-select [(ngModel)]=\"currentFilters[filter.key]\">\n @for (option of filter.options; track option) {\n <mat-option [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n </div>\n }\n </div>\n <div class=\"amw-list-page__filters-actions\">\n <button mat-button (click)=\"onFilterChange()\">Apply Filters</button>\n <button mat-button (click)=\"clearFilters()\">Clear All</button>\n </div>\n </div>\n </mat-expansion-panel>\n </div>\n }\n </div>\n }\n\n <!-- Bulk Actions -->\n @if (currentConfig.showBulkActions && selectedItems.size > 0) {\n <div class=\"amw-list-page__bulk-actions\">\n <div class=\"amw-list-page__bulk-actions-content\">\n <span class=\"amw-list-page__bulk-actions-text\">\n {{ selectedItems.size }} item(s) selected\n </span>\n <div class=\"amw-list-page__bulk-actions-buttons\">\n @for (action of currentConfig.bulkActions; track action) {\n <button\n mat-button\n [color]=\"action.color || 'primary'\"\n (click)=\"onBulkAction(action)\">\n @if (action.icon) {\n <mat-icon>{{ action.icon }}</mat-icon>\n }\n {{ action.label }}\n </button>\n }\n </div>\n </div>\n </div>\n }\n\n <!-- Data Table -->\n <div class=\"amw-list-page__table-container\">\n <table mat-table [dataSource]=\"currentData.items\" class=\"amw-list-page__table\">\n <!-- Selection Column -->\n @if (currentConfig.showBulkActions) {\n <ng-container matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef>\n <mat-checkbox [checked]=\"isAllSelected()\"\n [indeterminate]=\"isIndeterminate()\"\n (change)=\"onSelectAll($event.checked)\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox [checked]=\"isSelected(row)\"\n (change)=\"onItemSelect(row, $event.checked)\">\n </mat-checkbox>\n </td>\n </ng-container>\n }\n\n <!-- Data Columns -->\n @for (column of currentConfig.columns; track column) {\n <ng-container [matColumnDef]=\"column.key\">\n <th mat-header-cell *matHeaderCellDef\n [mat-sort-header]=\"isColumnSortable(column.key) ? column.key : ''\">\n {{ column.title }}\n </th>\n <td mat-cell *matCellDef=\"let row\">\n {{ row[column.key] }}\n </td>\n </ng-container>\n }\n\n <!-- Actions Column -->\n @if (currentConfig.customActions && currentConfig.customActions.length > 0) {\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let row\">\n @for (action of currentConfig.customActions; track action) {\n <button\n mat-icon-button\n (click)=\"onActionClick(action.key, row)\"\n [matTooltip]=\"action.label\">\n <mat-icon>{{ action.icon }}</mat-icon>\n </button>\n }\n </td>\n </ng-container>\n }\n\n <tr mat-header-row *matHeaderRowDef=\"getDisplayedColumns()\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: getDisplayedColumns()\"></tr>\n </table>\n\n <!-- Loading State -->\n @if (loading) {\n <div class=\"amw-list-page__loading\">\n <mat-spinner diameter=\"40\"></mat-spinner>\n <p>Loading data...</p>\n </div>\n }\n\n <!-- Error State -->\n @if (error && !loading) {\n <div class=\"amw-list-page__error\">\n <mat-icon>error</mat-icon>\n <p>{{ error }}</p>\n <button mat-raised-button color=\"primary\" (click)=\"onRefresh()\">Retry</button>\n </div>\n }\n\n <!-- Empty State -->\n @if (!loading && !error && currentData.items.length === 0) {\n <div class=\"amw-list-page__empty\">\n <mat-icon>inbox</mat-icon>\n <p>No data available</p>\n </div>\n }\n </div>\n\n <!-- Pagination -->\n @if (!loading && !error && currentData.totalCount > 0) {\n <mat-paginator\n [length]=\"currentData.totalCount\"\n [pageIndex]=\"currentData.pageIndex\"\n [pageSize]=\"currentData.pageSize\"\n [pageSizeOptions]=\"[5, 10, 25, 50, 100]\"\n (page)=\"onPageChange($event)\">\n </mat-paginator>\n }\n</div>","import { Injectable } from '@angular/core';\nimport { Observable, BehaviorSubject, of } from 'rxjs';\nimport { delay } from 'rxjs/operators';\nimport { DetailPageDataSource } from '../interfaces/detail-page-data-source.interface';\nimport { DetailPageData } from '../interfaces/detail-page-data.interface';\n\n/**\n * Default implementation of DetailPageDataSource\n * Provides mock data for development and testing\n */\n@Injectable()\nexport class DefaultDetailPageDataSource implements DetailPageDataSource {\n constructor() { }\n\n getData(id: string): Observable<DetailPageData> {\n // Mock data for demo\n const mockItem = { id, name: 'Sample Item', description: 'This is a sample item' };\n return new BehaviorSubject({\n item: mockItem,\n sections: [],\n relatedData: []\n }).pipe(delay(500));\n }\n\n deleteItem(id: string): Observable<boolean> {\n return of(true).pipe(delay(500));\n }\n\n refreshItem(id: string): Observable<DetailPageData> {\n return this.getData(id);\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewEncapsulation, ChangeDetectorRef, Inject, Optional, Injectable } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatSnackBarModule, MatSnackBar } from '@angular/material/snack-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { Subject, takeUntil, BehaviorSubject, Observable, of } from 'rxjs';\nimport { delay } from 'rxjs/operators';\n\n// Import interfaces\nimport {\n DetailPageConfig,\n DetailPageField,\n DetailPageRelatedData,\n DetailPageColumn,\n DetailPageData,\n DetailPageDataSource\n} from './interfaces';\nimport { DefaultDetailPageDataSource } from './services/default-detail-page-data-source.service';\n\n\n@Component({\n selector: 'amw-detail-page',\n standalone: true,\n imports: [\n CommonModule,\n MatCardModule,\n MatButtonModule,\n MatIconModule,\n MatDividerModule,\n MatTabsModule,\n MatExpansionModule,\n MatTooltipModule,\n MatSnackBarModule,\n MatProgressSpinnerModule\n ],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-detail-page.component.html',\n styleUrl: './amw-detail-page.component.scss',\n providers: [\n { provide: 'DETAIL_PAGE_DATA_SOURCE', useFactory: () => new DefaultDetailPageDataSource() }\n ]\n})\nexport class AmwDetailPageComponent implements OnInit, OnDestroy {\n @Input() config: DetailPageConfig = { fields: [] };\n @Input() itemId?: string;\n @Input() dataSource?: DetailPageDataSource;\n @Input() realTimeUpdates = false;\n\n @Output() editClick = new EventEmitter<any>();\n @Output() deleteClick = new EventEmitter<any>();\n @Output() printClick = new EventEmitter<any>();\n @Output() shareClick = new EventEmitter<any>();\n @Output() actionClick = new EventEmitter<{ action: string; item: any }>();\n\n // Current state\n currentConfig: DetailPageConfig = { fields: [] };\n currentData: DetailPageData = {\n item: {},\n sections: [],\n relatedData: []\n };\n\n // UI state\n loading = false;\n error: string | null = null;\n\n // Subject for component destruction\n private destroy$ = new Subject<void>();\n\n constructor(\n private cdr: ChangeDetectorRef,\n private snackBar: MatSnackBar,\n @Optional() @Inject('DETAIL_PAGE_DATA_SOURCE') private injectedDataSource?: DetailPageDataSource\n ) { }\n\n ngOnInit(): void {\n this.initializeConfig();\n if (this.itemId) {\n this.loadData();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private initializeConfig(): void {\n this.currentConfig = {\n title: 'Detail Page',\n subtitle: 'View item details',\n showEditButton: true,\n showDeleteButton: true,\n showPrintButton: false,\n showShareButton: false,\n customActions: [],\n customClasses: [],\n customStyles: {},\n ...this.config\n };\n }\n\n private loadData(): void {\n if (!this.itemId) return;\n\n this.loading = true;\n this.error = null;\n\n const dataSource = this.dataSource || this.injectedDataSource;\n if (!dataSource) {\n this.error = 'No data source provided';\n this.loading = false;\n return;\n }\n\n dataSource.getData(this.itemId).pipe(\n takeUntil(this.destroy$)\n ).subscribe({\n next: (data) => {\n this.currentData = data;\n this.loading = false;\n this.cdr.detectChanges();\n },\n error: (err) => {\n this.error = err.message || 'Failed to load data';\n this.loading = false;\n this.cdr.detectChanges();\n }\n });\n }\n\n // Public methods for template\n onEdit(): void {\n this.editClick.emit(this.currentData.item);\n }\n\n onDelete(): void {\n this.deleteClick.emit(this.currentData.item);\n }\n\n onPrint(): void {\n this.printClick.emit(this.currentData.item);\n }\n\n onShare(): void {\n this.shareClick.emit(this.currentData.item);\n }\n\n onActionClick(action: string): void {\n this.actionClick.emit({ action, item: this.currentData.item });\n }\n\n onRefresh(): void {\n this.loadData();\n }\n\n isFieldVisible(field: DetailPageField): boolean {\n return field.visible !== false;\n }\n\n isRelatedDataVisible(related: DetailPageRelatedData): boolean {\n return related.visible !== false;\n }\n\n getFieldValue(field: DetailPageField): any {\n return this.currentData.item[field.key] || field.value;\n }\n\n getColumnValue(row: any, column: DetailPageColumn): any {\n return row[column.key];\n }\n}","<div class=\"amw-detail-page\" [ngClass]=\"currentConfig.customClasses\" [ngStyle]=\"currentConfig.customStyles\">\n <!-- Header -->\n <div class=\"amw-detail-page__header\">\n <div class=\"amw-detail-page__header-content\">\n <div class=\"amw-detail-page__header-text\">\n <h1 class=\"amw-detail-page__title\">{{ currentConfig.title }}</h1>\n @if (currentConfig.subtitle) {\n <p class=\"amw-detail-page__subtitle\">{{ currentConfig.subtitle }}</p>\n }\n </div>\n\n <div class=\"amw-detail-page__header-actions\">\n <button mat-icon-button (click)=\"onRefresh()\" matTooltip=\"Refresh\">\n <mat-icon>refresh</mat-icon>\n </button>\n @if (currentConfig.showEditButton) {\n <button mat-raised-button color=\"primary\" (click)=\"onEdit()\">\n <mat-icon>edit</mat-icon>\n Edit\n </button>\n }\n @if (currentConfig.showDeleteButton) {\n <button mat-raised-button color=\"warn\" (click)=\"onDelete()\">\n <mat-icon>delete</mat-icon>\n Delete\n </button>\n }\n @if (currentConfig.showPrintButton) {\n <button mat-raised-button (click)=\"onPrint()\">\n <mat-icon>print</mat-icon>\n Print\n </button>\n }\n @if (currentConfig.showShareButton) {\n <button mat-raised-button (click)=\"onShare()\">\n <mat-icon>share</mat-icon>\n Share\n </button>\n }\n </div>\n </div>\n </div>\n\n <!-- Loading State -->\n @if (loading) {\n <div class=\"amw-detail-page__loading\">\n <mat-spinner diameter=\"40\"></mat-spinner>\n <p>Loading data...</p>\n </div>\n }\n\n <!-- Error State -->\n @if (error && !loading) {\n <div class=\"amw-detail-page__error\">\n <mat-icon>error</mat-icon>\n <p>{{ error }}</p>\n <button mat-raised-button color=\"primary\" (click)=\"onRefresh()\">Retry</button>\n </div>\n }\n\n <!-- Content -->\n @if (!loading && !error) {\n <div class=\"amw-detail-page__content\">\n <!-- Main Details -->\n <mat-card class=\"amw-detail-page__main-card\">\n <mat-card-header>\n <mat-card-title>Details</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <div class=\"amw-detail-page__fields\">\n @for (field of currentConfig.fields; track field) {\n <div\n class=\"amw-detail-page__field\"\n [style.display]=\"isFieldVisible(field) ? 'block' : 'none'\">\n <div class=\"amw-detail-page__field-label\">{{ field.label }}</div>\n <div class=\"amw-detail-page__field-value\">{{ getFieldValue(field) }}</div>\n </div>\n }\n </div>\n </mat-card-content>\n </mat-card>\n <!-- Related Data -->\n @if (currentConfig.relatedData && currentConfig.relatedData.length > 0) {\n <div class=\"amw-detail-page__related\">\n @for (related of currentConfig.relatedData; track related) {\n <mat-card\n class=\"amw-detail-page__related-card\"\n [style.display]=\"isRelatedDataVisible(related) ? 'block' : 'none'\">\n <mat-card-header>\n <mat-card-title>{{ related.title }}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <div class=\"amw-detail-page__related-table\">\n <table>\n <thead>\n <tr>\n @for (column of related.columns; track column) {\n <th>{{ column.title }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of related.items; track row) {\n <tr>\n @for (column of related.columns; track column) {\n <td>\n {{ getColumnValue(row, column) }}\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n </mat-card-content>\n </mat-card>\n }\n </div>\n }\n </div>\n }\n</div>","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewEncapsulation, ChangeDetectorRef, Inject, Optional, Injectable } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatSnackBarModule, MatSnackBar } from '@angular/material/snack-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { Subject, takeUntil, BehaviorSubject, Observable, of } from 'rxjs';\nimport { delay } from 'rxjs/operators';\n\n// Import interfaces\nimport {\n FormPageConfig,\n FormPageSection,\n FormPageField,\n FormPageData,\n FormPageDataSource\n} from './interfaces';\n\n// Default data source implementation\n@Injectable()\nexport class DefaultFormPageDataSource implements FormPageDataSource {\n constructor() { }\n\n getData(id?: string): Observable<FormPageData> {\n // Mock data for demo\n const mockItem = { id: id || '1', name: 'Sample Item', description: 'This is a sample item' };\n return new BehaviorSubject({\n item: mockItem,\n sections: [],\n isValid: true,\n errors: {}\n }).pipe(delay(500));\n }\n\n saveData(data: any): Observable<boolean> {\n return of(true).pipe(delay(500));\n }\n\n deleteData(id: string): Observable<boolean> {\n return of(true).pipe(delay(500));\n }\n\n validateData(data: any): Observable<{ isValid: boolean; errors: { [key: string]: string } }> {\n return of({ isValid: true, errors: {} }).pipe(delay(500));\n }\n}\n\n@Component({\n selector: 'amw-form-page',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatCardModule,\n MatButtonModule,\n MatIconModule,\n MatInputModule,\n MatFormFieldModule,\n MatSelectModule,\n MatCheckboxModule,\n MatRadioModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatChipsModule,\n MatDividerModule,\n MatTabsModule,\n MatExpansionModule,\n MatTooltipModule,\n MatSnackBarModule,\n MatProgressSpinnerModule\n ],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-form-page.component.html',\n styleUrl: './amw-form-page.component.scss',\n providers: [\n { provide: 'FORM_PAGE_DATA_SOURCE', useFactory: () => new DefaultFormPageDataSource() }\n ]\n})\nexport class AmwFormPageComponent implements OnInit, OnDestroy {\n @Input() config: FormPageConfig = { sections: [] };\n @Input() itemId?: string;\n @Input() dataSource?: FormPageDataSource;\n @Input() autoSave = false;\n @Input() autoSaveInterval = 30000; // 30 seconds\n\n @Output() formSubmit = new EventEmitter<any>();\n @Output() formChange = new EventEmitter<any>();\n @Output() formCancel = new EventEmitter<void>();\n @Output() formReset = new EventEmitter<void>();\n @Output() formPreview = new EventEmitter<any>();\n @Output() formPrint = new EventEmitter<any>();\n @Output() customAction = new EventEmitter<{ action: string; data: any }>();\n\n // Current state\n currentConfig: FormPageConfig = { sections: [] };\n currentData: FormPageData = {\n item: {},\n sections: [],\n isValid: true,\n errors: {}\n };\n\n // Form\n form: FormGroup = new FormGroup({});\n\n // UI state\n loading = false;\n saving = false;\n error: string | null = null;\n\n // Subject for component destruction\n private destroy$ = new Subject<void>();\n\n constructor(\n private cdr: ChangeDetectorRef,\n private snackBar: MatSnackBar,\n private fb: FormBuilder,\n @Optional() @Inject('FORM_PAGE_DATA_SOURCE') private injectedDataSource?: FormPageDataSource\n ) { }\n\n ngOnInit(): void {\n this.initializeConfig();\n this.initializeForm();\n if (this.itemId) {\n this.loadData();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private initializeConfig(): void {\n this.currentConfig = {\n title: 'Form Page',\n subtitle: 'Create or edit data',\n mode: 'create',\n showSaveButton: true,\n showCancelButton: true,\n showResetButton: true,\n showPreviewButton: false,\n showPrintButton: false,\n autoSave: false,\n customActions: [],\n customClasses: [],\n customStyles: {},\n ...this.config\n };\n }\n\n private initializeForm(): void {\n const controls: { [key: string]: any } = {};\n\n this.currentConfig.sections.forEach(section => {\n section.fields.forEach(field => {\n const validators = [];\n if (field.required) {\n validators.push(Validators.required);\n }\n if (field.validation) {\n validators.push(field.validation);\n }\n\n controls[field.key] = [field.value || '', validators];\n });\n });\n\n this.form = this.fb.group(controls);\n }\n\n loadData(): void {\n if (!this.itemId) return;\n\n this.loading = true;\n this.error = null;\n\n const dataSource = this.dataSource || this.injectedDataSource;\n if (!dataSource) {\n this.error = 'No data source provided';\n this.loading = false;\n return;\n }\n\n dataSource.getData(this.itemId).pipe(\n takeUntil(this.destroy$)\n ).subscribe({\n next: (data) => {\n this.currentData = data;\n this.form.patchValue(data.item);\n this.loading = false;\n this.cdr.detectChanges();\n },\n error: (err) => {\n this.error = err.message || 'Failed to load data';\n this.loading = false;\n this.cdr.detectChanges();\n }\n });\n }\n\n // Public methods for template\n onSave(): void {\n if (this.form.valid) {\n this.saving = true;\n const formData = this.form.value;\n\n const dataSource = this.dataSource || this.injectedDataSource;\n if (dataSource) {\n dataSource.saveData(formData).pipe(\n takeUntil(this.destroy$)\n ).subscribe({\n next: (success) => {\n this.saving = false;\n if (success) {\n this.snackBar.open('Data saved successfully', 'Close', { duration: 3000 });\n this.formSubmit.emit(formData);\n } else {\n this.snackBar.open('Failed to save data', 'Close', { duration: 3000 });\n }\n },\n error: (err) => {\n this.saving = false;\n this.snackBar.open('Error saving data', 'Close', { duration: 3000 });\n }\n });\n } else {\n this.saving = false;\n this.formSubmit.emit(formData);\n }\n }\n }\n\n onCancel(): void {\n this.formCancel.emit();\n }\n\n onReset(): void {\n this.form.reset();\n this.formReset.emit();\n }\n\n onPreview(): void {\n // Emit preview event with current form data\n const formData = this.form.value;\n this.formPreview.emit(formData);\n this.snackBar.open('Preview mode - check console or handle formPreview event', 'Close', { duration: 3000 });\n console.log('Form Preview Data:', formData);\n }\n\n onPrint(): void {\n // Emit print event and trigger browser print dialog\n const formData = this.form.value;\n this.formPrint.emit(formData);\n\n // Trigger browser print dialog after a short delay to allow event handling\n setTimeout(() => {\n window.print();\n }, 100);\n }\n\n onActionClick(action: string): void {\n // Emit custom action event with action name and form data\n const formData = this.form.value;\n this.customAction.emit({ action, data: formData });\n this.snackBar.open(`Custom action '${action}' triggered`, 'Close', { duration: 3000 });\n }\n\n isSectionVisible(section: FormPageSection): boolean {\n return section.visible !== false;\n }\n\n isFieldVisible(field: FormPageField): boolean {\n return field.visible !== false;\n }\n\n getFieldError(field: FormPageField): string {\n const control = this.form.get(field.key);\n if (control && control.errors && control.touched) {\n if (control.errors['required']) return `${field.label} is required`;\n if (control.errors['email']) return 'Please enter a valid email';\n if (control.errors['minlength']) return `Minimum length is ${control.errors['minlength'].requiredLength}`;\n if (control.errors['maxlength']) return `Maximum length is ${control.errors['maxlength'].requiredLength}`;\n }\n return '';\n }\n\n addChip(field: FormPageField, event: any): void {\n const value = event.value;\n if (value && value.trim()) {\n const currentValue = this.form.get(field.key)?.value || [];\n this.form.get(field.key)?.setValue([...currentValue, value.trim()]);\n event.chipInput.clear();\n }\n }\n\n removeChip(field: FormPageField, chip: any): void {\n const currentValue = this.form.get(field.key)?.value || [];\n const index = currentValue.indexOf(chip);\n if (index >= 0) {\n currentValue.splice(index, 1);\n this.form.get(field.key)?.setValue([...currentValue]);\n }\n }\n}","<div class=\"amw-form-page\" [ngClass]=\"currentConfig.customClasses\" [ngStyle]=\"currentConfig.customStyles\">\n <!-- Header -->\n <div class=\"amw-form-page__header\">\n <div class=\"amw-form-page__header-content\">\n <div class=\"amw-form-page__header-text\">\n <h1 class=\"amw-form-page__title\">{{ currentConfig.title }}</h1>\n @if (currentConfig.subtitle) {\n <p class=\"amw-form-page__subtitle\">{{ currentConfig.subtitle }}</p>\n }\n </div>\n\n <div class=\"amw-form-page__header-actions\">\n @if (currentConfig.showSaveButton) {\n <button mat-raised-button color=\"primary\" (click)=\"onSave()\"\n [disabled]=\"!form.valid || saving\">\n <mat-icon>save</mat-icon>\n {{ saving ? 'Saving...' : 'Save' }}\n </button>\n }\n @if (currentConfig.showCancelButton) {\n <button mat-raised-button (click)=\"onCancel()\">\n <mat-icon>cancel</mat-icon>\n Cancel\n </button>\n }\n @if (currentConfig.showResetButton) {\n <button mat-raised-button (click)=\"onReset()\">\n <mat-icon>refresh</mat-icon>\n Reset\n </button>\n }\n @if (currentConfig.showPreviewButton) {\n <button mat-raised-button (click)=\"onPreview()\">\n <mat-icon>preview</mat-icon>\n Preview\n </button>\n }\n @if (currentConfig.showPrintButton) {\n <button mat-raised-button (click)=\"onPrint()\">\n <mat-icon>print</mat-icon>\n Print\n </button>\n }\n </div>\n </div>\n </div>\n\n <!-- Loading State -->\n @if (loading) {\n <div class=\"amw-form-page__loading\">\n <mat-spinner diameter=\"40\"></mat-spinner>\n <p>Loading data...</p>\n </div>\n }\n\n <!-- Error State -->\n @if (error && !loading) {\n <div class=\"amw-form-page__error\">\n <mat-icon>error</mat-icon>\n <p>{{ error }}</p>\n <button mat-raised-button color=\"primary\" (click)=\"loadData()\">Retry</button>\n </div>\n }\n\n <!-- Form Content -->\n @if (!loading && !error) {\n <form [formGroup]=\"form\" (ngSubmit)=\"onSave()\" class=\"amw-form-page__form\">\n <div class=\"amw-form-page__sections\">\n @for (section of currentConfig.sections; track section) {\n <mat-card\n class=\"amw-form-page__section\"\n [style.display]=\"isSectionVisible(section) ? 'block' : 'none'\">\n <mat-card-header>\n <mat-card-title>{{ section.title }}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <div class=\"amw-form-page__fields\">\n @for (field of section.fields; track field) {\n <div\n class=\"amw-form-page__field\"\n [style.display]=\"isFieldVisible(field) ? 'block' : 'none'\">\n <!-- Text Input -->\n @if (field.type === 'text' || field.type === 'email' || field.type === 'password') {\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ field.label }}</mat-label>\n <input matInput\n [formControlName]=\"field.key\"\n [type]=\"field.type\"\n [placeholder]=\"field.placeholder || ''\"\n [maxlength]=\"field.validation?.maxlength || null\">\n <mat-error>{{ getFieldError(field) }}</mat-error>\n </mat-form-field>\n }\n <!-- Number Input -->\n @if (field.type === 'number') {\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ field.label }}</mat-label>\n <input matInput\n type=\"number\"\n [formControlName]=\"field.key\"\n [placeholder]=\"field.placeholder || ''\"\n [min]=\"field.validation?.min || null\"\n [max]=\"field.validation?.max || null\">\n <mat-error>{{ getFieldError(field) }}</mat-error>\n </mat-form-field>\n }\n <!-- Textarea -->\n @if (field.type === 'textarea') {\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ field.label }}</mat-label>\n <textarea matInput\n [formControlName]=\"field.key\"\n [placeholder]=\"field.placeholder || ''\"\n [maxlength]=\"field.validation?.maxlength || null\"\n rows=\"4\"></textarea>\n <mat-error>{{ getFieldError(field) }}</mat-error>\n </mat-form-field>\n }\n <!-- Select -->\n @if (field.type === 'select') {\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ field.label }}</mat-label>\n <mat-select [formControlName]=\"field.key\">\n @for (option of field.options; track option) {\n <mat-option [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n }\n </mat-select>\n <mat-error>{{ getFieldError(field) }}</mat-error>\n </mat-form-field>\n }\n <!-- Checkbox -->\n @if (field.type === 'checkbox') {\n <div class=\"amw-form-page__checkbox\">\n <mat-checkbox [formControlName]=\"field.key\">\n {{ field.label }}\n </mat-checkbox>\n <mat-error>{{ getFieldError(field) }}</mat-error>\n </div>\n }\n <!-- Radio Group -->\n @if (field.type === 'radio') {\n <div class=\"amw-form-page__radio\">\n <label class=\"amw-form-page__radio-label\">{{ field.label }}</label>\n <mat-radio-group [formControlName]=\"field.key\">\n @for (option of field.options; track option) {\n <mat-radio-button [value]=\"option.value\">\n {{ option.label }}\n </mat-radio-button>\n }\n </mat-radio-group>\n <mat-error>{{ getFieldError(field) }}</mat-error>\n </div>\n }\n <!-- Date Picker -->\n @if (field.type === 'date') {\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ field.label }}</mat-label>\n <input matInput\n [matDatepicker]=\"picker\"\n [formControlName]=\"field.key\"\n [placeholder]=\"field.placeholder || ''\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error>{{ getFieldError(field) }}</mat-error>\n </mat-form-field>\n }\n <!-- Chips -->\n @if (field.type === 'chips') {\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ field.label }}</mat-label>\n <mat-chip-grid #chipGrid [formControlName]=\"field.key\">\n @for (chip of form.get(field.key)?.value || []; track chip) {\n <mat-chip-row\n (removed)=\"removeChip(field, chip)\">\n {{ chip }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n <input placeholder=\"Add new item...\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"[13, 188]\"\n (matChipInputTokenEnd)=\"addChip(field, $event)\">\n </mat-chip-grid>\n <mat-error>{{ getFieldError(field) }}</mat-error>\n </mat-form-field>\n }\n </div>\n }\n </div>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </form>\n }\n</div>","import { Injectable } from '@angular/core';\nimport { Observable, BehaviorSubject, of } from 'rxjs';\nimport { delay } from 'rxjs/operators';\nimport { SearchPageDataSource } from '../interfaces/search-page-data-source.interface';\nimport { SearchData } from '../interfaces/search-data.interface';\n\n/**\n * Default implementation of SearchPageDataSource\n * Provides mock data for development and testing\n */\n@Injectable()\nexport class DefaultSearchPageDataSource implements SearchPageDataSource {\n constructor() { }\n\n search(params: {\n query?: string;\n filters?: { [key: string]: any };\n sortField?: string;\n sortDirection?: 'asc' | 'desc';\n pageIndex: number;\n pageSize: number;\n }): Observable<SearchData> {\n // Mock search results\n const mockResults = [\n { id: '1', title: 'Result 1', description: 'Description 1', data: { category: 'A' } },\n { id: '2', title: 'Result 2', description: 'Description 2', data: { category: 'B' } }\n ];\n\n // Apply text search\n let filteredResults = mockResults;\n if (params.query) {\n filteredResults = mockResults.filter(item =>\n Object.values(item).some(value =>\n String(value).toLowerCase().includes(params.query!.toLowerCase())\n )\n );\n }\n\n // Apply filters\n if (params.filters) {\n Object.keys(params.filters).forEach(key => {\n const filterValue = params.filters![key];\n if (filterValue !== null && filterValue !== undefined && filterValue !== '') {\n filteredResults = filteredResults.filter(item => (item.data as any)[key] === filterValue);\n }\n });\n }\n\n // Apply sorting\n if (params.sortField) {\n filteredResults.sort((a, b) => {\n const aVal = (a as any)[params.sortField!];\n const bVal = (b as any)[params.sortField!];\n if (aVal < bVal) return params.sortDirection === 'asc' ? -1 : 1;\n if (aVal > bVal) return params.sortDirection === 'asc' ? 1 : -1;\n return 0;\n });\n }\n\n const startIndex = params.pageIndex * params.pageSize;\n const endIndex = startIndex + params.pageSize;\n\n return new BehaviorSubject({\n results: filteredResults.slice(startIndex, endIndex),\n totalCount: filteredResults.length,\n pageIndex: params.pageIndex,\n pageSize: params.pageSize,\n searchQuery: params.query,\n filters: params.filters\n }).pipe(delay(500));\n }\n\n exportSearchResults(format: string, criteria: { [key: string]: any }): Observable<any> {\n return of({ success: true, data: 'Export completed' }).pipe(delay(500));\n }\n\n saveSearch(name: string, criteria: { [key: string]: any }): Observable<boolean> {\n return of(true).pipe(delay(500));\n }\n\n loadSavedSearches(): Observable<{ name: string; criteria: { [key: string]: any } }[]> {\n return of([]).pipe(delay(500));\n }\n\n deleteSavedSearch(name: string): Observable<boolean> {\n return of(true).pipe(delay(500));\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewEncapsulation, ChangeDetectorRef, Inject, Optional, Injectable } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup } from '@angular/forms';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatSnackBarModule, MatSnackBar } from '@angular/material/snack-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { Subject, takeUntil, BehaviorSubject, Observable, of } from 'rxjs';\nimport { delay } from 'rxjs/operators';\n\n// Import interfaces\nimport {\n SearchPageConfig,\n SearchField,\n SearchPageSortOption,\n SearchPageViewMode,\n SearchData,\n SearchPageDataSource\n} from './interfaces';\nimport { DefaultSearchPageDataSource } from './services/default-search-page-data-source.service';\n\n\n@Component({\n selector: 'amw-search-page',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatCardModule,\n MatButtonModule,\n MatIconModule,\n MatInputModule,\n MatFormFieldModule,\n MatSelectModule,\n MatCheckboxModule,\n MatChipsModule,\n MatDividerModule,\n MatTabsModule,\n MatExpansionModule,\n MatTooltipModule,\n MatSnackBarModule,\n MatProgressSpinnerModule\n ],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-search-page.component.html',\n styleUrl: './amw-search-page.component.scss',\n providers: [\n { provide: 'SEARCH_PAGE_DATA_SOURCE', useFactory: () => new DefaultSearchPageDataSource() }\n ]\n})\nexport class AmwSearchPageComponent implements OnInit, OnDestroy {\n @Input() config: SearchPageConfig = { searchFields: [] };\n @Input() dataSource?: SearchPageDataSource;\n @Input() realTimeUpdates = false;\n\n @Output() search = new EventEmitter<{ query: string; filters: { [key: string]: any } }>();\n @Output() resultClick = new EventEmitter<any>();\n @Output() filterChange = new EventEmitter<{ filters: { [key: string]: any } }>();\n\n // Current state\n currentConfig: SearchPageConfig = { searchFields: [] };\n currentData: SearchData = {\n results: [],\n totalCount: 0,\n pageIndex: 0,\n pageSize: 10,\n searchQuery: '',\n filters: {}\n };\n\n // UI state\n loading = false;\n error: string | null = null;\n searchQuery = '';\n currentFilters: { [key: string]: any } = {};\n sortField = '';\n viewMode = 'list';\n showSuggestions = false;\n filtersVisible = false;\n\n // Subject for component destruction\n private destroy$ = new Subject<void>();\n\n // Math object for templates\n Math = Math;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private snackBar: MatSnackBar,\n @Optional() @Inject('SEARCH_PAGE_DATA_SOURCE') private injectedDataSource?: SearchPageDataSource\n ) { }\n\n ngOnInit(): void {\n this.initializeConfig();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private initializeConfig(): void {\n this.currentConfig = {\n title: 'Search Page',\n subtitle: 'Search and filter data',\n showAdvancedFilters: true,\n showSuggestions: true,\n showSortOptions: true,\n showViewModes: true,\n sortOptions: [\n { value: 'relevance', label: 'Relevance' },\n { value: 'date', label: 'Date' },\n { value: 'name', label: 'Name' }\n ],\n viewModes: [\n { value: 'list', label: 'List', icon: 'view_list' },\n { value: 'grid', label: 'Grid', icon: 'view_module' },\n { value: 'card', label: 'Cards', icon: 'view_quilt' }\n ],\n customActions: [],\n customClasses: [],\n customStyles: {},\n ...this.config\n };\n }\n\n // Public methods for template\n onSearch(): void {\n this.loading = true;\n this.error = null;\n\n const dataSource = this.dataSource || this.injectedDataSource;\n if (!dataSource) {\n this.error = 'No data source provided';\n this.loading = false;\n return;\n }\n\n const params = {\n query: this.searchQuery,\n filters: this.currentFilters,\n sortField: this.sortField || undefined,\n sortDirection: 'asc' as 'asc' | 'desc',\n pageIndex: this.currentData.pageIndex,\n pageSize: this.currentData.pageSize\n };\n\n dataSource.search(params).pipe(\n takeUntil(this.destroy$)\n ).subscribe({\n next: (data) => {\n this.currentData = data;\n this.loading = false;\n this.cdr.detectChanges();\n },\n error: (err) => {\n this.error = err.message || 'Search failed';\n this.loading = false;\n this.cdr.detectChanges();\n }\n });\n\n this.search.emit({ query: this.searchQuery, filters: this.currentFilters });\n }\n\n onResultClick(result: any): void {\n this.resultClick.emit(result);\n }\n\n onFilterChange(): void {\n this.currentData.pageIndex = 0;\n this.onSearch();\n this.filterChange.emit({ filters: this.currentFilters });\n }\n\n onSortChange(): void {\n this.onSearch();\n }\n\n onViewModeChange(mode: string): void {\n this.viewMode = mode;\n }\n\n onClearFilters(): void {\n this.currentFilters = {};\n this.searchQuery = '';\n this.onSearch();\n }\n\n isFieldVisible(field: SearchField): boolean {\n return field.visible !== false;\n }\n\n getFieldValue(field: SearchField): any {\n return this.currentFilters[field.key] || '';\n }\n\n setFieldValue(field: SearchField, value: any): void {\n this.currentFilters[field.key] = value;\n }\n\n onSuggestionClick(suggestion: string): void {\n this.searchQuery = suggestion;\n this.showSuggestions = false;\n this.onSearch();\n }\n\n onSearchInputFocus(): void {\n this.showSuggestions = true;\n }\n\n onSearchInputBlur(): void {\n setTimeout(() => this.showSuggestions = false, 200);\n }\n\n toggleFilters(): void {\n this.filtersVisible = !this.filtersVisible;\n }\n}","<div class=\"amw-search-page\" [ngClass]=\"currentConfig.customClasses\" [ngStyle]=\"currentConfig.customStyles\">\n <!-- Header -->\n <div class=\"amw-search-page__header\">\n <div class=\"amw-search-page__header-content\">\n <div class=\"amw-search-page__header-text\">\n <h1 class=\"amw-search-page__title\">{{ currentConfig.title }}</h1>\n @if (currentConfig.subtitle) {\n <p class=\"amw-search-page__subtitle\">{{ currentConfig.subtitle }}</p>\n }\n </div>\n </div>\n </div>\n\n <!-- Search Bar -->\n <div class=\"amw-search-page__search-bar\">\n <div class=\"amw-search-page__search-container\">\n <mat-form-field appearance=\"outline\" class=\"amw-search-page__search-field\">\n <mat-label>Search</mat-label>\n <input matInput\n name=\"searchQuery\"\n [(ngModel)]=\"searchQuery\"\n (keyup.enter)=\"onSearch()\"\n (focus)=\"onSearchInputFocus()\"\n (blur)=\"onSearchInputBlur()\"\n placeholder=\"Enter search terms...\">\n <mat-icon matSuffix>search</mat-icon>\n </mat-form-field>\n <button mat-raised-button color=\"primary\" (click)=\"onSearch()\">Search</button>\n </div>\n </div>\n\n <!-- Main Content Layout -->\n <div class=\"amw-search-page__content\">\n <!-- Filter Toggle Button -->\n @if (currentConfig.showAdvancedFilters && currentConfig.searchFields && currentConfig.searchFields.length > 0) {\n <div class=\"amw-search-page__filter-toggle\">\n <button mat-raised-button\n color=\"primary\"\n (click)=\"toggleFilters()\"\n class=\"amw-search-page__filter-toggle-btn\">\n <mat-icon>{{ filtersVisible ? 'close' : 'filter_list' }}</mat-icon>\n {{ filtersVisible ? 'Hide Filters' : 'Show Filters' }}\n </button>\n </div>\n }\n\n <!-- Filters Sidebar -->\n @if (currentConfig.showAdvancedFilters && currentConfig.searchFields && currentConfig.searchFields.length > 0 && filtersVisible) {\n <div class=\"amw-search-page__sidebar\"\n [class.amw-search-page__sidebar--visible]=\"filtersVisible\">\n <mat-card class=\"amw-search-page__filters-card\">\n <mat-card-header>\n <mat-card-title>\n <mat-icon>filter_list</mat-icon>\n Filters\n </mat-card-title>\n <button mat-icon-button\n (click)=\"toggleFilters()\"\n class=\"amw-search-page__close-filters-btn\"\n aria-label=\"Close filters\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-card-header>\n <mat-card-content>\n <div class=\"amw-search-page__filters-content\">\n @for (field of currentConfig.searchFields; track field) {\n <div\n class=\"amw-search-page__filter-field\"\n [style.display]=\"isFieldVisible(field) ? 'block' : 'none'\">\n @if (field.type === 'text') {\n <mat-form-field appearance=\"outline\" class=\"amw-search-page__filter-input\">\n <mat-label>{{ field.label }}</mat-label>\n <input matInput\n name=\"searchField_{{ field.key }}\"\n [ngModel]=\"getFieldValue(field)\"\n (ngModelChange)=\"setFieldValue(field, $event)\"\n [placeholder]=\"field.placeholder || ''\">\n </mat-form-field>\n }\n @if (field.type === 'select') {\n <mat-form-field appearance=\"outline\" class=\"amw-search-page__filter-input\">\n <mat-label>{{ field.label }}</mat-label>\n <mat-select [ngModel]=\"getFieldValue(field)\" (ngModelChange)=\"setFieldValue(field, $event)\">\n <mat-option value=\"\">All</mat-option>\n @for (option of field.options; track option) {\n <mat-option [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n @if (field.type === 'boolean') {\n <div class=\"amw-search-page__checkbox\">\n <mat-checkbox [ngModel]=\"getFieldValue(field)\" (ngModelChange)=\"setFieldValue(field, $event)\">\n {{ field.label }}\n </mat-checkbox>\n </div>\n }\n </div>\n }\n <div class=\"amw-search-page__filters-actions\">\n <button mat-raised-button color=\"primary\" (click)=\"onFilterChange()\" class=\"amw-search-page__filter-button\">\n Apply Filters\n </button>\n <button mat-button (click)=\"onClearFilters()\" class=\"amw-search-page__filter-button\">\n Clear All\n </button>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n }\n\n <!-- Results Area -->\n <div class=\"amw-search-page__results-area\"\n [class.amw-search-page__results-area--filters-visible]=\"filtersVisible\">\n\n <!-- Results Header -->\n @if (!loading && !error) {\n <div class=\"amw-search-page__results-header\">\n <div class=\"amw-search-page__results-info\">\n <span>{{ currentData.totalCount }} results found</span>\n </div>\n <div class=\"amw-search-page__results-controls\">\n <!-- Sort Options -->\n @if (currentConfig.showSortOptions && currentConfig.sortOptions) {\n <mat-form-field appearance=\"outline\">\n <mat-label>Sort by</mat-label>\n <mat-select [(ngModel)]=\"sortField\" (selectionChange)=\"onSortChange()\">\n @for (option of currentConfig.sortOptions; track option) {\n <mat-option [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- View Modes -->\n @if (currentConfig.showViewModes && currentConfig.viewModes) {\n <div class=\"amw-search-page__view-modes\">\n @for (mode of currentConfig.viewModes; track mode) {\n <button\n mat-icon-button\n [class.amw-search-page__view-mode--active]=\"viewMode === mode.value\"\n (click)=\"onViewModeChange(mode.value)\"\n [matTooltip]=\"mode.label\">\n <mat-icon>{{ mode.icon }}</mat-icon>\n </button>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Loading State -->\n @if (loading) {\n <div class=\"amw-search-page__loading\">\n <mat-spinner diameter=\"40\"></mat-spinner>\n <p>Searching...</p>\n </div>\n }\n\n <!-- Error State -->\n @if (error && !loading) {\n <div class=\"amw-search-page__error\">\n <mat-icon>error</mat-icon>\n <p>{{ error }}</p>\n <button mat-raised-button color=\"primary\" (click)=\"onSearch()\">Retry</button>\n </div>\n }\n\n <!-- Results -->\n @if (!loading && !error) {\n <div class=\"amw-search-page__results\">\n <!-- List View -->\n @if (viewMode === 'list') {\n <div class=\"amw-search-page__results-list\">\n @for (result of currentData.results; track result) {\n <mat-card\n class=\"amw-search-page__result-card\"\n (click)=\"onResultClick(result)\">\n <mat-card-content>\n <h3>{{ result.title || result.name || 'Result' }}</h3>\n <p>{{ result.description || result.summary || 'No description available' }}</p>\n <div class=\"amw-search-page__result-meta\">\n @if (result.date) {\n <span>{{ result.date | date:'medium' }}</span>\n }\n @if (result.category) {\n <span>{{ result.category }}</span>\n }\n @if (result.score) {\n <span>{{ Math.round(result.score * 100) }}% match</span>\n }\n </div>\n </mat-card-content>\n </mat-card>\n }\n </div>\n }\n <!-- Grid View -->\n @if (viewMode === 'grid') {\n <div class=\"amw-search-page__results-grid\">\n @for (result of currentData.results; track result) {\n <mat-card\n class=\"amw-search-page__result-card\"\n (click)=\"onResultClick(result)\">\n <mat-card-content>\n <h3>{{ result.title || result.name || 'Result' }}</h3>\n <p>{{ result.description || result.summary || 'No description available' }}</p>\n </mat-card-content>\n </mat-card>\n }\n </div>\n }\n <!-- Card View -->\n @if (viewMode === 'card') {\n <div class=\"amw-search-page__results-cards\">\n @for (result of currentData.results; track result) {\n <mat-card\n class=\"amw-search-page__result-card\"\n (click)=\"onResultClick(result)\">\n <mat-card-header>\n <mat-card-title>{{ result.title || result.name || 'Result' }}</mat-card-title>\n <mat-card-subtitle>{{ result.category || 'Category' }}</mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <p>{{ result.description || result.summary || 'No description available' }}</p>\n </mat-card-content>\n <mat-card-actions>\n <button mat-button>View Details</button>\n </mat-card-actions>\n </mat-card>\n }\n </div>\n }\n <!-- Empty State -->\n @if (currentData.results.length === 0) {\n <div class=\"amw-search-page__empty\">\n <mat-icon>search_off</mat-icon>\n <p>No results found</p>\n <button mat-raised-button color=\"primary\" (click)=\"onClearFilters()\">Clear Filters</button>\n </div>\n }\n </div>\n }\n </div>\n </div>","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewEncapsulation, ChangeDetectorRef, Inject, Optional, Injectable, InjectionToken } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup } from '@angular/forms';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatSnackBarModule, MatSnackBar } from '@angular/material/snack-bar';\nimport { Subject, takeUntil, BehaviorSubject, Observable, of } from 'rxjs';\nimport { delay } from 'rxjs/operators';\n\n// Injection token for WorkflowPageDataSource\nexport const WORKFLOW_PAGE_DATA_SOURCE = new InjectionToken<WorkflowPageDataSource>('WorkflowPageDataSource');\n\n// Import interfaces\nimport { WorkflowPageConfig, WorkflowStep, WorkflowData, WorkflowPageDataSource } from './interfaces';\n\n// Default data source implementation\n@Injectable()\nexport class DefaultWorkflowPageDataSource implements WorkflowPageDataSource {\n constructor() { }\n\n getWorkflow(id: string): Observable<WorkflowPageConfig> {\n const workflow: WorkflowPageConfig = {\n title: 'Workflow',\n steps: []\n };\n return of(workflow).pipe(delay(500));\n }\n\n saveStepData(stepId: string, data: any): Observable<boolean> {\n return of(true).pipe(delay(500));\n }\n\n validateStep(stepId: string, data: any): Observable<{ isValid: boolean; errors: string[] }> {\n return of({ isValid: true, errors: [] }).pipe(delay(500));\n }\n\n completeWorkflow(data: any): Observable<boolean> {\n return of(true).pipe(delay(500));\n }\n}\n\n@Component({\n selector: 'amw-workflow-page',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatCardModule,\n MatButtonModule,\n MatIconModule,\n MatStepperModule,\n MatProgressBarModule,\n MatChipsModule,\n MatDividerModule,\n MatProgressSpinnerModule,\n MatTabsModule,\n MatExpansionModule,\n MatTooltipModule,\n MatSnackBarModule\n ],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-workflow-page.component.html',\n styleUrl: './amw-workflow-page.component.scss',\n providers: [\n { provide: WORKFLOW_PAGE_DATA_SOURCE, useFactory: () => new DefaultWorkflowPageDataSource() }\n ]\n})\nexport class AmwWorkflowPageComponent implements OnInit, OnDestroy {\n @Input() config: WorkflowPageConfig = { steps: [] };\n @Input() workflowId?: string;\n @Input() dataSource?: WorkflowPageDataSource;\n @Input() autoSave = false;\n @Input() autoSaveInterval = 30000; // 30 seconds\n\n @Output() stepChange = new EventEmitter<{ step: WorkflowStep; stepIndex: number }>();\n @Output() workflowComplete = new EventEmitter<any>();\n @Output() workflowCancel = new EventEmitter<void>();\n @Output() workflowSave = new EventEmitter<any>();\n @Output() workflowReset = new EventEmitter<void>();\n @Output() customAction = new EventEmitter<{ action: string; step: WorkflowStep; stepIndex: number; data: any }>();\n\n // Current state\n currentConfig: WorkflowPageConfig = { steps: [] };\n currentData: WorkflowData = {\n currentStep: 0,\n completedSteps: 0,\n totalSteps: 0,\n stepData: {},\n errors: {}\n };\n\n // Form\n form: FormGroup = new FormGroup({});\n\n // UI state\n loading = false;\n saving = false;\n error: string | null = null;\n\n // Subject for component destruction\n private destroy$ = new Subject<void>();\n\n // Math object for templates\n Math = Math;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private snackBar: MatSnackBar,\n private fb: FormBuilder,\n @Optional() @Inject(WORKFLOW_PAGE_DATA_SOURCE) private injectedDataSource?: WorkflowPageDataSource\n ) { }\n\n ngOnInit(): void {\n this.initializeConfig();\n this.initializeForm();\n if (this.workflowId) {\n this.loadWorkflow();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private initializeConfig(): void {\n this.currentConfig = {\n title: 'Workflow',\n subtitle: 'Complete the workflow steps',\n showSaveButton: true,\n showCancelButton: true,\n showResetButton: true,\n showPreviewButton: false,\n customActions: [],\n customClasses: [],\n customStyles: {},\n ...this.config\n };\n }\n\n private initializeForm(): void {\n const controls: { [key: string]: any } = {};\n this.form = this.fb.group(controls);\n }\n\n loadWorkflow(): void {\n if (!this.workflowId) return;\n\n this.loading = true;\n this.error = null;\n\n const dataSource = this.dataSource || this.injectedDataSource;\n if (!dataSource) {\n this.error = 'No data source provided';\n this.loading = false;\n return;\n }\n\n dataSource.getWorkflow(this.workflowId).pipe(\n takeUntil(this.destroy$)\n ).subscribe({\n next: (workflow) => {\n this.currentConfig = { ...this.currentConfig, ...workflow };\n this.currentData.totalSteps = this.currentConfig.steps.length;\n this.loading = false;\n this.cdr.detectChanges();\n },\n error: (err) => {\n this.error = err.message || 'Failed to load workflow';\n this.loading = false;\n this.cdr.detectChanges();\n }\n });\n }\n\n // Public methods for template\n onNextStep(): void {\n if (this.currentData.currentStep < this.currentData.totalSteps - 1) {\n this.currentData.currentStep++;\n this.updateStepStatus();\n this.cdr.detectChanges();\n }\n }\n\n onPreviousStep(): void {\n if (this.currentData.currentStep > 0) {\n this.currentData.currentStep--;\n this.updateStepStatus();\n this.cdr.detectChanges();\n }\n }\n\n onStepClick(stepIndex: number): void {\n if (stepIndex <= this.currentData.completedSteps || stepIndex === this.currentData.currentStep) {\n this.currentData.currentStep = stepIndex;\n this.updateStepStatus();\n this.cdr.detectChanges();\n }\n }\n\n onCompleteWorkflow(): void {\n this.saving = true;\n const dataSource = this.dataSource || this.injectedDataSource;\n if (dataSource) {\n dataSource.completeWorkflow(this.currentData.stepData).pipe(\n takeUntil(this.destroy$)\n ).subscribe({\n next: (success) => {\n this.saving = false;\n if (success) {\n this.snackBar.open('Workflow completed successfully', 'Close', { duration: 3000 });\n this.workflowComplete.emit(this.currentData.stepData);\n } else {\n this.snackBar.open('Failed to complete workflow', 'Close', { duration: 3000 });\n }\n },\n error: (err) => {\n this.saving = false;\n this.snackBar.open('Error completing workflow', 'Close', { duration: 3000 });\n }\n });\n } else {\n this.saving = false;\n this.workflowComplete.emit(this.currentData.stepData);\n }\n }\n\n onCancelWorkflow(): void {\n this.workflowCancel.emit();\n }\n\n onSaveWorkflow(): void {\n this.workflowSave.emit(this.currentData.stepData);\n }\n\n onResetWorkflow(): void {\n this.currentData.currentStep = 0;\n this.currentData.completedSteps = 0;\n this.currentData.stepData = {};\n this.currentData.errors = {};\n this.updateStepStatus();\n this.workflowReset.emit();\n }\n\n onActionClick(action: string): void {\n // Emit custom action event with action name, current step, and workflow data\n const currentStep = this.getCurrentStep();\n if (currentStep) {\n this.customAction.emit({\n action,\n step: currentStep,\n stepIndex: this.currentData.currentStep,\n data: this.currentData.stepData\n });\n this.snackBar.open(`Custom action '${action}' triggered for step ${this.currentData.currentStep + 1}`, 'Close', { duration: 3000 });\n } else {\n this.snackBar.open(`Invalid workflow state`, 'Close', { duration: 3000 });\n }\n }\n\n private updateStepStatus(): void {\n this.currentConfig.steps.forEach((step, index) => {\n if (index < this.currentData.currentStep) {\n step.status = 'completed';\n } else if (index === this.currentData.currentStep) {\n step.status = 'current';\n } else {\n step.status = 'pending';\n }\n });\n this.currentData.completedSteps = this.currentData.currentStep;\n }\n\n getCurrentStep(): WorkflowStep | undefined {\n return this.currentConfig.steps[this.currentData.currentStep];\n }\n\n getStepStatus(stepIndex: number): string {\n const step = this.currentConfig.steps[stepIndex];\n return step ? step.status : 'pending';\n }\n\n isStepCompleted(stepIndex: number): boolean {\n return stepIndex < this.currentData.completedSteps;\n }\n\n isStepCurrent(stepIndex: number): boolean {\n return stepIndex === this.currentData.currentStep;\n }\n\n isStepAccessible(stepIndex: number): boolean {\n return stepIndex <= this.currentData.completedSteps || stepIndex === this.currentData.currentStep;\n }\n\n getProgressPercentage(): number {\n return this.currentData.totalSteps > 0 ? (this.currentData.completedSteps / this.currentData.totalSteps) * 100 : 0;\n }\n\n canGoNext(): boolean {\n return this.currentData.currentStep < this.currentData.totalSteps - 1;\n }\n\n canGoPrevious(): boolean {\n return this.currentData.currentStep > 0;\n }\n\n isWorkflowComplete(): boolean {\n return this.currentData.currentStep === this.currentData.totalSteps - 1;\n }\n}","<div class=\"amw-workflow-page\" [ngClass]=\"currentConfig.customClasses\" [ngStyle]=\"currentConfig.customStyles\">\n <!-- Header -->\n <div class=\"amw-workflow-page__header\">\n <div class=\"amw-workflow-page__header-content\">\n <div class=\"amw-workflow-page__header-text\">\n <h1 class=\"amw-workflow-page__title\">{{ currentConfig.title }}</h1>\n @if (currentConfig.subtitle) {\n <p class=\"amw-workflow-page__subtitle\">{{ currentConfig.subtitle }}</p>\n }\n </div>\n\n <div class=\"amw-workflow-page__header-actions\">\n @if (currentConfig.showCancelButton) {\n <button mat-raised-button (click)=\"onCancelWorkflow()\">\n <mat-icon>cancel</mat-icon>\n Cancel\n </button>\n }\n @if (currentConfig.showSaveButton) {\n <button mat-raised-button (click)=\"onSaveWorkflow()\">\n <mat-icon>save</mat-icon>\n Save\n </button>\n }\n @if (currentConfig.showResetButton) {\n <button mat-raised-button (click)=\"onResetWorkflow()\">\n <mat-icon>refresh</mat-icon>\n Reset\n </button>\n }\n </div>\n </div>\n </div>\n\n <!-- Progress Bar -->\n <div class=\"amw-workflow-page__progress\">\n <mat-progress-bar\n mode=\"determinate\"\n [value]=\"getProgressPercentage()\"\n class=\"amw-workflow-page__progress-bar\">\n </mat-progress-bar>\n <div class=\"amw-workflow-page__progress-text\">\n Step {{ currentData.currentStep + 1 }} of {{ currentData.totalSteps }}\n ({{ Math.round(getProgressPercentage()) }}% complete)\n </div>\n </div>\n\n <!-- Loading State -->\n @if (loading) {\n <div class=\"amw-workflow-page__loading\">\n <mat-spinner diameter=\"40\"></mat-spinner>\n <p>Loading workflow...</p>\n </div>\n }\n\n <!-- Error State -->\n @if (error && !loading) {\n <div class=\"amw-workflow-page__error\">\n <mat-icon>error</mat-icon>\n <p>{{ error }}</p>\n <button mat-raised-button color=\"primary\" (click)=\"loadWorkflow()\">Retry</button>\n </div>\n }\n\n <!-- Workflow Content -->\n @if (!loading && !error) {\n <div class=\"amw-workflow-page__content\">\n <!-- Steps Navigation -->\n <div class=\"amw-workflow-page__steps\">\n <div class=\"amw-workflow-page__steps-container\">\n @for (step of currentConfig.steps; track step; let i = $index) {\n <div\n class=\"amw-workflow-page__step\"\n [class.amw-workflow-page__step--completed]=\"isStepCompleted(i)\"\n [class.amw-workflow-page__step--current]=\"isStepCurrent(i)\"\n [class.amw-workflow-page__step--pending]=\"!isStepCompleted(i) && !isStepCurrent(i)\"\n [class.amw-workflow-page__step--accessible]=\"isStepAccessible(i)\"\n (click)=\"onStepClick(i)\">\n <div class=\"amw-workflow-page__step-indicator\">\n @if (isStepCompleted(i)) {\n <mat-icon>check</mat-icon>\n }\n @if (!isStepCompleted(i)) {\n <span>{{ i + 1 }}</span>\n }\n </div>\n <div class=\"amw-workflow-page__step-content\">\n <h3 class=\"amw-workflow-page__step-title\">{{ step.title }}</h3>\n @if (step.description) {\n <p class=\"amw-workflow-page__step-description\">{{ step.description }}</p>\n }\n </div>\n </div>\n }\n </div>\n </div>\n <!-- Current Step Content -->\n <div class=\"amw-workflow-page__step-content\">\n @if (getCurrentStep()) {\n <mat-card class=\"amw-workflow-page__step-card\">\n <mat-card-header>\n <mat-card-title>{{ getCurrentStep()?.title }}</mat-card-title>\n @if (getCurrentStep()?.description) {\n <mat-card-subtitle>{{ getCurrentStep()?.description }}</mat-card-subtitle>\n }\n </mat-card-header>\n <mat-card-content>\n <div class=\"amw-workflow-page__step-form\">\n <!-- Step content will be rendered here -->\n <p>Step content for: {{ getCurrentStep()?.title }}</p>\n <p>This is where the step-specific form or content would be rendered.</p>\n </div>\n </mat-card-content>\n </mat-card>\n }\n </div>\n <!-- Navigation Buttons -->\n <div class=\"amw-workflow-page__navigation\">\n <div class=\"amw-workflow-page__navigation-buttons\">\n @if (canGoPrevious()) {\n <button mat-raised-button\n (click)=\"onPreviousStep()\"\n [disabled]=\"!canGoPrevious()\"\n >\n <mat-icon>arrow_back</mat-icon>\n Previous\n </button>\n }\n @if (canGoNext()) {\n <button mat-raised-button\n color=\"primary\"\n (click)=\"onNextStep()\"\n [disabled]=\"!canGoNext()\"\n >\n Next\n <mat-icon>arrow_forward</mat-icon>\n </button>\n }\n @if (isWorkflowComplete()) {\n <button mat-raised-button\n color=\"primary\"\n (click)=\"onCompleteWorkflow()\"\n [disabled]=\"saving\"\n >\n <mat-icon>check</mat-icon>\n {{ saving ? 'Completing...' : 'Complete Workflow' }}\n </button>\n }\n </div>\n </div>\n </div>\n }\n</div>","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewEncapsulation, ChangeDetectorRef, Inject, Optional, Injectable } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup } from '@angular/forms';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatSortModule, Sort } from '@angular/material/sort';\nimport { Subject, takeUntil, BehaviorSubject, Observable, of } from 'rxjs';\nimport { delay } from 'rxjs/operators';\n\n// Import interfaces\nimport {\n ReportPageConfig,\n DateRange,\n ReportFilter,\n ReportWidget,\n ReportData,\n ReportPageDataSource\n} from './interfaces';\n\n// Default data source implementation\n@Injectable()\nexport class DefaultReportPageDataSource implements ReportPageDataSource {\n constructor() { }\n\n getData(params: {\n dateRange?: DateRange;\n filters?: { [key: string]: any };\n }): Observable<ReportData> {\n return new BehaviorSubject({\n widgets: [\n {\n id: 'widget1',\n title: 'Sample Chart',\n type: 'chart' as const,\n size: 'medium' as const,\n data: { labels: ['Jan', 'Feb', 'Mar'], values: [10, 20, 30] },\n visible: true\n },\n {\n id: 'widget2',\n title: 'Sample Table',\n type: 'table' as const,\n size: 'large' as const,\n data: {\n columns: [{ key: 'name', title: 'Name' }, { key: 'value', title: 'Value' }],\n rows: [{ name: 'Item 1', value: 100 }, { name: 'Item 2', value: 200 }]\n },\n visible: true\n }\n ],\n dateRange: params.dateRange,\n filters: params.filters,\n lastUpdated: new Date()\n }).pipe(delay(500));\n }\n}\n\n@Component({\n selector: 'amw-report-page',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatCardModule,\n MatButtonModule,\n MatIconModule,\n MatFormFieldModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatProgressSpinnerModule,\n MatTabsModule,\n MatExpansionModule,\n MatTooltipModule,\n MatMenuModule,\n MatChipsModule,\n MatDividerModule,\n MatTableModule,\n MatSlideToggleModule,\n MatProgressBarModule,\n MatOptionModule,\n MatSelectModule,\n MatPaginatorModule,\n MatSortModule\n ],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './amw-report-page.component.html',\n styleUrl: './amw-report-page.component.scss',\n providers: [\n { provide: 'REPORT_PAGE_DATA_SOURCE', useFactory: () => new DefaultReportPageDataSource() }\n ]\n})\nexport class AmwReportPageComponent implements OnInit, OnDestroy {\n @Input() config: ReportPageConfig = { widgets: [] };\n @Input() dataSource?: ReportPageDataSource;\n @Input() autoRefresh = false;\n @Input() refreshInterval = 300000; // 5 minutes\n\n @Output() widgetClick = new EventEmitter<{ widget: ReportWidget; data: any }>();\n @Output() filterChange = new EventEmitter<{ filters: { [key: string]: any }; dateRange: DateRange }>();\n @Output() dateRangeChange = new EventEmitter<DateRange>();\n @Output() exportClick = new EventEmitter<{ format: string; data: any }>();\n\n // Current state\n currentConfig: ReportPageConfig = { widgets: [] };\n currentData: ReportData = {\n widgets: [],\n dateRange: {\n start: new Date(),\n end: new Date(),\n preset: 'last7days'\n },\n filters: {},\n lastUpdated: new Date()\n };\n\n // UI state\n loading = false;\n error: string | null = null;\n isFullscreen = false;\n\n // Subject for component destruction\n private destroy$ = new Subject<void>();\n\n // Math object for templates\n Math = Math;\n\n constructor(\n private cdr: ChangeDetectorRef,\n @Optional() @Inject('REPORT_PAGE_DATA_SOURCE') private injectedDataSource?: ReportPageDataSource\n ) { }\n\n ngOnInit(): void {\n this.initializeConfig();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private initializeConfig(): void {\n this.currentConfig = {\n title: 'Report Page',\n subtitle: 'View analytics and reports',\n showRefresh: true,\n showFullscreen: true,\n dateRange: {\n start: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000), // 30 days ago\n end: new Date(),\n preset: 'last30days'\n },\n filters: [],\n customActions: [],\n customClasses: [],\n customStyles: {},\n ...this.config\n };\n\n this.currentData.dateRange = this.currentConfig.dateRange || this.currentData.dateRange;\n }\n\n private loadData(): void {\n this.loading = true;\n this.error = null;\n\n const dataSource = this.dataSource || this.injectedDataSource;\n if (!dataSource) {\n this.error = 'No data source provided';\n this.loading = false;\n return;\n }\n\n const params = {\n dateRange: {\n start: this.currentData.dateRange?.start || null,\n end: this.currentData.dateRange?.end || null,\n label: this.currentData.dateRange?.label,\n preset: this.currentData.dateRange?.preset || 'last7days'\n },\n filters: this.currentData.filters\n };\n\n dataSource.getData(params).pipe(\n takeUntil(this.destroy$)\n ).subscribe({\n next: (data) => {\n this.currentData = {\n ...data,\n dateRange: {\n start: data.dateRange?.start || null,\n end: data.dateRange?.end || null,\n label: data.dateRange?.label,\n preset: data.dateRange?.preset || 'last7days'\n }\n };\n this.loading = false;\n this.cdr.detectChanges();\n },\n error: (err) => {\n this.error = err.message || 'Failed to load data';\n this.loading = false;\n this.cdr.detectChanges();\n }\n });\n }\n\n // Public methods for template\n onRefresh(): void {\n this.loadData();\n }\n\n onExport(format: string): void {\n this.exportClick.emit({ format, data: this.currentData });\n }\n\n onToggleFullscreen(): void {\n this.isFullscreen = !this.isFullscreen;\n if (this.isFullscreen) {\n document.documentElement.requestFullscreen();\n } else {\n document.exitFullscreen();\n }\n }\n\n onActionClick(action: any): void {\n action.onClick(this.currentData);\n }\n\n onFilterChange(filterKey: string, event: any): void {\n const value = event.value || event.checked || event.target?.value;\n this.currentData.filters = this.currentData.filters || {};\n this.currentData.filters[filterKey] = value;\n this.filterChange.emit({\n filters: this.currentData.filters || {},\n dateRange: this.currentData.dateRange || { start: new Date(), end: new Date() }\n });\n this.loadData();\n }\n\n onDateRangeChange(): void {\n this.dateRangeChange.emit(this.currentData.dateRange);\n this.loadData();\n }\n\n onDateRangePresetChange(preset: string): void {\n if (!this.currentData.dateRange) {\n this.currentData.dateRange = { start: null, end: null };\n }\n this.currentData.dateRange.preset = preset;\n this.onDateRangeChange();\n }\n\n onDateRangeStartChange(start: Date): void {\n if (!this.currentData.dateRange) {\n this.currentData.dateRange = { start: null, end: null };\n }\n this.currentData.dateRange.start = start;\n this.onDateRangeChange();\n }\n\n onDateRangeEndChange(end: Date): void {\n if (!this.currentData.dateRange) {\n this.currentData.dateRange = { start: null, end: null };\n }\n this.currentData.dateRange.end = end;\n this.onDateRangeChange();\n }\n\n onFilterValueChange(filterKey: string, value: any): void {\n this.currentData.filters = this.currentData.filters || {};\n this.currentData.filters[filterKey] = value;\n this.filterChange.emit({\n filters: this.currentData.filters || {},\n dateRange: this.currentData.dateRange || { start: new Date(), end: new Date() }\n });\n this.loadData();\n }\n\n onWidgetClick(widget: ReportWidget): void {\n this.widgetClick.emit({ widget, data: widget.data });\n }\n\n onRefreshWidget(widget: ReportWidget): void {\n // Implement widget refresh logic\n console.log('Refreshing widget:', widget);\n }\n\n isWidgetVisible(widget: ReportWidget): boolean {\n return widget.visible !== false;\n }\n\n getColumnKeys(columns: any[]): string[] {\n return columns.map(c => c.key);\n }\n\n getWidgetSizeClass(size: string): string {\n switch (size) {\n case 'small': return 'amw-report-page__widget--small';\n case 'medium': return 'amw-report-page__widget--medium';\n case 'large': return 'amw-report-page__widget--large';\n case 'full': return 'amw-report-page__widget--full';\n default: return 'amw-report-page__widget--medium';\n }\n }\n\n getWidgetGridStyle(widget: ReportWidget): { [key: string]: string } {\n const sizeMap: { [key: string]: string } = {\n 'small': '1fr',\n 'medium': '2fr',\n 'large': '3fr',\n 'full': '1fr'\n };\n return {\n 'grid-column': sizeMap[widget.size] || '1fr'\n };\n }\n}","<div class=\"amw-report-page\" [ngClass]=\"currentConfig.customClasses\" [ngStyle]=\"currentConfig.customStyles\">\n <!-- Header -->\n <div class=\"amw-report-page__header\">\n <div class=\"amw-report-page__header-content\">\n <div class=\"amw-report-page__header-text\">\n <h1 class=\"amw-report-page__title\">{{ currentConfig.title }}</h1>\n @if (currentConfig.subtitle) {\n <p class=\"amw-report-page__subtitle\">{{ currentConfig.subtitle }}</p>\n }\n </div>\n\n <div class=\"amw-report-page__header-actions\">\n @if (currentConfig.showRefresh) {\n <button mat-icon-button (click)=\"onRefresh()\" matTooltip=\"Refresh\">\n <mat-icon>refresh</mat-icon>\n </button>\n }\n @if (currentConfig.showFullscreen) {\n <button mat-icon-button (click)=\"onToggleFullscreen()\" matTooltip=\"Toggle Fullscreen\">\n <mat-icon>{{ isFullscreen ? 'fullscreen_exit' : 'fullscreen' }}</mat-icon>\n </button>\n }\n <button mat-icon-button [matMenuTriggerFor]=\"exportMenu\" matTooltip=\"Export\">\n <mat-icon>download</mat-icon>\n </button>\n <mat-menu #exportMenu=\"matMenu\">\n <button mat-menu-item (click)=\"onExport('pdf')\">\n <mat-icon>picture_as_pdf</mat-icon>\n Export as PDF\n </button>\n <button mat-menu-item (click)=\"onExport('excel')\">\n <mat-icon>table_chart</mat-icon>\n Export as Excel\n </button>\n <button mat-menu-item (click)=\"onExport('csv')\">\n <mat-icon>text_snippet</mat-icon>\n Export as CSV\n </button>\n </mat-menu>\n </div>\n </div>\n </div>\n\n <!-- Date Range and Filters -->\n <div class=\"amw-report-page__controls\">\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>tune</mat-icon>\n Filters & Date Range\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div class=\"amw-report-page__controls-content\">\n <!-- Date Range -->\n @if (!loading && currentData.dateRange) {\n <div class=\"amw-report-page__date-range\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Date Range</mat-label>\n <mat-select name=\"dateRangePreset\" [ngModel]=\"currentData.dateRange.preset\"\n (ngModelChange)=\"onDateRangePresetChange($event)\">\n <mat-option value=\"last7days\">Last 7 days</mat-option>\n <mat-option value=\"last30days\">Last 30 days</mat-option>\n <mat-option value=\"last90days\">Last 90 days</mat-option>\n <mat-option value=\"custom\">Custom range</mat-option>\n </mat-select>\n </mat-form-field>\n @if (currentData.dateRange.preset === 'custom') {\n <mat-form-field appearance=\"outline\">\n <mat-label>Start Date</mat-label>\n <input matInput type=\"date\" name=\"startDate\" [ngModel]=\"currentData.dateRange.start\"\n (ngModelChange)=\"onDateRangeStartChange($event)\">\n </mat-form-field>\n }\n @if (currentData.dateRange.preset === 'custom') {\n <mat-form-field appearance=\"outline\">\n <mat-label>End Date</mat-label>\n <input matInput type=\"date\" name=\"endDate\" [ngModel]=\"currentData.dateRange.end\"\n (ngModelChange)=\"onDateRangeEndChange($event)\">\n </mat-form-field>\n }\n </div>\n }\n\n <!-- Filters -->\n @if (!loading && currentConfig.filters && currentConfig.filters.length > 0) {\n <div class=\"amw-report-page__filters\">\n <div class=\"amw-report-page__filters-grid\">\n @for (filter of currentConfig.filters; track filter) {\n <div class=\"amw-report-page__filter-field\" [style.display]=\"filter.visible !== false ? 'block' : 'none'\">\n @if (filter.type === 'text') {\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ filter.label }}</mat-label>\n <input matInput name=\"filter_{{ filter.key }}\" [ngModel]=\"currentData.filters?.[filter.key]\"\n (ngModelChange)=\"onFilterValueChange(filter.key, $event)\" [placeholder]=\"filter.placeholder || ''\">\n </mat-form-field>\n }\n @if (filter.type === 'select') {\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ filter.label }}</mat-label>\n <mat-select name=\"filter_{{ filter.key }}\" [ngModel]=\"currentData.filters?.[filter.key]\"\n (ngModelChange)=\"onFilterValueChange(filter.key, $event)\"\n (selectionChange)=\"onFilterChange(filter.key, $event)\">\n <mat-option value=\"\">All</mat-option>\n @for (option of filter.options; track option) {\n <mat-option [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n @if (filter.type === 'boolean') {\n <div class=\"amw-report-page__boolean-filter\">\n <mat-slide-toggle name=\"filter_{{ filter.key }}\" [ngModel]=\"currentData.filters?.[filter.key]\"\n (change)=\"onFilterChange(filter.key, $event.checked)\">\n {{ filter.label }}\n </mat-slide-toggle>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </mat-expansion-panel>\n </div>\n\n <!-- Loading State -->\n @if (loading) {\n <div class=\"amw-report-page__loading\">\n <mat-spinner diameter=\"40\"></mat-spinner>\n <p>Loading report data...</p>\n </div>\n }\n\n <!-- Error State -->\n @if (error && !loading) {\n <div class=\"amw-report-page__error\">\n <mat-icon>error</mat-icon>\n <p>{{ error }}</p>\n <button mat-raised-button color=\"primary\" (click)=\"onRefresh()\">Retry</button>\n </div>\n }\n\n <!-- Report Content -->\n @if (!loading && !error) {\n <div class=\"amw-report-page__content\">\n <!-- Widgets Grid -->\n <div class=\"amw-report-page__widgets-grid\">\n @for (widget of currentData.widgets; track widget) {\n <div class=\"amw-report-page__widget\" [class]=\"getWidgetSizeClass(widget.size)\"\n [style]=\"getWidgetGridStyle(widget)\" [style.display]=\"isWidgetVisible(widget) ? 'block' : 'none'\">\n <mat-card class=\"amw-report-page__widget-card\">\n <mat-card-header>\n <mat-card-title>\n @if (widget.type === 'chart') {\n <mat-icon>bar_chart</mat-icon>\n }\n @if (widget.type === 'table') {\n <mat-icon>table_chart</mat-icon>\n }\n @if (widget.type === 'metric') {\n <mat-icon>analytics</mat-icon>\n }\n @if (widget.type === 'progress') {\n <mat-icon>trending_up</mat-icon>\n }\n {{ widget.title }}\n </mat-card-title>\n <div class=\"amw-report-page__widget-actions\">\n <button mat-icon-button (click)=\"onRefreshWidget(widget)\" matTooltip=\"Refresh\">\n <mat-icon>refresh</mat-icon>\n </button>\n </div>\n </mat-card-header>\n <mat-card-content (click)=\"onWidgetClick(widget)\">\n <!-- Chart Widget -->\n @if (widget.type === 'chart') {\n <div class=\"amw-report-page__chart-widget\">\n <div class=\"amw-report-page__chart-placeholder\">\n <mat-icon>bar_chart</mat-icon>\n <p>Chart visualization would be rendered here</p>\n <p>Data: {{ widget.data | json }}</p>\n </div>\n </div>\n }\n <!-- Table Widget -->\n @if (widget.type === 'table') {\n <div class=\"amw-report-page__table-widget\">\n <table mat-table [dataSource]=\"widget.data.rows\" class=\"amw-report-page__table\">\n @for (column of widget.data.columns; track column) {\n <ng-container [matColumnDef]=\"column.key\">\n <th mat-header-cell *matHeaderCellDef>{{ column.title }}</th>\n <td mat-cell *matCellDef=\"let row\">{{ row[column.key] }}</td>\n </ng-container>\n }\n <tr mat-header-row *matHeaderRowDef=\"getColumnKeys(widget.data.columns)\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: getColumnKeys(widget.data.columns)\"></tr>\n </table>\n </div>\n }\n <!-- Metric Widget -->\n @if (widget.type === 'metric') {\n <div class=\"amw-report-page__metric-widget\">\n <div class=\"amw-report-page__metric-value\">{{ widget.data.value }}</div>\n <div class=\"amw-report-page__metric-label\">{{ widget.data.label }}</div>\n @if (widget.data.change) {\n <div class=\"amw-report-page__metric-change\">\n <mat-icon [class.amw-report-page__metric-change--positive]=\"widget.data.change > 0\"\n [class.amw-report-page__metric-change--negative]=\"widget.data.change < 0\">\n {{ widget.data.change > 0 ? 'trending_up' : 'trending_down' }}\n </mat-icon>\n {{ Math.abs(widget.data.change) }}%\n </div>\n }\n </div>\n }\n <!-- Progress Widget -->\n @if (widget.type === 'progress') {\n <div class=\"amw-report-page__progress-widget\">\n <div class=\"amw-report-page__progress-label\">{{ widget.data.label }}</div>\n <mat-progress-bar mode=\"determinate\" [value]=\"widget.data.value\" class=\"amw-report-page__progress-bar\">\n </mat-progress-bar>\n <div class=\"amw-report-page__progress-value\">{{ widget.data.value }}%</div>\n </div>\n }\n <!-- Custom Widget -->\n @if (widget.type === 'custom') {\n <div class=\"amw-report-page__custom-widget\">\n <p>Custom widget content would be rendered here</p>\n <p>Data: {{ widget.data | json }}</p>\n </div>\n }\n </mat-card-content>\n </mat-card>\n </div>\n }\n </div>\n <!-- Empty State -->\n @if (currentData.widgets.length === 0) {\n <div class=\"amw-report-page__empty\">\n <mat-icon>assessment</mat-icon>\n <p>No widgets configured</p>\n </div>\n }\n </div>\n }\n\n <!-- Footer -->\n @if (!loading && !error) {\n <div class=\"amw-report-page__footer\">\n <div class=\"amw-report-page__footer-content\">\n <span class=\"amw-report-page__last-updated\">\n Last updated: {{ currentData.lastUpdated | date:'medium' }}\n </span>\n </div>\n </div>\n }\n</div>","// AMW Pages Components\n// Common page stereotypes for transactional/functional applications\n\n// List/Table Page\nexport * from './amw-list-page/amw-list-page.component';\n\n// Detail/View Page\nexport * from './amw-detail-page/amw-detail-page.component';\n\n// Form/Create-Edit Page\nexport * from './amw-form-page/amw-form-page.component';\n\n// Search/Filter Page\nexport * from './amw-search-page/amw-search-page.component';\n\n// Workflow/Process Page\nexport * from './amw-workflow-page/amw-workflow-page.component';\n\n// Report/Analytics Page\nexport * from './amw-report-page/amw-report-page.component';","import { Injectable, signal, computed } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ThemeColors } from '../interfaces/theme-colors.interface';\nimport { ThemeConfig } from '../interfaces/theme-config.interface';\n\n// Re-export interfaces for convenience\nexport type { ThemeColors, ThemeConfig };\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeService {\n private readonly THEME_STORAGE_KEY = 'amw-theme';\n\n // Available built-in themes - Material Design 3 only\n private readonly builtInThemes: ThemeConfig[] = [\n {\n id: 'm3-dynamic-light',\n name: 'm3-dynamic-light',\n displayName: 'Material 3 Dynamic Light',\n colors: {\n primary: '#6750A4',\n accent: '#625B71',\n warn: '#BA1A1A',\n background: '#FFFBFE',\n surface: '#FFFBFE',\n foreground: '#1C1B1F'\n },\n isDark: false,\n isCustom: false\n },\n {\n id: 'm3-dynamic-dark',\n name: 'm3-dynamic-dark',\n displayName: 'Material 3 Dynamic Dark',\n colors: {\n primary: '#D0BCFF',\n accent: '#CCC2DC',\n warn: '#FFB4AB',\n background: '#1C1B1F',\n surface: '#1C1B1F',\n foreground: '#E6E1E5'\n },\n isDark: true,\n isCustom: false\n },\n {\n id: 'm3-blue-light',\n name: 'm3-blue-light',\n displayName: 'Material 3 Blue Light',\n colors: {\n primary: '#1976D2',\n accent: '#424242',\n warn: '#D32F2F',\n background: '#FAFAFA',\n surface: '#FFFFFF',\n foreground: '#212121'\n },\n isDark: false,\n isCustom: false\n },\n {\n id: 'm3-blue-dark',\n name: 'm3-blue-dark',\n displayName: 'Material 3 Blue Dark',\n colors: {\n primary: '#90CAF9',\n accent: '#B0BEC5',\n warn: '#EF5350',\n background: '#121212',\n surface: '#1E1E1E',\n foreground: '#FFFFFF'\n },\n isDark: true,\n isCustom: false\n },\n {\n id: 'm3-green-light',\n name: 'm3-green-light',\n displayName: 'Material 3 Green Light',\n colors: {\n primary: '#388E3C',\n accent: '#424242',\n warn: '#D32F2F',\n background: '#FAFAFA',\n surface: '#FFFFFF',\n foreground: '#212121'\n },\n isDark: false,\n isCustom: false\n },\n {\n id: 'm3-green-dark',\n name: 'm3-green-dark',\n displayName: 'Material 3 Green Dark',\n colors: {\n primary: '#A5D6A7',\n accent: '#B0BEC5',\n warn: '#EF5350',\n background: '#121212',\n surface: '#1E1E1E',\n foreground: '#FFFFFF'\n },\n isDark: true,\n isCustom: false\n }\n ];\n\n private customThemesSubject = new BehaviorSubject<ThemeConfig[]>([]);\n private currentThemeSubject = new BehaviorSubject<ThemeConfig>(this.builtInThemes[0]); // M3 Dynamic Light\n\n // Signals for reactive state\n public currentTheme = signal<ThemeConfig>(this.builtInThemes[0]);\n public customThemes = signal<ThemeConfig[]>([]);\n public allThemes = computed(() => [...this.builtInThemes, ...this.customThemes()]);\n\n constructor() {\n this.loadThemeFromStorage();\n this.loadCustomThemesFromStorage();\n // Ensure M3 theme is applied on initialization\n this.loadMaterialTheme(this.currentTheme().name);\n }\n\n /**\n * Get all available themes (built-in + custom)\n */\n getAllThemes(): ThemeConfig[] {\n return this.allThemes();\n }\n\n /**\n * Get only built-in themes\n */\n getBuiltInThemes(): ThemeConfig[] {\n return [...this.builtInThemes];\n }\n\n /**\n * Get only custom themes\n */\n getCustomThemes(): ThemeConfig[] {\n return this.customThemes();\n }\n\n /**\n * Get current theme\n */\n getCurrentTheme(): ThemeConfig {\n return this.currentTheme();\n }\n\n /**\n * Get current theme as observable\n */\n getCurrentTheme$(): Observable<ThemeConfig> {\n return this.currentThemeSubject.asObservable();\n }\n\n /**\n * Switch to a theme by ID\n */\n setTheme(themeId: string): boolean {\n const theme = this.allThemes().find(t => t.id === themeId);\n if (!theme) {\n console.warn(`Theme with ID '${themeId}' not found`);\n return false;\n }\n\n this.currentTheme.set(theme);\n this.currentThemeSubject.next(theme);\n this.applyTheme(theme);\n this.saveThemeToStorage(theme);\n return true;\n }\n\n /**\n * Create a new custom theme\n */\n createCustomTheme(theme: Omit<ThemeConfig, 'isCustom'>): boolean {\n const newTheme: ThemeConfig = {\n ...theme,\n isCustom: true\n };\n\n // Check if theme ID already exists\n if (this.allThemes().some(t => t.id === newTheme.id)) {\n console.warn(`Theme with ID '${newTheme.id}' already exists`);\n return false;\n }\n\n const updatedCustomThemes = [...this.customThemes(), newTheme];\n this.customThemes.set(updatedCustomThemes);\n this.customThemesSubject.next(updatedCustomThemes);\n this.saveCustomThemesToStorage(updatedCustomThemes);\n return true;\n }\n\n /**\n * Update an existing custom theme\n */\n updateCustomTheme(themeId: string, updates: Partial<ThemeConfig>): boolean {\n const customThemes = this.customThemes();\n const themeIndex = customThemes.findIndex(t => t.id === themeId);\n\n if (themeIndex === -1) {\n console.warn(`Custom theme with ID '${themeId}' not found`);\n return false;\n }\n\n const updatedTheme = { ...customThemes[themeIndex], ...updates };\n const updatedCustomThemes = [...customThemes];\n updatedCustomThemes[themeIndex] = updatedTheme;\n\n this.customThemes.set(updatedCustomThemes);\n this.customThemesSubject.next(updatedCustomThemes);\n this.saveCustomThemesToStorage(updatedCustomThemes);\n\n // If this is the current theme, update it\n if (this.currentTheme().id === themeId) {\n this.currentTheme.set(updatedTheme);\n this.currentThemeSubject.next(updatedTheme);\n this.applyTheme(updatedTheme);\n }\n\n return true;\n }\n\n /**\n * Delete a custom theme\n */\n deleteCustomTheme(themeId: string): boolean {\n const customThemes = this.customThemes();\n const themeIndex = customThemes.findIndex(t => t.id === themeId);\n\n if (themeIndex === -1) {\n console.warn(`Custom theme with ID '${themeId}' not found`);\n return false;\n }\n\n const updatedCustomThemes = customThemes.filter(t => t.id !== themeId);\n this.customThemes.set(updatedCustomThemes);\n this.customThemesSubject.next(updatedCustomThemes);\n this.saveCustomThemesToStorage(updatedCustomThemes);\n\n // If this was the current theme, switch to default\n if (this.currentTheme().id === themeId) {\n this.setTheme(this.builtInThemes[0].id);\n }\n\n return true;\n }\n\n /**\n * Apply theme to the document\n */\n private applyTheme(theme: ThemeConfig): void {\n const root = document.documentElement;\n\n // Remove existing theme classes\n root.classList.remove('mat-theme-loaded');\n root.classList.remove('mat-app-background');\n\n // Add theme-specific classes\n root.classList.add('mat-theme-loaded');\n root.classList.add('mat-app-background');\n\n // Set CSS custom properties for colors\n root.style.setProperty('--mat-primary', theme.colors.primary);\n root.style.setProperty('--mat-accent', theme.colors.accent);\n root.style.setProperty('--mat-warn', theme.colors.warn);\n root.style.setProperty('--mat-background', theme.colors.background);\n root.style.setProperty('--mat-surface', theme.colors.surface);\n root.style.setProperty('--mat-foreground', theme.colors.foreground);\n\n // Apply Material theme\n this.loadMaterialTheme(theme.name);\n }\n\n /**\n * Load Material theme CSS\n */\n private loadMaterialTheme(themeName: string): void {\n // For M3 themes, we use CSS custom properties instead of prebuilt themes\n // This allows for dynamic theming with our custom color palettes\n this.applyM3Theme(themeName);\n }\n\n private applyM3Theme(themeName: string): void {\n // Apply M3 theme using CSS custom properties\n const theme = this.builtInThemes.find(t => t.name === themeName) || this.builtInThemes[0];\n\n // Set complete M3 color token system\n document.documentElement.style.setProperty('--mdc-theme-primary', theme.colors.primary);\n document.documentElement.style.setProperty('--mdc-theme-on-primary', theme.isDark ? '#381E72' : '#FFFFFF');\n document.documentElement.style.setProperty('--mdc-theme-primary-container', theme.isDark ? '#4F378B' : '#EADDFF');\n document.documentElement.style.setProperty('--mdc-theme-on-primary-container', theme.isDark ? '#EADDFF' : '#21005D');\n\n document.documentElement.style.setProperty('--mdc-theme-secondary', theme.colors.accent);\n document.documentElement.style.setProperty('--mdc-theme-on-secondary', theme.isDark ? '#332D41' : '#FFFFFF');\n document.documentElement.style.setProperty('--mdc-theme-secondary-container', theme.isDark ? '#4A4458' : '#E8DEF8');\n document.documentElement.style.setProperty('--mdc-theme-on-secondary-container', theme.isDark ? '#E8DEF8' : '#1D192B');\n\n document.documentElement.style.setProperty('--mdc-theme-tertiary', theme.isDark ? '#EFB8C8' : '#7D5260');\n document.documentElement.style.setProperty('--mdc-theme-on-tertiary', theme.isDark ? '#492532' : '#FFFFFF');\n document.documentElement.style.setProperty('--mdc-theme-tertiary-container', theme.isDark ? '#633B48' : '#FFD8E4');\n document.documentElement.style.setProperty('--mdc-theme-on-tertiary-container', theme.isDark ? '#FFD8E4' : '#31111D');\n\n document.documentElement.style.setProperty('--mdc-theme-error', theme.colors.warn);\n document.documentElement.style.setProperty('--mdc-theme-on-error', theme.isDark ? '#690005' : '#FFFFFF');\n document.documentElement.style.setProperty('--mdc-theme-error-container', theme.isDark ? '#93000A' : '#FFDAD6');\n document.documentElement.style.setProperty('--mdc-theme-on-error-container', theme.isDark ? '#FFDAD6' : '#410002');\n\n document.documentElement.style.setProperty('--mdc-theme-surface', theme.colors.surface);\n document.documentElement.style.setProperty('--mdc-theme-on-surface', theme.colors.foreground);\n document.documentElement.style.setProperty('--mdc-theme-surface-variant', theme.isDark ? '#49454F' : '#E7E0EC');\n document.documentElement.style.setProperty('--mdc-theme-on-surface-variant', theme.isDark ? '#CAC4D0' : '#49454F');\n\n document.documentElement.style.setProperty('--mdc-theme-outline', theme.isDark ? '#938F99' : '#79747E');\n document.documentElement.style.setProperty('--mdc-theme-outline-variant', theme.isDark ? '#49454F' : '#CAC4D0');\n\n document.documentElement.style.setProperty('--mdc-theme-background', theme.colors.background);\n document.documentElement.style.setProperty('--mdc-theme-on-background', theme.colors.foreground);\n\n // Surface container variants\n document.documentElement.style.setProperty('--mdc-theme-surface-container', theme.isDark ? '#211F26' : '#F3EDF7');\n document.documentElement.style.setProperty('--mdc-theme-surface-container-high', theme.isDark ? '#2B2930' : '#ECE6F0');\n document.documentElement.style.setProperty('--mdc-theme-surface-container-highest', theme.isDark ? '#36343B' : '#E6E0E9');\n document.documentElement.style.setProperty('--mdc-theme-surface-container-low', theme.isDark ? '#1F1D24' : '#F7F2FA');\n document.documentElement.style.setProperty('--mdc-theme-surface-container-lowest', theme.isDark ? '#161218' : '#FFFFFF');\n\n document.documentElement.style.setProperty('--mdc-theme-surface-dim', theme.isDark ? '#141218' : '#DDD8DD');\n document.documentElement.style.setProperty('--mdc-theme-surface-bright', theme.isDark ? '#3C383E' : '#FFFBFE');\n\n // State layer colors\n document.documentElement.style.setProperty('--mdc-theme-surface-tint', theme.colors.primary);\n document.documentElement.style.setProperty('--mdc-theme-inverse-surface', theme.isDark ? '#E6E1E5' : '#313033');\n document.documentElement.style.setProperty('--mdc-theme-inverse-on-surface', theme.isDark ? '#313033' : '#F4EFF4');\n document.documentElement.style.setProperty('--mdc-theme-inverse-primary', theme.isDark ? '#6750A4' : '#D0BCFF');\n\n // Scrim and shadow\n document.documentElement.style.setProperty('--mdc-theme-scrim', '#000000');\n document.documentElement.style.setProperty('--mdc-theme-shadow', '#000000');\n\n // Set dark mode - ensure it's applied to the document element\n if (theme.isDark) {\n document.documentElement.classList.add('dark-theme');\n } else {\n document.documentElement.classList.remove('dark-theme');\n }\n }\n\n /**\n * Save current theme to localStorage\n */\n private saveThemeToStorage(theme: ThemeConfig): void {\n try {\n localStorage.setItem(this.THEME_STORAGE_KEY, JSON.stringify(theme));\n } catch (error) {\n console.warn('Failed to save theme to localStorage:', error);\n }\n }\n\n /**\n * Load theme from localStorage\n */\n private loadThemeFromStorage(): void {\n try {\n const stored = localStorage.getItem(this.THEME_STORAGE_KEY);\n if (stored) {\n const theme = JSON.parse(stored) as ThemeConfig;\n // Verify theme still exists\n if (this.allThemes().some(t => t.id === theme.id)) {\n this.setTheme(theme.id);\n }\n }\n } catch (error) {\n console.warn('Failed to load theme from localStorage:', error);\n }\n }\n\n /**\n * Save custom themes to localStorage\n */\n private saveCustomThemesToStorage(themes: ThemeConfig[]): void {\n try {\n localStorage.setItem('amw-custom-themes', JSON.stringify(themes));\n } catch (error) {\n console.warn('Failed to save custom themes to localStorage:', error);\n }\n }\n\n /**\n * Load custom themes from localStorage\n */\n private loadCustomThemesFromStorage(): void {\n try {\n const stored = localStorage.getItem('amw-custom-themes');\n if (stored) {\n const themes = JSON.parse(stored) as ThemeConfig[];\n this.customThemes.set(themes);\n this.customThemesSubject.next(themes);\n }\n } catch (error) {\n console.warn('Failed to load custom themes from localStorage:', error);\n }\n }\n}\n","import { Component, OnInit, signal, computed } from '@angular/core';\n\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatCardModule } from '@angular/material/card';\n\nimport { ThemeService, ThemeConfig } from '../../services/theme.service';\n\n@Component({\n selector: 'amw-theme-picker',\n standalone: true,\n imports: [\n MatSelectModule,\n MatFormFieldModule,\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n MatDividerModule,\n MatCardModule\n],\n templateUrl: './theme-picker.component.html',\n styleUrl: './theme-picker.component.scss'\n})\nexport class ThemePickerComponent implements OnInit {\n currentTheme = signal<ThemeConfig | null>(null);\n allThemes = signal<ThemeConfig[]>([]);\n builtInThemes = signal<ThemeConfig[]>([]);\n customThemes = signal<ThemeConfig[]>([]);\n\n // Computed properties\n isDarkMode = computed(() => this.currentTheme()?.isDark ?? false);\n hasCustomThemes = computed(() => this.customThemes().length > 0);\n\n constructor(private themeService: ThemeService) { }\n\n ngOnInit(): void {\n this.loadThemes();\n this.subscribeToThemeChanges();\n }\n\n private loadThemes(): void {\n this.allThemes.set(this.themeService.getAllThemes());\n this.builtInThemes.set(this.themeService.getBuiltInThemes());\n this.customThemes.set(this.themeService.getCustomThemes());\n this.currentTheme.set(this.themeService.getCurrentTheme());\n }\n\n private subscribeToThemeChanges(): void {\n this.themeService.getCurrentTheme$().subscribe(theme => {\n this.currentTheme.set(theme);\n });\n }\n\n onThemeChange(themeId: string): void {\n this.themeService.setTheme(themeId);\n }\n\n getThemeIcon(theme: ThemeConfig): string {\n if (theme.isCustom) {\n return 'palette';\n }\n return theme.isDark ? 'dark_mode' : 'light_mode';\n }\n\n getThemeDescription(theme: ThemeConfig): string {\n const mode = theme.isDark ? 'Dark' : 'Light';\n const type = theme.isCustom ? 'Custom' : 'Built-in';\n return `${mode} theme (${type})`;\n }\n}\n","<div class=\"amw-theme-picker\">\n <mat-form-field appearance=\"outline\" class=\"theme-selector\">\n <mat-label>Theme</mat-label>\n <mat-select\n [value]=\"currentTheme()?.id\"\n (selectionChange)=\"onThemeChange($event.value)\"\n placeholder=\"Select a theme\">\n\n <!-- Built-in Themes Section -->\n <mat-optgroup label=\"Built-in Themes\">\n @for (theme of builtInThemes(); track theme) {\n <mat-option\n [value]=\"theme.id\"\n class=\"theme-option\">\n <div class=\"theme-option-content\">\n <mat-icon class=\"theme-icon\">{{ getThemeIcon(theme) }}</mat-icon>\n <div class=\"theme-details\">\n <div class=\"theme-name\">{{ theme.displayName }}</div>\n <div class=\"theme-description\">{{ getThemeDescription(theme) }}</div>\n </div>\n <div class=\"theme-colors\">\n <div\n class=\"color-swatch primary\"\n [style.background-color]=\"theme.colors.primary\"\n matTooltip=\"Primary\">\n </div>\n <div\n class=\"color-swatch accent\"\n [style.background-color]=\"theme.colors.accent\"\n matTooltip=\"Accent\">\n </div>\n </div>\n </div>\n </mat-option>\n }\n </mat-optgroup>\n\n <!-- Custom Themes Section -->\n @if (hasCustomThemes()) {\n <mat-optgroup label=\"Custom Themes\">\n @for (theme of customThemes(); track theme) {\n <mat-option\n [value]=\"theme.id\"\n class=\"theme-option custom-theme\">\n <div class=\"theme-option-content\">\n <mat-icon class=\"theme-icon\">{{ getThemeIcon(theme) }}</mat-icon>\n <div class=\"theme-details\">\n <div class=\"theme-name\">{{ theme.displayName }}</div>\n <div class=\"theme-description\">{{ getThemeDescription(theme) }}</div>\n </div>\n <div class=\"theme-colors\">\n <div\n class=\"color-swatch primary\"\n [style.background-color]=\"theme.colors.primary\"\n matTooltip=\"Primary\">\n </div>\n <div\n class=\"color-swatch accent\"\n [style.background-color]=\"theme.colors.accent\"\n matTooltip=\"Accent\">\n </div>\n </div>\n </div>\n </mat-option>\n }\n </mat-optgroup>\n }\n </mat-select>\n </mat-form-field>\n\n <!-- Current Theme Info -->\n @if (currentTheme()) {\n <div class=\"current-theme-info\">\n <mat-card class=\"theme-info-card\">\n <mat-card-header>\n <mat-card-title>\n <mat-icon>{{ getThemeIcon(currentTheme()!) }}</mat-icon>\n {{ currentTheme()!.displayName }}\n </mat-card-title>\n <mat-card-subtitle>{{ getThemeDescription(currentTheme()!) }}</mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <div class=\"color-palette\">\n <div class=\"color-item\">\n <div class=\"color-label\">Primary</div>\n <div class=\"color-value\">\n <div\n class=\"color-preview\"\n [style.background-color]=\"currentTheme()!.colors.primary\">\n </div>\n <span class=\"color-hex\">{{ currentTheme()!.colors.primary }}</span>\n </div>\n </div>\n <div class=\"color-item\">\n <div class=\"color-label\">Accent</div>\n <div class=\"color-value\">\n <div\n class=\"color-preview\"\n [style.background-color]=\"currentTheme()!.colors.accent\">\n </div>\n <span class=\"color-hex\">{{ currentTheme()!.colors.accent }}</span>\n </div>\n </div>\n <div class=\"color-item\">\n <div class=\"color-label\">Warn</div>\n <div class=\"color-value\">\n <div\n class=\"color-preview\"\n [style.background-color]=\"currentTheme()!.colors.warn\">\n </div>\n <span class=\"color-hex\">{{ currentTheme()!.colors.warn }}</span>\n </div>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n }\n</div>\n","import { Component, OnInit, signal, computed } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatSnackBarModule, MatSnackBar } from '@angular/material/snack-bar';\n\nimport { ThemeService, ThemeConfig, ThemeColors } from '../../services/theme.service';\n\n@Component({\n selector: 'amw-theme-editor',\n standalone: true,\n imports: [\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n MatIconModule,\n MatCardModule,\n MatSlideToggleModule,\n MatDividerModule,\n MatSnackBarModule\n],\n templateUrl: './theme-editor.component.html',\n styleUrl: './theme-editor.component.scss'\n})\nexport class ThemeEditorComponent implements OnInit {\n // Form data\n themeName = '';\n themeId = '';\n isDarkMode = false;\n colors: ThemeColors = {\n primary: '#6750A4',\n accent: '#625B71',\n warn: '#BA1A1A',\n background: '#FFFBFE',\n surface: '#FFFBFE',\n foreground: '#1C1B1F'\n };\n\n // State\n isEditing = signal(false);\n editingThemeId = signal<string | null>(null);\n customThemes = signal<ThemeConfig[]>([]);\n\n // Computed properties\n get isValid(): boolean {\n const name = this.themeName.trim();\n const id = this.themeId.trim();\n return name.length > 0 && id.length > 0 && this.isValidColorFormat();\n }\n\n get previewTheme(): ThemeConfig {\n return {\n id: this.themeId || 'preview',\n name: this.themeName || 'Preview Theme',\n displayName: this.themeName || 'Preview Theme',\n colors: this.colors,\n isDark: this.isDarkMode,\n isCustom: true\n };\n }\n\n constructor(\n private themeService: ThemeService,\n private snackBar: MatSnackBar\n ) { }\n\n ngOnInit(): void {\n this.loadCustomThemes();\n this.generateThemeId();\n }\n\n private loadCustomThemes(): void {\n this.customThemes.set(this.themeService.getCustomThemes());\n }\n\n private generateThemeId(): void {\n const name = this.themeName.trim();\n if (name) {\n const id = name.toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, '')\n .replace(/\\s+/g, '-')\n .replace(/-+/g, '-')\n .trim();\n this.themeId = id;\n }\n }\n\n onThemeNameChange(): void {\n this.generateThemeId();\n }\n\n onColorChange(colorKey: keyof ThemeColors, value: string): void {\n if (this.isValidColor(value)) {\n this.colors = {\n ...this.colors,\n [colorKey]: value\n };\n }\n }\n\n onDarkModeToggle(): void {\n this.isDarkMode = !this.isDarkMode;\n\n // Update background and surface colors based on dark mode\n if (this.isDarkMode) {\n // Switching to dark mode\n this.colors = {\n ...this.colors,\n background: '#303030',\n surface: '#424242',\n foreground: '#FFFFFF'\n };\n } else {\n // Switching to light mode\n this.colors = {\n ...this.colors,\n background: '#FAFAFA',\n surface: '#FFFFFF',\n foreground: '#212121'\n };\n }\n }\n\n onLoadTheme(theme: ThemeConfig): void {\n this.isEditing.set(true);\n this.editingThemeId.set(theme.id);\n this.themeName = theme.displayName;\n this.themeId = theme.id;\n this.isDarkMode = theme.isDark;\n this.colors = { ...theme.colors };\n }\n\n onNewTheme(): void {\n this.resetForm();\n this.isEditing.set(false);\n this.editingThemeId.set(null);\n }\n\n onSaveTheme(): void {\n if (!this.isValid) {\n this.snackBar.open('Please fill in all required fields with valid values', 'Close', {\n duration: 3000\n });\n return;\n }\n\n const theme: Omit<ThemeConfig, 'isCustom'> = {\n id: this.themeId.trim(),\n name: this.themeId.trim(),\n displayName: this.themeName.trim(),\n colors: this.colors,\n isDark: this.isDarkMode\n };\n\n let success = false;\n if (this.isEditing()) {\n success = this.themeService.updateCustomTheme(this.editingThemeId()!, theme);\n } else {\n success = this.themeService.createCustomTheme(theme);\n }\n\n if (success) {\n this.snackBar.open(\n `Theme ${this.isEditing() ? 'updated' : 'created'} successfully!`,\n 'Close',\n { duration: 3000 }\n );\n this.loadCustomThemes();\n this.resetForm();\n } else {\n this.snackBar.open(\n `Failed to ${this.isEditing() ? 'update' : 'create'} theme. Theme ID may already exist.`,\n 'Close',\n { duration: 3000 }\n );\n }\n }\n\n onDeleteTheme(theme: ThemeConfig): void {\n if (confirm(`Are you sure you want to delete the theme \"${theme.displayName}\"?`)) {\n const success = this.themeService.deleteCustomTheme(theme.id);\n if (success) {\n this.snackBar.open('Theme deleted successfully!', 'Close', { duration: 3000 });\n this.loadCustomThemes();\n if (this.editingThemeId() === theme.id) {\n this.resetForm();\n }\n } else {\n this.snackBar.open('Failed to delete theme', 'Close', { duration: 3000 });\n }\n }\n }\n\n onPreviewTheme(): void {\n if (this.isValid) {\n this.themeService.setTheme(this.previewTheme.id);\n }\n }\n\n private resetForm(): void {\n this.themeName = '';\n this.themeId = '';\n this.isDarkMode = false;\n this.colors = {\n primary: '#6750A4',\n accent: '#625B71',\n warn: '#BA1A1A',\n background: '#FFFBFE',\n surface: '#FFFBFE',\n foreground: '#1C1B1F'\n };\n }\n\n private isValidColor(color: string): boolean {\n return /^#[0-9A-F]{6}$/i.test(color);\n }\n\n private isValidColorFormat(): boolean {\n return Object.values(this.colors).every(color => this.isValidColor(color as string));\n }\n\n getColorContrast(color: string): string {\n // Simple contrast calculation - return 'dark' or 'light' text color\n const hex = color.replace('#', '');\n const r = parseInt(hex.substr(0, 2), 16);\n const g = parseInt(hex.substr(2, 2), 16);\n const b = parseInt(hex.substr(4, 2), 16);\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\n return brightness > 128 ? '#000000' : '#FFFFFF';\n }\n}","<div class=\"amw-theme-editor\">\n <!-- Theme Form -->\n <mat-card class=\"theme-form-card\">\n <mat-card-header>\n <mat-card-title>\n <mat-icon>palette</mat-icon>\n {{ isEditing() ? 'Edit Theme' : 'Create New Theme' }}\n </mat-card-title>\n <mat-card-subtitle>\n {{ isEditing() ? 'Modify an existing custom theme' : 'Design a custom theme with your own colors' }}\n </mat-card-subtitle>\n </mat-card-header>\n\n <mat-card-content>\n <div class=\"theme-form\">\n <!-- Basic Info -->\n <div class=\"form-section\">\n <h3>Basic Information</h3>\n <div class=\"form-row\">\n <mat-form-field appearance=\"outline\" class=\"form-field\">\n <mat-label>Theme Name</mat-label>\n <input\n matInput\n [(ngModel)]=\"themeName\"\n (ngModelChange)=\"onThemeNameChange()\"\n placeholder=\"My Custom Theme\"\n required>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"form-field\">\n <mat-label>Theme ID</mat-label>\n <input\n matInput\n [(ngModel)]=\"themeId\"\n placeholder=\"my-custom-theme\"\n required>\n <mat-hint>Used internally (auto-generated from name)</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"form-row\">\n <mat-slide-toggle\n [(ngModel)]=\"isDarkMode\"\n (change)=\"onDarkModeToggle()\"\n class=\"dark-mode-toggle\">\n <mat-icon>dark_mode</mat-icon>\n Dark Mode\n </mat-slide-toggle>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <!-- Color Palette -->\n <div class=\"form-section\">\n <h3>Color Palette</h3>\n <div class=\"color-grid\">\n <div class=\"color-item\">\n <mat-form-field appearance=\"outline\" class=\"color-field\">\n <mat-label>Primary Color</mat-label>\n <input\n matInput\n [(ngModel)]=\"colors.primary\"\n (ngModelChange)=\"onColorChange('primary', $event)\"\n placeholder=\"#673AB7\"\n pattern=\"^#[0-9A-Fa-f]{6}$\">\n <div class=\"color-preview\" [style.background-color]=\"colors.primary\">\n <span class=\"color-text\" [style.color]=\"getColorContrast(colors.primary)\">Aa</span>\n </div>\n </mat-form-field>\n </div>\n\n <div class=\"color-item\">\n <mat-form-field appearance=\"outline\" class=\"color-field\">\n <mat-label>Accent Color</mat-label>\n <input\n matInput\n [(ngModel)]=\"colors.accent\"\n (ngModelChange)=\"onColorChange('accent', $event)\"\n placeholder=\"#FFC107\"\n pattern=\"^#[0-9A-Fa-f]{6}$\">\n <div class=\"color-preview\" [style.background-color]=\"colors.accent\">\n <span class=\"color-text\" [style.color]=\"getColorContrast(colors.accent)\">Aa</span>\n </div>\n </mat-form-field>\n </div>\n\n <div class=\"color-item\">\n <mat-form-field appearance=\"outline\" class=\"color-field\">\n <mat-label>Warn Color</mat-label>\n <input\n matInput\n [(ngModel)]=\"colors.warn\"\n (ngModelChange)=\"onColorChange('warn', $event)\"\n placeholder=\"#F44336\"\n pattern=\"^#[0-9A-Fa-f]{6}$\">\n <div class=\"color-preview\" [style.background-color]=\"colors.warn\">\n <span class=\"color-text\" [style.color]=\"getColorContrast(colors.warn)\">Aa</span>\n </div>\n </mat-form-field>\n </div>\n\n <div class=\"color-item\">\n <mat-form-field appearance=\"outline\" class=\"color-field\">\n <mat-label>Background Color</mat-label>\n <input\n matInput\n [(ngModel)]=\"colors.background\"\n (ngModelChange)=\"onColorChange('background', $event)\"\n placeholder=\"#FAFAFA\"\n pattern=\"^#[0-9A-Fa-f]{6}$\">\n <div class=\"color-preview\" [style.background-color]=\"colors.background\">\n <span class=\"color-text\" [style.color]=\"getColorContrast(colors.background)\">Aa</span>\n </div>\n </mat-form-field>\n </div>\n\n <div class=\"color-item\">\n <mat-form-field appearance=\"outline\" class=\"color-field\">\n <mat-label>Surface Color</mat-label>\n <input\n matInput\n [(ngModel)]=\"colors.surface\"\n (ngModelChange)=\"onColorChange('surface', $event)\"\n placeholder=\"#FFFFFF\"\n pattern=\"^#[0-9A-Fa-f]{6}$\">\n <div class=\"color-preview\" [style.background-color]=\"colors.surface\">\n <span class=\"color-text\" [style.color]=\"getColorContrast(colors.surface)\">Aa</span>\n </div>\n </mat-form-field>\n </div>\n\n <div class=\"color-item\">\n <mat-form-field appearance=\"outline\" class=\"color-field\">\n <mat-label>Foreground Color</mat-label>\n <input\n matInput\n [(ngModel)]=\"colors.foreground\"\n (ngModelChange)=\"onColorChange('foreground', $event)\"\n placeholder=\"#212121\"\n pattern=\"^#[0-9A-Fa-f]{6}$\">\n <div class=\"color-preview\" [style.background-color]=\"colors.foreground\">\n <span class=\"color-text\" [style.color]=\"getColorContrast(colors.foreground)\">Aa</span>\n </div>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <!-- Actions -->\n <div class=\"form-actions\">\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"onSaveTheme()\"\n [disabled]=\"!isValid\">\n <mat-icon>save</mat-icon>\n {{ isEditing() ? 'Update Theme' : 'Create Theme' }}\n </button>\n\n <button\n mat-button\n (click)=\"onPreviewTheme()\"\n [disabled]=\"!isValid\">\n <mat-icon>visibility</mat-icon>\n Preview\n </button>\n\n <button\n mat-button\n (click)=\"onNewTheme()\">\n <mat-icon>add</mat-icon>\n New Theme\n </button>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <!-- Custom Themes List -->\n @if (customThemes().length > 0) {\n <mat-card class=\"themes-list-card\">\n <mat-card-header>\n <mat-card-title>\n <mat-icon>palette</mat-icon>\n Custom Themes\n </mat-card-title>\n <mat-card-subtitle>Manage your custom themes</mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <div class=\"themes-list\">\n @for (theme of customThemes(); track theme) {\n <div class=\"theme-item\">\n <div class=\"theme-info\">\n <div class=\"theme-name\">{{ theme.displayName }}</div>\n <div class=\"theme-meta\">\n {{ theme.isDark ? 'Dark' : 'Light' }} theme • ID: {{ theme.id }}\n </div>\n </div>\n <div class=\"theme-colors\">\n <div\n class=\"color-swatch\"\n [style.background-color]=\"theme.colors.primary\"\n matTooltip=\"Primary\">\n </div>\n <div\n class=\"color-swatch\"\n [style.background-color]=\"theme.colors.accent\"\n matTooltip=\"Accent\">\n </div>\n <div\n class=\"color-swatch\"\n [style.background-color]=\"theme.colors.warn\"\n matTooltip=\"Warn\">\n </div>\n </div>\n <div class=\"theme-actions\">\n <button\n mat-icon-button\n (click)=\"onLoadTheme(theme)\"\n matTooltip=\"Edit theme\">\n <mat-icon>edit</mat-icon>\n </button>\n <button\n mat-icon-button\n (click)=\"onDeleteTheme(theme)\"\n matTooltip=\"Delete theme\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </div>\n }\n </div>\n </mat-card-content>\n </mat-card>\n }\n</div>\n","import { Component, signal } from '@angular/core';\n\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ThemePickerComponent } from '../theme-picker/theme-picker.component';\nimport { ThemeEditorComponent } from '../theme-editor/theme-editor.component';\n\n@Component({\n selector: 'amw-theme-manager',\n standalone: true,\n imports: [\n MatTabsModule,\n MatIconModule,\n ThemePickerComponent,\n ThemeEditorComponent\n],\n templateUrl: './theme-manager.component.html',\n styleUrl: './theme-manager.component.scss'\n})\nexport class ThemeManagerComponent {\n selectedTab = signal(0);\n\n onTabChange(index: number): void {\n this.selectedTab.set(index);\n }\n}\n","<div class=\"amw-theme-manager\">\n <mat-tab-group \n [(selectedIndex)]=\"selectedTab\" \n (selectedIndexChange)=\"onTabChange($event)\"\n class=\"theme-tabs\">\n \n <!-- Theme Picker Tab -->\n <mat-tab>\n <ng-template mat-tab-label>\n <mat-icon>palette</mat-icon>\n Switch Theme\n </ng-template>\n <div class=\"tab-content\">\n <amw-theme-picker></amw-theme-picker>\n </div>\n </mat-tab>\n \n <!-- Theme Editor Tab -->\n <mat-tab>\n <ng-template mat-tab-label>\n <mat-icon>edit</mat-icon>\n Create/Edit Theme\n </ng-template>\n <div class=\"tab-content\">\n <amw-theme-editor></amw-theme-editor>\n </div>\n </mat-tab>\n </mat-tab-group>\n</div>\n","// Controls exports\nexport * from './controls/components';\nexport * from './controls/interfaces';\n\n// Individual component exports for better tree-shaking\nexport { AmwButtonComponent } from './controls/components/amw-button/amw-button.component';\nexport { AmwInputComponent } from './controls/components/amw-input/amw-input.component';\nexport { AmwSelectComponent } from './controls/components/amw-select/amw-select.component';\nexport { AmwRadioGroupComponent } from './controls/components/amw-radio-group/amw-radio-group.component';\nexport { AmwChipsComponent } from './controls/components/amw-chips/amw-chips.component';\n\n// Components exports\nexport * from './components/components';\n// export * from './components/interfaces';\n// export * from './components/directives';\nexport * from './components/services';\n// export * from './components/pipes';\n\n// Directives exports\nexport * from './directives';\n\n// Pipes exports\nexport * from './pipes';\n\n// Services exports\nexport * from './services';\n\n// Pages exports\nexport * from './pages/components';\n// export * from './pages/directives';\n// export * from './pages/interfaces';\n// export * from './pages/services';\n// export * from './pages/pipes';\n\n// Styling exports\nexport * from './styling/components';\nexport * from './styling/interfaces';\nexport * from './styling/services';\n\n// Individual styling component exports for better tree-shaking\nexport { ThemeService } from './styling/services/theme.service';\nexport { ThemePickerComponent } from './styling/components/theme-picker/theme-picker.component';\nexport { ThemeEditorComponent } from './styling/components/theme-editor/theme-editor.component';\nexport { ThemeManagerComponent } from './styling/components/theme-manager/theme-manager.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i4","i1","i3","i5","i8","i9","i1.CalendarItemRegistryService","i2.CalendarItemPopoverService","i7","i6","i10","i11","takeUntil","i1.IndexedDbStorageService","i2.CacheSyncService","i1.HttpCacheService","i2.CacheConfigService","i12","i13","i14","i1.ThemeService"],"mappings":"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"}