{"version":3,"file":"realsoft-reusable-components-features.mjs","sources":["../../../src/reusable-components/features/id-generator.ts","../../../src/reusable-components/features/form-field/directives/error.ts","../../../src/reusable-components/features/form-field/directives/floating-label.ts","../../../src/reusable-components/features/form-field/directives/form-field-control.ts","../../../src/reusable-components/features/form-field/directives/hint.ts","../../../src/reusable-components/features/form-field/directives/label.ts","../../../src/reusable-components/features/form-field/directives/line-ripple.ts","../../../src/reusable-components/features/form-field/directives/notched-outline.ts","../../../src/reusable-components/features/form-field/directives/prefix.ts","../../../src/reusable-components/features/form-field/directives/suffix.ts","../../../src/reusable-components/features/form-field/form-field-animations.ts","../../../src/reusable-components/features/form-field/form-field-errors.ts","../../../src/reusable-components/features/form-field/models.ts","../../../src/reusable-components/features/form-field/form-field.ts","../../../src/reusable-components/features/form-field/form-field.html","../../../src/reusable-components/features/option/models.ts","../../../src/reusable-components/features/pseudo-checkbox/pseudo-checkbox.ts","../../../src/reusable-components/features/option/option.ts","../../../src/reusable-components/features/option/option.html","../../../src/reusable-components/features/option-group/models.ts","../../../src/reusable-components/features/option-group/option-group.ts","../../../src/reusable-components/features/option-group/option-group.html","../../../src/reusable-components/features/select/error-state-matcher.ts","../../../src/reusable-components/features/select/models.ts","../../../src/reusable-components/features/select/select.ts","../../../src/reusable-components/features/select/select.html","../../../src/reusable-components/features/select/select-animation.ts","../../../src/reusable-components/features/paginator/paginator-config.ts","../../../src/reusable-components/features/paginator/paginator-intl.ts","../../../src/reusable-components/features/paginator/paginator.ts","../../../src/reusable-components/features/paginator/paginator.html","../../../src/reusable-components/features/button-toggle/config.ts","../../../src/reusable-components/features/button-toggle/button-toggle.ts","../../../src/reusable-components/features/button-toggle/button-toggle.html","../../../src/reusable-components/features/button-toggle/errors.ts","../../../src/reusable-components/features/button-toggle/button-toggle-group.ts","../../../src/reusable-components/features/input/helpers.ts","../../../src/reusable-components/features/input/input.ts","../../../src/reusable-components/features/slide-toggle/config.ts","../../../src/reusable-components/features/internal-form-field/internal-form-field.ts","../../../src/reusable-components/features/slide-toggle/slide-toggle.ts","../../../src/reusable-components/features/slide-toggle/slide-toggle.html","../../../src/reusable-components/features/radio/radio-group.ts","../../../src/reusable-components/features/radio/radio-button.ts","../../../src/reusable-components/features/radio/radio-button.html","../../../src/reusable-components/features/sort/models.ts","../../../src/reusable-components/features/sort/errors.ts","../../../src/reusable-components/features/sort/sort.ts","../../../src/reusable-components/features/sort/alphabetical-sort.directive.ts","../../../src/reusable-components/features/sort/date-sort.ts","../../../src/reusable-components/features/sort/numeric-sort.directive.ts","../../../src/reusable-components/features/sort/sort-header.ts","../../../src/reusable-components/features/sort/sort-header.html","../../../src/reusable-components/features/table/cell.ts","../../../src/reusable-components/features/table/cell-def.ts","../../../src/reusable-components/features/table/row.ts","../../../src/reusable-components/features/table/row-def.ts","../../../src/reusable-components/features/table/table.ts","../../../src/reusable-components/features/table/table.html","../../../src/reusable-components/features/table/table-data-source.ts","../../../src/reusable-components/features/menu/errors.ts","../../../src/reusable-components/features/menu/models.ts","../../../src/reusable-components/features/menu/menu-item.ts","../../../src/reusable-components/features/menu/menu-item.html","../../../src/reusable-components/features/menu/menu-content.ts","../../../src/reusable-components/features/menu/menu.ts","../../../src/reusable-components/features/menu/menu.html","../../../src/reusable-components/features/menu/menu-trigger.ts","../../../src/reusable-components/features/tabs/ink-bar.ts","../../../src/reusable-components/features/tabs/tab-content.ts","../../../src/reusable-components/features/tabs/tab-label.ts","../../../src/reusable-components/features/tabs/tab.ts","../../../src/reusable-components/features/tabs/tab.html","../../../src/reusable-components/features/tabs/tab-body.ts","../../../src/reusable-components/features/tabs/tab-body.html","../../../src/reusable-components/features/tabs/tab-config.ts","../../../src/reusable-components/features/tabs/tab-label-wrapper.ts","../../../src/reusable-components/features/tabs/tab-header.ts","../../../src/reusable-components/features/tabs/tab-header.html","../../../src/reusable-components/features/tabs/tab-group.ts","../../../src/reusable-components/features/tabs/tab-group.html","../../../src/reusable-components/features/slider/models.ts","../../../src/reusable-components/features/slider/slider-thumb.ts","../../../src/reusable-components/features/slider/slider-thumb.html","../../../src/reusable-components/features/slider/slider.ts","../../../src/reusable-components/features/slider/slider.html","../../../src/reusable-components/features/slider/slider-input.ts","../../../src/reusable-components/features/chips/models.ts","../../../src/reusable-components/features/chips/chip-avatar.ts","../../../src/reusable-components/features/chips/chip.ts","../../../src/reusable-components/features/chips/chip.html","../../../src/reusable-components/features/chips/chip-edit-input.ts","../../../src/reusable-components/features/chips/chip-row.ts","../../../src/reusable-components/features/chips/chip-row.html","../../../src/reusable-components/features/chips/chip-set.ts","../../../src/reusable-components/features/error-state-matcher.ts","../../../src/reusable-components/features/chips/chip-grid.ts","../../../src/reusable-components/features/chips/chip-input.ts","../../../src/reusable-components/features/chips/chip-option.ts","../../../src/reusable-components/features/chips/chip-option.html","../../../src/reusable-components/features/chips/chip-listbox.ts","../../../src/reusable-components/features/datepicker/shared/date-adapter.ts","../../../src/reusable-components/features/datepicker/shared/moment-date-adapter.ts","../../../src/reusable-components/features/datepicker/shared/native-date-adapter.ts","../../../src/reusable-components/features/datepicker/models.ts","../../../src/reusable-components/features/datepicker/datepicker-intl.ts","../../../src/reusable-components/features/datepicker/calendar-body.ts","../../../src/reusable-components/features/datepicker/calendar-body.html","../../../src/reusable-components/features/datepicker/shared/datepicker-errors.ts","../../../src/reusable-components/features/datepicker/services/default-range-selection-strategy.ts","../../../src/reusable-components/features/datepicker/datepicker-month-view.ts","../../../src/reusable-components/features/datepicker/datepicker-month-view.html","../../../src/reusable-components/features/datepicker/datepicker-year-view.ts","../../../src/reusable-components/features/datepicker/datepicker-year-view.html","../../../src/reusable-components/features/datepicker/datepicker-multi-year-view.ts","../../../src/reusable-components/features/datepicker/datepicker-multi-year-view.html","../../../src/reusable-components/features/datepicker/calendar-header.ts","../../../src/reusable-components/features/datepicker/calendar-header.html","../../../src/reusable-components/features/datepicker/calendar.ts","../../../src/reusable-components/features/datepicker/calendar.html","../../../src/reusable-components/features/datepicker/datepicker-content.ts","../../../src/reusable-components/features/datepicker/datepicker-content.html","../../../src/reusable-components/features/datepicker/base.ts","../../../src/reusable-components/features/datepicker/date-range-picker.ts","../../../src/reusable-components/features/datepicker/datepicker-actions.ts","../../../src/reusable-components/features/datepicker/datepicker-base.ts","../../../src/reusable-components/features/datepicker/datepicker-input.ts","../../../src/reusable-components/features/datepicker/datepicker-range-input.ts","../../../src/reusable-components/features/datepicker/datepicker-range-input.html","../../../src/reusable-components/features/datepicker/datepicker-range-input-base.ts","../../../src/reusable-components/features/datepicker/datepicker-end-date.ts","../../../src/reusable-components/features/datepicker/datepicker-start-date.ts","../../../src/reusable-components/features/datepicker/datepicker-toggle.ts","../../../src/reusable-components/features/datepicker/datepicker-toggle.html","../../../src/reusable-components/features/timepicker/helpers.ts","../../../src/reusable-components/features/timepicker/timepicker.ts","../../../src/reusable-components/features/timepicker/timepicker.html","../../../src/reusable-components/features/timepicker/timepicker-input.ts","../../../src/reusable-components/features/timepicker/timepicker-toggle.ts","../../../src/reusable-components/features/timepicker/timepicker-toggle.html","../../../src/reusable-components/features/breadcrumb/breadcrumb-item.directive.ts","../../../src/reusable-components/features/breadcrumb/breadcrumb.component.ts","../../../src/reusable-components/features/breadcrumb/breadcrumb.component.html","../../../src/reusable-components/features/public-api.ts","../../../src/reusable-components/features/realsoft-reusable-components-features.ts"],"sourcesContent":["import { APP_ID, inject, Injectable } from \"@angular/core\";\r\n//Use APP_ID \"Built-in Angular token\" to represent the Application ID. Since each application gets a unique APP_ID when running in the same environment.\r\n\r\n//The service is provided at root level which means it's available throughout the application\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class UniqueIdGeneratorService {\r\n    //Retrieve the APP_ID using the inject function. This value is used to differentiate IDs across different Angular Applications running on the same page. \r\n    private readonly _appId = inject(APP_ID);\r\n\r\n    //counters map to keep track of the count of IDs generated for each prefix. It ensures that IDs generated with the same prefix remain unique.\r\n    private readonly _counters = new Map<string, number>();\r\n\r\n    //Generate a Unique ID with a prefix\r\n    generateID(prefix: string): string {\r\n        //If the appId is not the default `ng` then adjust the prefix to include the appId otherwise just return the prefix. \r\n        const effectivePrefix = this._appId !== 'ng' ? `${prefix}${this._appId}` : prefix;\r\n\r\n        //Get the current count for this prefix or initialize it.\r\n        const currentCount = this._counters.get(effectivePrefix) || 0;\r\n\r\n        //Increment the counter and update the map to ensure future calls generate unique IDs\r\n        this._counters.set(effectivePrefix, currentCount + 1);\r\n\r\n        //Return the generated Unique ID by concatenating the counter's value to the prefix\r\n        return `${effectivePrefix}${currentCount}`;\r\n    }\r\n}","import { Directive, inject, InjectionToken, Input } from \"@angular/core\";\r\nimport { UniqueIdGeneratorService } from \"../../id-generator\";\r\n\r\n\r\n\r\n//Injection token to reference instances of RealsoftError\r\nexport const REALSOFT_ERROR = new InjectionToken<RealsoftError>('RealsoftError');\r\n\r\n@Directive({\r\n    selector: 'realsoft-error, [realsoftError]',\r\n    host: {\r\n        'class' : 'realsoft-form-field-error realsoft-form-field-bottom-align',\r\n        '[id]' : 'id'\r\n    },\r\n    providers: [{provide: REALSOFT_ERROR, useExisting: RealsoftError}],\r\n    standalone: true\r\n})\r\nexport class RealsoftError {\r\n    @Input() id: string = inject(UniqueIdGeneratorService).generateID('realsoft-error-');\r\n}","import { SharedResizeObserver } from \"@angular/cdk/observers/private\";\r\nimport { Directive, ElementRef, inject, InjectionToken, Input, NgZone, OnDestroy } from \"@angular/core\";\r\nimport { Subscription } from \"rxjs\";\r\n\r\n\r\nexport interface RealsoftFloatingLabelParent {\r\n    _handleLabelResized(): void;\r\n  }\r\n  \r\nexport const REALSOFT_FLOATING_LABEL_PARENT = new InjectionToken<RealsoftFloatingLabelParent>('RealsoftFloatingLabelParent');\r\n\r\n@Directive({\r\n    selector: 'label[realsoftFormFieldFloatingLabel]',\r\n    host: {\r\n        'class': 'realsoft-floating-label',\r\n        '[class.realsoft-floating-label-float-above]': 'floating'\r\n    },\r\n    standalone: true\r\n})\r\nexport class RealsoftFormFieldFloatingLabel implements OnDestroy{ \r\n    private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n    private _floating = false;\r\n    private _monitorResize = false;\r\n    private _resizeObserver = inject(SharedResizeObserver);\r\n    private _ngZone = inject(NgZone);\r\n    private _parentWrapper = inject(REALSOFT_FLOATING_LABEL_PARENT);\r\n    private _resizeLabelSubscription = new Subscription();\r\n\r\n    @Input() \r\n    get floating() {\r\n        return this._floating;\r\n    }\r\n    set floating(value: boolean) {\r\n        this._floating = value;\r\n        if(this.monitorResize) this._handleResize()\r\n    }\r\n\r\n    @Input()\r\n    get monitorResize() {\r\n      return this._monitorResize;\r\n    }\r\n    set monitorResize(value: boolean) {\r\n      this._monitorResize = value;\r\n      if (this._monitorResize) {\r\n        this._resizeSubscription();\r\n      } else {\r\n        this._resizeLabelSubscription.unsubscribe();\r\n      }\r\n    }\r\n\r\n    //Get the HTML Element of the floating label.\r\n    get element(): HTMLElement {\r\n        return this._elementRef.nativeElement;\r\n    }\r\n\r\n    //Get the width of the label, used when appearance is outline.\r\n    getWidth(): number {\r\n      return this.calculateElementScrollWidth(this._elementRef.nativeElement);\r\n    }\r\n\r\n    //Handle the resizing events when subscribing to the resizeobserver\r\n    private _handleResize() {\r\n        setTimeout(() => this._parentWrapper._handleLabelResized());\r\n    }\r\n\r\n    //Subscribe to resizing events by using Content Observer to watch elements for changes to their contents\r\n    private _resizeSubscription() {\r\n        this._resizeLabelSubscription.unsubscribe();\r\n        this._ngZone.runOutsideAngular(() => {\r\n            this._resizeLabelSubscription = this._resizeObserver.observe(this._elementRef.nativeElement,{box: 'border-box'}).subscribe(()=>{\r\n              this._handleResize();\r\n            });\r\n        })\r\n    }\r\n\r\n    //A function to estimate the scrollWidth of an HTML element, even if the element is not currently visible in the DOM\r\n    calculateElementScrollWidth(element: HTMLElement): number {\r\n        const htmlElement = element as HTMLElement; //cast the function input parameter as an HTMLElement to explicitly ensure that the type is an HTMLElement\r\n\r\n        //Checking if the element is visible => The offset property checks if the element is part of the visible DOM\r\n        //If offsetParent is not null then the element is visible, hence the function will return the scroll width immediately.\r\n        if(htmlElement.offsetParent !== null) return htmlElement.scrollWidth;\r\n\r\n        //Handling Hidden Elements\r\n        //1. If the element is not visible => display: none for example then it's scroll width cannot be calculated directly.\r\n        //2. The function creates a clone of the original element using cloneNode(true) => A deep clone that includes child nodes\r\n        const clonedElement = htmlElement.cloneNode(true) as HTMLElement;\r\n\r\n        //Position the cloned element to be off-screen\r\n        // The clone is styled to be absolutely positioned and moved off-screen using tranform: translate, which ensures the clone doesn't effect the layout of the visible page.\r\n        clonedElement.style.setProperty('position', 'absolute');\r\n        clonedElement.style.setProperty('transform','translate(-9999px, -9999px)');\r\n\r\n        //Appened the cloned element to the DOM so that it's dimensions can be measured\r\n        document.documentElement.appendChild(clonedElement);\r\n\r\n        //Measure the width and remove the clone for unnecessary cluttering\r\n        const scrollWidth = clonedElement.scrollWidth;\r\n        clonedElement.remove();\r\n\r\n        return scrollWidth\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this._resizeLabelSubscription.unsubscribe();\r\n      }\r\n  }\r\n  ","import { Directive } from \"@angular/core\";\r\nimport { AbstractControlDirective, NgControl } from \"@angular/forms\";\r\nimport { Observable } from \"rxjs\";\r\n\r\n//An interface that allows a control to work inside of a RealsoftFormField\r\n\r\n//T Represents the value of the control\r\n@Directive({})\r\nexport abstract class RealsoftFormFieldControl<T> {\r\n    //Properties \r\n\r\n    //Whether the input is currently in an autofilled state. If property is not present on the control it is assumed to be false.\r\n    readonly autofilled?: boolean;\r\n\r\n    /*An optional name for the control type that can be used to distinguish realsoft-form-field elements based on their control type.\r\n    The form field will add a class realsoft-form-field-type-{{controlType}} to its root element\r\n    */\r\n    readonly controlType?: string;\r\n\r\n    /*Whether to automatically assign the ID of the form field as the for attribute on the <label> inside the form field. \r\n    Set this to true to prevent the form field from associating the label with non-native elements.*/\r\n    readonly disableAutomaticLabeling?: boolean; \r\n\r\n    //Whether the control is disabled\r\n    readonly disabled: boolean;\r\n\r\n    //Whether the control is empty\r\n    readonly empty: boolean;\r\n\r\n    //Whether the control is in an error state\r\n    readonly errorState: boolean;\r\n\r\n    //Whether the control is focused\r\n    readonly focused: boolean;\r\n\r\n    //The element ID for this control \r\n    readonly id: string; \r\n\r\n    //Gets the AbstractControlDirective for this control \r\n    readonly ngControl: NgControl | AbstractControlDirective | null;\r\n\r\n    //The placeholder for this control \r\n    readonly placeholder?: string;\r\n\r\n    //Whether the control is required\r\n    readonly required: boolean;\r\n\r\n    //Whether the RealsoftFormField label should float or not\r\n    readonly shouldLabelFloat: boolean; \r\n\r\n    //Stream that emits whenever the state of the control changes such that the parent RealsoftFormField needs to run change detection.\r\n    readonly stateChanges : Observable<void>;\r\n\r\n    //Represents the value of the form control\r\n    value: T | null; \r\n\r\n    //Value of aria-describedby that should be merged with the described-by ids which are set by the form-field\r\n    readonly userAriaDescribedBy?: string;\r\n\r\n    //Methods\r\n\r\n    //Method 1 for handling the click on the control's container\r\n    abstract onContainerClick(event: MouseEvent): void;\r\n\r\n    //Method 2 for setting the list of element IDs that currently describe the control\r\n    abstract setDescribedByIds?(ids : string[]): void;\r\n\r\n}","import { Directive, inject, InjectionToken, Input } from \"@angular/core\";\r\nimport { UniqueIdGeneratorService } from \"../../id-generator\";\r\n\r\n//Injection Token to reference instances of RealsoftHint\r\nexport const REALSOFT_HINT = new InjectionToken<RealsoftHint>('RealsoftHint');\r\n\r\n@Directive({\r\n    selector: 'realsoft-hint',\r\n    host: {\r\n        'class': 'realsoft-form-field-hint realsoft-form-field-bottom-align',\r\n        '[class.realsoft-form-field-hint-end]': 'align === \"end\"',\r\n        '[id]': 'id'\r\n    },\r\n    providers: [{provide: REALSOFT_HINT, useExisting: RealsoftHint}],\r\n    standalone: true\r\n})\r\nexport class RealsoftHint {\r\n    //Unique Id for the hint\r\n    @Input() id: string = inject(UniqueIdGeneratorService).generateID('realsoft-hint-');\r\n    //Whether to align the hint label at the start or end of the line\r\n    @Input() align : 'start' | 'end' = 'start';\r\n}","import { Directive } from \"@angular/core\";\r\n\r\n\r\n@Directive({\r\n    selector: 'realsoft-label',\r\n    host: {\r\n        'class' : 'realsoft-label'\r\n    },\r\n    standalone: true,\r\n})\r\nexport class RealsoftLabel {}","import { Directive, ElementRef, inject, NgZone, OnDestroy } from \"@angular/core\";\r\n\r\n@Directive({\r\n    selector: 'div[realsoftFormFieldLineRipple]',\r\n    host: {\r\n        'class': 'realsoft-line-ripple'\r\n    },\r\n    standalone: true\r\n})\r\nexport class RealsoftFormFieldLineRipple implements OnDestroy {\r\n    private _ngZone = inject(NgZone);\r\n    private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n    private _cleanupTransition: () => void;\r\n\r\n\r\n    constructor() {\r\n        this._ngZone.runOutsideAngular(() => {\r\n            const transitionHandler = this._handleTransition.bind(this);\r\n            this._elementRef.nativeElement.addEventListener('transitionend', transitionHandler);\r\n\r\n            this._cleanupTransition = () => {\r\n                this._elementRef.nativeElement.removeEventListener('transitionend', transitionHandler)\r\n            }\r\n        })\r\n    }\r\n\r\n    activateRipple() {\r\n        this._elementRef.nativeElement.classList.remove('realsoft-line-ripple-deactivating');\r\n        this._elementRef.nativeElement.classList.add('realsoft-line-ripple-active');\r\n    }\r\n\r\n    deactivateRipple() {\r\n        this._elementRef.nativeElement.classList.remove('realsoft-line-ripple-active');\r\n        this._elementRef.nativeElement.classList.add('realsoft-line-ripple-deactivating');\r\n    }\r\n\r\n    private _handleTransition = (event: TransitionEvent) => {\r\n        const deactiviating = this._elementRef.nativeElement.classList.contains('realsoft-line-ripple-deactivating');\r\n\r\n        if(event.propertyName === 'opacity' && deactiviating) this._elementRef.nativeElement.classList.remove('realsoft-line-ripple-active', 'realsoft-line-ripple-deactivating');\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this._cleanupTransition();\r\n    }\r\n\r\n}\r\n\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, inject, Input, NgZone, ViewChild, ViewEncapsulation } from \"@angular/core\";\r\n\r\n\r\n@Component({\r\n    selector: 'div[realsoftFormFieldNotchedOutline]',\r\n    template: `<div class=\"realsoft-notch-piece realsoft-notched-outline__leading\"></div>\r\n        <div class=\"realsoft-notch-piece realsoft-notched-outline__notch\" #notchOutline>\r\n          <ng-content></ng-content>\r\n        </div>\r\n    <div class=\"realsoft-notch-piece realsoft-notched-outline__trailing\"></div>`,\r\n    host: {\r\n        'class': 'realsoft-notched-outline',\r\n        '[class.realsoft-notched-outline-notched]': 'open'\r\n    },\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true\r\n})\r\nexport class RealsoftFormFieldNotchedOutline implements AfterViewInit {\r\n        private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n        private _ngZone = inject(NgZone);\r\n\r\n    @Input('realsoftFormFieldOpenNotchedOutline') open: boolean = false;\r\n\r\n    @ViewChild('notchOutline') _notchElement: ElementRef;\r\n\r\n    ngAfterViewInit(): void {\r\n        const label = this._getFloatingLabelElement();\r\n\r\n        if(label) {\r\n            this._upgradeOutline();\r\n            this._applyTransitionAnimation(label);\r\n        } else {\r\n            this._setNoFloatingLabelClass();\r\n        }\r\n    }\r\n \r\n    private _getFloatingLabelElement(): HTMLElement | null {\r\n        return this._elementRef.nativeElement.querySelector<HTMLElement>('.realsoft-floating-label');\r\n    }\r\n\r\n    private _upgradeOutline(): void {\r\n        this._elementRef.nativeElement.classList.add('realsoft-notched-outline-upgraded');\r\n    }\r\n\r\n    private _setNoFloatingLabelClass(): void {\r\n        this._elementRef.nativeElement.classList.add('realsoft-notched-outline-no-floating-label');\r\n    }\r\n\r\n    private _applyTransitionAnimation(label: HTMLElement): void {\r\n        if(typeof requestAnimationFrame === 'function') {\r\n            label.style.transitionDuration = '0s';\r\n            this._ngZone.runOutsideAngular(() => {\r\n                requestAnimationFrame(() => {\r\n                    label.style.transitionDuration = '';\r\n                })\r\n            })\r\n        }\r\n    }\r\n\r\n    _setNotchWidth(labelWidth: number) {\r\n        (!this.open || !labelWidth) ? this._zeroNotchWidth() : this._calculateNotchWidth(labelWidth);\r\n    }\r\n\r\n    _zeroNotchWidth(): void {\r\n        this._notchElement.nativeElement.style.width = '';\r\n    }\r\n\r\n    _calculateNotchWidth(labelWidth: number): void {\r\n        const padding = 8;\r\n        const border = 1;\r\n        this._notchElement.nativeElement.style.width = `calc(${labelWidth}px * var(--realsoft-form-field-floating-label-scale, 0.75) + ${\r\n            padding + border\r\n        }px)`;\r\n    }\r\n\r\n}\r\n","import { Directive, InjectionToken, Input } from \"@angular/core\";\r\n\r\n//Injection Token to reference instances of RealsoftPrefix\r\nexport const REALSOFT_PREFIX = new InjectionToken<RealsoftPrefix>('RealsoftPrefix');\r\n\r\n@Directive({\r\n    selector: '[realsoftPrefix], [realsoftIconPrefix], [realsoftTextPrefix]',\r\n    providers: [{provide: REALSOFT_PREFIX, useExisting: RealsoftPrefix}],\r\n    standalone:true\r\n})\r\nexport class RealsoftPrefix {\r\n  _isText = false;\r\n  @Input('realsoftTextPrefix')\r\n  set _isTextSelector(value: '') {\r\n    this._isText = true;\r\n  }\r\n}","import { Directive, InjectionToken, Input } from \"@angular/core\";\r\n\r\n//Injection Token to reference instances of RealsoftSuffix\r\nexport const REALSOFT_SUFFIX = new InjectionToken<RealsoftSuffix>('RealsoftSuffix');\r\n\r\n@Directive({\r\n    selector: '[realsoftSuffix], [realsoftIconSuffix], [realsoftTextSuffix]',\r\n    providers: [{provide: REALSOFT_SUFFIX, useExisting: RealsoftSuffix}],\r\n    standalone: true\r\n})\r\nexport class RealsoftSuffix {\r\n    _isText = false;\r\n  @Input('realsoftTextSuffix')\r\n  set _isTextSelector(value: '') {\r\n    this._isText = true;\r\n  }\r\n}","import {\r\n    animate,\r\n    state,\r\n    style,\r\n    transition,\r\n    trigger,\r\n    AnimationTriggerMetadata,\r\n  } from '@angular/animations';\r\n  \r\n  export const RealsoftFormFieldAnimations: {\r\n    readonly transitionMessages: AnimationTriggerMetadata;\r\n  } = {\r\n    transitionMessages: trigger('transitionMessages', [\r\n      state('enter', style({opacity: 1, transform: 'translateY(0%)'})),\r\n      transition('void => enter', [\r\n        style({opacity: 0, transform: 'translateY(-5px)'}),\r\n        animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)'),\r\n      ]),\r\n    ]),\r\n  };","\r\nexport function getRealsoftFormFieldDuplicateHintError(align: string): Error {\r\n    return Error(`A hint was already declared for 'align=\"${align}\"'.`);\r\n}\r\n\r\nexport function getRealsoftFormFieldMissingControlError(): Error {\r\n    return Error('realsoft-form-field must contain a RealsoftFormFieldControl.');\r\n}\r\n\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { RealsoftFormField } from \"./form-field\";\r\n\r\n//Possible appearance styles for the form field\r\nexport type RealsoftFormFieldAppearance = 'fill' | 'outline';\r\n\r\n//Behaviors for how the subscript height is set\r\nexport type RealsoftSubscriptSizing = 'fixed' | 'dynamic';\r\n\r\n//Type for the available floatLabel values\r\nexport type RealsoftFloatLabelType = 'always' | 'auto';\r\n\r\n//Represents the default options for the form field that can be configured using the REALSOFT_FORM_FIELD_DEFAULT_OPTIONS Injection Token\r\nexport interface RealsoftFormFieldDefaultOptions { \r\n    //Default Form Field Appearance Style\r\n    appearance: RealsoftFormFieldAppearance; \r\n\r\n    //Whether the label for the form fields should by default float always \r\n    floatLabel: RealsoftFloatLabelType; \r\n\r\n    //Whether the required marker should be hidden by default \r\n    hideRequiredMarker: boolean;\r\n\r\n    //Whether the form field should reverse space for one line by default\r\n    subscriptSizing: RealsoftSubscriptSizing;\r\n}\r\n\r\n//Injection token that can be used to inject an instances of RealsoftFormField. It serves as alternative token to the actual RealsoftFormField class which would cause unnecessary retention of the RealsoftFormField class and its component metadata.\r\nexport const REALSOFT_FORM_FIELD = new InjectionToken<RealsoftFormField>('RealsoftFormField');\r\n\r\n//Injection token that can be used to configure the default options for all form field within an app \r\nexport const REALSOFT_FORM_FIELD_DEFAULT_OPTIONS = new InjectionToken<RealsoftFormFieldDefaultOptions>('REALSOFT_FORM_FIELD_DEFAULT_OPTIONS');\r\n\r\n","import { Directionality } from \"@angular/cdk/bidi\";\r\nimport { NgTemplateOutlet } from \"@angular/common\";\r\nimport { AfterContentChecked, AfterContentInit, AfterViewChecked, AfterViewInit, ANIMATION_MODULE_TYPE, booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, contentChild, ContentChild, ContentChildren, ElementRef, inject, Input, OnDestroy, QueryList, ViewChild, ViewEncapsulation } from \"@angular/core\";\r\nimport { AbstractControlDirective } from \"@angular/forms\";\r\nimport { merge, Subject, Subscription, takeUntil } from \"rxjs\";\r\nimport { UniqueIdGeneratorService } from \"../id-generator\";\r\nimport { REALSOFT_ERROR, RealsoftError } from \"./directives/error\";\r\nimport { REALSOFT_FLOATING_LABEL_PARENT, RealsoftFloatingLabelParent, RealsoftFormFieldFloatingLabel } from \"./directives/floating-label\";\r\nimport { RealsoftFormFieldControl } from \"./directives/form-field-control\";\r\nimport { REALSOFT_HINT, RealsoftHint } from \"./directives/hint\";\r\nimport { RealsoftLabel } from \"./directives/label\";\r\nimport { RealsoftFormFieldLineRipple } from \"./directives/line-ripple\";\r\nimport { RealsoftFormFieldNotchedOutline } from \"./directives/notched-outline\";\r\nimport { REALSOFT_PREFIX, RealsoftPrefix } from \"./directives/prefix\";\r\nimport { REALSOFT_SUFFIX, RealsoftSuffix } from \"./directives/suffix\";\r\nimport { RealsoftFormFieldAnimations } from \"./form-field-animations\";\r\nimport { getRealsoftFormFieldDuplicateHintError, getRealsoftFormFieldMissingControlError } from \"./form-field-errors\";\r\nimport { REALSOFT_FORM_FIELD, REALSOFT_FORM_FIELD_DEFAULT_OPTIONS, RealsoftFloatLabelType, RealsoftFormFieldAppearance, RealsoftFormFieldDefaultOptions, RealsoftSubscriptSizing } from \"./models\";\r\n\r\n\r\nconst REALSOFT_DEFAULT_SUBSCRIPT_SIZING: RealsoftSubscriptSizing = 'fixed';\r\n\r\nconst REALSOFT_DEFAULT_FLOAT_LABEL: RealsoftFloatLabelType = 'auto';\r\n\r\nconst REALSOFT_DEFAULT_APPEARANCE: RealsoftFormFieldAppearance = 'outline';\r\n\r\n\r\n\r\n@Component({\r\n    selector: 'realsoft-form-field',\r\n    templateUrl: './form-field.html',\r\n    styleUrl: './form-field.scss',\r\n    standalone: true,\r\n    animations: [RealsoftFormFieldAnimations.transitionMessages],\r\n    host: {\r\n        'class': 'realsoft-form-field',\r\n        '[class.realsoft-form-field-label-always-float]': '_shouldAlwaysFloat()',\r\n        '[class.realsoft-form-field-has-icon-prefix]': 'hasIconPrefix',\r\n        '[class.realsoft-form-field-has-icon-suffix]': 'hasIconSuffix',\r\n        '[class.realsoft-form-field-invalid]': '_control.errorState',\r\n        '[class.realsoft-form-field-disabled]': '_control.disabled',\r\n        '[class.realsoft-form-field-autofilled]': '_control.autofilled',\r\n        '[class.realsoft-form-field-no-animations]': '_animationMode === \"NoopAnimations\"',\r\n        '[class.realsoft-form-field-appearance-fill]': 'appearance === \"fill\"',\r\n        '[class.realsoft-form-field-appearance-outline]': 'appearance === \"outline\"',\r\n        '[class.realsoft-form-field-hide-placeholder]': '_hasFloatingLabel() && !_shouldLabelFloat()',\r\n        '[class.realsoft-form-field-focused]': '_control.focused',\r\n        '[class.ng-untouched]': '_applyFormClasses(\"untouched\")',\r\n        '[class.ng-touched]': '_applyFormClasses(\"touched\")',\r\n        '[class.ng-pristine]': '_applyFormClasses(\"pristine\")',\r\n        '[class.ng-dirty]': '_applyFormClasses(\"dirty\")',\r\n        '[class.ng-valid]': '_applyFormClasses(\"valid\")',\r\n        '[class.ng-invalid]': '_applyFormClasses(\"invalid\")',\r\n        '[class.ng-pending]': '_applyFormClasses(\"pending\")',\r\n        '[class.textarea-formfield]': 'textArea'\r\n    },\r\n    providers: [\r\n      {provide: REALSOFT_FORM_FIELD, useExisting: RealsoftFormField},\r\n      {provide: REALSOFT_FLOATING_LABEL_PARENT, useExisting: RealsoftFormField},\r\n    ],\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    imports: [\r\n        RealsoftFormFieldFloatingLabel,\r\n        RealsoftFormFieldNotchedOutline,\r\n        RealsoftFormFieldLineRipple,\r\n        RealsoftHint,\r\n        NgTemplateOutlet\r\n    ]\r\n})\r\nexport class RealsoftFormField implements RealsoftFloatingLabelParent, AfterViewInit, AfterViewChecked, AfterContentInit, AfterContentChecked, OnDestroy{\r\n    _uniqueIDGenerator = inject(UniqueIdGeneratorService, {optional: true});\r\n    _elementRef = inject(ElementRef);\r\n    //For manual Change Detection\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _direction = inject(Directionality);\r\n    private _defaultOptions = inject<RealsoftFormFieldDefaultOptions>(REALSOFT_FORM_FIELD_DEFAULT_OPTIONS, {optional: true});\r\n    _animationMode = inject(ANIMATION_MODULE_TYPE, {optional: true});\r\n\r\n    private _destroy = new Subject<void>();\r\n    private _changes : Subscription | undefined;\r\n    private _valueChanges : Subscription | undefined;\r\n\r\n    private _focused: boolean | null = null;\r\n    private _currentFormFieldControl: RealsoftFormFieldControl<any>;\r\n    private _previousFormFieldControl: RealsoftFormFieldControl<unknown> | null = null;\r\n\r\n\r\n    @ViewChild('textField') _textField: ElementRef<HTMLElement>;\r\n    @ViewChild('prefixText') _prefixText: ElementRef<HTMLElement>;\r\n    @ViewChild('prefixIcon') _prefixIcon: ElementRef<HTMLElement>;\r\n    @ViewChild('suffixText') _suffixText: ElementRef<HTMLElement>;\r\n    @ViewChild('suffixIcon') _suffixIcon: ElementRef<HTMLElement>;\r\n\r\n    @ViewChild(RealsoftFormFieldNotchedOutline) _notchedOutline: RealsoftFormFieldNotchedOutline | undefined;\r\n    @ViewChild(RealsoftFormFieldLineRipple) _lineRipple: RealsoftFormFieldLineRipple | undefined;\r\n\r\n    //Query all possible childrens of the form field\r\n    @ContentChildren(REALSOFT_PREFIX, {descendants: true}) _prefixeElements: QueryList<RealsoftPrefix>;\r\n    @ContentChildren(REALSOFT_SUFFIX, {descendants: true}) _suffixElements: QueryList<RealsoftSuffix>;\r\n    @ContentChildren(REALSOFT_ERROR, {descendants: true}) _errorElements: QueryList<RealsoftError>;\r\n    @ContentChildren(REALSOFT_HINT, {descendants: true}) _hintElements: QueryList<RealsoftHint>;\r\n    @ViewChild(RealsoftFormFieldFloatingLabel) _floatingLabel: RealsoftFormFieldFloatingLabel | undefined;\r\n\r\n\r\n    @ContentChild(RealsoftFormFieldControl) _formFieldControl: RealsoftFormFieldControl<any>;\r\n    private readonly _labelElement = contentChild(RealsoftLabel);\r\n\r\n    //Unique id for the internal form field label\r\n    readonly _labelId = this._uniqueIDGenerator.generateID('realsoft-form-field-label-');\r\n    readonly _hintId = this._uniqueIDGenerator.generateID('realsoft-hint-');\r\n    getLabelId = computed(() => (this._hasFloatingLabel() ? this._labelId : null));\r\n\r\n    //Class Properties \r\n    private _hideRequiredMarker = false;\r\n    private _floatLabel: RealsoftFloatLabelType;\r\n    private _appearance: RealsoftFormFieldAppearance = 'outline';\r\n    private _hintLabel = '';\r\n    private _hasIconPrefix = false;\r\n    private _hasTextPrefix = false;\r\n    private _hasIconSuffix = false;\r\n    private _hasTextSuffix = false;\r\n    private _oultineLabelOffsetUpdateNeeded = false;\r\n    private _subscriptSizing: RealsoftSubscriptSizing | null = null;\r\n    _subscriptsAnimationState = ''; //state of the realsoft-hint and realsoft-error animations.\r\n\r\n\r\n\r\n    //Class getters\r\n    get hasIconPrefix(): boolean {\r\n        return this._hasIconPrefix;\r\n    }\r\n\r\n    get hasTextPrefix(): boolean {\r\n        return this._hasTextPrefix;\r\n    }\r\n\r\n    get hasIconSuffix(): boolean {\r\n        return this._hasIconSuffix;\r\n    }\r\n\r\n    get hasTextSuffix(): boolean {\r\n        return this._hasTextSuffix;\r\n    }\r\n\r\n    _hasFloatingLabel = computed(() => !!this._labelElement());\r\n\r\n\r\n    //Whether the required marker should be hidden \r\n    @Input({transform: booleanAttribute})\r\n    get hideRequiredMarker(): boolean {\r\n        return this._hideRequiredMarker;\r\n    }\r\n    set hideRequiredMarker(value: boolean) {\r\n        this._hideRequiredMarker = value;\r\n    }\r\n\r\n    //Whether the label should always float ir float as the user types\r\n    @Input()\r\n    get floatLabel(): RealsoftFloatLabelType {\r\n        return this._floatLabel || this._defaultOptions?.floatLabel || REALSOFT_DEFAULT_FLOAT_LABEL;\r\n    }\r\n    set floatLabel(value: RealsoftFloatLabelType) {\r\n        if(value !== this._floatLabel) {\r\n            this._floatLabel = value;\r\n            this._changeDetectorRef.markForCheck();\r\n        }\r\n    }\r\n\r\n    @Input({transform: booleanAttribute}) textArea: boolean = false; \r\n\r\n    //The Form Field Appearance Style\r\n    @Input()\r\n    get appearance(): RealsoftFormFieldAppearance {\r\n        return this._appearance;\r\n    }\r\n    set appearance(value: RealsoftFormFieldAppearance) {\r\n        const previousValue = this._appearance;\r\n        this._appearance = value || this._defaultOptions?.appearance || REALSOFT_DEFAULT_APPEARANCE;\r\n\r\n        if(this._appearance === 'outline' && this._appearance !== previousValue) {\r\n            this._oultineLabelOffsetUpdateNeeded = true;\r\n        }\r\n    }\r\n\r\n    //Whether the form field should reserve space for one line of hint/error text(default) or to have the spacing grow from 0px as needed based on the size of the hint/error context. \r\n    @Input()\r\n    get subscriptSizing(): RealsoftSubscriptSizing {\r\n        return this._subscriptSizing || this._defaultOptions?.subscriptSizing || REALSOFT_DEFAULT_SUBSCRIPT_SIZING;\r\n    }\r\n    set subscriptSizing(value: RealsoftSubscriptSizing) {\r\n        this._subscriptSizing = value || this._defaultOptions?.subscriptSizing || REALSOFT_DEFAULT_SUBSCRIPT_SIZING;\r\n    }\r\n\r\n    //Text for the form field hint \r\n    @Input()\r\n    get hintLabel(): string {\r\n        return this._hintLabel; \r\n    }\r\n    set hintLabel(value: string) {\r\n        this._hintLabel = value;\r\n        this._validatingHints();\r\n    }\r\n\r\n    constructor() {\r\n        if(this._defaultOptions?.appearance) {\r\n            this.appearance = this._defaultOptions?.appearance;\r\n        }\r\n        if(this._defaultOptions?.hideRequiredMarker) {\r\n            this.hideRequiredMarker = this._defaultOptions?.hideRequiredMarker;\r\n        }\r\n    }\r\n\r\n    //Lifecycle Hooks Implementation\r\n    ngAfterViewInit(): void {\r\n        this._updatingFormFieldFocusState();\r\n        this._subscriptsAnimationState = 'enter';\r\n        // this._initializePrefixAndSuffix();\r\n        // this._initOutlineLabelOffset();\r\n        this._changeDetectorRef.detectChanges();\r\n    }\r\n\r\n    ngAfterViewChecked(): void {\r\n      this._initializePrefixAndSuffix();\r\n      this._initOutlineLabelOffset();\r\n      this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    ngAfterContentInit(): void {\r\n        this._formControlPresenceCheck();\r\n        this._initializeHintErrorSubscripts();\r\n        this._initializePrefixAndSuffix();\r\n      this._initOutlineLabelOffset();\r\n      this._changeDetectorRef.markForCheck();\r\n        \r\n    }\r\n\r\n    ngAfterContentChecked() {\r\n        this._formControlPresenceCheck();\r\n\r\n        if(this._control !== this._previousFormFieldControl) {\r\n            this._controlInitialization(this._previousFormFieldControl);\r\n            this._previousFormFieldControl = this._control;\r\n        }\r\n\r\n    }\r\n\r\n    //get the current form field control \r\n    get _control(): RealsoftFormFieldControl<any> {\r\n        return this._currentFormFieldControl || this._formFieldControl;\r\n    }\r\n    set _control(value) {\r\n        this._currentFormFieldControl = value;\r\n    }\r\n\r\n    getConnectedOverlayOrigin(): ElementRef {\r\n        return this._textField || this._elementRef;\r\n    }\r\n\r\n    _lockLabel(): void {\r\n        if(this._hasFloatingLabel()) this.floatLabel = 'always';\r\n    }\r\n\r\n  private _validatingHints() {\r\n    if (this._hintElements) {\r\n        let startHint: RealsoftHint;\r\n        let endHint: RealsoftHint;\r\n\r\n        this._hintElements.forEach((hint: RealsoftHint) => {\r\n            if(hint.align === 'start') {\r\n                if(startHint || this.hintLabel) {\r\n                    throw getRealsoftFormFieldDuplicateHintError('start');\r\n                }\r\n                startHint = hint;\r\n            }\r\n            else if(hint.align === 'end') {\r\n                if(endHint || this.hintLabel) {\r\n                    throw getRealsoftFormFieldDuplicateHintError('end');\r\n                }\r\n                endHint = hint;\r\n            }\r\n        })\r\n\r\n    }\r\n  }\r\n\r\n   _isOutline(): boolean {\r\n    return this.appearance === 'outline';\r\n   }\r\n\r\n  _handleLabelResized(): void {\r\n    this._recalculateOutlineNotchWidth();\r\n  }\r\n\r\n  _shouldAlwaysFloat() {\r\n    return this.floatLabel === 'always';\r\n  }\r\n\r\n  _shouldLabelFloat(): boolean {\r\n    if (!this._hasFloatingLabel()) {\r\n      return false;\r\n    }\r\n    return this._control.shouldLabelFloat || this._shouldAlwaysFloat();\r\n  }\r\n\r\n\r\n  //Determines the class to be applied on the host element based on the control property\r\n  _applyFormClasses(property: keyof AbstractControlDirective): boolean {\r\n    const control = this._control ? this._control.ngControl : null;\r\n    return control && control[property];\r\n  }\r\n\r\n  _getMessagesToDisplay(): 'error' | 'hint' { \r\n    return this._errorElements && this._errorElements.length > 0 && this._control.errorState ? 'error' : 'hint';\r\n  }\r\n\r\n  private _updatingFormFieldFocusState() {\r\n    //Focus State is handled by checking if the abstract form field control focused state changes\r\n    if(this._control.focused && !this._focused) {\r\n        this._focused = true;\r\n        this._lineRipple?.activateRipple();\r\n    } else if (!this._control.focused && (this._focused || this._focused === null)) {\r\n        this._focused = false;\r\n        this._lineRipple?.deactivateRipple();\r\n    }\r\n    this._textField?.nativeElement.classList.toggle('realsoft-text-field-focused', this._control.focused);\r\n  }\r\n\r\n\r\n  private _recalculateOutlineNotchWidth() {\r\n    if(!this._isOutline() || !this._floatingLabel || !this._shouldLabelFloat()) {\r\n        this._notchedOutline._setNotchWidth(0);\r\n    } else {\r\n        this._notchedOutline?._setNotchWidth(this._floatingLabel.getWidth());\r\n    }\r\n  }\r\n\r\n\r\n  private _formControlPresenceCheck() {\r\n    if(!this._control) {\r\n        throw getRealsoftFormFieldMissingControlError()\r\n    }\r\n  }\r\n\r\n  private _initializeHintErrorSubscripts() {\r\n    this._hintElements.changes.subscribe(() => {\r\n        this._validatingHints();\r\n        this._changeDetectorRef.markForCheck();\r\n    });\r\n\r\n    this._errorElements.changes.subscribe(() => {\r\n        this._changeDetectorRef.markForCheck();\r\n    });\r\n\r\n    this._validatingHints();\r\n\r\n  }\r\n\r\n  private _checkPrefixTypes() {\r\n    this._hasIconPrefix = !!this._prefixeElements.find(prefixElement => !prefixElement._isText);\r\n    this._hasTextPrefix = !!this._prefixeElements.find(prefixElement => prefixElement._isText);\r\n  }\r\n\r\n  private _checkSuffixTypes() {\r\n    this._hasIconSuffix = !!this._suffixElements.find(suffixElement => !suffixElement._isText);\r\n    this._hasTextSuffix = !!this._suffixElements.find(suffixElement => suffixElement._isText);\r\n  }\r\n\r\n  private _initializePrefixAndSuffix() {\r\n    this._checkPrefixTypes();\r\n    this._checkSuffixTypes();\r\n\r\n    merge(this._prefixeElements.changes, this._suffixElements.changes).subscribe(() => {\r\n        this._checkPrefixTypes();\r\n        this._checkSuffixTypes();\r\n        this._changeDetectorRef.markForCheck();\r\n    });\r\n  }\r\n\r\n\r\n  private _initOutlineLabelOffset() {\r\n    this._prefixeElements.changes.subscribe(() => this._oultineLabelOffsetUpdateNeeded = true);\r\n      this._updateOutlineLabelOffset();\r\n    this._direction.change.pipe(takeUntil(this._destroy)).subscribe(() => this._oultineLabelOffsetUpdateNeeded = true);\r\n  }\r\n\r\n  private _updateOutlineLabelOffset() {\r\n    if(!this._isOutline()) {\r\n      return;\r\n    };\r\n\r\n    //Reset the outline label offset if no prefix is displayed\r\n    if(!(this._prefixIcon || this._prefixText)) {\r\n        this._resetFloatingLabel();\r\n        return;\r\n    }\r\n\r\n    //Wait for the form field to be present in the DOM to triggere the label offset update \r\n    if(!this._formFieldConnectedToDOM()) {\r\n        this._oultineLabelOffsetUpdateNeeded = true;\r\n        return;\r\n    }\r\n    this._calculateLabelOffsetWidth();\r\n\r\n    //Update the notch width respectively  when prefix and suffix exist\r\n    this._calculateNotchWidth();\r\n  }\r\n\r\n  private _resetFloatingLabel() {\r\n    if(this._floatingLabel) this._floatingLabel.element.style.transform  = '';\r\n    \r\n  }\r\n\r\n  private _formFieldConnectedToDOM() {\r\n    const element = this._elementRef.nativeElement; \r\n    return document.documentElement.contains(element);\r\n  }\r\n\r\n  private _calculateLabelOffsetWidth() {\r\n    const iconPrefixContentWidth = this._prefixIcon?.nativeElement?.getBoundingClientRect().width ?? 0;\r\n    const textPrefixContentWidth = this._prefixText?.nativeElement?.getBoundingClientRect().width ?? 0;\r\n\r\n    //RTL Support \r\n    const direction = this._direction.value === 'rtl' ? '-1' : '1';\r\n    const prefixWidth = `${iconPrefixContentWidth + textPrefixContentWidth}px`;\r\n    const labelVariable = `var(--realsoft-form-field-label-offset-x, 0px)`;\r\n    const labelOffset = `calc(${direction} * (${prefixWidth} + ${labelVariable}))`;\r\n\r\n    if (this._floatingLabel) {\r\n      this._floatingLabel.element.style.transform = `var(--realsoft-form-field-label-transform, translateY(-50%) translateX(${labelOffset})`;\r\n    }\r\n  }\r\n\r\n  private _calculateNotchWidth() {\r\n    const prefixIconWidth = this._prefixIcon?.nativeElement.getBoundingClientRect().width ?? 0;\r\n    const prefixTextWidth = this._prefixText?.nativeElement.getBoundingClientRect().width ?? 0;\r\n    const suffixIconWidth = this._suffixIcon?.nativeElement.getBoundingClientRect().width ?? 0;\r\n    const suffixTextWidth = this._suffixText?.nativeElement.getBoundingClientRect().width ?? 0;\r\n\r\n    const prefixAndSuffixWidth = prefixIconWidth + prefixTextWidth + suffixIconWidth + suffixTextWidth;\r\n\r\n\r\n    this._elementRef.nativeElement.style.setProperty('--realsoft-form-field-notch-max-width', `calc(100% - ${prefixAndSuffixWidth}px)`);\r\n  }\r\n\r\n  private _controlInitialization(previousControl: RealsoftFormFieldControl<unknown> | null) {\r\n    const controlTypePrefixClass = 'realsoft-form-field-type-';\r\n\r\n    if(previousControl) this._elementRef.nativeElement.classList.remove(controlTypePrefixClass + previousControl.controlType);\r\n\r\n    if(this._control.controlType) this._elementRef.nativeElement.classList.add(controlTypePrefixClass + this._control.controlType);\r\n\r\n    this._childControlStateChangesUpdate();\r\n\r\n    this._childControlValueChangesUpdate();\r\n\r\n  }\r\n\r\n  private _childControlStateChangesUpdate() {\r\n    this._changes?.unsubscribe();//Kill the previous subscription\r\n    this._changes = this._control.stateChanges.subscribe(() => {\r\n        this._updatingFormFieldFocusState();\r\n        this._changeDetectorRef.markForCheck();\r\n    });\r\n  }\r\n\r\n  private _childControlValueChangesUpdate() {\r\n    this._valueChanges?.unsubscribe();//Kill the previous subscription \r\n    if(this._control.ngControl && this._control.ngControl.valueChanges) {\r\n        this._valueChanges = this._control.ngControl.valueChanges.pipe(takeUntil(this._destroy)).subscribe(() => this._changeDetectorRef.markForCheck());\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._changes?.unsubscribe();//Kill the subscription \r\n    this._valueChanges?.unsubscribe();\r\n    this._destroy.next();\r\n    this._destroy.complete();\r\n  }\r\n}","<ng-template #labelTemplate>\r\n    @if(_hasFloatingLabel()) {\r\n        <label \r\n            realsoftFormFieldFloatingLabel\r\n            [floating]=\"_shouldLabelFloat()\"\r\n            [monitorResize]=\"_isOutline()\"\r\n            [id]=\"_labelId\"\r\n            [attr.for]=\"_control.disableAutomaticLabeling ? null : _control.id\"\r\n        >\r\n        <ng-content select=\"realsoft-label\"></ng-content>\r\n        @if(!hideRequiredMarker && _control.required) {\r\n            <span aria-hidden=\"true\" class=\"realsoft-form-field-required-marker realsoft-floating-label-required\"></span>\r\n        }\r\n        </label>\r\n    }\r\n</ng-template>\r\n\r\n<div \r\n    class=\"realsoft-text-field-wrapper realsoft-text-field\"\r\n    #textField\r\n    [class.realsoft-text-field-filled]=\"!_isOutline()\"\r\n    [class.realsoft-text-field-outlined]=\"_isOutline()\"\r\n    [class.realsoft-text-field-no-label]=\"!_hasFloatingLabel()\"\r\n    [class.realsoft-text-field-disabled]=\"_control.disabled\"\r\n    [class.realsoft-text-field-focused]=\"_control.focused\"\r\n    [class.realsoft-text-field-invalid]=\"_control.errorState\"\r\n    (click)=\"_control.onContainerClick($event)\">\r\n    @if(!_isOutline() && !_control.disabled) {\r\n        <div class=\"realsoft-form-field-focus-overlay\"></div>\r\n    }\r\n    <div class=\"realsoft-form-field-flex\">\r\n        @if(_isOutline()) {\r\n            <div\r\n            realsoftFormFieldNotchedOutline\r\n            [realsoftFormFieldOpenNotchedOutline]=\"_shouldLabelFloat()\">\r\n            <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\r\n            </div>\r\n        }\r\n\r\n        @if(hasIconPrefix) {\r\n            <div class=\"realsoft-text-field-icon-prefix\" #prefixIcon>\r\n                <ng-content select=\"[realsoftPrefix], [realsoftIconPrefix]\"></ng-content>\r\n            </div>\r\n        }\r\n\r\n        @if(hasTextPrefix) {\r\n            <div class=\"realsoft-text-field-text-prefix\" #prefixText>\r\n                <ng-content select=\"[realsoftTextPrefix]\"></ng-content>\r\n            </div>\r\n        }\r\n\r\n        <div class=\"realsoft-form-field-infix\">\r\n            @if (!_isOutline()) {\r\n                <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\r\n              }\r\n            <ng-content></ng-content>\r\n        </div>\r\n\r\n        @if(hasTextSuffix) {\r\n            <div class=\"realsoft-text-field-text-suffix\" #suffixText>\r\n                <ng-content select=\"[realsoftTextSuffix]\"></ng-content>\r\n            </div>\r\n        }\r\n\r\n        @if(hasIconSuffix) {\r\n            <div class=\"realsoft-text-field-icon-suffix\" #suffixIcon>\r\n                <ng-content select=\"[realsoftSuffix], [realsoftIconSuffix]\"></ng-content>\r\n            </div>\r\n        }\r\n    </div>\r\n    @if(!_isOutline()) {\r\n        <div realsoftFormFieldLineRipple></div>\r\n    }\r\n</div>\r\n\r\n<div\r\n    class=\"realsoft-form-field-subscript-wrapper realsoft-form-field-bottom-align\"\r\n    [class.realsoft-form-field-subscript-dynamic-size]=\"subscriptSizing === 'dynamic'\"\r\n>\r\n    @switch (_getMessagesToDisplay()) {\r\n        @case ('error') {\r\n            <div class=\"realsoft-form-field-error-wrapper\" [@transitionMessages]=\"_subscriptsAnimationState\">\r\n                <ng-content select=\"realsoft-error, [realsoftError]\"></ng-content>\r\n            </div>\r\n        }\r\n\r\n        @case('hint') {\r\n            <div class=\"realsoft-form-field-hint-wrapper\" [@transitionMessages]=\"_subscriptsAnimationState\">\r\n                @if(hintLabel) {\r\n                    <realsoft-hint [id]=\"_hintId\">{{hintLabel}}</realsoft-hint>\r\n                }\r\n                <ng-content select=\"realsoft-hint:not([align='end'])\"></ng-content>\r\n                <div class=\"realsoft-form-field-hint-spacer\"></div>\r\n                <ng-content select=\"realsoft-hint[align='end']\"></ng-content> \r\n            </div>\r\n        }    \r\n    } \r\n</div>\r\n\r\n  \r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { RealsoftOption } from \"./option\";\r\n\r\n\r\n//Change Event Object emitted by RealsoftOption when selected or deselected\r\nexport class RealsoftOptionSelectionChange<T = any> {\r\n    constructor(\r\n        public source: RealsoftOption<T>, //Reference to the option emitted by the event\r\n        public isUserInput = false //Whether the change in the option's value was a result of a user's action\r\n    ) {}\r\n}\r\n\r\n//Additional Option Configuration\r\nexport interface RealsoftOptionConfiguration {\r\n    disableRipple?: boolean;\r\n    multiple?: boolean;\r\n    hideSingleSelectionIndicator?: boolean;\r\n}\r\n\r\n//Injection Token To provide additonal options for the option component => This is made because options are usually in a wrapping component like select so the configuration will be applied to all options within the wrapped component\r\nexport const REALSOFT_OPTION_CONFIG = new InjectionToken<RealsoftOptionConfiguration>('REALSOFT_OPTION_CONFIG');\r\n\r\n","import { ANIMATION_MODULE_TYPE, ChangeDetectionStrategy, Component, inject, Input, ViewEncapsulation } from \"@angular/core\";\r\n\r\n\r\nexport type RealsoftPseudoCheckboxStatus = 'unchecked' | 'checked' | 'indeterminate';\r\n\r\n//Minimal Appearance only includes the checkmark or mixedmark based on the status\r\n//Full Appearance includes the checkmark or mixedmark inside a square box based on the status\r\nexport type RealsoftPseudoCheckboxAppearance = 'minimal' | 'full';\r\n\r\n//Intended to be use when a large number of checkboxes are needed like multi-select, uses no SVG or Complex Animation \r\n@Component({\r\n    selector: 'realsoft-pseudo-checkbox',\r\n    template: '',\r\n    styleUrl: './pseudo-checkbox.scss',\r\n    standalone: true,\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    host: {\r\n        'class': 'realsoft-pseudo-checkbox',\r\n        '[class.realsoft-pseudo-checkbox-indeterminate]': 'status === \"indeterminate\"',\r\n        '[class.realsoft-pseudo-checkbox-checked]': 'status === \"checked\"',\r\n        '[class.realsoft-pseudo-checkbox-disabled]': 'disabled',\r\n        '[class.realsoft-pseudo-checkbox-full]': 'appearance === \"full\"',\r\n        '[class.realsoft-pseudo-checkbox-minimal]': 'appearance === \"minimal\"',\r\n        '[class.realsoft-pseudo-checkbox-no-animation]': '_animation === \"NoopAnimations\"'\r\n    }\r\n})\r\nexport class RealsoftPseudoCheckbox {\r\n    _animation = inject(ANIMATION_MODULE_TYPE, {optional: true});\r\n    \r\n    //The status of the pseudo checkbox, starts from unchecked. Could be checked or indeterminate which is known as mixed mode\r\n    @Input() status: RealsoftPseudoCheckboxStatus = 'unchecked';\r\n\r\n    //Whether the pesudo checkbox is disabled\r\n    @Input() disabled: boolean = false;\r\n    \r\n    //The appearance of the checkbox\r\n    @Input() appearance: RealsoftPseudoCheckboxAppearance = 'full';\r\n\r\n    constructor() {}\r\n}","import { AfterViewChecked, booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, inject, Input, isSignal, OnDestroy, Output, Signal, ViewChild, ViewEncapsulation } from \"@angular/core\";\r\nimport { FocusableOption, FocusOrigin} from '@angular/cdk/a11y';\r\nimport { Subject } from \"rxjs\";\r\nimport { hasModifierKey } from '@angular/cdk/keycodes';\r\nimport { REALSOFT_OPTION_CONFIG, RealsoftOptionConfiguration, RealsoftOptionSelectionChange } from \"./models\";\r\nimport { RealsoftPseudoCheckbox } from \"../pseudo-checkbox/pseudo-checkbox\";\r\nimport { UniqueIdGeneratorService } from \"../id-generator\";\r\n \r\n\r\n\r\n@Component({\r\n    selector: 'realsoft-option',\r\n    exportAs: 'realsoftOption',\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    templateUrl: './option.html',\r\n    styleUrl: './option.scss',\r\n    host: {\r\n        'class': 'realsoft-option realsoft-list-item',\r\n        'role': 'option',\r\n        '[id]': 'id',\r\n        '[class.realsoft-list-item-selected]': 'selected',\r\n        '[class.realsoft-list-item-active]': 'active',\r\n        '[class.realsoft-list-item-disabled]': 'disabled',\r\n        '[class.realsoft-option-multiple]': 'multiple',\r\n        '[attr.aria-disabled]': 'disabled.toString()',\r\n        '[attr.aria-selected]' : 'selected',\r\n        '(click)': 'selectOption()',\r\n        '(keydown)': '_handleKeydown($event)'\r\n    },\r\n    standalone: true,\r\n    imports: [RealsoftPseudoCheckbox]\r\n})\r\nexport class RealsoftOption<T = any> implements FocusableOption, AfterViewChecked, OnDestroy{\r\n    private _element = inject<ElementRef<HTMLElement>>(ElementRef); //Reference to the html element such that it can be used for certain cases\r\n    private _selected = false; //The option is by default not selected\r\n    _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _options = inject<RealsoftOptionConfiguration>(REALSOFT_OPTION_CONFIG, {optional: true});\r\n\r\n    //Whether or not the option is currently active and ready to be selected\r\n    private _active = false; //The option is by default not active\r\n    private _disabled = false; //The option is by default not disabled\r\n    private _optionCurrentValue = ''; //Current option value before it changes\r\n\r\n    @Input() value: T; //The form value of the option\r\n    @Input() id : string = inject(UniqueIdGeneratorService).generateID('realsoft-option-'); // Unique ID of the option\r\n\r\n    @Output() readonly onSelectionChange = new EventEmitter<RealsoftOptionSelectionChange<T>>();\r\n\r\n    //Emit when the state of the option changes and wrapper components need to be notified\r\n    readonly _changes = new Subject<void>;\r\n\r\n    //Whether the option is disabled\r\n    @Input({transform: booleanAttribute})\r\n    get disabled(): boolean{\r\n        return this._disabled;\r\n    }\r\n    set disabled(value: boolean){\r\n        this._disabled = value;\r\n    }\r\n\r\n    //Get a reference of the text of the option \r\n    @ViewChild('option', {static: true}) _option: ElementRef<HTMLElement> | undefined;\r\n\r\n    constructor() {}\r\n\r\n    ngAfterViewChecked() {\r\n        // Check if the option text content has changed (for translation updates)\r\n        // This notifies the wrapper component (select) when option text changes\r\n        if(this.viewValue !== this._optionCurrentValue){\r\n            // Only emit if there was a previous value (skip initial setup)\r\n            if(this._optionCurrentValue) {\r\n                this._changes.next();\r\n            }\r\n            this._optionCurrentValue = this.viewValue;\r\n        }\r\n    }\r\n    /*Whether or not option is currently active and ready to be selected. An active option displays styles as if its focused, but the focus is \r\n    actually retained somewhere else. This comes in handy for components like autocomplete where focus must remain on the input.\r\n    */\r\n    get active(): boolean {\r\n        return this._active;\r\n    }\r\n\r\n    //Whether or not the option is currently selected\r\n    get selected(): boolean {\r\n        return this._selected;\r\n    }\r\n\r\n    //Retrieve the text of the option element, fall back to an empty string in case the text was undefined or falsy\r\n    get optionValue() : string {\r\n        return (this._element.nativeElement.textContent || '').trim();\r\n    }\r\n\r\n    //Whether the wrapping component is in multiple selection mode\r\n    get multiple(): boolean {\r\n        return this._options && this._options.multiple;\r\n    }\r\n\r\n    //Whether ripples for the option are disabled\r\n    get disableRipple(): boolean {\r\n        return !!this._options && this._options.disableRipple;\r\n    }\r\n\r\n    //Whether or not to display the checkmark for single selection\r\n    get hideSingleSelectionIndicator(): boolean {\r\n        return !!this._options && this._options.hideSingleSelectionIndicator;\r\n    }\r\n\r\n    //The displayed value of the option. It is necessary to show the selected option in the select's trigger.\r\n    get viewValue(): string {\r\n        return (this._option.nativeElement.textContent || '').trim();\r\n    }\r\n\r\n    //Gets the label when determining whether the option should be focused\r\n    getLabel(): string{\r\n        return this.viewValue;\r\n    }\r\n\r\n    getHostElement(): HTMLElement {\r\n        return this._element.nativeElement;\r\n    }\r\n\r\n    //Deselecting the option => This method is likely used to indicate that the selection didn't come from the user like in multi-selection where the click of the select all checkbox might unselect all options and so on\r\n    deselect(emitEvent = true) {\r\n        if(this._selected){\r\n            this._selected = false;\r\n            this._changeDetectorRef.markForCheck();\r\n        }\r\n\r\n        if(emitEvent){\r\n            this.onSelectionChange.emit(new RealsoftOptionSelectionChange<T>(this, false));\r\n        }\r\n    }\r\n\r\n    //Selecting the option \r\n    select(emitEvent = true) {\r\n        if(!this._selected) {\r\n            this._selected = true;\r\n            this._changeDetectorRef.markForCheck();\r\n        }\r\n\r\n        if(emitEvent){\r\n            this.onSelectionChange.emit(new RealsoftOptionSelectionChange<T>(this, false));\r\n        }\r\n    }\r\n\r\n    selectOption(): void {\r\n        if(!this.disabled) {\r\n            this._selected = this.multiple ? !this._selected : true;\r\n            this._changeDetectorRef.markForCheck();\r\n            this.onSelectionChange.emit(new RealsoftOptionSelectionChange<T>(this,true));\r\n        }\r\n    }\r\n\r\n    _handleKeydown(event: KeyboardEvent): void {\r\n        if((event.key === 'Enter' || event.key === 'Space' && !hasModifierKey(event))){\r\n            this.selectOption();\r\n            event.preventDefault()\r\n        }\r\n        \r\n    }\r\n\r\n    //Set the focus onto the option \r\n    focus(_origin?: FocusOrigin, options?: FocusOptions){\r\n        const element = this._element.nativeElement; //Get the Host DOM Element\r\n        \r\n        if(typeof element.focus === 'function') element.focus(options);\r\n    }\r\n\r\n    /*This method displays styles on the option to make it appear active. This is used by the ActiveDescendantKeyManager so key events \r\n    will display the proper options as active on arrow key events\r\n    */\r\n    setActiveStyles(): void {\r\n        if(!this._active) {\r\n            this._active = true;\r\n            this._changeDetectorRef.markForCheck();\r\n        }\r\n    }\r\n\r\n    /*This method removes display styles on the option that made it appear active. This is used by the ActiveDescendantKeyManager\r\n    so key events will display the proper options as active on arrow key events\r\n    */\r\n    setInactiveStyles(): void {\r\n        if(this._active) {\r\n            this._active = false;\r\n            this._changeDetectorRef.markForCheck();\r\n        }\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this._changes.complete();//Kill the subscription\r\n    }\r\n}","@if(multiple){\r\n    <realsoft-pseudo-checkbox\r\n    class=\"realsoft-option-pseudo-checkbox\"\r\n    [disabled]=\"disabled\"\r\n    [status]=\"selected ? 'checked' : 'unchecked'\"\r\n    aria-hidden=\"true\"\r\n    >\r\n    </realsoft-pseudo-checkbox>\r\n}\r\n\r\n<span class=\"realsoft-list-item__primary-text\" #option><ng-content></ng-content></span>\r\n\r\n<!--Minimal Pseudo Checkbox to be rendered in single selection if not hidden by the user-->\r\n@if(!multiple && selected && !hideSingleSelectionIndicator) {\r\n    <realsoft-pseudo-checkbox\r\n    appearance=\"minimal\"\r\n    aria-hidden=\"true\"\r\n    status=\"checked\"\r\n    class=\"realsoft-option-pseudo-checkbox\"\r\n    >\r\n    </realsoft-pseudo-checkbox>\r\n}\r\n\r\n\r\n\r\n\r\n","import { InjectionToken } from \"@angular/core\";\r\n\r\n//Additional Option Configuration\r\nexport interface RealsoftOptionConfiguration {\r\n    disableRipple?: boolean;\r\n    multiple?: boolean;\r\n    hideSingleSelectionIndicator?: boolean;\r\n}\r\n\r\n//Injection Token To provide additonal options for the option component => This is made because options are usually in a wrapping component like select so the configuration will be applied to all options within the wrapped component\r\nexport const REALSOFT_OPTION_CONFIG = new InjectionToken<RealsoftOptionConfiguration>('REALSOFT_OPTION_CONFIG');\r\n\r\n","import { booleanAttribute, ChangeDetectionStrategy, Component, inject, InjectionToken, Input, Optional, ViewEncapsulation } from \"@angular/core\";\r\nimport { REALSOFT_OPTION_CONFIG, RealsoftOptionConfiguration } from \"./models\";\r\nimport { UniqueIdGeneratorService } from \"../id-generator\";\r\n\r\nexport const REALSOFT_OPTION_GROUP = new InjectionToken<RealsoftOptionGroup>('RealsoftOptGroup');\r\n\r\n//For Grouping instances of mat option\r\n@Component({\r\n    selector: 'realsoft-opt-group',\r\n    exportAs: 'realsoftOptGroup',\r\n    standalone: true,\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    templateUrl: './option-group.html',\r\n    styleUrl: './option-group.scss',\r\n    host: {\r\n        'class': 'realsoft-option-group',\r\n        'role': 'group',\r\n        '[attr.aria-labelledby]': '_id',\r\n        '[attr.aria-disabled]': 'disabled.toString()'\r\n    },\r\n    providers: [{provide: REALSOFT_OPTION_GROUP, useExisting: RealsoftOptionGroup}]\r\n})\r\nexport class RealsoftOptionGroup {\r\n    //Whether the option group is disabled\r\n    @Input({transform: booleanAttribute}) disabled: boolean = false;\r\n\r\n    //label for the option group\r\n    @Input() label: string;\r\n\r\n    _id =inject(UniqueIdGeneratorService).generateID('realsoft-opt-group-label-')\r\n\r\n    //default options \r\n    _options = inject<RealsoftOptionConfiguration>(REALSOFT_OPTION_CONFIG, {optional: true});\r\n}","<span class=\"realsoft-option-group-label\"\r\n      role=\"presentation\"\r\n      [class.realsoft-item-disabled]=\"disabled\"\r\n      [id]=\"_id\">\r\n      <span class=\"realsoft-list-item__primary-text\">{{label}}<ng-content></ng-content></span>\r\n</span>\r\n\r\n<ng-content select=\"realsoft-option, ng-container\"></ng-content>\r\n","\r\n\r\n\r\nimport { Injectable } from \"@angular/core\";\r\nimport { AbstractControl, FormGroupDirective, NgControl, NgForm } from \"@angular/forms\";\r\nimport { Subject } from 'rxjs';\r\n\r\nexport interface RealsoftErrorState extends ErrorStateMatcher {}\r\n\r\n\r\n//This code defines an Angular service called ErrorState which is used to determine whether a form control should be displayed in an error state. It's designed to work with Angular's form validation system, particularly is scenarios where you want to customize error display logic.\r\n@Injectable({providedIn: 'root'})\r\nexport class ErrorStateMatcher {\r\n\r\n  //The method determines if a form control should be marked as having an error, it takes two parameters: control is the form control being checked, and the parent form which is optional\r\n  //The method returns a boolan where if true => This means that the control is an an error state, and if false the control is valid\r\n  isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\r\n    //contol && control.invalid => Ensures the control exists and has validation errors where invalid is true\r\n    //(control.touched || (form && form.submitted)) => Ensures the user has interacted with the control or the form has been submitted\r\n    //The !! ensures the result is a boolean value\r\n    return !!(control && control.invalid && (control.touched || (form && form.submitted)));\r\n  }\r\n}\r\n\r\nexport class ErrorState {\r\n    errorState = false;\r\n    matcher: ErrorStateMatcher;\r\n\r\n    constructor(\r\n        private _defaultMatcher: ErrorStateMatcher | null,\r\n        public ngControl: NgControl | null,\r\n        private _parentFormGroup: FormGroupDirective | null,\r\n        private _parentForm: NgForm | null,\r\n        private _stateChanges: Subject<void>,\r\n    ) {}\r\n\r\n    updateErrorState() {\r\n        const oldState = this.errorState;\r\n        const parent = this._parentFormGroup || this._parentForm;\r\n        const matcher = this._defaultMatcher || this.matcher;\r\n        const control = this.ngControl?.control as AbstractControl ?? null;\r\n        const newState = matcher?.isErrorState(control, parent) ?? false;\r\n\r\n        if(newState !== oldState) {\r\n            this.errorState = newState;\r\n            this._stateChanges.next();\r\n        }\r\n    }\r\n\r\n}\r\n\r\n","import { Overlay, ScrollStrategy } from \"@angular/cdk/overlay\";\r\nimport { Directive, inject, InjectionToken } from \"@angular/core\";\r\nimport { RealsoftSelect } from \"./select\";\r\n\r\n//Object that can be used to configure the default options for the select module\r\nexport interface RealsoftSelectConfig {\r\n    disableOptionCentering: boolean; //Whether option centering should be disabled\r\n    hideSingleSelectionIndicator: boolean; //Whether checkmark icon should be hidden for single-selection mode\r\n    overlayPanelClass: string | string[]; //Class or list of classes to be applied to the menu's overlay panel\r\n    panelWidth: string | number | null; // Width of the panel. If set to auto, the panel will match the trigger width. If set to null or an empty string, the panel will grow to match the longest option's text \r\n    typeaheadDebounceInterval: number; //Time to wait in milliseconds after the last keystroke before moving focus to an item\r\n}\r\n\r\n//Injection token that can be used to provide the default options for the select control\r\nexport const REALSOFT_SELECT_CONFIG = new InjectionToken<RealsoftSelectConfig>('REALSOFT_SELECT_CONFIG');\r\n\r\n//Injection token that determines the scroll handling while select is open \r\nexport const REALSOFT_SELECT_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\r\n    'realsoft-select-scroll-strategy', \r\n    {\r\n        providedIn: 'root',\r\n        factory: () => {\r\n            return () => inject(Overlay).scrollStrategies.reposition();\r\n        }\r\n    }\r\n);\r\n\r\n\r\n//Injection token that can be used to reference instances of RealsoftSelectTrigger. It serves as alternative token to the actual RealsoftSelectTrigger class which could cause unnecessary retention of the class and its directive metadata\r\nexport const REALSOFT_SELECT_TRIGGER = new InjectionToken<RealsoftSelectTrigger>('RealsoftSelectTrigger');\r\n\r\n\r\n@Directive({\r\n    selector: 'realsoft-select-trigger',\r\n    standalone: true,\r\n    providers: [{provide: REALSOFT_SELECT_TRIGGER, useExisting: RealsoftSelectTrigger }]\r\n})\r\nexport class RealsoftSelectTrigger {}\r\n\r\n\r\n//Change Event object that is emitter when the select value has changed \r\nexport class RealosftSelectChange {\r\n\r\n    constructor(\r\n        public source: RealsoftSelect,//Reference to the select that emitted the change event\r\n        public value: any //Current value of the select that emitted the event\r\n    )\r\n    {}\r\n}\r\n\r\nexport function realsoftMultipleModeNonArrayValueError() : Error {\r\n    return Error('Value must be an array in multiple selection mode');\r\n}\r\n\r\nexport function realsoftSelectNonFunctionalError(): Error {\r\n    return Error('`compareWith` must be a function.');\r\n}\r\n\r\n\r\n","import { AfterContentInit, booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, DoCheck, ElementRef, EventEmitter, forwardRef, HostAttributeToken, inject, Input, numberAttribute, OnChanges, OnDestroy, OnInit, Output, QueryList, SimpleChanges, ViewChild, ViewEncapsulation } from \"@angular/core\";\nimport { RealosftSelectChange, REALSOFT_SELECT_CONFIG, REALSOFT_SELECT_SCROLL_STRATEGY, REALSOFT_SELECT_TRIGGER, realsoftMultipleModeNonArrayValueError, realsoftSelectNonFunctionalError, RealsoftSelectTrigger } from \"./models\";\nimport { defer, merge, Observable, startWith, Subject, switchMap, takeUntil } from \"rxjs\";\nimport { AbstractControl, ControlValueAccessor, FormGroupDirective, NgControl, NgForm, Validators } from \"@angular/forms\";\nimport { SelectionModel } from \"@angular/cdk/collections\";\nimport { ActiveDescendantKeyManager, addAriaReferencedId, LiveAnnouncer, removeAriaReferencedId } from \"@angular/cdk/a11y\";\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition, ScrollStrategy } from \"@angular/cdk/overlay\";\nimport { Directionality } from \"@angular/cdk/bidi\";\nimport { A, DOWN_ARROW, ENTER, hasModifierKey, LEFT_ARROW, RIGHT_ARROW, SPACE, UP_ARROW } from \"@angular/cdk/keycodes\";\nimport { transformPanel } from \"./select-animation\";\nimport { ErrorState, ErrorStateMatcher } from \"./error-state-matcher\";\nimport { RealsoftFormFieldControl } from \"../form-field/directives/form-field-control\";\nimport { REALSOFT_OPTION_CONFIG, RealsoftOptionSelectionChange } from \"../option/models\";\nimport { REALSOFT_FORM_FIELD } from \"../form-field/models\";\nimport { RealsoftFormField } from \"../form-field/form-field\";\nimport { RealsoftOption } from \"../option/option\";\nimport { UniqueIdGeneratorService } from \"../id-generator\";\nimport { REALSOFT_OPTION_GROUP, RealsoftOptionGroup } from \"../option-group/option-group\";\n\n@Component({\n    selector: 'realsoft-select',\n    exportAs: 'realsoftSelect',\n    templateUrl: './select.html',\n    styleUrl: './select.scss',\n    host: {\n      'role': 'combobox',\n      'class': 'realsoft-select',\n      'aria-haspopup': 'listbox',\n      '[id]': '_selectUniqueID',\n      '[attr.tabindex]': 'disabled ? -1 : tabIndex',\n      '[attr.aria-expanded]': 'panelOpen',\n      '[attr.aria-invalid]': 'errorState',\n      '[attr.aria-required]': 'required.toString()',\n      '[attr.aria-disabled]': 'disabled.toString()',\n      '[class.realsoft-select-disabled]': 'disabled',\n      '[class.realsoft-select-required]': 'required',\n      '[class.realsoft-select-empty]': 'empty',\n      '[class.realsoft-select-multiple]': 'multiple',\n      '[class.realsoft-select-invalid]': 'errorState',\n      '[attr.aria-controls]' : 'panelOpen ? _selectUniqueID + \"-panel\" : null',\n      '[attr.aria-label]': 'ariaLabel || null',\n      '(keydown)': '_handleKeydown($event)',\n      '(focus)': '_onFocus()',\n      '(blur)': '_onBlur()',\n      '[attr.aria-activedescendant]': '_getAriaActiveDescendant()',\n    },\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true,\n    providers: [\n      {provide: RealsoftFormFieldControl, useExisting: RealsoftSelect},\n      {provide: REALSOFT_OPTION_CONFIG, useExisting: RealsoftSelect},\n      {provide: REALSOFT_FORM_FIELD, useExisting: RealsoftFormField}\n    ],\n    imports : [CdkOverlayOrigin, CdkConnectedOverlay]\n})\nexport class RealsoftSelect implements RealsoftFormFieldControl<any> ,ControlValueAccessor, AfterContentInit, OnChanges, OnDestroy, OnInit, DoCheck{\n  private _defaultSelectConfig = inject(REALSOFT_SELECT_CONFIG, {optional: true});\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n  private _hideSingleSelectionIndicator = this._defaultSelectConfig?.hideSingleSelectionIndicator ?? false;\n  private _disableOptionCentering = this._defaultSelectConfig?.disableOptionCentering ?? false;\n  readonly stateChanges = new Subject<void>();\n  defaultErrorStateMatcher = inject(ErrorStateMatcher);\n  private _placeholder: string;\n  private _required: boolean | undefined;\n  ngControl = inject(NgControl, {self: true, optional: true})!;\n  private _multiple: boolean = false;\n  _keyManager: ActiveDescendantKeyManager<RealsoftOption>;\n  private _compareWith = (o1: any, o2: any) => o1 === o2;\n  private _panelOpen = false; \n  private _value: any;\n  private _focused = false;\n  private _errorState: ErrorState;\n  private _id: string;\n  private _initializeOptions = new Subject<void>();\n  private _uniqueIDGenerator = inject(UniqueIdGeneratorService, {optional: true});\n  private _direction = inject(Directionality, {optional: true});\n  private _selectNullableOptions = true;\n  controlType = 'realsoft-select';//A name for the control that can be used by realsoft-form-field\n  _wrapperFormField = inject<RealsoftFormField>(REALSOFT_FORM_FIELD, {optional: true});\n  _overlayOrigin: CdkOverlayOrigin | ElementRef | undefined;\n  readonly _elementRef = inject(ElementRef);\n  _overlayWidth: string | number;\n  private _trackedSelectDialog: Element | null = null;\n  private _liveAnnouncer = inject(LiveAnnouncer);\n  // The custom class to add to the overlay panel element.\n  _overlayPanelClasses: string | string[] = this._defaultSelectConfig?.overlayPanelClass || '';\n  /** Strategy that will be used to handle scrolling while the select panel is open. */\n  _scrollStrategy: ScrollStrategy;\n\n   /** Factory function used to create a scroll strategy for this select. */\n   private _scrollStrategyFactory = inject(REALSOFT_SELECT_SCROLL_STRATEGY);\n\n  /** Emits whenever the component is destroyed. */\n  readonly _destroy = new Subject<void>();\n\n  parentForm = inject(NgForm, {optional: true});\n  parentFormGroup = inject(FormGroupDirective, {optional: true});\n\n\n  //Unique Id for the select input element\n  _selectUniqueID = this._uniqueIDGenerator.generateID('realsoft-select-');\n\n  _overlayPositions: ConnectedPosition[] = [\n    {\n      originX: 'start',\n      originY: 'bottom',\n      overlayX: 'start',\n      overlayY: 'top',\n    },\n    {\n      originX: 'end',\n      originY: 'bottom',\n      overlayX: 'end',\n      overlayY: 'top',\n    },\n    {\n      originX: 'start',\n      originY: 'top',\n      overlayX: 'start',\n      overlayY: 'bottom',\n      panelClass: 'realsoft-select-panel-above',\n    },\n    {\n      originX: 'end',\n      originY: 'top',\n      overlayX: 'end',\n      overlayY: 'bottom',\n      panelClass: 'realsoft-select-panel-above',\n    },\n  ];\n\n  //Unique Id for the node containing the select's value\n  _selectValueID = this._uniqueIDGenerator.generateID('realsoft-select-value-');\n\n  //For keeping track of the previous form control assigned to the select.\n  private _control: AbstractControl | null | undefined;\n\n  /** Current `aria-labelledby` value for the select trigger. */\n  private _triggerAriaLabelledBy: string | null = null;\n\n  @ViewChild('triggerSelect') trigger: ElementRef;//A trigger that opens the select\n\n  @ViewChild('selectPanel') panel: ElementRef;//Panel containing the select options\n\n  @ViewChild(CdkConnectedOverlay) _overlayPanel: CdkConnectedOverlay;//Overlay panel containing the options\n\n  //For Dealing with the selection logic\n  _selectionModel : SelectionModel<RealsoftOption>;\n      \n  //Query all deeply nested options for the select control\n  @ContentChildren(RealsoftOption, {descendants: true}) options: QueryList<RealsoftOption>;\n\n  //Query all deeply nested option groups for the select control \n  @ContentChildren(REALSOFT_OPTION_GROUP, {descendants: true}) optionGroups: QueryList<RealsoftOptionGroup>;\n\n  //Query the select trigger\n  @ContentChild(REALSOFT_SELECT_TRIGGER) customTrigger: RealsoftSelectTrigger;\n\n  //Aria Label of the select \n  @Input('aria-label') ariaLabel: string = '';\n\n  //Input that can be used to specify the `aria-labelledby` attribute \n  @Input('aria-labelledby') ariaLabelledby: string;\n\n  @Input('aria-describedby') userAriaDescribedBy: string;\n\n  //Classes to be passed to the select panel. Supports the same syntax as ngClass\n  @Input() panelClass: string | string[] | Set<string> | {[key: string]: any}; \n   \n  //Whether the select is disabled\n  @Input({transform: booleanAttribute}) disabled: boolean = false; \n\n  //Tab index of the select \n  @Input() tabIndex: number = 0;\n\n  //Whether checkmark indicator for single selection options is hidden or not\n  @Input({transform: booleanAttribute})\n  get hideSingleSelectionIndicator(): boolean {\n    return this._hideSingleSelectionIndicator;\n  }\n  set hideSingleSelectionIndicator(value: boolean) {\n    this._hideSingleSelectionIndicator = value;\n    if(this.options) {\n      for (const option of this.options){\n        option._changeDetectorRef.markForCheck();\n      }\n    }\n  }\n\n  //Select Placeholder to be shown if no value has been selected\n  @Input()\n  get placeholder(): string {\n    return this._placeholder;\n  }\n  set placeholder(value: string) {\n    this._placeholder = value;\n    this.stateChanges.next();\n  }\n\n  //Whether the select control is required\n  @Input({transform: booleanAttribute})\n  get required(): boolean {\n    return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n  }\n  set required(value: boolean) {\n    this._required = value;\n    this.stateChanges.next();\n  }\n\n  //Whether the user should be allowed to select multiple options or not\n  @Input({transform: booleanAttribute}) \n  get multiple(): boolean {\n    return this._multiple;\n  }\n  set multiple(value: boolean){\n    this._multiple = value;\n  }\n\n  //Whether to center the active option over the trigger \n  @Input({transform: booleanAttribute}) disableOptionCentering = this._disableOptionCentering ?? false;\n\n  //Function to compare the option values with the selected values, the first argument is a value from an option. The second is a value from the selection, A boolean should be returned\n  @Input()\n  get compareWith() {\n    return this._compareWith;\n  }\n  set compareWith(fn: (o1: any, o2: any) => boolean) {\n    if(typeof fn !== 'function'){ \n      throw realsoftSelectNonFunctionalError();\n    }\n    this._compareWith = fn;\n    if (this._selectionModel) this._initializeSelection();\n  }\n\n  //Value of the select control\n  @Input()\n  get value(): any {\n    return this._value;\n  }\n  set value(newValue: any) {\n    const valueHasChanged = this.valueHasChanged(newValue);\n\n    if (valueHasChanged) this._onChange(newValue);\n  }\n\n\n  private valueHasChanged(newValue: any | any[]): boolean {\n    if(newValue !== this._value || (this._multiple && Array.isArray(newValue))) {\n      if(this.options) this._selection(newValue);\n\n      this._value = newValue;\n      return true;\n    }\n    return false;\n  }\n\n  //Object used to control when error messages are shown\n  @Input()\n  get errorStateMatcher() {\n    return this._errorState.matcher;\n  }\n  set errorStateMatcher(value: ErrorStateMatcher){\n    this._errorState.matcher = value;\n  }\n\n  //Time to wait in milliseconds after the last keystrokes before moving focus to an item\n  @Input({transform: numberAttribute}) typeaheadDebounceInterval: number;\n\n  //Function used to sort the values in select in multiple mode \n  @Input() sortComparator: (a: RealsoftOption, b: RealsoftOption, options: RealsoftOption[]) => number;\n\n  //Unique id of the element\n  @Input()\n  get id(): string {\n    return this._id;\n  }\n  set id(value: string) {\n    this._id = value;\n    this.stateChanges.next();\n  }\n\n  //Width of the panel, if set to auto, the panel will match the trigger width. If set to null or an empty string, the panel will grow to match the longest option's text\n  @Input() panelWidth: string | number | null = this._defaultSelectConfig && typeof this._defaultSelectConfig.panelWidth !== 'undefined' ? this._defaultSelectConfig.panelWidth : 'auto';\n\n\n  //Determine whether the select is in an error state or not\n  get errorState() {\n    return this._errorState?.errorState;\n  }\n\n  //Set the select's error state\n  set errorState(value: boolean) {\n    this._errorState.errorState = value;\n  }\n\n  get shouldLabelFloat(): boolean {\n    return this.panelOpen || !this.empty || (this.focused && !!this.placeholder);\n  }\n\n  //Combined stream of all of the child option's change events\n  readonly optionSelectionChanges: Observable<RealsoftOptionSelectionChange> = defer(() => {\n    const options = this.options;\n\n    if(options) {\n      return options.changes.pipe(startWith(options), switchMap(() => merge(...options.map(option => option.onSelectionChange))))\n    }\n\n    return this._initializeOptions.pipe(switchMap(() => this.optionSelectionChanges))\n  });\n\n  //Event emitted when the select panel has been toggled\n  @Output() readonly openedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n  //Event emitted when the seleted value has been changed by the user\n  @Output() readonly selectionChange = new EventEmitter<RealosftSelectChange>();\n\n  //Event emitted whenever the value of the select changes\n  @Output() readonly valueChange: EventEmitter<any> = new EventEmitter<any>();\n\n  private _initiateErrorState() {\n    return new ErrorState(\n      this.defaultErrorStateMatcher,\n      this.ngControl,\n      this.parentFormGroup,\n      this.parentForm,\n      this.stateChanges,\n    );\n  }\n\n  constructor() {\n    //To avoid Circular Dependency\n    if (this.ngControl) {\n      this.ngControl.valueAccessor = this;\n    }\n\n    if (this._defaultSelectConfig?.typeaheadDebounceInterval != null) {\n      this.typeaheadDebounceInterval = this._defaultSelectConfig.typeaheadDebounceInterval;\n    }\n\n    this._errorState = this._initiateErrorState();\n    this._scrollStrategy = this._scrollStrategyFactory();\n\n    this.id = this.id; //Force id initialization \n  }\n\n  //Lifecycle Hooks \n\n  ngOnInit() : void{\n     this._selectionModel = new SelectionModel<RealsoftOption>(this.multiple);\n     this.stateChanges.next();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['disabled'] || changes['userAriaDescribedBy']) {\n      this.stateChanges.next();\n    }\n\n    if (changes['typeaheadDebounceInterval'] && this._keyManager) {\n      this._keyManager.withTypeAhead(this.typeaheadDebounceInterval);\n    }\n  }\n\n  ngAfterContentInit() : void {\n    this._initializeOptions.next();\n    this._initializeOptions.complete();\n\n    this.initiateKeyManager();\n    this._selectionModelChanges();\n    this._optionsQueryListChanges();\n    \n    // Subscribe to direction changes to update label position immediately\n    // This fixes the issue where label doesn't update when switching RTL/LTR\n    if (this._direction) {\n      this._direction.change.pipe(takeUntil(this._destroy)).subscribe(() => {\n        // Trigger state change to update shouldLabelFloat\n        this.stateChanges.next();\n        // Mark for check to ensure view updates\n        this._changeDetectorRef.markForCheck();\n      });\n    }\n  }\n\n  private _selectionModelChanges() {\n    this._selectionModel.changed.pipe(takeUntil(this._destroy)).subscribe(event => {\n      event.added.forEach(option => option.select());\n      event.removed.forEach(option => option.deselect())\n    })\n  }\n\n  private _optionsQueryListChanges() {\n    this.options.changes.pipe(startWith(null), takeUntil(this._destroy)).subscribe(() => {\n      this._optionReset();\n      this._initializeSelection();\n    })\n  }\n\n  ngDoCheck(): void {\n    const ngControl = this.ngControl;\n\n    if(ngControl) {\n      if(this._control !== ngControl.control) {\n        if(this._control !== undefined && ngControl.disabled !== null && ngControl.disabled !== this.disabled) this.disabled = ngControl.disabled;\n      }\n      this._control = ngControl.control; //Update control value\n    }\n\n    this.updateErrorState();\n  }\n\n  private _selectTriggerARIALabelledby(): string | null {\n    if (this.ariaLabel) return null; \n\n    const labelID = this._wrapperFormField?.getLabelId();\n    let labelValue;\n\n    if(labelID) labelValue = labelID + ' ' + this._selectValueID;\n    else labelValue = this._selectValueID;\n\n    if (this.ariaLabelledby) {\n      labelValue += ' ' + this.ariaLabelledby;\n    }\n\n    return labelValue;\n  }\n\n  private _optionReset(): void {\n    const optionObservable = merge(this.options.changes, this._destroy);\n    this._optionSelectionChanges(optionObservable);\n    this._optionStateChanges(optionObservable);\n  }\n\n  private _optionSelectionChanges(optionObservable: Observable<void>): void {\n    this.optionSelectionChanges.pipe(takeUntil(optionObservable)).subscribe(event => {\n      this._optionClick(event.source, event.isUserInput);\n\n      //If the user selected an option, and the panel is open and the selection mode is single then close the panel and focus the native element \n      if(event.isUserInput && !this.multiple && this._panelOpen) {\n        this.close();\n        this._elementRef.nativeElement.focus();\n      }\n    })\n  }\n\n  private _optionStateChanges(optionObservable: Observable<void>): void {\n    merge(...this.options.map(option => option._changes)).pipe(takeUntil(optionObservable)).subscribe(() => {\n      this._changeDetectorRef.detectChanges();\n      this.stateChanges.next();\n    })\n\n  }\n\n  skipPredicate = (option: RealsoftOption) => {\n    if(this.panelOpen) return false;\n    return option.disabled;\n  }\n\n  onContainerClick() {\n    this.focus();\n    this.open();\n  }\n\n  initiateKeyManager() {\n    this._keyManager = new ActiveDescendantKeyManager<RealsoftOption>(this.options)\n    .withAllowedModifierKeys(['shiftKey'])\n    .withHomeAndEnd()\n    .withHorizontalOrientation(this._isRTL() ? 'rtl' : 'ltr')\n    .withPageUpDown()\n    .withVerticalOrientation()\n    .withTypeAhead(this.typeaheadDebounceInterval)\n    .skipPredicate(this.skipPredicate);\n    \n    this._keyManagerChangesSubscription();\n    this._keyManagerTabOutSubscription();\n  }\n\n  private _keyManagerChangesSubscription() {\n    this._keyManager.change.pipe(takeUntil(this._destroy)).subscribe(() => {\n      if(!this._panelOpen && !this.multiple && this._keyManager.activeItem) this._keyManager.activeItem.selectOption();\n      else if(this._panelOpen && this.panel) this._scrollOptionIntoOverlayPanel(this._keyManager.activeItemIndex || 0);\n    });\n  }\n\n  private _keyManagerTabOutSubscription() {\n    this._keyManager.tabOut.pipe(takeUntil(this._destroy)).subscribe(() => {\n      if(!this.multiple && this._keyManager.activeItem) this._keyManager.activeItem.selectOption();\n      this._elementRef.nativeElement.focus();\n      this.close();\n    })\n  }\n\n\n  //Set the selected option based on the passed value\n  private _selection(value: any | any[]) : void {\n    this.options?.forEach(option => option.setInactiveStyles());\n    this._selectionModel.clear();\n\n    if(this.multiple && value){\n      if(!Array.isArray(value)) {\n        throw realsoftMultipleModeNonArrayValueError();\n      }\n\n      value?.forEach((value: any) => this._selectOption(value));\n      this._sortValues();\n    } else {\n      const option = this._selectOption(value);\n\n      if(option) {\n        this._keyManager.updateActiveItem(option);\n      } else if (!this.panelOpen) this._keyManager.updateActiveItem(-1);\n    }\n\n    this._changeDetectorRef.markForCheck();\n  }\n\n\n  //Selecting the option Logic\n  private _selectOption(value: any): RealsoftOption | undefined {\n    const option = this.options.find((option: RealsoftOption) => {\n      if (this._selectionModel.isSelected(option)) {\n        return false;\n      }\n      else {\n        return (option.value != null || this._selectNullableOptions) && this._compareWith(option.value, value) ;\n      }\n    });\n\n    if (option) this._selectionModel.select(option);\n    return option;\n  }\n\n  //Getters\n  get panelOpen(): boolean {\n    return this._panelOpen;//Whether or not the overlay panel is open\n  }\n\n  get selected(): RealsoftOption | RealsoftOption[] {\n    return this.multiple ? this._selectionModel?.selected || [] : this._selectionModel?.selected[0];//The currently selected option\n  }\n\n  get empty(): boolean {\n    return !this._selectionModel || this._selectionModel.isEmpty();//Whether the select has a value\n  }\n\n  get focused(): boolean {\n    return this._focused || this._panelOpen;//Whether the select is focused\n  }\n  \n  //The value displayed in the trigger\n  get triggerValue(): string{\n    if(this.empty) return ''; \n\n    if (this._multiple) {\n      const optionsSelected = this._selectionModel.selected.map(option => option.viewValue);\n\n      if(this._isRTL()) optionsSelected.reverse();\n\n      return optionsSelected.join(', ');\n    }\n\n    return this._selectionModel.selected[0].viewValue;\n  }\n\n  _isRTL(): boolean {\n    return this._direction ? this._direction.value === 'rtl' : false;//Whether the element is in RTL mode\n  }\n\n  //For updating the error state of the select\n  updateErrorState() {\n    this._errorState?.updateErrorState();\n  }\n\n  //Gets the aria-labelledby\n  _panelARIALabeldby(): string | null {\n    if(this.ariaLabel) return null; \n\n    const panelLabel = this._wrapperFormField.getLabelId() || null;\n    const panelLabelCombo = panelLabel ? panelLabel + ' ' : '';\n    return this.ariaLabelledby ? panelLabelCombo + this.ariaLabelledby : panelLabel;\n  }\n\n  //Closes the overlay panel and focuses the host element\n  close(): void {\n    if(this._panelOpen){\n      this._panelOpen = false;\n      //Using withHorizontalOrientation to configure the key manager to move the selection horizontally. Passing in null will disable horizontal movement\n      this._keyManager.withHorizontalOrientation(this._isRTL() ? 'rtl' : 'ltr');\n      this._changeDetectorRef.markForCheck();\n      this._onTouched(); \n      this.stateChanges.next(); \n      \n    }\n  }\n\n  //Opens the overlay panel and focuses the host element\n  open(): void {\n    if(this._panelOpen) {\n      return;\n    }\n    if(this.disabled || this.options?.length <= 0) {\n      return;\n    }\n      if(this._wrapperFormField){\n        this._overlayOrigin = this._wrapperFormField.getConnectedOverlayOrigin(); \n      }\n\n\n      this._overlayWidth = this._getOverlayWidth(this._overlayOrigin);\n      const modal = this._elementRef.nativeElement.closest(\n        'body > .cdk-overlay-container [aria-modal=\"true\"]',\n      );\n      if (modal) {\n        const panelId = `${this.id}-panel`;\n        if (this._trackedSelectDialog) {\n          removeAriaReferencedId(this._trackedSelectDialog, 'aria-owns', panelId);\n        }\n        addAriaReferencedId(modal, 'aria-owns', panelId);\n        this._trackedSelectDialog = modal;\n      }\n      this._panelOpen = true;\n      this._keyManager.withHorizontalOrientation(null);//Disable Horizontal Movement \n      //Activate the selected option, if there's no selected option then activate the first enabled item\n      if(this._keyManager){\n        //No Option Has been selected or not\n        if(this.empty){\n          let enabledOptionIndex = -1;\n          for(let i = 0; i < this.options.length; i++) {\n            const option = this.options.get(i) ?? null;\n            if(!option.disabled){\n              enabledOptionIndex = i;\n              break; //First Enabled Option Has been found, terminate\n            }\n          }\n          this._keyManager.setActiveItem(enabledOptionIndex);\n        } else {\n          this._keyManager.setActiveItem(this._selectionModel.selected[0]);\n        }\n      }\n\n      this._changeDetectorRef.markForCheck();\n      this.stateChanges.next();\n  }\n\n  //Handling key events on the select\n\n  // _handleKeyEvents(event: KeyboardEvent): void {\n  //   if(!this.disabled){\n  //     if(this._panelOpen){\n  //       this._openPanelKeyEvents(event);\n  //     } else {\n  //       this._closedPanelKeyEvents(event);\n  //     }\n  //   }\n  // }\n  //In multiple selection mode => Once values are selected, sort the selected values based on their order in the panel\n  private _sortValues() {\n    const options = this.options.toArray();\n\n    this._selectionModel.sort((a,b) => {\n      return this.sortComparator ? this.sortComparator(a, b , options) : options.indexOf(a) - options.indexOf(b);\n    });\n    this.stateChanges.next();\n  }\n\n  //Initialize the selection model \n  private async _initializeSelection() {\n    await Promise.resolve(); \n    \n    if(this.ngControl) this._value = this.ngControl.value;\n    this._selection(this._value);\n    this.stateChanges.next();\n  }\n\n  //Handled all keyboard events when the select panel is opened\n  _handleKeydown(event: KeyboardEvent): void {\n    if (!this.disabled) {\n      this.panelOpen ? this._openPanelKeyEvents(event) : this._closedPanelKeyEvents(event);\n    }\n  }\n\n  private _openPanelKeyEvents(event: KeyboardEvent): void {\n    const keyCode = event.keyCode;\n    const arrowKeyActivated = keyCode === DOWN_ARROW || keyCode === UP_ARROW;\n    const isTyping = this._keyManager.isTyping();\n\n    //close the select on ALT + arrow key to match the native select\n    if(arrowKeyActivated && event.altKey){\n      event.preventDefault();\n      this.close();\n    } \n\n    else if (!isTyping && (keyCode === ENTER || keyCode === SPACE) && this._keyManager.activeItem && !hasModifierKey(event)) {\n      event.preventDefault();\n      this._keyManager.activeItem.selectOption();\n    }\n\n    else if (!isTyping && this._multiple && keyCode === A && event.ctrlKey) {\n      event.preventDefault();\n      this.options?.forEach(option => {\n        if (!option.disabled) {\n          this.options.some(opt => !opt.disabled && !opt.selected) ? option.select() : option.deselect()\n        }\n      });\n    }\n    else {\n      const previousIndex = this._keyManager.activeItemIndex;\n      this._keyManager.onKeydown(event)\n      if(this._multiple && arrowKeyActivated && event.shiftKey && this._keyManager.activeItem && this._keyManager.activeItemIndex !== previousIndex){\n        this._keyManager.activeItem.selectOption();\n      }\n    }\n  }\n\n  //Handled all keyboard events when the select panel is closed\n  _closedPanelKeyEvents(event: KeyboardEvent): void {\n    const keyCode =event.keyCode;\n    const isArrowKeyActivated = keyCode === DOWN_ARROW || keyCode === UP_ARROW || keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW;\n    const isOpenSelectKey = keyCode === ENTER || keyCode === SPACE;\n\n    if((!this._keyManager.isTyping() && isOpenSelectKey && !hasModifierKey(event)) || ((this._multiple || event.altKey) && isArrowKeyActivated)){\n      event.preventDefault();\n      this.open();\n    } else if(!this.multiple) {\n      const previouslySelectedOption = this.selected;\n      this._keyManager.onKeydown(event);\n      const currentlySelectedOption = this.selected;\n      if(currentlySelectedOption && previouslySelectedOption !== currentlySelectedOption) {\n        this._liveAnnouncer.announce((currentlySelectedOption as RealsoftOption).viewValue, 1000)\n      }\n    }\n  }\n\n  //Get the overlay panel width \n  private _getOverlayWidth(preferredOrigin: ElementRef<ElementRef> | CdkOverlayOrigin | undefined) : string | number {\n    if (this.panelWidth === 'auto') {\n      const referenceElement = preferredOrigin instanceof CdkOverlayOrigin ? preferredOrigin.elementRef : preferredOrigin || this._elementRef;\n      const overlayWidth = referenceElement.nativeElement.getBoundingClientRect().width;\n      return overlayWidth;\n    }\n\n    return this.panelWidth === null ? '' : this.panelWidth;\n  }\n\n  //Implementing Control Value Accessor Interface\n\n  //Callback function when the value of the select changes\n  _onChange: (value: any) => void = () => {};\n\n  //Callback function when the select has been touched\n  _onTouched = () => {};\n\n\n  writeValue(value: any): void {\n    if(value !== this._value || (this._multiple && Array.isArray(value))) {\n      if(this.options){\n        this._selection(value)\n      }\n\n      this._value = value;\n    }\n  }\n\n  registerOnChange(fn: (value: any) => void): void {\n    this._onChange = fn;\n  }\n\n  registerOnTouched(fn:() => {}): void {\n    this._onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n    this._changeDetectorRef.markForCheck();\n    this.stateChanges.next();\n  }\n\n  //Toggle the state of the panel based on whether its closed or opeend\n  toggle(): void {\n    this.panelOpen ? this.close() : this.open();\n  }\n\n  focus(options?: FocusOptions): void {\n    this._elementRef.nativeElement.focus(options);\n  }\n\n  //Sets Focus to the host select element\n  _onFocus() {\n    if(!this.disabled) {\n      this._focused = true;\n      this.stateChanges.next();\n    }\n  }\n\n  _onBlur() {\n    this._focused =false;\n    this._keyManager?.cancelTypeahead();\n\n    if(!this.panelOpen && !this.disabled){\n      this._onTouched();\n      this._changeDetectorRef.markForCheck()\n      this.stateChanges.next()\n    }\n\n  }\n\n  setDescribedByIds(ids: string[]) {\n    if (ids.length) {\n      this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n    } else {\n      this._elementRef.nativeElement.removeAttribute('aria-describedby');\n    }\n  }\n\n  //Determines the aria-activedescendant property to be set on the host which is used to identify the currently active element of the combobox popup.\n  _getAriaActiveDescendant(): string | null {\n    if (this.panelOpen && this._keyManager && this._keyManager.activeItem) {\n      const currentActiveID = this._keyManager.activeItem.id;\n      return currentActiveID;\n    }\n    return null;\n  }\n\n  //For attaching the scroll strategy to the overlay \n  _attached(): void {\n    const subscription = this._overlayPanel.positionChange.subscribe(()=> {\n      this._changeDetectorRef.detectChanges();\n      this._scrollOptionIntoOverlayPanel(this._keyManager.activeItemIndex || 0);\n      subscription.unsubscribe();\n    })\n  }\n\n  _scrollOptionIntoOverlayPanel(index: number): void {\n    const option = this.options.get(index);\n\n    if(option) {\n      const panel: HTMLElement = this.panel.nativeElement;\n      const element = option.getHostElement();\n\n      if(index === 0) panel.scrollTop = 0;\n      else {\n        panel.scrollTop = this._optionScrollPosition(element.offsetTop, element.offsetHeight, panel.scrollTop, panel.offsetHeight);\n      }\n    }\n  }\n\n  _optionScrollPosition(optionOffset: number, optionHeight: number, scrollPosition: number, selectPanelHeight: number): number {\n    if(optionOffset< scrollPosition) return optionOffset;\n\n    if(optionOffset + optionHeight > scrollPosition + selectPanelHeight) return Math.max(0, optionOffset - selectPanelHeight+ optionHeight)\n\n    return scrollPosition;\n  }\n\n  // private _optionClick(option: RealsoftOption, isUserInput: boolean): void {\n  //   const isOptionPreviouslySelected = this._selectionModel.isSelected(option);\n  //   let emittedValue: any;\n    \n  //   if(isOptionPreviouslySelected != option.selected) option.selected ? this._selectionModel.select(option) : this._selectionModel.deselect(option);\n\n  //   if(isUserInput) this._keyManager.setActiveItem(option);\n\n  //   if(this.multiple){\n  //     this._sortValues(); \n  //     emittedValue = (this.selected as RealsoftOption[]).map(option => option.value);\n  //   } else if (!this.multiple) {\n  //     emittedValue = (this.selected as RealsoftOption).value\n  //   }\n\n  //   this._value = emittedValue;\n  //   this.valueChange.emit(emittedValue);\n  //   this._onChange(emittedValue);\n  //   this.selectionChange.emit(new RealosftSelectChange(this, emittedValue));\n  //   this._changeDetectorRef.markForCheck();\n  //   this.stateChanges.next()\n  // }\n\n  private _optionClick(option: RealsoftOption, isUserInput: boolean): void {\n    const optionWasPreviouslySelected = this._selectionModel.isSelected(option);\n    let emittedValue : any;\n\n    if(!this._selectNullableOptions && option.value == null && !this._multiple) {\n      option.deselect();\n      this._selectionModel.clear();\n\n      if(this.value != null) {\n        emittedValue = this.selected ? (this.selected as RealsoftOption).value : option.value;\n        this._value = emittedValue;\n        this.valueChange.emit(emittedValue);\n        this._onChange(emittedValue);\n        this.selectionChange.emit(new RealosftSelectChange(this, emittedValue));\n        this._changeDetectorRef.markForCheck();\n      }\n    } else {\n      if(optionWasPreviouslySelected !== option.selected) {\n        option.selected ? this._selectionModel.select(option) : this._selectionModel.deselect(option);\n      }\n      \n      if(isUserInput) this._keyManager.setActiveItem(option);\n\n      if(this.multiple) {\n        this._sortValues();\n        if(isUserInput) this.focus()\n      }\n    }\n\n    if(optionWasPreviouslySelected !== this._selectionModel.isSelected(option)) {\n      if (this.multiple) {\n        emittedValue = (this.selected as RealsoftOption[]).map(option => option.value);\n      } else {\n        emittedValue = this.selected ? (this.selected as RealsoftOption).value : option.value;\n      }\n  \n      this._value = emittedValue;\n      this.valueChange.emit(emittedValue);\n      this._onChange(emittedValue);\n      this.selectionChange.emit(new RealosftSelectChange(this, emittedValue));\n      this._changeDetectorRef.markForCheck();\n    }\n    this.stateChanges.next();\n  }\n\n  ngOnDestroy(): void {\n    this._keyManager?.destroy();\n    this._destroy.next();\n    this._destroy.complete();\n    this.stateChanges.complete();\n\n    if(this._trackedSelectDialog) {\n      const panelID = `${this.id}-panel`;\n      removeAriaReferencedId(this._trackedSelectDialog, 'aria-owns', panelID);\n      this._trackedSelectDialog = null;\n    }\n  }\n\n\n}","\r\n<!--Use cdkOverlayOrigin as a reference to overlay positioning to define where the overlay needs to be attached-->\r\n<div \r\n    cdk-overlay-origin\r\n    class=\"realsoft-select-trigger\"\r\n    (click)=\"open()\"\r\n    #triggerSelect\r\n    #additionalOverlayOrigin=\"cdkOverlayOrigin\">\r\n\r\n    <div class=\"realsoft-select-value\" [attr.id]=\"_selectValueID\">\r\n        @if(empty) {\r\n            <span class=\"realsoft-select-placeholder realsoft-select-min-line\">{{placeholder}}</span>\r\n        } \r\n        @else {\r\n            <span class=\"realsoft-select-value-text\">\r\n                @if(customTrigger) {\r\n                    <ng-content select=\"realsoft-select-trigger\"></ng-content>\r\n                } @else {\r\n                    <span class=\"realsoft-select-min-line\">{{triggerValue}}</span>\r\n                }\r\n            </span>\r\n        }\r\n    </div>\r\n\r\n    <div class=\"realsoft-select-arrow-wrapper\">\r\n        <div class=\"realsoft-select-arrow\">\r\n            <svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" focusable=\"false\" aria-hidden=\"true\">\r\n                <path d=\"M7 10l5 5 5-5z\"/>\r\n            </svg>\r\n        </div>\r\n    </div>\r\n</div>\r\n\r\n<ng-template\r\n  cdk-connected-overlay\r\n  cdkConnectedOverlayLockPosition\r\n  [cdkConnectedOverlayPanelClass]=\"_overlayPanelClasses\"\r\n  [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\r\n  [cdkConnectedOverlayOrigin]=\"_overlayOrigin || additionalOverlayOrigin\"\r\n  [cdkConnectedOverlayOpen]=\"panelOpen\"\r\n  [cdkConnectedOverlayWidth]=\"_overlayWidth\"\r\n  cdkConnectedOverlayHasBackdrop\r\n  cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\r\n  [cdkConnectedOverlayPositions]=\"_overlayPositions\"\r\n  (attach)=\"_attached()\"\r\n  (backdropClick)=\"close()\"\r\n  (detach)=\"close()\">\r\n  <div \r\n    #selectPanel\r\n    role=\"listbox\"\r\n    tabindex=\"-1\"\r\n    class=\"realsoft-select-panel realsoft-menu-surface realsoft-menu-surface--open\"\r\n    [attr.id]=\"_selectUniqueID + '-panel'\"\r\n    [attr.aria-mutliselectable]=\"multiple\"\r\n    [attr.aria-labelledby]=\"_panelARIALabeldby()\"\r\n    [attr.aria-label]=\"ariaLabel || null\"\r\n    [ngClass]=\"panelClass\"\r\n    (keydown)=\"_handleKeydown($event)\"\r\n    >\r\n    <ng-content></ng-content> \r\n  </div>\r\n</ng-template>","import {state, style, transition, animate, trigger } from \"@angular/animations\";\r\n\r\n /** This animation transforms the select's overlay panel on and off the page. */\r\n export let transformPanel = [\r\n    state(\r\n      'void',\r\n      style({\r\n        opacity: 0,\r\n        transform: 'scale(1, 0.8)',\r\n      }),\r\n    ),\r\n    transition(\r\n      'void => showing',\r\n      animate(\r\n        '120ms cubic-bezier(0, 0, 0.2, 1)',\r\n        style({\r\n          opacity: 1,\r\n          transform: 'scale(1, 1)',\r\n        }),\r\n      ),\r\n    ),\r\n    transition('* => void', animate('100ms linear', style({opacity: 0}))),\r\n  ]","import { InjectionToken } from \"@angular/core\";\r\nimport { RealsoftFormFieldAppearance } from \"../form-field/models\";\r\n\r\n\r\n//Define the default page size when there's no page size and there are no provided page size options\r\nexport const DEFAULT_PAGE_SIZE = 10;\r\n\r\n//Creating a Change Event Object that is emitted when the user selects a different page size or navigates to another page.\r\n\r\nexport class PageEvent { \r\n    pageIndex: number; //The current page index\r\n    previousPageIndex: number; //Index of the page that was selected previously\r\n    pageSize: number; //The current page size\r\n    length: number; //The current total number of items being paged\r\n}\r\n\r\nexport interface RealsoftPaginatorDefaultOptions {\r\n    formFieldAppearance: RealsoftFormFieldAppearance\r\n    pageSize?: number;//Number of items to display on a page. By default set to 10\r\n    pageSizeOptions?: number[]; //The set of provided page size options to display to the user\r\n    hidePageSize?: boolean; //Whether to hide the page size selection UI from the user\r\n    showFirstLastButtons?: boolean; //Whether to show the first/last buttons UI to the user\r\n}\r\n\r\nexport interface RealsoftPaginatorSelectConfig {\r\n    disableOptionCentering?: boolean;\r\n    panelClass?: string | string[] | Set<string> | {[key: string]: any};\r\n  }\r\n\r\n//Injection Token that can be used to provide the default options for the paginator module.\r\nexport const REALSOFT_PAGINATOR_DEFAULT_OPTIONS = new InjectionToken<RealsoftPaginatorDefaultOptions>(\r\n    'REALSOFT_PAGINATOR_DEFAULT_OPIONS'\r\n);\r\n\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable, Subject } from \"rxjs\";\r\n\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n}) \r\nexport class RealsoftPaginatorIntl {\r\n    readonly changes = new Subject<void>();\r\n    readonly changes$: Observable<void> = this.changes.asObservable();\r\n\r\n    //A label for the button that moves to the first page\r\n    firstPageLabel: string = 'First Page';\r\n\r\n    //A label for the button that moves to the last page\r\n    lastPageLabel: string = 'Last Page';\r\n\r\n    //A label for the button that moves to the next page\r\n    nextPageLabel: string = 'Next Page';\r\n\r\n    //A label for the button that moves to the previous page\r\n    previousPageLabel: string = 'Previous Page'\r\n\r\n    //A label for the page size selector\r\n    itemsPerPageLabel: string = 'Items per Page:';\r\n\r\n\r\n    //A label for the range of items within the current page and the length of the whole list\r\n    //getRangeLabel is declared with a specific function type, the function takes three arguments page, pageSize, length and returns a string\r\n    getRangeLabel: (page: number, pageSize: number, length: number) => string = (\r\n        page,\r\n        pageSize,\r\n        length\r\n    ) => {\r\n        //First: Empty or zero page dataset case: When there's no items (length = 0) or no items can be shown per page (pageSize = 0)\r\n        if (length === 0 || pageSize === 0) return `0 of ${length}`;\r\n\r\n        //Second: Make sure that length is not negative. \r\n        length = Math.max(length, 0);\r\n\r\n        //Determine the first item index of the current page\r\n        const initialIndex = page * pageSize; \r\n\r\n        //Computing the final index of the last item on the current page\r\n        let finalIndex;\r\n\r\n        //Check whether the first index is within the set \r\n        if(initialIndex < length){\r\n            //initialIndex + pageSize is the maximum index of the current page\r\n            finalIndex = Math.min(initialIndex + pageSize, length);\r\n        } else {\r\n            //the final index is the initialIndex + pageSize if the initial index exceeds the dataset length\r\n            finalIndex = initialIndex + pageSize\r\n        }\r\n        return `${initialIndex + 1} - ${finalIndex} of ${length}`;\r\n    }\r\n}\r\n  \r\n","import { booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, input, Input, InputSignal, numberAttribute, OnDestroy, OnInit, Output, signal, ViewEncapsulation, WritableSignal } from \"@angular/core\";\r\nimport { Observable, ReplaySubject, Subscription } from \"rxjs\";\r\nimport { RealsoftFormField } from \"../form-field/form-field\";\r\nimport { RealsoftFormFieldAppearance } from \"../form-field/models\";\r\nimport { UniqueIdGeneratorService } from \"../id-generator\";\r\nimport { RealsoftOption } from \"../option/option\";\r\nimport { RealsoftSelect } from \"../select/select\";\r\nimport { DEFAULT_PAGE_SIZE, PageEvent, REALSOFT_PAGINATOR_DEFAULT_OPTIONS, RealsoftPaginatorDefaultOptions, RealsoftPaginatorSelectConfig } from \"./paginator-config\";\r\nimport { RealsoftPaginatorIntl } from \"./paginator-intl\";\r\n\r\n\r\n@Component({\r\n    selector: 'realsoft-paginator',\r\n    exportAs: 'realsoftPaginator',\r\n    templateUrl: 'paginator.html',\r\n    styleUrl: 'paginator.scss',\r\n    host: {\r\n        'class': 'realsoft-paginator',\r\n        '[class.realsoft-paginator-disabled]': 'disabled',\r\n        'role': 'group'\r\n    },\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [RealsoftSelect, RealsoftFormField, RealsoftOption]\r\n}) \r\nexport class RealsoftPaginator implements OnInit, OnDestroy {\r\n    private _pageIndex = 0;\r\n    private _length = 0;\r\n    private _pageSize: number;\r\n    private _pageSizeOptions: number[] = [];\r\n    private _intlChanges: Subscription;\r\n    _formFieldAppearance?: RealsoftFormFieldAppearance;\r\n    _changeDetectorRef = inject(ChangeDetectorRef);\r\n    defaultValues = inject<RealsoftPaginatorDefaultOptions>(REALSOFT_PAGINATOR_DEFAULT_OPTIONS, {optional: true})\r\n    readonly _pageSizeLabelId = inject(UniqueIdGeneratorService).generateID('realsoft-paginator-page-size-label-');\r\n    readonly isLoading: InputSignal<boolean> = input<boolean>(false);\r\n\r\n    // Instead of using a ReplaySubject, use signals to allow you to directly access the current value without waiting for an emission.\r\n    // The signal will always hold the current value and doesn't required explicit \"replaying\". Hence, it can replace a ReplaySubject in cases like this where you only need to track the latest state.\r\n    _initialized: WritableSignal<boolean> = signal(false);\r\n\r\n    private _initializedStream = new ReplaySubject<void>(1);\r\n    /** Emits when the paginator is initialized. */\r\n    initialized: Observable<void> = this._initializedStream;\r\n    _sortedPageSizeOptions: number[];\r\n    _internationalization = inject(RealsoftPaginatorIntl);\r\n\r\n    //The Initial Page Index of the displayed list of items, the default value is set to zero\r\n    @Input({transform: numberAttribute}) \r\n    get pageIndex(): number {\r\n        return this._pageIndex;\r\n    }\r\n    set pageIndex(value: number) {\r\n        this._pageIndex = value;\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    @Input() selectConfig: RealsoftPaginatorSelectConfig = {};\r\n\r\n    //The Number of items to display on a page, By default set to 10\r\n    @Input({transform: numberAttribute})\r\n    get pageSize(): number{\r\n        return this._pageSize;\r\n    }\r\n    set pageSize(value: number) {\r\n        this._pageSize = value;\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    //The length of the total number of items that are being paginated. Default is set to zero.\r\n    @Input({transform: numberAttribute})\r\n    get length(): number {\r\n        return this._length;\r\n    }\r\n    set length(value: number) {\r\n        this._length = value || 0;\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    /**\r\n     *@param value can be either a mutable array of numbers or a readonly array of numbers\r\n    */\r\n    @Input() //The set of provided page size options to be displayed to the user\r\n    get pageSizeOptions(): number[] {\r\n        return this._pageSizeOptions;\r\n    }\r\n    set pageSizeOptions(value: number[] | readonly number[]){\r\n        //If the Value is null or undefined, then assign an empty array to ensure that the code won't break if the value is invalid.\r\n        //The map function iterates over each element in the value array and converts each value aka n to a number or some numeric representation\r\n        //If Coercion should fail then fall back to 0\r\n        this._pageSizeOptions = (value || ([] as number[])).map(n => numberAttribute(n,0));\r\n        this._updatePageSizeOptions(); //Update the Array\r\n    }\r\n\r\n    //Whether to hide the page size selection from the user\r\n    @Input({transform: booleanAttribute}) hidePageSize = false;\r\n\r\n    //Whether the paginator is disabled\r\n    @Input({transform: booleanAttribute}) disabled = false;\r\n\r\n    //Whether to show the first and last buttons to the user\r\n    @Input({transform: booleanAttribute}) showFirstLastButtons = false;\r\n\r\n    //Whenever the page index or page size change emit this event\r\n    @Output() readonly page: EventEmitter<PageEvent> = new EventEmitter<PageEvent>();\r\n\r\n    \r\n    constructor() {\r\n        this._intlChanges = this._internationalization.changes$.subscribe(() => this._changeDetectorRef.markForCheck());\r\n        if(this.defaultValues){\r\n            //Object Destructuring\r\n            const { pageSize, pageSizeOptions, hidePageSize, showFirstLastButtons } = this.defaultValues;\r\n            this._pageSize = pageSize ?? this._pageSize;\r\n            this._pageSizeOptions = pageSizeOptions ?? this._pageSizeOptions;\r\n            this.hidePageSize = hidePageSize ?? this.hidePageSize;\r\n            this.showFirstLastButtons = showFirstLastButtons ?? this.showFirstLastButtons;\r\n        }\r\n        this._formFieldAppearance = this.defaultValues?.formFieldAppearance || 'outline';\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this._initialized.set(true);\r\n        this._initializedStream.next();\r\n        this._updatePageSizeOptions();\r\n    }\r\n\r\n    private _updatePageSizeOptions() {\r\n        if(!this._initialized()) return;\r\n\r\n        //Set the page size to the first option of the pageSizeOptions array if not defined.\r\n        if(!this.pageSize){\r\n            this._pageSize = this.pageSizeOptions.length > 0 ? this.pageSizeOptions[0] : DEFAULT_PAGE_SIZE;\r\n        }\r\n\r\n        //Create a unique and sorted list of displayed page size options\r\n        this._sortedPageSizeOptions = Array.from(\r\n            new Set([...this._pageSizeOptions, this.pageSize])).sort((a,b) => a - b); \r\n\r\n        //Trigger Change Detection\r\n        this._changeDetectorRef.markForCheck();\r\n    } \r\n\r\n    //Determine whether there's a previous page or not\r\n    hasPreviousPage(): boolean {\r\n        return this.pageIndex >= 1 && this.pageIndex != 0;\r\n    }\r\n    \r\n    //Method to proceed to the next page if there's any\r\n    nextPage(): void {\r\n        if(this.hasNextPage()) {\r\n            this._navigate(this.pageIndex + 1);\r\n        }\r\n    }\r\n\r\n    //Method to proceed to the last page if there's any\r\n    previousPage(): void {\r\n        if(this.hasPreviousPage()) {\r\n            this._navigate(this.pageIndex - 1)\r\n        }\r\n    }\r\n\r\n    //Method to proceed to the first page after making sure that the user is not already there\r\n    firstPage(): void {\r\n        //Make sure first that the user is not at the first page already\r\n        if(this.hasPreviousPage()){\r\n            this._navigate(0);\r\n        }\r\n    }\r\n\r\n    //Method to proceed to the last page after making sure that the user is not already there\r\n    lastPage(): void {\r\n        if(this.hasNextPage()){\r\n            this._navigate(this._lastPageIndex())\r\n        }\r\n    }\r\n\r\n    //Determine whether there's a next page or not\r\n    //To do so there must be a function that returns the total number of pages. \r\n    hasNextPage(): boolean {\r\n        const lastPageIndex = this._lastPageIndex();\r\n        return this.pageIndex < lastPageIndex && this.pageSize !=0 ;\r\n    }\r\n\r\n    //Calculate the number of pages\r\n    getNumberOfPages(): number { \r\n        if (!this.pageSize) return 0;\r\n\r\n        return Math.ceil(this.length / this.pageSize);\r\n    }\r\n    \r\n    //Method to return the index of the last page for easier navigation\r\n    private _lastPageIndex(): number{\r\n        return this.getNumberOfPages() - 1;\r\n    }\r\n\r\n    //When the paginator's options change, emit an event to trigger the new changes\r\n    private _pageEvent(previousPageIndex: number){\r\n        this.page.emit({\r\n            previousPageIndex,\r\n            pageIndex: this.pageIndex,\r\n            pageSize: this.pageSize,\r\n            length: this.length\r\n        })\r\n    }\r\n\r\n    //To Navigate to a certain page index\r\n    private _navigate(index: number){\r\n        //Store the value of the previous page index before modifying the page index value\r\n        const previousPageIndex = this.pageIndex;\r\n\r\n        if(index != previousPageIndex) {\r\n            this.pageIndex = index;\r\n            this._pageEvent(previousPageIndex);\r\n        }\r\n    }\r\n\r\n    //Method that determines when to disable navigation to the next page\r\n    _disableNextButton(): boolean {\r\n        return this.disabled || !this.hasNextPage();\r\n    }\r\n\r\n    //Method that determines when to disable navigation to the previous page\r\n    _disablePreviousButton(): boolean {\r\n        return this .disabled || !this.hasPreviousPage();\r\n    }\r\n\r\n    //When updating the page size, the page index needs to be recaluculated and the page size needs to be updated based on the selected one\r\n    _updatePageSize(pageSize: number) {\r\n        //pageIndex is the current page number which typically starts at 0 for the first page\r\n        //page size is the number of items per page\r\n        //initialIndex represents the index of the first item in the current page in the dataset provided.\r\n        //If pageIndex is 2 and pageSize is 10 then initial index is 20\r\n        const initialIndex = this.pageIndex * this.pageSize;\r\n        const previousPageIndex = this.pageIndex; //Store the previous current page value to trigger changes later. \r\n\r\n        //Recalculate the new Page Index \r\n        //Use Math.floor to ensure that the result is rounded down to the nearest whole number. \r\n        //The || 0 is a fallback to ensure that the new pageIndex is set to 0 if the calculated value is NAN, null, or undefined. \r\n        this.pageIndex = Math.floor(initialIndex / pageSize) || 0;\r\n        this.pageSize = pageSize;\r\n        this._pageEvent(previousPageIndex);//Trigger Changes.\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this._initialized.set(false);\r\n        this._initializedStream.complete();\r\n        this._intlChanges.unsubscribe(); //Kill the subscription\r\n    }\r\n}","<div class=\"realsoft-paginator-outer-container\">\r\n  <div class=\"realsoft-paginator-container\">\r\n      @if(!hidePageSize) {\r\n          <div class=\"realsoft-paginator-page-size\">\r\n              <div class=\"realsoft-paginator-page-size-label\">\r\n                  {{_internationalization.itemsPerPageLabel}}\r\n              </div>\r\n  \r\n              @if (_sortedPageSizeOptions.length > 1) {\r\n                  <realsoft-form-field\r\n                    [appearance]=\"_formFieldAppearance!\"\r\n                    class=\"realsoft-paginator-page-size-select\">\r\n                    <realsoft-select\r\n                      #selectRef\r\n                      [value]=\"pageSize\"\r\n                      [disabled]=\"disabled\"\r\n                      [aria-labelledby]=\"_pageSizeLabelId\"\r\n                      [panelClass]=\"selectConfig.panelClass || ''\"\r\n                      [disableOptionCentering]=\"selectConfig.disableOptionCentering\"\r\n                      (selectionChange)=\"_updatePageSize($event.value)\"\r\n                      hideSingleSelectionIndicator>\r\n                      @for (pageSizeOption of _sortedPageSizeOptions; track pageSizeOption) {\r\n                        <realsoft-option [value]=\"pageSizeOption\">\r\n                          {{pageSizeOption}}\r\n                        </realsoft-option>\r\n                      }\r\n                    </realsoft-select>\r\n                  <div class=\"realsoft-paginator-touch-target\" (click)=\"selectRef.open()\"></div>\r\n                  </realsoft-form-field>\r\n                }\r\n              @if(_sortedPageSizeOptions.length <= 1){\r\n                  <div class=\"realsoft-paginator-page-size-value\">{{pageSize}}</div>\r\n              }\r\n          </div>\r\n      }\r\n     \r\n\r\n      <div class=\"realsoft-paginator-range-actions\">\r\n        @if(!isLoading()) {\r\n          <div class=\"realsoft-paginator-range-label\">{{_internationalization.getRangeLabel(pageIndex, pageSize, length)}}</div>\r\n        } @else {\r\n          <span class=\"realsoft-paginator-loader\"></span>\r\n        }\r\n          @if(showFirstLastButtons){\r\n              <button (click)=\"firstPage()\"\r\n              class=\"realsoft-paginator-navigation-first\"\r\n              [disabled]=\"_disablePreviousButton()\"\r\n              class=\"realsoft-paginator-navigation-first\">\r\n              <svg class=\"realsoft-paginator-icon\"\r\n              viewBox=\"0 0 24 24\"\r\n              focusable=\"false\"\r\n              aria-hidden=\"true\">\r\n            <path d=\"M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z\"/>\r\n          </svg>\r\n              </button>\r\n              \r\n          }\r\n          <button (click)=\"previousPage()\" [disabled]=\"_disablePreviousButton()\" class=\"realsoft-paginator-navigation-previous\">\r\n              <svg class=\"realsoft-paginator-icon\"\r\n           viewBox=\"0 0 24 24\"\r\n           focusable=\"false\"\r\n           aria-hidden=\"true\">\r\n        <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>\r\n      </svg>\r\n          </button>\r\n\r\n          <button (click)=\"nextPage()\" [disabled]=\"_disableNextButton()\" class=\"realsoft-paginator-navigation-next\">\r\n              <svg class=\"realsoft-paginator-icon\"\r\n           viewBox=\"0 0 24 24\"\r\n           focusable=\"false\"\r\n           aria-hidden=\"true\">\r\n        <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/>\r\n      </svg>\r\n          </button>\r\n          \r\n          \r\n\r\n          @if(showFirstLastButtons){\r\n              <button class=\"realsoft-paginator-navigation-last\"\r\n              (click)=\"lastPage()\"\r\n              [disabled]=\"_disableNextButton()\">\r\n              <svg class=\"realsoft-paginator-icon\"\r\n              viewBox=\"0 0 24 24\"\r\n              focusable=\"false\"\r\n              aria-hidden=\"true\">\r\n            <path d=\"M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z\"/>\r\n          </svg>\r\n              </button>\r\n              \r\n          }                \r\n      </div>\r\n\r\n  </div>\r\n</div>","import { forwardRef, InjectionToken } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { RealsoftButtonToggleGroup } from \"../../features/button-toggle/button-toggle-group\";\r\nimport { RealsoftButtonToggle } from \"./button-toggle\";\r\n\r\n\r\nexport type RealsoftToggleType = 'checkbox' | 'radio';\r\n\r\nexport type RealsoftButtonToggleAppearance = 'legacy' | 'standard'; //Possible appearance styles for the button toggle\r\n\r\nexport interface RealsoftButtonToggleDefaultOptions {\r\n    appearance?: RealsoftButtonToggleAppearance;\r\n    hideSingleSelectionIndicator?: boolean;\r\n    hideMultipleSelectionIndicator?: boolean;\r\n    disabledInteractive?: boolean;\r\n}\r\n\r\nexport const REALSOFT_BUTTON_TOGGLE_DEFAULT_OPTIONS = new InjectionToken<RealsoftButtonToggleDefaultOptions>(\r\n    'REALSOFT_BUTTON_TOGGLE_DEFAULT_OPTIONS',\r\n    {\r\n        providedIn: 'root',\r\n        factory: REALSOFT_BUTTON_TOGGLE_DEFAULT_OPTIONS_FACTORY,\r\n    },\r\n);\r\n\r\nexport function REALSOFT_BUTTON_TOGGLE_DEFAULT_OPTIONS_FACTORY(): RealsoftButtonToggleDefaultOptions {\r\n    return {\r\n        appearance: 'standard',\r\n        hideSingleSelectionIndicator: false,\r\n        hideMultipleSelectionIndicator: false,\r\n        disabledInteractive: false,\r\n    };\r\n}\r\n\r\nexport const REALSOFT_BUTTON_TOGGLE_GROUP = new InjectionToken<RealsoftButtonToggleGroup>('RealsoftButtonToggleGroup');\r\n\r\n\r\n\r\nexport class RealsoftButtonToggleChange {\r\n    constructor(\r\n        public source: RealsoftButtonToggle,\r\n        public value: any,\r\n    ) {}\r\n}\r\n","import { AfterViewInit, ANIMATION_MODULE_TYPE, booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostAttributeToken, inject, Input, OnDestroy, OnInit, Output, ViewChild, ViewEncapsulation } from \"@angular/core\";\r\nimport { UniqueIdGeneratorService } from \"../id-generator\";\r\nimport { FocusMonitor } from \"@angular/cdk/a11y\";\r\nimport { RealsoftButtonToggleGroup } from \"../../features/button-toggle/button-toggle-group\";\r\nimport { REALSOFT_BUTTON_TOGGLE_DEFAULT_OPTIONS, REALSOFT_BUTTON_TOGGLE_GROUP, RealsoftButtonToggleAppearance, RealsoftButtonToggleChange, RealsoftButtonToggleDefaultOptions } from \"./config\";\r\nimport { RealsoftPseudoCheckbox } from \"../pseudo-checkbox/pseudo-checkbox\";\r\n\r\n@Component({\r\n    selector: 'realsoft-button-toggle',\r\n    templateUrl: './button-toggle.html',\r\n    styleUrl: './button-toggle.scss',\r\n    encapsulation: ViewEncapsulation.None,\r\n    exportAs: 'realsoftButtonToggle',\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    host: {\r\n        'class': 'realsoft-button-toggle',\r\n        '[class.realsoft-button-toggle-standalone]': '!buttonToggleGroup',\r\n        '[class.realsoft-button-toggle-checked]': 'checked',\r\n        '[class.realsoft-secondary-button-toggle]': 'color === \"secondary\"',\r\n        '[class.realsoft-ternary-button-toggle]': 'color === \"ternary\"',\r\n        '[class.realsoft-button-toggle-disabled]': 'disabled',\r\n        '[class.realsoft-button-toggle-disabled-interactive]': 'disabledInteractive',\r\n        '[class.realsoft-button-toggle-appearance-standard]': 'appearance === \"standard\"',\r\n        '[attr.aria-label]': 'null',\r\n        '[attr.aria-labelledby]': 'null',\r\n        '[attr.id]': 'id',\r\n        '[attr.name]': 'null',\r\n        'role': 'presentation',\r\n        '(focus)': 'focus()'\r\n    },\r\n    imports: [RealsoftPseudoCheckbox]\r\n})\r\nexport class RealsoftButtonToggle implements OnInit, AfterViewInit, OnDestroy {\r\n  _changeDetectorRef = inject(ChangeDetectorRef);\r\n  private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n  private _uniqueID = inject(UniqueIdGeneratorService).generateID('realsoft-button-toggle-');\r\n  private _focusMonitor = inject(FocusMonitor);\r\n  private _animationMode = inject(ANIMATION_MODULE_TYPE, {optional: true});\r\n  private _checked = false;\r\n  private _tabIndex: number | null;\r\n  private _appearance: RealsoftButtonToggleAppearance = 'standard';\r\n  private _disabled: boolean = false;\r\n  private _disabledInteractive: boolean;\r\n  private color: 'primary' | 'secondary' | 'ternary';\r\n\r\n  buttonToggleGroup = inject<RealsoftButtonToggleGroup>(REALSOFT_BUTTON_TOGGLE_GROUP, {optional: true}); //The parent toggle group => Exclusive Selection (Optional)\r\n\r\n  defaultOptions = inject<RealsoftButtonToggleDefaultOptions>(REALSOFT_BUTTON_TOGGLE_DEFAULT_OPTIONS, {optional: true});\r\n\r\n  defaultTabIndex = inject(new HostAttributeToken('tabindex'), {optional: true}) || '';\r\n\r\n  //Attached to the aria-label attribute of the host element. In most cases, aria-labelledby will take precedence so this may be omitted.\r\n  @Input('aria-label') ariaLabel: string;\r\n\r\n  //Users can specify the aria-labelledby attribute which will be forwarded to the input element.\r\n  @Input('aria-labelledby') ariaLabelledby: string | null = null;\r\n\r\n  //A reference to the native button element\r\n  @ViewChild('button') _buttonElement: ElementRef<HTMLButtonElement>;\r\n\r\n  //Unique Id for the button toggle\r\n  @Input() id: string; \r\n\r\n  //RealsoftButtonToggleGroup reads this to assign its own value\r\n  @Input() value: any;\r\n\r\n  //HTML's 'name' attribute used to group radios for unique selection\r\n  @Input() name: string;\r\n\r\n  @Input() \r\n  get tabIndex(): number | null {\r\n    return this._tabIndex\r\n  }\r\n  set tabIndex(newValue: number | null) {\r\n    if(newValue !== this._tabIndex){\r\n      this._tabIndex = newValue;\r\n      this._changeDetectorRef.markForCheck();\r\n    }\r\n  }\r\n\r\n  @Input() \r\n  get appearance(): RealsoftButtonToggleAppearance {\r\n    return this.buttonToggleGroup ? this.buttonToggleGroup.appearance : this._appearance;\r\n  }\r\n  set appearance(newAppearance: RealsoftButtonToggleAppearance) {\r\n    if(this._appearance !== newAppearance) {\r\n      this._appearance = newAppearance;\r\n      this._changeDetectorRef.markForCheck();\r\n    }\r\n  }\r\n\r\n    //Whether the button is disabled\r\n  @Input({transform: booleanAttribute})\r\n  get disabled(): boolean {\r\n    return this._disabled || (this.buttonToggleGroup && this.buttonToggleGroup.disabled);\r\n  }\r\n  set disabled(value: boolean) {\r\n    this._disabled = value;\r\n  }\r\n\r\n    //Whether the button should remain interactive when it is disabled\r\n  @Input({transform: booleanAttribute})\r\n  get disabledInteractive(): boolean {\r\n    return this._disabledInteractive || (this.buttonToggleGroup && this.buttonToggleGroup.disabledInteractive)\r\n  }\r\n  set disabledInteractive(value: boolean) {\r\n    this._disabledInteractive = value;\r\n  }\r\n\r\n  @Input({transform: booleanAttribute})\r\n  get checked(): boolean {\r\n    return this.buttonToggleGroup ? this.buttonToggleGroup._isPreviouslySelected(this): this._checked;\r\n  }\r\n  set checked(value: boolean) {\r\n    if(value !== this._checked) {\r\n      this._checked = value;\r\n\r\n      if(this.buttonToggleGroup) {\r\n        this.buttonToggleGroup._syncChildrenButtonToggle(this, this._checked);\r\n      }\r\n\r\n      this._changeDetectorRef.markForCheck()\r\n    }\r\n  }\r\n\r\n\r\n  @Output() readonly change: EventEmitter<RealsoftButtonToggleChange> = new EventEmitter<RealsoftButtonToggleChange>();\r\n\r\n  constructor(...args: unknown[]);\r\n\r\n  constructor() {\r\n    this.color = this.buttonToggleGroup.color;\r\n    this.tabIndex = parseInt(this.defaultTabIndex) || 0;\r\n    this.appearance = this.defaultOptions && this.defaultOptions.appearance ? this.defaultOptions.appearance : 'standard';\r\n    this.disabledInteractive = this.defaultOptions?.disabledInteractive ?? false;\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.id = this.id || this._uniqueID;\r\n    if(this.buttonToggleGroup) {\r\n      if(this.buttonToggleGroup._isPreviouslyChecked(this)) this.checked = true;\r\n      else if (this.buttonToggleGroup._isPreviouslySelected(this) !== this._checked) this.buttonToggleGroup._syncChildrenButtonToggle(this, this._checked);\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if(this._animationMode !== 'NoopAnimations') this._elementRef.nativeElement.classList.add('realsoft-button-toggle-animations-enabled');\r\n    this._focusMonitor.monitor(this._elementRef, true);\r\n  }\r\n\r\n  focus(options?: FocusOptions): void {\r\n    this._buttonElement.nativeElement.focus(options);\r\n  }\r\n\r\n  isSingleSelection(): boolean {\r\n    return this.buttonToggleGroup && !this.buttonToggleGroup.multiple;\r\n  }\r\n  _onButtonClick() {\r\n    if(this.disabled) return;\r\n  \r\n    const newlyCheckedValue = this.isSingleSelection() ? true : !this._checked;\r\n\r\n    if(newlyCheckedValue !== this._checked) {\r\n      this._checked = newlyCheckedValue;\r\n      if(this.buttonToggleGroup) {\r\n        this.buttonToggleGroup._syncChildrenButtonToggle(this, this._checked, true);\r\n        this.buttonToggleGroup._onTouched();\r\n      }\r\n    }\r\n\r\n    if(this.isSingleSelection()) {\r\n      const newlyFocusedButton = this.buttonToggleGroup._buttonToggles.find(toggle => {return toggle.tabIndex === 0});\r\n\r\n      if(newlyFocusedButton) newlyFocusedButton.tabIndex = -1;\r\n\r\n      this.tabIndex = 0;\r\n    }\r\n\r\n    this.change.emit(new RealsoftButtonToggleChange(this, this.value))\r\n  }\r\n\r\n  get buttonId() : string {\r\n    return `${this.id || this._uniqueID}-button`;\r\n  }\r\n\r\n  //Button Name Getter for the inner DOM node\r\n  _getButtonName(): string | null {\r\n    if(this.isSingleSelection()) {\r\n      return this.buttonToggleGroup.name;\r\n    }\r\n    return this.name || null;\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._focusMonitor.stopMonitoring(this._elementRef);\r\n\r\n    if(this.buttonToggleGroup && this.buttonToggleGroup._isPreviouslySelected(this)) {\r\n      this.buttonToggleGroup._syncChildrenButtonToggle(this, false, false, true);\r\n    }\r\n  }\r\n\r\n}\r\n","<button #button class=\"realsoft-button-toggle-button realsoft-focus-indicator\"\r\n        type=\"button\"\r\n        [id]=\"buttonId\"\r\n        [attr.role]=\"isSingleSelection() ? 'radio' : 'button'\"\r\n        [attr.tabindex]=\"disabled && !disabledInteractive ? -1 : tabIndex\"\r\n        [attr.aria-pressed]=\"!isSingleSelection() ? checked : null\"\r\n        [attr.aria-checked]=\"isSingleSelection() ? checked : null\"\r\n        [disabled]=\"(disabled && !disabledInteractive) || null\"\r\n        [attr.name]=\"_getButtonName()\"\r\n        [attr.aria-label]=\"ariaLabel\"\r\n        [attr.aria-labelledby]=\"ariaLabelledby\"\r\n        [attr.aria-disabled]=\"disabled && disabledInteractive ? 'true' : null\"\r\n        (click)=\"_onButtonClick()\">\r\n  @if (buttonToggleGroup && (\r\n    !buttonToggleGroup.multiple && !buttonToggleGroup.hideSingleSelectionIndicator ||\r\n    buttonToggleGroup.multiple && !buttonToggleGroup.hideMultipleSelectionIndicator)\r\n  ) {\r\n    <div class=\"realsoft-button-toggle-checkbox-wrapper\">\r\n      <realsoft-pseudo-checkbox\r\n        [disabled]=\"disabled\"\r\n        status=\"checked\"\r\n        aria-hidden=\"true\"\r\n        appearance=\"minimal\"/>\r\n    </div>\r\n  }\r\n\r\n  <span class=\"realsoft-button-toggle-label-content\">\r\n    <ng-content></ng-content>\r\n  </span>\r\n</button>\r\n\r\n<span class=\"realsoft-button-toggle-focus-overlay\"></span>\r\n<span class=\"realsoft-button-toggle-ripple\">\r\n</span>","\r\nexport function getRealsoftToggleGroupMultipleArrayValueError(): Error {\r\n    return Error('Value must be an array in multiple-selection mode.');\r\n}\r\n","import { AfterContentInit, booleanAttribute, ChangeDetectorRef, ContentChildren, Directive, EventEmitter, forwardRef, inject, Input, OnInit, Output, QueryList } from \"@angular/core\";\r\nimport { REALSOFT_BUTTON_TOGGLE_DEFAULT_OPTIONS, REALSOFT_BUTTON_TOGGLE_GROUP, RealsoftButtonToggleAppearance, RealsoftButtonToggleChange, RealsoftButtonToggleDefaultOptions } from \"./config\";\r\nimport { Direction, Directionality } from \"@angular/cdk/bidi\";\r\nimport { SelectionModel } from \"@angular/cdk/collections\";\r\nimport { getRealsoftToggleGroupMultipleArrayValueError } from \"./errors\";\r\nimport { DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE, UP_ARROW } from \"@angular/cdk/keycodes\";\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { RealsoftButtonToggle } from './button-toggle';\r\nimport { UniqueIdGeneratorService } from \"../id-generator\";\r\n\r\nexport const REALSOFT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR: any = {\r\n    provide: NG_VALUE_ACCESSOR,\r\n    useExisting: forwardRef(() => RealsoftButtonToggleGroup),\r\n    multi: true,\r\n}\r\n\r\n@Directive({\r\n    selector: 'realsoft-button-toggle-group',\r\n    exportAs: 'realsoftButtonToggleGroup',\r\n    standalone: true,\r\n    host: {\r\n        'class': 'realsoft-button-toggle-group',\r\n        '[attr.role]': \"multiple ? 'group' : 'radiogroup'\",\r\n        '[attr.aria-disabled]': 'disabled',\r\n        '[class.realsoft-button-toggle-vertical]': 'vertical',\r\n        '[class.realsoft-button-toggle-group-appearance-standard]': 'appearance === \"standard\"',\r\n        '(keydown)': '_keydown($event)'\r\n    },\r\n    providers: [\r\n        REALSOFT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR,\r\n        {provide: REALSOFT_BUTTON_TOGGLE_GROUP, useExisting: RealsoftButtonToggleGroup}\r\n    ]\r\n})\r\nexport class RealsoftButtonToggleGroup implements ControlValueAccessor, OnInit, AfterContentInit{\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _dir = inject(Directionality, {optional: true});\r\n    private _multiple = false;\r\n    private _disabled = false;\r\n    private _disabledInteractive = false;\r\n    private _selectionModel: SelectionModel<RealsoftButtonToggle>;\r\n    private _initialValue: any;\r\n    private _hideSingleSelectionIndicator: boolean;\r\n    private _hideMultipleSelectionIndicator: boolean;\r\n    private _name = inject(UniqueIdGeneratorService).generateID('realsoft-button-toggle-group-');\r\n    private _defaultOptions = inject<RealsoftButtonToggleDefaultOptions>(REALSOFT_BUTTON_TOGGLE_DEFAULT_OPTIONS, {optional: true});\r\n\r\n    _controlValueAccessorChangeFn: (value: any) => void = () => {};\r\n\r\n    _onTouched: () => any = () => {};\r\n\r\n    @ContentChildren(forwardRef(() => RealsoftButtonToggle), {descendants: true}) _buttonToggles: QueryList<RealsoftButtonToggle>;\r\n\r\n    @Output() readonly change: EventEmitter<RealsoftButtonToggleChange> = new EventEmitter<RealsoftButtonToggleChange>();\r\n\r\n    @Output() readonly valueChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n\r\n    //selected button toggles in the group\r\n    get selected(): RealsoftButtonToggle | RealsoftButtonToggle[] {\r\n        const selected = this._selectionModel ? this._selectionModel.selected : [];\r\n        if (this.multiple) {\r\n            return selected;\r\n        } else return selected[0] || null\r\n    }\r\n\r\n    @Input() appearance: RealsoftButtonToggleAppearance;\r\n\r\n    @Input() color: 'primary' | 'secondary' | 'ternary' = 'primary';\r\n\r\n    @Input()\r\n    get name(): string {\r\n        return this._name;\r\n    }\r\n    set name(newValue: string) {\r\n        this._name = newValue;\r\n        this._markToggleButtonsForCheck();\r\n    }\r\n\r\n    @Input({transform: booleanAttribute}) \r\n    get multiple(): boolean {\r\n        return this._multiple\r\n    }\r\n    set multiple(value: boolean) {\r\n        this._multiple = value;\r\n        this._markToggleButtonsForCheck();\r\n    }\r\n\r\n    //Whether the button toggle group is disabled \r\n    @Input({transform: booleanAttribute})\r\n    get disabled(): boolean {\r\n        return this._disabled;\r\n    }\r\n    set disabled(value: boolean) {\r\n        if(this._disabled !== value) {\r\n            this._disabled = value;\r\n            this._markToggleButtonsForCheck();\r\n        }\r\n    }\r\n\r\n    //Whether buttons in the group should be interactive while they're disabled\r\n    @Input({transform: booleanAttribute})\r\n    get disabledInteractive(): boolean {\r\n        return this._disabledInteractive;\r\n    }\r\n    set disabledInteractive(value: boolean) {\r\n        this.disabledInteractive = value;\r\n        this._markToggleButtonsForCheck();\r\n    }\r\n\r\n    //The layout direction of the toggle button group\r\n    get dir(): Direction {\r\n        if(this._dir) {\r\n            return this._dir.value === 'rtl' ? 'rtl' : 'ltr';\r\n        }\r\n        return 'ltr';\r\n    }\r\n\r\n    @Input() \r\n    get value(): any {\r\n        const selected = this._selectionModel ? this._selectionModel.selected : [];\r\n\r\n        if(this.multiple) return selected.map(toggle => toggle.value);\r\n\r\n        return selected[0] ? selected[0].value : undefined;\r\n    }\r\n    set value(newValue: any) {\r\n        this._setSelectionGroupByValue(newValue);\r\n        this.valueChange.emit(this.value);\r\n    }\r\n\r\n    @Input({transform: booleanAttribute})\r\n    get hideSingleSelectionIndicator(): boolean {\r\n        return this._hideSingleSelectionIndicator;\r\n    }\r\n    set hideSingleSelectionIndicator(value: boolean) {\r\n        this._hideSingleSelectionIndicator = value;\r\n        this._markToggleButtonsForCheck();\r\n    }\r\n\r\n    @Input({transform: booleanAttribute})\r\n    get hideMultipleSelectionIndicator(): boolean {\r\n      return this._hideMultipleSelectionIndicator;\r\n    }\r\n    set hideMultipleSelectionIndicator(value: boolean) {\r\n      this._hideMultipleSelectionIndicator = value;\r\n      this._markToggleButtonsForCheck();\r\n    }\r\n\r\n    constructor(...args: unknown[]);\r\n\r\n    constructor() {\r\n        this.appearance = this._defaultOptions && this._defaultOptions.appearance ? this._defaultOptions.appearance : 'standard';\r\n        this.hideSingleSelectionIndicator = this._defaultOptions?.hideSingleSelectionIndicator ?? false;\r\n        this.hideMultipleSelectionIndicator = this._defaultOptions?.hideMultipleSelectionIndicator ?? false;\r\n    }\r\n\r\n    ngOnInit() {\r\n        this._selectionModel = new SelectionModel<RealsoftButtonToggle>(this.multiple, undefined, false);\r\n    }\r\n\r\n    ngAfterContentInit() {\r\n        this._selectionModel.select(...this._buttonToggles.filter(toggle => toggle.checked));\r\n        if (!this.multiple) {\r\n          this._tabIndexInitialization();\r\n        }\r\n    }\r\n\r\n    private _markToggleButtonsForCheck() {\r\n        this._buttonToggles?.forEach(toggle => toggle._changeDetectorRef.markForCheck());\r\n    }\r\n\r\n    _isPreviouslySelected(toggle: RealsoftButtonToggle) {\r\n        return this._selectionModel && this._selectionModel.isSelected(toggle);\r\n    }\r\n\r\n    _syncChildrenButtonToggle(toggle: RealsoftButtonToggle, select: boolean, isUserInput = false, deferExecution = false ): void{\r\n        if(!this.multiple && this.selected && !toggle.checked) (this.selected as RealsoftButtonToggle).checked = false;\r\n\r\n        if(!this._selectionModel) {\r\n            deferExecution = true;//Defer the synchronization until the selection model is initialized\r\n        } else {\r\n            select ? this._selectionModel.select(toggle) : this._selectionModel.deselect(toggle);\r\n        }\r\n\r\n        if(deferExecution) {\r\n            queueMicrotask(() => {\r\n                if(isUserInput) this._changeEventEmission(toggle);\r\n                this.valueChange.emit(this.value);\r\n            })\r\n        } else {\r\n            if(isUserInput) this._changeEventEmission(toggle);\r\n            this.valueChange.emit(this.value);\r\n        }\r\n    }\r\n\r\n\r\n    _changeEventEmission(toggle: RealsoftButtonToggle): void {\r\n        const eventToBeEmitted = new RealsoftButtonToggleChange(toggle, this.value)\r\n        this._initialValue = eventToBeEmitted.value;\r\n        this._controlValueAccessorChangeFn(eventToBeEmitted.value);\r\n        this.change.emit(eventToBeEmitted);\r\n    }\r\n\r\n    private _setSelectionGroupByValue(value: any | any[]) {\r\n        this._initialValue = value;\r\n        if(!this._buttonToggles) return; //Make sure children button toggles are initialized first\r\n\r\n        const toggleButtons = this._buttonToggles.toArray();\r\n\r\n        if(this.multiple && value) {\r\n            if(!Array.isArray(value)) throw getRealsoftToggleGroupMultipleArrayValueError();\r\n\r\n            this._clearSelection();\r\n            value.forEach((value: any) => this._selectToggleButtonByValue(value, toggleButtons));\r\n        } else {\r\n            this._clearSelection();\r\n            this._selectToggleButtonByValue(value, toggleButtons);\r\n        \r\n        }\r\n\r\n        if (!this.multiple && toggleButtons.every(toggle => toggle.tabIndex === -1)) {\r\n            for (const toggle of toggleButtons) {\r\n              if (!toggle.disabled) {\r\n                toggle.tabIndex = 0;\r\n                break;\r\n              }\r\n            }\r\n        }\r\n    }\r\n\r\n    private _selectToggleButtonByValue(value: any, toggles: RealsoftButtonToggle[]) {\r\n        toggles.forEach(toggle => {\r\n            if(toggle.value === value) {\r\n                toggle.checked = true;\r\n                this._selectionModel.select(toggle);\r\n            }\r\n        })\r\n    }\r\n\r\n    private _clearSelection() {\r\n        this._selectionModel.clear();\r\n        this._buttonToggles.forEach(toggle => {\r\n          toggle.checked = false;\r\n          if (!this.multiple) {\r\n            toggle.tabIndex = -1;\r\n          }\r\n        });\r\n    }\r\n\r\n    _isPreviouslyChecked(toggle: RealsoftButtonToggle) {\r\n        if(typeof this._initialValue === 'undefined') return false;\r\n\r\n        if(this.multiple && Array.isArray(this._initialValue)) this._multipleSelectionValue(toggle);\r\n\r\n        return toggle.value === this._initialValue;\r\n    }\r\n\r\n    private _multipleSelectionValue(toggle: RealsoftButtonToggle) {\r\n        const value = this._initialValue.some((value: any) => toggle.value !== null && value === toggle.value);\r\n        return value;\r\n    }\r\n\r\n    private _tabIndexInitialization(): void {\r\n        this._buttonToggles.forEach(buttonToggle => buttonToggle.tabIndex = -1);\r\n\r\n        this.selected ? (this.selected as RealsoftButtonToggle).tabIndex = 0 : this._setTabIndex();\r\n\r\n        this._markToggleButtonsForCheck();\r\n    }\r\n\r\n    private _setTabIndex() {\r\n        this._buttonToggles.forEach(buttonToggle => {\r\n\r\n            if(!buttonToggle.disabled) {\r\n                buttonToggle.tabIndex = 0;\r\n                return;\r\n            }\r\n        })\r\n    }\r\n\r\n    private _getNavigationButtonFocusNextIndex(currentIndex: number, offset: number): RealsoftButtonToggle | null {\r\n        for(let i = 1; i <= this._buttonToggles.length; i++) {\r\n            const index = (currentIndex + offset * i + this._buttonToggles.length) % this._buttonToggles.length;\r\n            const item = this._buttonToggles.get(index);\r\n\r\n            if(item && !item.disabled) {\r\n                return item;\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n    \r\n    //Control Value Accessor Implementation \r\n    writeValue(value: any) {\r\n        this.value = value;\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    registerOnChange(fn: (value: any) => void) {\r\n        this._controlValueAccessorChangeFn = fn;\r\n    }\r\n\r\n    registerOnTouched(fn: any) {\r\n        this._onTouched = fn;\r\n    }\r\n\r\n    setDisabledState(isDisabled: boolean): void {\r\n        this.disabled = isDisabled;\r\n    }\r\n\r\n    _keydown(event: KeyboardEvent) {\r\n        if(this.multiple || this.disabled) return;\r\n\r\n        const buttonId = (event.target as HTMLButtonElement).id;\r\n        const index = this._buttonToggles.toArray().findIndex(toggle => {\r\n            return toggle.buttonId === buttonId;\r\n        });\r\n\r\n        let nextFocusableButton: RealsoftButtonToggle | null = null;\r\n        switch (event.keyCode) {\r\n            case SPACE:\r\n            case ENTER:\r\n                nextFocusableButton = this._buttonToggles.get(index) || null;\r\n              break;\r\n            case UP_ARROW:\r\n                nextFocusableButton = this._getNavigationButtonFocusNextIndex(index, -1);\r\n              break;\r\n            case LEFT_ARROW:\r\n                nextFocusableButton = this._getNavigationButtonFocusNextIndex(index, this.dir === 'ltr' ? -1 : 1);\r\n              break;\r\n            case DOWN_ARROW:\r\n                nextFocusableButton = this._getNavigationButtonFocusNextIndex(index, 1);\r\n              break;\r\n            case RIGHT_ARROW:\r\n                nextFocusableButton = this._getNavigationButtonFocusNextIndex(index, this.dir === 'ltr' ? 1 : -1);\r\n              break;\r\n            default:\r\n              return;\r\n          }\r\n\r\n        if (nextFocusableButton) {\r\n            event.preventDefault();\r\n            nextFocusableButton._onButtonClick();\r\n            nextFocusableButton.focus();\r\n        }\r\n    }\r\n\r\n}\r\n\r\n","import {InjectionToken, WritableSignal} from '@angular/core';\r\n\r\nexport function getRealsoftInputUnsupportedTypeError(type: string): Error {\r\n    return Error(`Input type \"${type}\" isn't supported by realsoftInput.`);\r\n}\r\n\r\nexport const REALSOFT_INPUT_VALUE_ACCESSOR = new InjectionToken<{value: any | WritableSignal<any>}>(\r\n    'REALSOFT_INPUT_VALUE_ACCESSOR'\r\n);\r\n","import {getSupportedInputTypes, Platform} from '@angular/cdk/platform';\r\nimport {AutofillMonitor} from '@angular/cdk/text-field';\r\nimport {\r\n  AfterViewInit,\r\n  booleanAttribute,\r\n  computed,\r\n  Directive,\r\n  DoCheck,\r\n  effect,\r\n  ElementRef,\r\n  inject,\r\n  Input,\r\n  isSignal,\r\n  NgZone,\r\n  OnChanges,\r\n  OnDestroy,\r\n  Renderer2,\r\n  Signal,\r\n  WritableSignal,\r\n} from '@angular/core';\r\nimport { FormGroupDirective, NgControl, NgForm, Validators } from '@angular/forms';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { RealsoftFormFieldControl } from '../form-field/directives/form-field-control';\r\nimport { RealsoftFormField } from '../form-field/form-field';\r\nimport { REALSOFT_FORM_FIELD } from '../form-field/models';\r\nimport { UniqueIdGeneratorService } from '../id-generator';\r\nimport { getRealsoftInputUnsupportedTypeError, REALSOFT_INPUT_VALUE_ACCESSOR } from './helpers';\r\nimport { ErrorState, ErrorStateMatcher } from '../select/error-state-matcher';\r\n\r\n\r\nexport const REALSOFT_INPUT_INVALID_TYPES = [\r\n  'button',\r\n  'checkbox',\r\n  'file',\r\n  'hidden',\r\n  'image',\r\n  'radio',\r\n  'range',\r\n  'reset',\r\n  'submit',\r\n];\r\n\r\n@Directive({\r\n  selector: `input[realsoftInput], textarea[realsoftInput], select[realsoftNativeControl], input[realsoftNativeControl], textarea[realsoftNativeControl]`,\r\n  exportAs: 'realsoftInput',\r\n  standalone: true,\r\n  host: {\r\n    'class': 'realsoft-input-element',\r\n    '[class.realsoft-form-field-textarea-control]': '_isInFormField && _isTextarea',\r\n    '[class.realsoft-form-field-input-control]': '_isInFormField',\r\n    '[class.realsoft-text-field__input]': '_isInFormField',\r\n    '[class.realsoft-native-select-inline]': '_isInlineSelect',\r\n    '[id]': 'id',\r\n    '[disabled]': 'disabled',\r\n    '[required]': 'required',\r\n    '[attr.name]': 'name || null', \r\n    '[attr.readonly]': '_isReadonly()',\r\n    '[attr.aria-disabled]': 'disabled ? true : null',\r\n    '[attr.aria-invalid]': '(empty && required)? null : errorState',\r\n    '[attr.aria-required]': 'required',\r\n    '[attr.id]': 'id',\r\n    '(focus)': '_focus(true)',\r\n    '(blur)': '_focus(false)',\r\n    '(input)': '_onInput()',\r\n  },\r\n  providers: [{provide: RealsoftFormFieldControl, useExisting: RealsoftInput}]\r\n})\r\nexport class RealsoftInput implements RealsoftFormFieldControl<any>, AfterViewInit, DoCheck, OnChanges, OnDestroy {\r\n  protected elementRef = inject<ElementRef<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>>(ElementRef); //For accessing the host element\r\n  ngControl = inject(NgControl, {optional: true, self: true})!;\r\n  protected _formField? = inject<RealsoftFormField>(REALSOFT_FORM_FIELD, {optional: true});\r\n  private _ngZone = inject(NgZone);\r\n  protected uniqueInputID = inject(UniqueIdGeneratorService).generateID('realsoft-input-'); \r\n  private _parentForm = inject(NgForm, {optional: true});\r\n  private _parentFormGroup = inject(FormGroupDirective, {optional: true});\r\n  private _defaultErrorStateMatcher = inject(ErrorStateMatcher);\r\n  private _accessor = inject(REALSOFT_INPUT_VALUE_ACCESSOR, {optional: true, self: true});\r\n  private _formFieldDescribedById: string[] | undefined;\r\n  \r\n  private _inputValueAccessor: {value: any};\r\n  private _signalBasedValueAccessor?: {value: WritableSignal<any>};\r\n  protected _disabled = false;\r\n  protected _id: string;\r\n  protected _required: boolean | undefined;\r\n  private _readonly = false;\r\n  protected _platform = inject(Platform);\r\n  private _autofillMonitor = inject(AutofillMonitor);\r\n  private _renderer = inject(Renderer2);\r\n  private _cleanupWebkitWheel = new Subscription();\r\n  private _cleanupIosKeyup = new Subscription();\r\n  protected _type = 'text';\r\n  readonly _isServer: boolean;\r\n  readonly _isNativeSelect: boolean;\r\n  readonly _isTextarea: boolean;\r\n  readonly _isInFormField: boolean;\r\n\r\n \r\n  protected _previousNativeValue: any;\r\n  \r\n\r\n  private _previousPlaceholder: string | null;\r\n  private _errorStateTracker: ErrorState;\r\n\r\n  //Implemented as part of RealsoftFormFieldControl\r\n  focused: boolean = false;\r\n\r\n  readonly stateChanges: Subject<void> = new Subject<void>();\r\n\r\n  controlType: string = 'realsoft-input';\r\n\r\n  autofilled = false;\r\n\r\n  get errorState() {\r\n    return this._errorStateTracker.errorState;\r\n  }\r\n  set errorState(value: boolean) {\r\n    this._errorStateTracker.errorState = value;\r\n  }\r\n\r\n  protected _neverEmptyInputTypes = [\r\n    'date',\r\n    'datetime',\r\n    'datetime-local',\r\n    'month',\r\n    'time',\r\n    'week',\r\n  ].filter(t => getSupportedInputTypes().has(t));\r\n\r\n  constructor() {\r\n    if(this._accessor) {\r\n      if(isSignal(this._accessor.value)) {\r\n        this._signalBasedValueAccessor = this._accessor;\r\n      } else {\r\n        this._inputValueAccessor = this._accessor;\r\n      }\r\n    } else {\r\n      this._inputValueAccessor = this.elementRef.nativeElement; //If no input value accessor was explicitly specified, the element is used as the input value accessor\r\n    }\r\n\r\n    this._isNativeSelect = this.elementRef.nativeElement.nodeName.toLowerCase() === 'select';\r\n    this._isTextarea = this.elementRef.nativeElement.nodeName.toLowerCase() === 'textarea';\r\n    this._isServer = !this._platform.isBrowser;\r\n    this._isInFormField = !!this._formField;\r\n\r\n  \r\n    this._previousNativeValue = this.elementRef.nativeElement.value;\r\n\r\n    this.id = this.id;\r\n\r\n    if(this._platform.IOS) {\r\n      this._ngZone.runOutsideAngular(() => {\r\n        this._cleanupIosKeyup.add(this._renderer.listen(this.elementRef.nativeElement, 'keyup', this._iOSKeyupListener));\r\n      });\r\n    }\r\n\r\n    this._errorStateTracker = new ErrorState(\r\n      this._defaultErrorStateMatcher,\r\n      this.ngControl,\r\n      this._parentFormGroup,\r\n      this._parentForm,\r\n      this.stateChanges\r\n    );\r\n\r\n    if(this._isNativeSelect) {\r\n      this.controlType = (this.elementRef.nativeElement as HTMLInputElement).multiple ? 'realsoft-native-select-multiple' : 'realsoft-native-select';\r\n    }\r\n\r\n    if(this._signalBasedValueAccessor) {\r\n      effect(() => {\r\n        this._signalBasedValueAccessor!.value();\r\n        this.stateChanges.next();\r\n      })\r\n    }\r\n\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    if(this._platform.isBrowser) {\r\n      this._autofillMonitor.monitor(this.elementRef.nativeElement).subscribe(event => {\r\n        this.autofilled = event.isAutofilled;\r\n        this.stateChanges.next();\r\n      })\r\n    }\r\n  }\r\n\r\n\r\n  ngOnChanges() {\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  ngDoCheck() {\r\n    if (this.ngControl) {\r\n      this.updateErrorState();\r\n\r\n      // Since the input isn't a `ControlValueAccessor`, we don't have a good way of knowing when\r\n      // the disabled state has changed. We can't use the `ngControl.statusChanges`, because it\r\n      // won't fire if the input is disabled with `emitEvents = false`, despite the input becoming\r\n      // disabled.\r\n      if (this.ngControl.disabled !== null && this.ngControl.disabled !== this.disabled) {\r\n        this.disabled = this.ngControl.disabled;\r\n        this.stateChanges.next();\r\n      }\r\n    }\r\n\r\n    this._inputValueChanged();\r\n    this._placeholderValueChanged();\r\n  }\r\n\r\n\r\n\r\n  @Input({transform: booleanAttribute})\r\n  get disabled(): boolean {\r\n    return this._disabled;\r\n  }\r\n  set disabled(value: boolean) {\r\n    this._disabled = value;\r\n    if(this.focused) {\r\n      this.focused = false;\r\n      this.stateChanges.next();\r\n    }\r\n  }\r\n\r\n  @Input()\r\n  get id(): string {\r\n    return this._id;\r\n  }\r\n  set id(value: string) {\r\n    this._id = value || this.uniqueInputID;\r\n  }\r\n\r\n  @Input() placeholder: string;\r\n  @Input() name: string;\r\n\r\n  @Input({transform: booleanAttribute})\r\n  get required(): boolean {\r\n    return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\r\n  }\r\n  set required(value: boolean) {\r\n    this._required = value;\r\n  }\r\n\r\n  //Object used to control when error messages are shown\r\n  @Input()\r\n  get errorStateMatcher() {\r\n    return this._errorStateTracker.matcher;\r\n  }\r\n  set errorStateMatcher(value: ErrorStateMatcher) {\r\n    this._errorStateTracker.matcher = value;\r\n  }\r\n\r\n  @Input('aria-describedby') userAriaDescribedBy: string;\r\n\r\n  //Input type of the element \r\n  @Input()\r\n  get type(): string {\r\n    return this._type;\r\n  }\r\n  set type(value: string) {\r\n    const previousType = this._type;\r\n    this._type = value || 'text';\r\n    this._validateType();\r\n    \r\n    if(!this._isTextarea && getSupportedInputTypes().has(this._type)) {\r\n      (this.elementRef.nativeElement as HTMLInputElement).type = this._type;\r\n    } \r\n\r\n    if(this._type !== previousType) this._ensureMouseWheelDefaultBehavior();\r\n  }\r\n\r\n  @Input()\r\n  get value(): string {\r\n    if(this._signalBasedValueAccessor) {\r\n      return this._signalBasedValueAccessor.value();\r\n    } else {\r\n      return this._inputValueAccessor?.value;\r\n    }\r\n  }\r\n  set value(value: any) {\r\n    if (value !== this.value) {\r\n      if (this._signalBasedValueAccessor) {\r\n        this._signalBasedValueAccessor.value.set(value);\r\n      } else {\r\n        this._inputValueAccessor.value = value;\r\n      }\r\n\r\n      this.stateChanges.next();\r\n    }\r\n  }\r\n\r\n  @Input({transform: booleanAttribute})\r\n  get readonly(): boolean {\r\n    return this._readonly;\r\n  }\r\n  set readonly(value: boolean) {\r\n    this._readonly = value;\r\n  }\r\n\r\n  //For focusing the input \r\n  focus(options?: FocusOptions): void {\r\n    this.elementRef.nativeElement.focus(options);\r\n  }\r\n\r\n  //For refreshing the error state of the input\r\n  updateErrorState() {\r\n    this._errorStateTracker.updateErrorState();\r\n  }\r\n\r\n  /**\r\n   * When an input is focused, browsers often auto select its text. Since the input is disabled, the selection doesn't make any sense because the user cannot modify the content.\r\n   * This function ensures that when the disabled input gets focused, no text is highlighted\r\n   * For number inputs => number inputs do not support setSelectionRange, hence this type is temporarily \r\n   * \r\n   * @param currenltyFocused \r\n   * @returns \r\n   */\r\n  _focus(currenltyFocused: boolean) {\r\n    if(currenltyFocused == this.focused) return;\r\n\r\n    if(!this._isNativeSelect && currenltyFocused && this.disabled) {\r\n      const element = this.elementRef.nativeElement as HTMLInputElement;\r\n      if(element.type === 'number') {\r\n        element.type = 'text';\r\n        element.setSelectionRange(0,0);\r\n        element.type = 'number';\r\n      } else {\r\n        element.setSelectionRange(0,0);\r\n      }\r\n    }\r\n    this.focused = currenltyFocused;\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  _onInput() {} //Noop Function\r\n\r\n  protected _inputValueChanged() {\r\n    if(this._previousNativeValue !== this.elementRef.nativeElement.value) {\r\n      this._previousNativeValue = this.elementRef.nativeElement.value;\r\n      this.stateChanges.next();\r\n    }\r\n  }\r\n\r\n  private _placeholderValueChanged() {\r\n    const placeholder = this._getPlaceholder();\r\n    if(this.placeholder !== this._previousPlaceholder) {\r\n      this._previousPlaceholder = placeholder;\r\n      placeholder ? this.elementRef.nativeElement.setAttribute('placeholder', placeholder) : this.elementRef.nativeElement.removeAttribute('placeholder');\r\n    }\r\n  }\r\n\r\n  //Native select being displayed inline\r\n  isInlineSelect(): boolean {\r\n    const element = this.elementRef.nativeElement as HTMLSelectElement;\r\n    return this._isNativeSelect && (element.multiple || element.size > 1);\r\n  }\r\n\r\n  //Placeholder Getter Function\r\n  protected _getPlaceholder(): string | null {\r\n    return this.placeholder || null;\r\n  }\r\n\r\n  //Make sure that the input type is supported\r\n  protected _validateType() {\r\n    if(REALSOFT_INPUT_INVALID_TYPES.indexOf(this._type) > -1) throw getRealsoftInputUnsupportedTypeError(this._type); \r\n  }\r\n\r\n  private _webkitBlinkWheelListener = (): void => {\r\n    // This is a noop function and is used to enable mouse wheel input\r\n    // on number inputs\r\n    // on blink and webkit browsers.\r\n  };\r\n\r\n  private _ensureMouseWheelDefaultBehavior(): void {\r\n    this._cleanupWebkitWheel?.unsubscribe();\r\n    if(this._type === 'number' && (this._platform.BLINK || this._platform.WEBKIT)) {\r\n      this._cleanupWebkitWheel.add(this._renderer.listen(this.elementRef.nativeElement, 'wheel', this._webkitBlinkWheelListener));\r\n    }\r\n  }\r\n    \r\n  //Checks whether the input type is one of the types that are never empty. \r\n  protected _isNeverEmpty() {\r\n    return this._neverEmptyInputTypes.indexOf(this._type) > -1;\r\n  }\r\n\r\n  protected badInput() {\r\n    const validity = (this.elementRef.nativeElement as HTMLInputElement).validity;\r\n    return validity && validity.badInput;\r\n  }\r\n\r\n  protected _isReadonly(): string | null {\r\n    if(this._isNativeSelect) return null;\r\n\r\n    if(this.readonly || this.disabled) return 'true';\r\n\r\n    return null;\r\n  }\r\n\r\n  //Implemented as part of RealsoftFormFieldControl\r\n  onContainerClick() {\r\n    if(!this.focused) this.focus();\r\n  } \r\n\r\n  //Implemented as part of RealsoftFormFieldControl\r\n  get shouldLabelFloat(): boolean {\r\n    if(this._isNativeSelect) {\r\n      const selectElement = this.elementRef.nativeElement as HTMLSelectElement;\r\n      const firstOption: HTMLOptionElement | undefined = selectElement.options[0];\r\n\r\n      return (this.focused || selectElement.multiple || !this.empty || !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label))\r\n    } else {\r\n      return (this.focused && !this.disabled) || !this.empty\r\n    }\r\n  }\r\n\r\n  //Implemented as part of RealsoftFormFieldControl \r\n  get empty(): boolean {\r\n    return (\r\n      !this._isNeverEmpty() && !this.elementRef.nativeElement.value && !this.badInput() && !this.autofilled\r\n    )\r\n  }\r\n\r\n  private _iOSKeyupListener = (event: Event): void => {\r\n    const el = event.target as HTMLInputElement;\r\n    if (!el.value && el.selectionStart === 0 && el.selectionEnd === 0) {\r\n      el.setSelectionRange(1, 1);\r\n      el.setSelectionRange(0, 0);\r\n    }\r\n  };\r\n\r\n  //Implemented as part of RealsoftFormFieldControl\r\n  setDescribedByIds(ids: string[]): void {\r\n    const currentDescribedById = this.elementRef.nativeElement.getAttribute('aria-describedby');\r\n    let currentDescribedByIdAssignation : string[];\r\n\r\n    if(currentDescribedById) {\r\n      const toBeExcluded = this._formFieldDescribedById || ids;\r\n      currentDescribedByIdAssignation = ids.concat(currentDescribedById.split(' ').filter(id => id && !toBeExcluded.includes(id)));\r\n    } else {\r\n      currentDescribedByIdAssignation = ids;\r\n    }\r\n\r\n    this._formFieldDescribedById = ids;\r\n\r\n    if(currentDescribedByIdAssignation.length) {\r\n      this.elementRef.nativeElement.setAttribute('aria-describedby', currentDescribedByIdAssignation.join(' '));\r\n    } else {\r\n      this.elementRef.nativeElement.removeAttribute('aria-describedby');\r\n    }\r\n    \r\n  }  \r\n\r\n  ngOnDestroy() {\r\n    this.stateChanges.complete();\r\n\r\n    if (this._platform.isBrowser) {\r\n      this._autofillMonitor.stopMonitoring(this.elementRef.nativeElement);\r\n    }\r\n\r\n    this._cleanupIosKeyup.unsubscribe();\r\n    this._cleanupWebkitWheel.unsubscribe();\r\n  }\r\n\r\n\r\n}\r\n","import {InjectionToken} from '@angular/core';\r\n\r\nexport interface RealsoftSlideToggleDefaultOptions {\r\n    disableToggleValue?: boolean;\r\n    hideIcon?: boolean;\r\n    disabledInteractive?: boolean;\r\n}\r\n\r\nexport const REALSOFT_SLIDE_TOGGLE_DEFAULT_OPTIONS = new InjectionToken<RealsoftSlideToggleDefaultOptions>(\r\n    'realsoft-slide-toggle-default-options',\r\n    {\r\n        providedIn: 'root',\r\n        factory: () => ({disableToggleValue: false, hideIcon: false, disabledInteractive: false}),\r\n    },\r\n)","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from \"@angular/core\";\r\n\r\n@Component({\r\n    selector: '[realsoft-internalFormField]',\r\n    template: `<ng-content></ng-content>`,\r\n    styleUrl: './internal-form-field.scss',\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    host: {\r\n        'class': 'realsoft-internal-form-field', \r\n        '[class.realsoft-form-field-align-end]' : 'labelPosition === \"before\"'\r\n    }\r\n})\r\nexport class RealsoftInternalFormField {\r\n    @Input({required: true}) labelPosition : 'before' | 'after' = 'after';\r\n}","import {\r\n    AfterContentInit,\r\n    booleanAttribute,\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    ElementRef,\r\n    EventEmitter,\r\n    forwardRef,\r\n    Input,\r\n    OnChanges,\r\n    OnDestroy,\r\n    Output,\r\n    SimpleChanges,\r\n    ViewChild,\r\n    ViewEncapsulation,\r\n    ANIMATION_MODULE_TYPE,\r\n    inject,\r\n} from '@angular/core';\r\nimport {\r\n    AbstractControl,\r\n    ControlValueAccessor,\r\n    NG_VALIDATORS,\r\n    NG_VALUE_ACCESSOR,\r\n    ValidationErrors,\r\n    Validator,\r\n} from '@angular/forms';\r\nimport { FocusMonitor} from '@angular/cdk/a11y';\r\nimport { REALSOFT_SLIDE_TOGGLE_DEFAULT_OPTIONS, RealsoftSlideToggleDefaultOptions } from './config';\r\nimport { RealsoftInternalFormField } from '../internal-form-field/internal-form-field';\r\nimport { UniqueIdGeneratorService } from '../id-generator';\r\n\r\n\r\nexport const REALSOFT_SLIDE_TOGGLE_VALUE_ACCESSOR = {\r\n    provide: NG_VALUE_ACCESSOR,\r\n    useExisting: forwardRef(() => RealsoftSlideToggle),\r\n    multi: true\r\n}\r\n\r\nexport class RealsoftSlideToggleChange {\r\n    constructor(\r\n        public source: RealsoftSlideToggle, \r\n        public checked: boolean\r\n    ) {}\r\n}\r\n\r\n@Component({\r\n    selector: 'realsoft-slide-toggle',\r\n    templateUrl: './slide-toggle.html',\r\n    styleUrl: './slide-toggle.scss',\r\n    host: {\r\n        'class': 'realsoft-slide-toggle',\r\n        '[id]': 'id',\r\n        '[class.realsoft-slide-toggle-focused]': '_focused',\r\n        '[class.realsoft-slide-toggle-checked]': 'checked',\r\n        '[class.realsoft-slide-toggle-no-animation]': '_noAnimations',\r\n    },\r\n    exportAs: 'realsoftSlideToggle',\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    providers: [\r\n        REALSOFT_SLIDE_TOGGLE_VALUE_ACCESSOR,\r\n        {\r\n            provide: NG_VALIDATORS,\r\n            useExisting: RealsoftSlideToggle,\r\n            multi: true,\r\n        }\r\n    ],\r\n    imports: [RealsoftInternalFormField]\r\n})\r\nexport class RealsoftSlideToggle implements ControlValueAccessor, Validator, AfterContentInit, OnDestroy, OnChanges {\r\n    private _elementRef = inject(ElementRef);\r\n    protected _focusMonitor = inject(FocusMonitor);\r\n    protected _changeDetectorRef = inject(ChangeDetectorRef);\r\n    defaultOptions = inject<RealsoftSlideToggleDefaultOptions>(REALSOFT_SLIDE_TOGGLE_DEFAULT_OPTIONS);\r\n    animationMode = inject(ANIMATION_MODULE_TYPE, {optional: true});\r\n  \r\n    //For Control Value Accessor\r\n    private _onChange = (_: any) => {};\r\n    private _onTouched = () => {};\r\n    private _validatorOnChange = () => {};\r\n  \r\n    private _uniqueId: string;\r\n    private _checked: boolean = false;\r\n\r\n    /** Unique ID for the label element. */\r\n    _labelId: string;\r\n\r\n    _noAnimations: boolean;\r\n    _focused: boolean;\r\n    private _required = false;\r\n    private _disabled = false;\r\n\r\n    @Input() name: string | null = null; //Name to be applied to the input element if present\r\n\r\n    @Input() id: string; //Unique id for the slide toggle input => if none is supplied, it will be auto generated\r\n\r\n    @Input() labelPosition: 'before' | 'after' = 'after';//Whether the label should appear after or before the slide toggle. Defaults to after\r\n\r\n    @Input('aria-label') ariaLabel: string | null = null; //Used to set the aria-label attribute on the underlying input element\r\n\r\n    @Input('aria-labelledby') ariaLabelledby: string | null = null; //Used to set the aria-labelledby attribute on the underlying input element\r\n\r\n    @Input('aria-describedby') ariaDescribedby: string; //Used to set the aria-describedby attribute on the underlying input element\r\n\r\n\r\n    @Input({transform: booleanAttribute}) \r\n    get required(): boolean {\r\n        return this._required;\r\n    }\r\n    set required(value: boolean) {\r\n        this._required = value;\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    @Input({transform: booleanAttribute})\r\n    get disabled(): boolean {\r\n        return this._disabled;\r\n    }\r\n    set disabled(newValue: boolean) {\r\n        this._disabled = newValue;\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    @Input({transform: booleanAttribute})\r\n    get checked(): boolean {\r\n      return this._checked;\r\n    }\r\n    set checked(value: boolean) {\r\n      this._checked = value;\r\n      this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    @Input({transform: booleanAttribute}) hideIcon: boolean;\r\n\r\n    @Input({transform: booleanAttribute}) disabledInteractive: boolean;\r\n\r\n    @Output() readonly change = new EventEmitter<RealsoftSlideToggleChange>();//An event that will be dispatched each time the slide toggle changes its value\r\n\r\n    @Output() readonly toggleChange: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n    constructor() {\r\n      const defaults = this.defaultOptions;\r\n      const animationMode = inject(ANIMATION_MODULE_TYPE, {optional: true});\r\n  \r\n      this._noAnimations = animationMode === 'NoopAnimations';\r\n      this.id = this._uniqueId = inject(UniqueIdGeneratorService).generateID('realsoft-slide-toggle-');\r\n      this.hideIcon = defaults.hideIcon ?? false;\r\n      this.disabledInteractive = defaults.disabledInteractive ?? false;\r\n      this._labelId = this._uniqueId + '-label';\r\n    }\r\n\r\n    ngAfterContentInit(): void {\r\n        this._focusMonitor.monitor(this._elementRef, true).subscribe(focusOrigin => {\r\n            if(focusOrigin === 'keyboard' || focusOrigin === 'program') {\r\n                this._focused = true;\r\n                this._changeDetectorRef.markForCheck();\r\n            } else if(!focusOrigin) {\r\n                Promise.resolve().then(() => {\r\n                    this._focused = false;\r\n                    this._onTouched();\r\n                    this._changeDetectorRef.markForCheck();\r\n                  });\r\n            }\r\n\r\n        })\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes['required']) {\r\n          this._validatorOnChange();\r\n        }\r\n    }\r\n    \r\n    //Returns the unique id for the visual hidden button\r\n    get buttonId(): string {\r\n        return `${this.id || this._uniqueId}-button`;\r\n    }\r\n\r\n    //Returns the unique id for the visual hidden input\r\n    get inputId(): string {\r\n        return `${this.id || this._uniqueId}-input`;\r\n    }\r\n\r\n    @ViewChild('toggle') _toggleElement: ElementRef<HTMLElement>;\r\n\r\n    focus(): void {\r\n        this._toggleElement.nativeElement.focus();\r\n    }\r\n\r\n    //Toggles the checked state of the slide toggle\r\n    toggle(): void {\r\n        this.checked = !this.checked;\r\n        this._onChange(this.checked);\r\n    }\r\n\r\n    _handleInputClick() {\r\n        if(!this.disabled) {\r\n            this.toggleChange.emit();\r\n            \r\n            if(!this.defaultOptions.disableToggleValue) {\r\n                this.checked = !this.checked;\r\n                this._onChange(this.checked);\r\n                this.change.emit(new RealsoftSlideToggleChange(this, this.checked));\r\n            }\r\n        }\r\n    }\r\n\r\n    //Control Value Accessor Implementation\r\n    writeValue(value: any): void {\r\n        this.checked = !!value;\r\n    }    \r\n\r\n    registerOnChange(fn: any): void {\r\n        this._onChange = fn;\r\n    }\r\n\r\n    registerOnTouched(fn: any): void {\r\n        this._onTouched = fn;\r\n    }\r\n\r\n    setDisabledState(isDisabled: boolean) {\r\n        this.disabled = isDisabled;\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    //Validator Interface Implementation \r\n    registerOnValidatorChange(fn: () => void): void {\r\n        this._validatorOnChange = fn;\r\n    }\r\n\r\n    validate(control: AbstractControl<boolean>): ValidationErrors | null {\r\n        return this.required && control.value !== true ? {'required': true} : null;\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this._focusMonitor.stopMonitoring(this._elementRef);\r\n    }\r\n}\r\n\r\n","<div realsoft-internalFormField [labelPosition]=\"labelPosition\">\r\n    <button\r\n      class=\"realsoft-switch\"\r\n      role=\"switch\"\r\n      type=\"button\"\r\n      [class.realsoft-switch-selected]=\"checked\"\r\n      [class.realsoft-switch-unselected]=\"!checked\"\r\n      [class.realsoft-switch-checked]=\"checked\"\r\n      [class.realsoft-switch-disabled]=\"disabled\"\r\n      [class.realsoft-slide-toggle-disabled-interactive]=\"disabledInteractive\"\r\n      [tabIndex]=\"disabled && !disabledInteractive ? -1 : 0\"\r\n      [disabled]=\"disabled && !disabledInteractive\"\r\n      [attr.id]=\"buttonId\"\r\n      [attr.name]=\"name\"\r\n      [attr.aria-label]=\"ariaLabel\"\r\n      [attr.aria-describedby]=\"ariaDescribedby\"\r\n      [attr.aria-required]=\"required || null\"\r\n      [attr.aria-checked]=\"checked\"\r\n      [attr.aria-disabled]=\"disabled && disabledInteractive ? 'true' : null\"\r\n      (click)=\"_handleInputClick()\"\r\n      #switch>\r\n      <span class=\"realsoft-switch__track\"></span>\r\n      <span class=\"realsoft-switch__handle-track\">\r\n        <span class=\"realsoft-switch__handle\">\r\n          <span class=\"realsoft-switch__shadow\">\r\n            <span class=\"realsoft-switch-elevation-overlay\"></span>\r\n          </span>\r\n          <span class=\"realsoft-switch__ripple\">\r\n            <span class=\"realsoft-switch-slide-toggle-ripple realsoft-switch-focus-indicator\"></span>\r\n          </span>\r\n          @if (!hideIcon) {\r\n            <span class=\"realsoft-switch__icons\">\r\n              <svg\r\n                class=\"realsoft-switch__icon realsoft-switch__icon--on\"\r\n                viewBox=\"0 0 24 24\"\r\n                aria-hidden=\"true\">\r\n                <path d=\"M19.69,5.23L8.96,15.96l-4.23-4.23L2.96,13.5l6,6L21.46,7L19.69,5.23z\" />\r\n              </svg>\r\n              <svg\r\n                class=\"realsoft-switch__icon realsoft-switch__icon--off\"\r\n                viewBox=\"0 0 24 24\"\r\n                aria-hidden=\"true\">\r\n                <path d=\"M20 13H4v-2h16v2z\" />\r\n              </svg>\r\n            </span>\r\n          }\r\n        </span>\r\n      </span>\r\n    </button>\r\n  \r\n    <label class=\"realsoft-switch-label\" [for]=\"buttonId\" [attr.id]=\"_labelId\" (click)=\"$event.stopPropagation()\">\r\n      <ng-content></ng-content>\r\n    </label>\r\n</div>","import {\r\n  AfterContentInit,\r\n  ChangeDetectorRef,\r\n  ContentChildren,\r\n  Directive,\r\n  EventEmitter,\r\n  InjectionToken,\r\n  Input,\r\n  OnDestroy,\r\n  Output,\r\n  QueryList,\r\n  booleanAttribute,\r\n  forwardRef,\r\n  inject,\r\n  signal,\r\n  computed,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { RealsoftRadioButton } from './radio-button';\r\nimport { UniqueIdGeneratorService } from '../id-generator';\r\n\r\n//Change event object emitted by radio button and radio group\r\nexport class RealsoftRadioChange {\r\n    constructor(\r\n        public source: RealsoftRadioButton,\r\n        public value: any\r\n    ) {}\r\n}\r\n\r\n//Control Value Accessor Provider\r\nexport const REALSOFT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR: any = {\r\n    provide: NG_VALUE_ACCESSOR,\r\n    useExisting: forwardRef(() => RealsoftRadioGroup),\r\n    multi: true,\r\n}\r\n\r\n\r\nexport const REALSOFT_RADIO_GROUP = new InjectionToken<RealsoftRadioGroup>('RealsoftRadioGroup');\r\n\r\nexport interface RealsoftRadioDefaultOptions {\r\n    disabledInteractive?: boolean\r\n}\r\n\r\nexport const REALSOFT_RADIO_DEFAULT_OPTIONS = new InjectionToken<RealsoftRadioDefaultOptions>(\r\n    'realsoft-radio-default-options',\r\n    {\r\n      providedIn: 'root',\r\n      factory: () => ({disabledInteractive: false}),\r\n    }\r\n)\r\n\r\n@Directive({\r\n    selector: 'realsoft-radio-group',\r\n    exportAs: 'realsoftRadioGroup',\r\n    providers: [\r\n        REALSOFT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR,\r\n        {provide: REALSOFT_RADIO_GROUP, useExisting: RealsoftRadioGroup}\r\n    ],\r\n    host: {\r\n        'role': 'radioGroup',\r\n        'class': 'realsoft-radio-group'\r\n    },\r\n    standalone: true,\r\n    \r\n})\r\n\r\nexport class RealsoftRadioGroup implements ControlValueAccessor, AfterContentInit, OnDestroy {\r\n    private _value: any = null;\r\n    private _name: string = inject(UniqueIdGeneratorService).generateID('realsoft-radio-group-');\r\n    private _selected: RealsoftRadioButton | null = null;\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n    private _isInitialized = signal(false);\r\n    private _labelPosition :'before' |'after' = 'after';\r\n    private _disabled = false;\r\n    private _required = false;\r\n    private _disabledInteractive = false;\r\n    private _radioButtonChanges: Subscription;\r\n\r\n    @ContentChildren(forwardRef(() => RealsoftRadioButton), {descendants: true}) _radioButtons: QueryList<RealsoftRadioButton>;\r\n    @Output() readonly change: EventEmitter<RealsoftRadioChange> = new EventEmitter<RealsoftRadioChange>();\r\n\r\n\r\n    constructor() {}\r\n\r\n    ngAfterContentInit() {\r\n        this._isInitialized.set(true);\r\n\r\n        this._radioButtonChanges = this._radioButtons.changes.subscribe(() => {\r\n            if(this.selected && !this._radioButtons.find(radio => radio === this.selected)) {\r\n                this._selected = null;\r\n            }\r\n        })\r\n    }\r\n\r\n\r\n    @Input({transform: booleanAttribute}) \r\n    get disabledInteractive(): boolean {\r\n        return this._disabledInteractive;\r\n    }\r\n    set disabledInteractive(value: boolean) {\r\n        this._disabledInteractive = value ;\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    @Input({transform: booleanAttribute})\r\n    get required(): boolean {\r\n        return this._required;\r\n    }\r\n    set required(value: boolean) {\r\n        this._required = value;\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    \r\n    @Input()\r\n    get selected(): RealsoftRadioButton | null {\r\n        return this._selected;\r\n    }\r\n    set selected(selected: RealsoftRadioButton | null) {\r\n        this._selected = selected;\r\n        this.value = selected ? selected.value : null;\r\n        if(this._selected && !this._selected.checked) {\r\n            this._selected.checked = true;\r\n        }\r\n    }\r\n\r\n    @Input() \r\n    get name(): string {\r\n        return this._name;\r\n    }\r\n    set name(value: string) {\r\n        this._name = (value);\r\n        if(this._radioButtons) {\r\n            this._radioButtons.forEach(radio => {\r\n                radio.name = this._name;\r\n                radio._changeDetectorRef.markForCheck();\r\n            })\r\n        }      \r\n    }\r\n\r\n    @Input()\r\n    get labelPosition(): 'before' |'after' {\r\n        return this._labelPosition\r\n    }\r\n    set labelPosition(value: any) {\r\n        this._labelPosition = value === 'before' ? 'before' : 'after';\r\n        if(this._radioButtons) {\r\n            this._radioButtons.forEach(radio => {\r\n                radio._changeDetectorRef.markForCheck();\r\n            })\r\n        \r\n        }\r\n    }\r\n\r\n    @Input({transform: booleanAttribute})\r\n    get disabled(): boolean {\r\n        return this._disabled;\r\n    }\r\n    set disabled(value:boolean) {\r\n        this._disabled = value;\r\n        if(this._radioButtons) {\r\n            this._radioButtons.forEach(radio => {\r\n                radio._changeDetectorRef.markForCheck();\r\n            })\r\n        }\r\n    }\r\n\r\n    @Input() \r\n    get value(): any {\r\n        return this._value;\r\n    }\r\n    set value(newValue: any) {\r\n        if(this._value !== newValue) {\r\n            this._value = newValue;\r\n            this._selectedRadioUpdate();\r\n            if (this._selected && !this._selected.checked) {\r\n                this._selected.checked = true;\r\n            }\r\n        }\r\n    }\r\n\r\n    private _selectedRadioUpdate(): void {\r\n        const previouslySelected = this._selected !== null && this._selected.value === this._value;\r\n\r\n        if(this._radioButtons && !previouslySelected) {\r\n            this._selected = null;\r\n            this._radioButtons.forEach(radio => {\r\n                radio.checked = this.value === radio.value;\r\n                if(radio.checked) {\r\n                    this._selected = radio;\r\n                }\r\n            })\r\n        }\r\n    }\r\n\r\n\r\n    _touch() {\r\n        if (this.onTouched) {\r\n          this.onTouched();\r\n        }\r\n    }\r\n\r\n    _emitChangeEvent(): void {\r\n        if(this._isInitialized()) {\r\n            this.change.emit(new RealsoftRadioChange(this._selected!, this._value))\r\n        }\r\n    }\r\n\r\n    //Implementing Control Value Accessor Interface\r\n\r\n    _controlValueAccessorChangeFn: (value: any) => void = () => {};\r\n\r\n    onTouched: () => any = () => {};\r\n\r\n    writeValue(value: any) {\r\n        this.value = value;\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    registerOnChange(fn: (value: any) => void) {\r\n        this._controlValueAccessorChangeFn = fn;\r\n    }\r\n\r\n    registerOnTouched(fn: any) {\r\n        this.onTouched = fn;\r\n    }\r\n\r\n    setDisabledState(isDisabled: boolean) {\r\n        this.disabled = isDisabled;\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this._radioButtonChanges?.unsubscribe();\r\n        this._isInitialized.set(false);\r\n    }\r\n\r\n}\r\n","import { AfterViewInit, ANIMATION_MODULE_TYPE, booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, ElementRef, EventEmitter, inject, Input, NgZone, OnDestroy, OnInit, Output, Renderer2, Signal, signal, ViewChild, ViewEncapsulation } from \"@angular/core\";\r\nimport { FocusMonitor, FocusOrigin } from \"@angular/cdk/a11y\";\r\nimport { UniqueSelectionDispatcher } from \"@angular/cdk/collections\";\r\nimport { REALSOFT_RADIO_DEFAULT_OPTIONS, REALSOFT_RADIO_GROUP, RealsoftRadioChange, RealsoftRadioDefaultOptions, RealsoftRadioGroup } from \"./radio-group\";\r\nimport { Subscription } from \"rxjs\";\r\nimport { RealsoftInternalFormField } from '../internal-form-field/internal-form-field';\r\nimport { UniqueIdGeneratorService } from '../id-generator';\r\n@Component({\r\n    selector: 'realsoft-radio-button',\r\n    templateUrl: 'radio-button.html',\r\n    styleUrl: 'radio-style.scss',\r\n    host: {\r\n        'class': 'realsoft-radio-button',\r\n        '[attr.id]': 'id',\r\n        '[class.realsoft-radio-checked]': 'checked',\r\n        '[class.realsoft-radio-disabled]': 'disabled',\r\n        '[class.realsoft-radio-disabled-interactive]': 'disabledInteractive',\r\n        '[class.realsoft-radio-button-no-animation]': '_noopAnimations',\r\n        '(focus)': '_focus()',\r\n    },\r\n    exportAs: 'realsoftRadioButton',\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    encapsulation: ViewEncapsulation.None,\r\n    imports: [RealsoftInternalFormField],\r\n    standalone: true\r\n})\r\nexport class RealsoftRadioButton implements OnInit, AfterViewInit, OnDestroy {\r\n    private _elementRef = inject(ElementRef);\r\n    _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _focusMonitor = inject(FocusMonitor);\r\n    private _uniqueRadioDispatcher = inject(UniqueSelectionDispatcher);\r\n    private _defaultOptions = inject<RealsoftRadioDefaultOptions>(REALSOFT_RADIO_DEFAULT_OPTIONS, {optional: true});\r\n    private _uniqueID = inject(UniqueIdGeneratorService).generateID('realsoft-radio-button-');\r\n    private _animationMode = inject(ANIMATION_MODULE_TYPE, {optional: true});\r\n    private _labelPosition : 'before' |'after' = 'after';\r\n    private _renderer = inject(Renderer2);\r\n    private _ngZone = inject(NgZone);\r\n    private _cleanupClick = new Subscription();\r\n    radioGroupRef = inject<RealsoftRadioGroup>(REALSOFT_RADIO_GROUP, {optional: true})!;\r\n\r\n\r\n\r\n    private _checked =false; //Whether the radio button is checked or not\r\n\r\n    private _required = false; //Whether the radio button is required\r\n\r\n    private _value: any | null; //The value assigned to the radio button\r\n\r\n    private _disabled = false;\r\n\r\n    private _disabledInteractive = false;\r\n\r\n    private _removeUniqueSelectionListener: () => void = () => {};\r\n\r\n    private _noopAnimations = false;\r\n\r\n    constructor() {\r\n        this._noopAnimations = this._animationMode === 'NoopAnimations';\r\n        this._disabledInteractive = this._defaultOptions?.disabledInteractive ?? false;\r\n    }\r\n\r\n    ngOnInit() : void {\r\n        if(this.radioGroupRef) {\r\n            this.checked = this.radioGroupRef.value === this._value;\r\n\r\n            if(this.checked) this.radioGroupRef.selected = this;\r\n\r\n            this.name = this.radioGroupRef.name;\r\n        }\r\n\r\n        this._removeUniqueSelectionListener = this._uniqueRadioDispatcher.listen((id, name) => {\r\n            if(id !== this.id && name === this.name) {\r\n                this.checked = false;\r\n            }\r\n        });\r\n    }\r\n\r\n    ngAfterViewInit() {\r\n        this._focusMonitor.monitor(this._elementRef, true).subscribe(focusOrigin => {\r\n            if(!focusOrigin && this.radioGroupRef) {\r\n                this.radioGroupRef._touch();\r\n            }\r\n        })\r\n\r\n        this._ngZone.runOutsideAngular(() => {\r\n            this._cleanupClick.add(this._renderer.listen(\r\n                this._inputElement.nativeElement,\r\n                'click',\r\n                this._onInputClick,\r\n              ))\r\n          })\r\n    }\r\n\r\n    @Output() readonly change: EventEmitter<RealsoftRadioChange> = new EventEmitter<RealsoftRadioChange>();\r\n\r\n    @ViewChild('input') _inputElement: ElementRef<HTMLInputElement>;\r\n\r\n\r\n    @Input()\r\n    get id(): string {\r\n        return this._uniqueID;\r\n    }\r\n    set id(value: string) {\r\n        this._uniqueID = value;\r\n    }\r\n\r\n    @Input() name = '';\r\n\r\n    @Input({transform: booleanAttribute})\r\n    get disabledInteractive(): boolean {\r\n        return this._disabledInteractive || (this.radioGroupRef && this.radioGroupRef.disabledInteractive);\r\n    }\r\n    set disabledInteractive(value: boolean) {\r\n        this._disabledInteractive = value;\r\n    }\r\n\r\n    @Input({transform: booleanAttribute})\r\n    get checked(): boolean {\r\n        return this._checked;\r\n    }\r\n    set checked(value: boolean) {\r\n        if(this._checked !== value) {\r\n            this._checked = value;\r\n            if(value && this.radioGroupRef && this.radioGroupRef.value !== this.value) {\r\n                this.radioGroupRef.selected = this;\r\n            }\r\n            else if(!value && this.radioGroupRef && this.radioGroupRef.value === this.value) {\r\n                this.radioGroupRef.selected = null;\r\n            }\r\n\r\n            if(value) {\r\n                this._uniqueRadioDispatcher.notify(this.id, this.name);\r\n            }\r\n\r\n            this._changeDetectorRef.markForCheck()\r\n        }\r\n    }\r\n\r\n    @Input()\r\n    get value(): any {\r\n        return this._value;\r\n    }\r\n    set value(value: any) {\r\n        //Make sure the value has changed \r\n        if(this._value !== value) {\r\n            this._value = value;\r\n            if(this.radioGroupRef !== null) {\r\n                if(!this.checked) {\r\n                    this.checked = this.radioGroupRef.value === value\r\n                }\r\n                if(this.checked) {\r\n                    this.radioGroupRef.selected = this;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    @Input()\r\n    get labelPosition(): 'before' |'after' {\r\n        return this._labelPosition || (this.radioGroupRef && this.radioGroupRef.labelPosition) || 'after';\r\n    }\r\n    set labelPosition(value : any) {\r\n        this._labelPosition = value ;\r\n    }\r\n\r\n    @Input({transform: booleanAttribute})\r\n    get disabled(): boolean {\r\n        return this._disabled || (this.radioGroupRef && this.radioGroupRef.disabled);\r\n    }\r\n    set disabled(value: boolean) {\r\n        if(this._disabled !== value) {\r\n            this._disabled = value;\r\n            this._changeDetectorRef.markForCheck()\r\n        }  \r\n    }\r\n\r\n    @Input({transform: booleanAttribute}) \r\n    get required(): boolean {\r\n        return this._required || (this.radioGroupRef && this.radioGroupRef.required);\r\n    }\r\n    set required(value: boolean) {\r\n        this._required = value;\r\n    }\r\n\r\n    focus(options?: FocusOptions, origin? : FocusOrigin) {\r\n        origin ? this._focusMonitor.focusVia(this._inputElement, origin, options) : this._inputElement.nativeElement.focus(options);\r\n    }\r\n\r\n    get inputID(): string {\r\n        return `${this.id || this._uniqueID}-input`;\r\n    }\r\n\r\n    private _focus() {\r\n        this._inputElement.nativeElement.focus()\r\n    }\r\n\r\n\r\n    onUserInteraction(event: Event) {\r\n        event.stopPropagation();\r\n\r\n        if(!this.disabled) {\r\n            const groupValueHasChanged = this.radioGroupRef && this.value !== this.radioGroupRef.value\r\n            this.checked = true;\r\n            this.change.emit(new RealsoftRadioChange(this, this._value));\r\n\r\n            if(this.radioGroupRef) {\r\n                this.radioGroupRef._controlValueAccessorChangeFn(this.value);\r\n                this.radioGroupRef._emitChangeEvent();\r\n            }\r\n        }\r\n    }\r\n\r\n    onTouchTargetClick(event: Event) {\r\n        this.onUserInteraction(event);\r\n        if(!this.disabled || this.disabledInteractive) this._inputElement?.nativeElement.focus();\r\n    }\r\n\r\n    private _onInputClick = (event: Event) => {\r\n        if(this.disabled && this.disabledInteractive) event.preventDefault();\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this._cleanupClick.unsubscribe();\r\n        this._focusMonitor.stopMonitoring(this._elementRef);\r\n        this._removeUniqueSelectionListener();\r\n    }\r\n    \r\n\r\n\r\n}","\r\n<div realsoft-internalFormField [labelPosition]=\"labelPosition\">\r\n    <div class=\"realsoft-radio\" [class.realsoft-radio-disabled]=\"disabled\">\r\n        <!-- Render this element first so the input is on top. -->\r\n        <div class=\"realsoft-radio-touch-target\" (click)=\"onTouchTargetClick($event)\"></div>\r\n        <input #input class=\"realsoft-radio__native-control\" type=\"radio\"\r\n               [id]=\"inputID\"\r\n               [checked]=\"checked\"\r\n               [disabled]=\"disabled && !disabledInteractive\"\r\n               [attr.name]=\"name\"\r\n               [attr.value]=\"value\"\r\n               [required]=\"required\"\r\n               [attr.aria-disabled]=\"disabled && disabledInteractive ? 'true' : null\"\r\n               (change)=\"onUserInteraction($event)\">\r\n        <div class=\"realsoft-radio__background\">\r\n          <div class=\"realsoft-radio__outer-circle\"></div>\r\n          <div class=\"realsoft-radio__inner-circle\"></div>\r\n        </div>\r\n        <div class=\"realsoft-radio-ripple realsoft-radio-focus-indicator\"></div>\r\n        <div class=\"realsoft-ripple-element\"></div>\r\n        </div>\r\n      <label class=\"realsoft-radio-label\" [for]=\"inputID\">\r\n        <ng-content></ng-content>\r\n      </label>\r\n</div>\r\n","import { InjectionToken } from \"@angular/core\";\r\n\r\n//position of the arrow that displays when sorted \r\nexport type RealsoftSortHeaderArrowPosition = 'before' | 'after';\r\n\r\nexport type RealsoftSortDirection = 'asc' | 'desc' | '';\r\n\r\n//Interface for a directive that holds sorting consumed by RealsoftSortHeader\r\nexport interface RealsoftSortable {\r\n    id: string; //id of the column being sorted\r\n    start: RealsoftSortDirection; //starting sort direction\r\n    disableClear: boolean; //whether to disable clearing the sorting state\r\n}\r\n\r\n//The current sort state\r\nexport interface Sort {\r\n    active: string; //id of the column being sorted\r\n    direction: RealsoftSortDirection; //sort direction\r\n}\r\n\r\n//Default oprtions for realsoft-sort\r\nexport interface RealsoftSortDefaultOptions {\r\n    disableClear?: boolean;//Whether to disable clearing the sorting state\r\n    arrowPosition?: RealsoftSortHeaderArrowPosition; //Position of the arrow that displays when sorted\r\n}\r\n\r\n//Injection token to be used to override the default options for realsoft-sort\r\nexport const REALSOFT_SORT_DEFAULT_OPTIONS = new InjectionToken<RealsoftSortDefaultOptions>(\r\n    'REALSOFT_SORT_DEFAULT_OPTIONS',\r\n);\r\n\r\n// Column definition associated with a `RealsoftSortHeader`.\r\nexport interface RealsoftSortHeaderColumnDef {\r\n    name: string;\r\n}\r\n  \r\n\r\n","export function getRealsoftSortDuplicateSortableIdError(id: string): Error {\r\n    return Error(`Cannot have two RealsoftSortables with the same id (${id}).`);\r\n}\r\n\r\nexport function getRealsoftSortHeaderNotContainedWithinSortError(): Error {\r\n    return Error('RealsoftSortHeader must be placed within a parent element with the RealsoftSort directive.');\r\n}\r\n\r\n\r\nexport function getRealsoftSortHeaderMissingIdError(): Error {\r\n    return Error('RealsoftSortHeader must be provided with a unique id.');\r\n}\r\n\r\nexport function getRealsoftSortInvalidDirectiveError(direction: string): Error {\r\n    return Error(`${direction} is not a valid sort direction ('asc' or 'desc').`);\r\n}\r\n","import {\r\n    Directive,\r\n    EventEmitter,\r\n    Input,\r\n    OnChanges,\r\n    OnDestroy,\r\n    OnInit,\r\n    Output,\r\n    booleanAttribute,\r\n    inject,\r\n    signal,\r\n} from '@angular/core';\r\nimport { Subject} from 'rxjs';\r\nimport { REALSOFT_SORT_DEFAULT_OPTIONS, RealsoftSortable, RealsoftSortDefaultOptions, RealsoftSortDirection, Sort } from './models';\r\nimport { getRealsoftSortDuplicateSortableIdError, getRealsoftSortHeaderMissingIdError, getRealsoftSortInvalidDirectiveError } from './errors';\r\nimport { ReplaySubject } from 'rxjs';\r\n\r\n@Directive({\r\n    selector: '[realsoftSort]',\r\n    exportAs: 'realsoftSort',\r\n    standalone: true,\r\n    host: {\r\n        'class': 'realsoft-sort',\r\n    }\r\n})\r\nexport class RealsoftSort implements OnChanges, OnInit, OnDestroy {\r\n    _initializedStream = new ReplaySubject<void>(1);\r\n\r\n    _defaultOptions = inject<RealsoftSortDefaultOptions>(REALSOFT_SORT_DEFAULT_OPTIONS, {optional: true});\r\n\r\n    sortables = new Map<string, RealsoftSortable>(); // Collection of all registered sortables that this directive manages\r\n\r\n    @Input('realsoftSortActive') active: string;//Id of the most recently sorted RealsoftSrtable\r\n    \r\n    @Input('realsoftSortStart') start: RealsoftSortDirection = 'asc'; //The direction to set when a RealsoftSortable is initially sorted\r\n\r\n\r\n    //Whether to disable the user from clearing the sort by finishing the sort direction cycle.\r\n    @Input({alias: 'realsoftSortDisableClear', transform: booleanAttribute}) disableClear: boolean;\r\n\r\n    //Whether the sortable is disabled\r\n    @Input({alias: 'realsoftSortDisabled', transform: booleanAttribute}) disabled: boolean = false;\r\n\r\n    //For notifying child components\r\n    readonly _stateChanges = new Subject<void>();\r\n\r\n    private _direction: RealsoftSortDirection = '';\r\n\r\n    //The sort direction of the currently active RealsoftSortable\r\n    @Input('realsoftSortDirection')\r\n    get direction(): RealsoftSortDirection {\r\n        return this._direction;\r\n    }\r\n    set direction(direction: RealsoftSortDirection) {\r\n        if(direction && direction !== 'asc' && direction !== 'desc') {\r\n            throw getRealsoftSortInvalidDirectiveError(direction)\r\n        }\r\n        this._direction = direction;\r\n    }\r\n\r\n    //Event emitted when the user changes either the active sort or sort direction.\r\n    @Output('realsoftSortChange') readonly sortChange: EventEmitter<Sort> = new EventEmitter<Sort>();\r\n\r\n    ngOnInit() {\r\n        this._initializedStream.next();\r\n    }\r\n    \r\n    ngOnChanges() {\r\n        this._stateChanges.next();\r\n    }\r\n\r\n    //A function that generates a cycle of sort directions based on the given starting direction and a flag that determines whether clearing the sorting is allowed.\r\n    getSortDirectionCycle(start: RealsoftSortDirection, disableClear: boolean): RealsoftSortDirection[] {\r\n        const sortingOrder: RealsoftSortDirection[] = start === 'desc' ? ['desc', 'asc'] : ['asc', 'desc'];\r\n\r\n        return disableClear ? sortingOrder : [...sortingOrder, ''];\r\n    }\r\n\r\n    //This function, determines the next sorting direction for a sortable column. It cycles through the possible sort directions ('asc', 'desc', and optionally '' for no sorting) based on the current sorting state.\r\n    getNextSortDirection(sortable: RealsoftSortable): RealsoftSortDirection {\r\n        if(!sortable) return '';\r\n\r\n        const disableClear = sortable?.disableClear ?? this.disableClear ?? !!this._defaultOptions?.disableClear ?? false;\r\n        const sortingDirectionCycle = this.getSortDirectionCycle(sortable.start || this.start, disableClear);\r\n        const nextIndex = (sortingDirectionCycle.indexOf(this.direction) + 1) % sortingDirectionCycle.length;\r\n\r\n        return sortingDirectionCycle[nextIndex]\r\n    }\r\n    \r\n    //sets the active sort id and determines the new sort direction\r\n    sort(sortable: RealsoftSortable): void {\r\n        if(this.active != sortable.id) {\r\n            this.active = sortable.id;\r\n            this.direction = sortable.start ? sortable.start : this.start;\r\n        } else {\r\n            this.direction = this.getNextSortDirection(sortable);\r\n        }\r\n        this.sortChange.emit({active: this.active, direction: this.direction});\r\n    }\r\n\r\n    //Register function to be used by the contained RealsoftSortables. Adds the RealsoftSortable to the collection of RealsoftSortables.\r\n    register(sortable: RealsoftSortable): void {\r\n        if(!sortable.id) throw getRealsoftSortHeaderMissingIdError();\r\n\r\n        if(this.sortables.has(sortable.id)) throw getRealsoftSortDuplicateSortableIdError(sortable.id);\r\n\r\n        this.sortables.set(sortable.id, sortable);\r\n    }\r\n\r\n    //Unregister function to be used by the contained RealsoftSortables. Removes the RealsoftSortable from the collection of contained RealsoftSortables.\r\n    deregister(sortable: RealsoftSortable): void {\r\n        this.sortables.delete(sortable.id);\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this._initializedStream.complete();\r\n    }\r\n    \r\n    \r\n}","import {\r\n  Directive,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  OnInit,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  inject,\r\n} from '@angular/core';\r\nimport { RealsoftSort } from './sort';\r\nimport { Sort } from './models';\r\n\r\n/**\r\n * Directive for automatically sorting alphabetical/string columns in a table.\r\n * This directive extends the base RealsoftSort functionality\r\n * and automatically handles string sorting.\r\n * \r\n * Usage:\r\n * <table realsoftAlphabeticalSort \r\n *        [data]=\"products\" \r\n *        (sortedData)=\"sortedProducts = $event\">\r\n *   <th realsoft-sort-header=\"name\">Name</th>\r\n * </table>\r\n */\r\n@Directive({\r\n  selector: '[realsoftAlphabeticalSort]',\r\n  exportAs: 'realsoftAlphabeticalSort',\r\n  standalone: true,\r\n  providers: [\r\n    // Provide RealsoftSort so sort headers can inject it\r\n    { provide: RealsoftSort, useExisting: RealsoftAlphabeticalSort }\r\n  ],\r\n  host: {\r\n    'class': 'realsoft-alphabetical-sort',\r\n  }\r\n})\r\nexport class RealsoftAlphabeticalSort extends RealsoftSort implements OnInit, OnChanges {\r\n  \r\n  /**\r\n   * The data array to be sorted.\r\n   * When this changes or sort changes, the data will be automatically sorted.\r\n   */\r\n  @Input() data: any[] = [];\r\n\r\n  /**\r\n   * Event emitted with the sorted data.\r\n   * This fires whenever the sort changes or the input data changes.\r\n   */\r\n  @Output() sortedData = new EventEmitter<any[]>();\r\n\r\n  /**\r\n   * Whether the comparison should be case-sensitive.\r\n   * Default is case-insensitive sorting.\r\n   */\r\n  @Input() caseSensitive: boolean = false;\r\n\r\n  /**\r\n   * Locale to use for string comparison.\r\n   * Uses the browser's default locale if not specified.\r\n   */\r\n  @Input() locale?: string | string[];\r\n\r\n  /**\r\n   * Whether to use natural sort order (e.g., \"item2\" before \"item10\").\r\n   * This handles numeric portions within strings intelligently.\r\n   */\r\n  @Input() naturalSort: boolean = true;\r\n\r\n  /**\r\n   * How to handle null/undefined values.\r\n   * 'first' - null values appear first\r\n   * 'last' - null values appear last\r\n   */\r\n  @Input() nullHandling: 'first' | 'last' = 'last';\r\n\r\n  /**\r\n   * Whether to trim whitespace before comparison.\r\n   */\r\n  @Input() trimWhitespace: boolean = true;\r\n\r\n  /**\r\n   * Whether to sort immediately when data is provided.\r\n   * If false, data will only be sorted when user clicks a column header.\r\n   */\r\n  @Input() sortOnInit: boolean = false;\r\n\r\n  override ngOnInit() {\r\n    super.ngOnInit();\r\n    \r\n    // Subscribe to sort changes from the parent class\r\n    this.sortChange.subscribe((sort: Sort) => {\r\n      this.performSort(sort);\r\n    });\r\n\r\n    // If sortOnInit is true and we have an active sort, perform initial sort\r\n    if (this.sortOnInit && this.active && this.direction) {\r\n      this.performSort({ active: this.active, direction: this.direction });\r\n    } else {\r\n      // Otherwise, emit the original data\r\n      this.sortedData.emit([...this.data]);\r\n    }\r\n  }\r\n\r\n  override ngOnChanges(changes?: SimpleChanges) {\r\n    super.ngOnChanges();\r\n    \r\n    // When data changes, re-sort if we have an active sort\r\n    if (changes && changes['data'] && !changes['data'].firstChange) {\r\n      if (this.active && this.direction) {\r\n        this.performSort({ active: this.active, direction: this.direction });\r\n      } else {\r\n        this.sortedData.emit([...this.data]);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Performs the actual sorting and emits the result\r\n   */\r\n  private performSort(sort: Sort) {\r\n    if (!sort.active || sort.direction === '' || !this.data) {\r\n      // No sorting - return original data\r\n      this.sortedData.emit([...this.data]);\r\n      return;\r\n    }\r\n\r\n    // Create a copy and sort it\r\n    const sorted = [...this.data].sort((a, b) => {\r\n      const aValue = this.getNestedProperty(a, sort.active);\r\n      const bValue = this.getNestedProperty(b, sort.active);\r\n      return this.compareAlphabetical(aValue, bValue, sort.direction);\r\n    });\r\n\r\n    this.sortedData.emit(sorted);\r\n  }\r\n\r\n  /**\r\n   * Compares two string values based on sort direction\r\n   */\r\n  private compareAlphabetical(a: any, b: any, direction: string): number {\r\n    // Handle null/undefined values\r\n    if (a == null && b == null) return 0;\r\n    if (a == null) return this.nullHandling === 'first' ? -1 : 1;\r\n    if (b == null) return this.nullHandling === 'first' ? 1 : -1;\r\n\r\n    // Convert to strings and optionally trim\r\n    let strA = String(a);\r\n    let strB = String(b);\r\n\r\n    if (this.trimWhitespace) {\r\n      strA = strA.trim();\r\n      strB = strB.trim();\r\n    }\r\n\r\n    // Handle case sensitivity\r\n    if (!this.caseSensitive) {\r\n      strA = strA.toLowerCase();\r\n      strB = strB.toLowerCase();\r\n    }\r\n\r\n    // Perform comparison\r\n    let result: number;\r\n    \r\n    if (this.naturalSort) {\r\n      // Use localeCompare with numeric option for natural sorting\r\n      const options: Intl.CollatorOptions = {\r\n        numeric: true,\r\n        sensitivity: this.caseSensitive ? 'case' : 'base'\r\n      };\r\n      result = strA.localeCompare(strB, this.locale, options);\r\n    } else {\r\n      // Use simple localeCompare\r\n      result = strA.localeCompare(strB, this.locale);\r\n    }\r\n\r\n    // Apply sort direction\r\n    if (direction === 'desc') {\r\n      result = -result;\r\n    } else if (direction === '') {\r\n      result = 0;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Helper to get nested object properties using dot notation\r\n   */\r\n  private getNestedProperty(obj: any, path: string): any {\r\n    return path.split('.').reduce((curr, prop) => curr?.[prop], obj);\r\n  }\r\n\r\n  /**\r\n   * Public method to trigger a re-sort with current settings\r\n   */\r\n  resort() {\r\n    if (this.active && this.direction) {\r\n      this.performSort({ active: this.active, direction: this.direction });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Public method to clear sorting and return original data\r\n   */\r\n  clearSort() {\r\n    this.active = '';\r\n    this.direction = '';\r\n    this.sortedData.emit([...this.data]);\r\n    this._stateChanges.next();\r\n  }\r\n\r\n  /**\r\n   * Utility method to filter and sort strings that start with a specific letter\r\n   */\r\n  filterByFirstLetter(letter: string): any[] {\r\n    if (!this.active || !this.data) {\r\n      return [];\r\n    }\r\n\r\n    const filtered = this.data.filter(item => {\r\n      const value = String(this.getNestedProperty(item, this.active));\r\n      const firstChar = this.caseSensitive ? value.charAt(0) : value.charAt(0).toLowerCase();\r\n      const searchChar = this.caseSensitive ? letter : letter.toLowerCase();\r\n      return firstChar === searchChar;\r\n    });\r\n\r\n    // Sort the filtered results\r\n    return [...filtered].sort((a, b) => {\r\n      const aValue = this.getNestedProperty(a, this.active);\r\n      const bValue = this.getNestedProperty(b, this.active);\r\n      return this.compareAlphabetical(aValue, bValue, 'asc');\r\n    });\r\n  }\r\n} ","import {\r\n    Directive,\r\n    Input,\r\n    Output,\r\n    EventEmitter,\r\n    OnInit,\r\n    OnChanges,\r\n    SimpleChanges,\r\n    inject,\r\n  } from '@angular/core';\r\n  import { RealsoftSort } from './sort';\r\n  import { Sort } from './models';\r\n  \r\n  /**\r\n   * Directive for automatically sorting date columns in a table.\r\n   * This directive extends the base RealsoftSort functionality\r\n   * and automatically handles date sorting.\r\n   * \r\n   * Usage:\r\n   * <table realsoftDateSort \r\n   *        [data]=\"products\" \r\n   *        (sortedData)=\"sortedProducts = $event\">\r\n   *   <th realsoft-sort-header=\"createdDate\">Created Date</th>\r\n   * </table>\r\n   */\r\n  @Directive({\r\n    selector: '[realsoftDateSort]',\r\n    exportAs: 'realsoftDateSort',\r\n    standalone: true,\r\n    providers: [\r\n      // Provide RealsoftSort so sort headers can inject it\r\n      { provide: RealsoftSort, useExisting: RealsoftDateSort }\r\n    ],\r\n    host: {\r\n      'class': 'realsoft-date-sort',\r\n    }\r\n  })\r\n  export class RealsoftDateSort extends RealsoftSort implements OnInit, OnChanges {\r\n    \r\n    /**\r\n     * The data array to be sorted.\r\n     * When this changes or sort changes, the data will be automatically sorted.\r\n     */\r\n    @Input() data: any[] = [];\r\n  \r\n    /**\r\n     * Event emitted with the sorted data.\r\n     * This fires whenever the sort changes or the input data changes.\r\n     */\r\n    @Output() sortedData = new EventEmitter<any[]>();\r\n  \r\n    /**\r\n     * Expected date format when parsing string dates.\r\n     * Common formats: 'MM/DD/YYYY', 'DD/MM/YYYY', 'YYYY-MM-DD'\r\n     * If not specified, uses JavaScript's Date constructor parsing.\r\n     */\r\n    @Input() dateFormat?: string;\r\n  \r\n    /**\r\n     * How to handle null/undefined/invalid date values.\r\n     * 'first' - null values appear first\r\n     * 'last' - null values appear last\r\n     */\r\n    @Input() nullHandling: 'first' | 'last' = 'last';\r\n  \r\n    /**\r\n     * Whether to parse ISO string dates automatically.\r\n     * Useful when dates are stored as ISO strings.\r\n     */\r\n    @Input() parseISOStrings: boolean = true;\r\n  \r\n    /**\r\n     * Custom date parser function.\r\n     * Allows for custom date parsing logic.\r\n     */\r\n    @Input() customParser?: (value: any) => Date | null;\r\n  \r\n    /**\r\n     * Whether to sort immediately when data is provided.\r\n     * If false, data will only be sorted when user clicks a column header.\r\n     */\r\n    @Input() sortOnInit: boolean = false;\r\n  \r\n    override ngOnInit() {\r\n      super.ngOnInit();\r\n      \r\n      // Subscribe to sort changes from the parent class\r\n      this.sortChange.subscribe((sort: Sort) => {\r\n        this.performSort(sort);\r\n      });\r\n  \r\n      // If sortOnInit is true and we have an active sort, perform initial sort\r\n      if (this.sortOnInit && this.active && this.direction) {\r\n        this.performSort({ active: this.active, direction: this.direction });\r\n      } else {\r\n        // Otherwise, emit the original data\r\n        this.sortedData.emit([...this.data]);\r\n      }\r\n    }\r\n  \r\n    override ngOnChanges(changes?: SimpleChanges) {\r\n      super.ngOnChanges();\r\n      \r\n      // When data changes, re-sort if we have an active sort\r\n      if (changes && changes['data'] && !changes['data'].firstChange) {\r\n        if (this.active && this.direction) {\r\n          this.performSort({ active: this.active, direction: this.direction });\r\n        } else {\r\n          this.sortedData.emit([...this.data]);\r\n        }\r\n      }\r\n    }\r\n  \r\n    /**\r\n     * Performs the actual sorting and emits the result\r\n     */\r\n    private performSort(sort: Sort) {\r\n      if (!sort.active || sort.direction === '' || !this.data) {\r\n        // No sorting - return original data\r\n        this.sortedData.emit([...this.data]);\r\n        return;\r\n      }\r\n  \r\n      // Create a copy and sort it\r\n      const sorted = [...this.data].sort((a, b) => {\r\n        const aValue = this.getNestedProperty(a, sort.active);\r\n        const bValue = this.getNestedProperty(b, sort.active);\r\n        return this.compareDate(aValue, bValue, sort.direction);\r\n      });\r\n  \r\n      this.sortedData.emit(sorted);\r\n    }\r\n  \r\n    /**\r\n     * Compares two date values based on sort direction\r\n     */\r\n    private compareDate(a: any, b: any, direction: string): number {\r\n      // Handle null/undefined values\r\n      if (a == null && b == null) return 0;\r\n      if (a == null) return this.nullHandling === 'first' ? -1 : 1;\r\n      if (b == null) return this.nullHandling === 'first' ? 1 : -1;\r\n  \r\n      // Parse dates\r\n      const dateA = this.parseDate(a);\r\n      const dateB = this.parseDate(b);\r\n  \r\n      // Handle invalid dates\r\n      const isValidA = dateA && !isNaN(dateA.getTime());\r\n      const isValidB = dateB && !isNaN(dateB.getTime());\r\n  \r\n      if (!isValidA && !isValidB) return 0;\r\n      if (!isValidA) return this.nullHandling === 'first' ? -1 : 1;\r\n      if (!isValidB) return this.nullHandling === 'first' ? 1 : -1;\r\n  \r\n      // Compare timestamps\r\n      const timeA = dateA.getTime();\r\n      const timeB = dateB.getTime();\r\n  \r\n      // Apply sort direction\r\n      if (direction === 'asc') {\r\n        return timeA - timeB;\r\n      } else if (direction === 'desc') {\r\n        return timeB - timeA;\r\n      }\r\n      return 0;\r\n    }\r\n  \r\n    /**\r\n     * Parses a value into a Date object\r\n     */\r\n    private parseDate(value: Date | string | number): Date {\r\n      // If custom parser is provided, use it\r\n      if (this.customParser) {\r\n        const parsed = this.customParser(value);\r\n        return parsed || new Date('invalid');\r\n      }\r\n  \r\n      // If already a Date object, return it\r\n      if (value instanceof Date) {\r\n        return value;\r\n      }\r\n  \r\n      // If it's a number, treat as timestamp\r\n      if (typeof value === 'number') {\r\n        return new Date(value);\r\n      }\r\n  \r\n      // If it's a string\r\n      if (typeof value === 'string') {\r\n        // Check for ISO string format\r\n        if (this.parseISOStrings && this.isISODateString(value)) {\r\n          return new Date(value);\r\n        }\r\n  \r\n        // If date format is specified, parse according to format\r\n        if (this.dateFormat) {\r\n          return this.parseFormattedDate(value, this.dateFormat);\r\n        }\r\n  \r\n        // Default to Date constructor\r\n        return new Date(value);\r\n      }\r\n  \r\n      // Return invalid date for any other type\r\n      return new Date('invalid');\r\n    }\r\n  \r\n    /**\r\n     * Checks if a string is in ISO date format\r\n     */\r\n    private isISODateString(value: string): boolean {\r\n      // Basic ISO date pattern check\r\n      const isoPattern = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?(Z|[+-]\\d{2}:\\d{2})?)?$/;\r\n      return isoPattern.test(value);\r\n    }\r\n  \r\n    /**\r\n     * Parses a date string according to a specific format\r\n     */\r\n    private parseFormattedDate(dateStr: string, format: string): Date {\r\n      // Simple format parser for common formats\r\n      const formatMap: { [key: string]: RegExp } = {\r\n        'MM/DD/YYYY': /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/,\r\n        'DD/MM/YYYY': /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/,\r\n        'YYYY-MM-DD': /^(\\d{4})-(\\d{2})-(\\d{2})$/,\r\n        'MM-DD-YYYY': /^(\\d{2})-(\\d{2})-(\\d{4})$/,\r\n        'DD-MM-YYYY': /^(\\d{2})-(\\d{2})-(\\d{4})$/,\r\n      };\r\n  \r\n      const regex = formatMap[format];\r\n      if (!regex) {\r\n        // If format not recognized, use default parsing\r\n        return new Date(dateStr);\r\n      }\r\n  \r\n      const match = dateStr.match(regex);\r\n      if (!match) {\r\n        return new Date('invalid');\r\n      }\r\n  \r\n      // Parse based on format\r\n      let year: number, month: number, day: number;\r\n      \r\n      switch (format) {\r\n        case 'MM/DD/YYYY':\r\n        case 'MM-DD-YYYY':\r\n          month = parseInt(match[1], 10);\r\n          day = parseInt(match[2], 10);\r\n          year = parseInt(match[3], 10);\r\n          break;\r\n        case 'DD/MM/YYYY':\r\n        case 'DD-MM-YYYY':\r\n          day = parseInt(match[1], 10);\r\n          month = parseInt(match[2], 10);\r\n          year = parseInt(match[3], 10);\r\n          break;\r\n        case 'YYYY-MM-DD':\r\n          year = parseInt(match[1], 10);\r\n          month = parseInt(match[2], 10);\r\n          day = parseInt(match[3], 10);\r\n          break;\r\n        default:\r\n          return new Date('invalid');\r\n      }\r\n  \r\n      // Month is 0-indexed in JavaScript Date\r\n      return new Date(year, month - 1, day);\r\n    }\r\n  \r\n    /**\r\n     * Helper to get nested object properties using dot notation\r\n     */\r\n    private getNestedProperty(obj: any, path: string): any {\r\n      return path.split('.').reduce((curr, prop) => curr?.[prop], obj);\r\n    }\r\n  \r\n    /**\r\n     * Public method to trigger a re-sort with current settings\r\n     */\r\n    resort() {\r\n      if (this.active && this.direction) {\r\n        this.performSort({ active: this.active, direction: this.direction });\r\n      }\r\n    }\r\n  \r\n    /**\r\n     * Public method to clear sorting and return original data\r\n     */\r\n    clearSort() {\r\n      this.active = '';\r\n      this.direction = '';\r\n      this.sortedData.emit([...this.data]);\r\n      this._stateChanges.next();\r\n    }\r\n  \r\n    /**\r\n     * Utility method to filter data by date range\r\n     */\r\n    filterByDateRange(startDate: Date | string | number, endDate: Date | string | number): any[] {\r\n      if (!this.active || !this.data) {\r\n        return [];\r\n      }\r\n  \r\n      const start = this.parseDate(startDate);\r\n      const end = this.parseDate(endDate);\r\n  \r\n      if (!start || !end || isNaN(start.getTime()) || isNaN(end.getTime())) {\r\n        return this.data;\r\n      }\r\n  \r\n      return this.data.filter(item => {\r\n        const value = this.getNestedProperty(item, this.active);\r\n        const date = this.parseDate(value);\r\n        \r\n        if (!date || isNaN(date.getTime())) {\r\n          return false;\r\n        }\r\n  \r\n        return date >= start && date <= end;\r\n      });\r\n    }\r\n  \r\n    /**\r\n     * Utility method to group data by date period\r\n     */\r\n    groupByPeriod(period: 'day' | 'week' | 'month' | 'year'): Map<string, any[]> {\r\n      if (!this.active || !this.data) {\r\n        return new Map();\r\n      }\r\n  \r\n      const groups = new Map<string, any[]>();\r\n  \r\n      this.data.forEach(item => {\r\n        const value = this.getNestedProperty(item, this.active);\r\n        const date = this.parseDate(value);\r\n        \r\n        if (!date || isNaN(date.getTime())) {\r\n          return;\r\n        }\r\n  \r\n        const key = this.getDatePeriodKey(date, period);\r\n        if (!groups.has(key)) {\r\n          groups.set(key, []);\r\n        }\r\n        groups.get(key)!.push(item);\r\n      });\r\n  \r\n      return groups;\r\n    }\r\n  \r\n    /**\r\n     * Gets a string key for grouping by period\r\n     */\r\n    private getDatePeriodKey(date: Date, period: 'day' | 'week' | 'month' | 'year'): string {\r\n      const year = date.getFullYear();\r\n      const month = date.getMonth();\r\n      const day = date.getDate();\r\n  \r\n      switch (period) {\r\n        case 'day':\r\n          return `${year}-${month + 1}-${day}`;\r\n        case 'week':\r\n          const weekNumber = this.getWeekNumber(date);\r\n          return `${year}-W${weekNumber}`;\r\n        case 'month':\r\n          return `${year}-${month + 1}`;\r\n        case 'year':\r\n          return `${year}`;\r\n      }\r\n    }\r\n  \r\n    /**\r\n     * Gets the week number for a date\r\n     */\r\n    private getWeekNumber(date: Date): number {\r\n      const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\r\n      const dayNum = d.getUTCDay() || 7;\r\n      d.setUTCDate(d.getUTCDate() + 4 - dayNum);\r\n      const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\r\n      return Math.ceil((((d.getTime() - yearStart.getTime()) / 86400000) + 1) / 7);\r\n    }\r\n  } ","import {\r\n  Directive,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  OnInit,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  inject,\r\n} from '@angular/core';\r\nimport { RealsoftSort } from './sort';\r\nimport { Sort } from './models';\r\n\r\n/**\r\n * Directive for automatically sorting numeric columns in a table.\r\n * This directive extends the base RealsoftSort functionality\r\n * and automatically handles numeric sorting.\r\n * \r\n * Usage:\r\n * <table realsoftNumericSort \r\n *        [data]=\"products\" \r\n *        (sortedData)=\"sortedProducts = $event\">\r\n *   <th realsoft-sort-header=\"price\">Price</th>\r\n * </table>\r\n */\r\n@Directive({\r\n  selector: '[realsoftNumericSort]',\r\n  exportAs: 'realsoftNumericSort',\r\n  standalone: true,\r\n  providers: [\r\n    // Provide RealsoftSort so sort headers can inject it\r\n    { provide: RealsoftSort, useExisting: RealsoftNumericSort }\r\n  ],\r\n  host: {\r\n    'class': 'realsoft-numeric-sort',\r\n  }\r\n})\r\nexport class RealsoftNumericSort extends RealsoftSort implements OnInit, OnChanges {\r\n  \r\n  /**\r\n   * The data array to be sorted.\r\n   * When this changes or sort changes, the data will be automatically sorted.\r\n   */\r\n  @Input() data: any[] = [];\r\n\r\n  /**\r\n   * Event emitted with the sorted data.\r\n   * This fires whenever the sort changes or the input data changes.\r\n   */\r\n  @Output() sortedData = new EventEmitter<any[]>();\r\n\r\n  /**\r\n   * Whether to parse strings to numbers before sorting.\r\n   * Useful when numeric data is stored as strings.\r\n   */\r\n  @Input() parseStrings: boolean = true;\r\n\r\n  /**\r\n   * How to handle null/undefined values.\r\n   * 'first' - null values appear first\r\n   * 'last' - null values appear last\r\n   */\r\n  @Input() nullHandling: 'first' | 'last' = 'last';\r\n\r\n  /**\r\n   * Whether to sort immediately when data is provided.\r\n   * If false, data will only be sorted when user clicks a column header.\r\n   */\r\n  @Input() sortOnInit: boolean = false;\r\n\r\n  override ngOnInit() {\r\n    super.ngOnInit();\r\n    \r\n    // Subscribe to sort changes from the parent class\r\n    this.sortChange.subscribe((sort: Sort) => {\r\n      this.performSort(sort);\r\n    });\r\n\r\n    // If sortOnInit is true and we have an active sort, perform initial sort\r\n    if (this.sortOnInit && this.active && this.direction) {\r\n      this.performSort({ active: this.active, direction: this.direction });\r\n    } else {\r\n      // Otherwise, emit the original data\r\n      this.sortedData.emit([...this.data]);\r\n    }\r\n  }\r\n\r\n  override ngOnChanges(changes?: SimpleChanges) {\r\n    super.ngOnChanges();\r\n    \r\n    // When data changes, re-sort if we have an active sort\r\n    if (changes && changes['data'] && !changes['data'].firstChange) {\r\n      if (this.active && this.direction) {\r\n        this.performSort({ active: this.active, direction: this.direction });\r\n      } else {\r\n        this.sortedData.emit([...this.data]);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Performs the actual sorting and emits the result\r\n   */\r\n  private performSort(sort: Sort) {\r\n    if (!sort.active || sort.direction === '' || !this.data) {\r\n      // No sorting - return original data\r\n      this.sortedData.emit([...this.data]);\r\n      return;\r\n    }\r\n\r\n    // Create a copy and sort it\r\n    const sorted = [...this.data].sort((a, b) => {\r\n      const aValue = this.getNestedProperty(a, sort.active);\r\n      const bValue = this.getNestedProperty(b, sort.active);\r\n      return this.compareNumeric(aValue, bValue, sort.direction);\r\n    });\r\n\r\n    this.sortedData.emit(sorted);\r\n  }\r\n\r\n  /**\r\n   * Compares two numeric values based on sort direction\r\n   */\r\n  private compareNumeric(a: any, b: any, direction: string): number {\r\n    // Handle null/undefined values\r\n    if (a == null && b == null) return 0;\r\n    if (a == null) return this.nullHandling === 'first' ? -1 : 1;\r\n    if (b == null) return this.nullHandling === 'first' ? 1 : -1;\r\n\r\n    // Parse strings if needed\r\n    const numA = this.parseStrings && typeof a === 'string' ? parseFloat(a) : a;\r\n    const numB = this.parseStrings && typeof b === 'string' ? parseFloat(b) : b;\r\n\r\n    // Handle NaN values\r\n    if (isNaN(numA) && isNaN(numB)) return 0;\r\n    if (isNaN(numA)) return this.nullHandling === 'first' ? -1 : 1;\r\n    if (isNaN(numB)) return this.nullHandling === 'first' ? 1 : -1;\r\n\r\n    // Perform numeric comparison\r\n    if (direction === 'asc') {\r\n      return numA - numB;\r\n    } else if (direction === 'desc') {\r\n      return numB - numA;\r\n    }\r\n    return 0;\r\n  }\r\n\r\n  /**\r\n   * Helper to get nested object properties using dot notation\r\n   */\r\n  private getNestedProperty(obj: any, path: string): any {\r\n    return path.split('.').reduce((curr, prop) => curr?.[prop], obj);\r\n  }\r\n\r\n  /**\r\n   * Public method to trigger a re-sort with current settings\r\n   */\r\n  resort() {\r\n    if (this.active && this.direction) {\r\n      this.performSort({ active: this.active, direction: this.direction });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Public method to clear sorting and return original data\r\n   */\r\n  clearSort() {\r\n    this.active = '';\r\n    this.direction = '';\r\n    this.sortedData.emit([...this.data]);\r\n    this._stateChanges.next();\r\n  }\r\n} ","\r\nimport {AriaDescriber, FocusMonitor} from '@angular/cdk/a11y';\r\nimport {ENTER, SPACE} from '@angular/cdk/keycodes';\r\nimport {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n  ViewEncapsulation,\r\n  booleanAttribute,\r\n  inject,\r\n  signal,\r\n  ChangeDetectorRef,\r\n} from '@angular/core';\r\nimport {merge, Subscription} from 'rxjs';\r\nimport { REALSOFT_SORT_DEFAULT_OPTIONS, RealsoftSortDefaultOptions, RealsoftSortDirection, RealsoftSortHeaderArrowPosition, RealsoftSortHeaderColumnDef } from './models';\r\nimport { RealsoftSort } from './sort';\r\nimport { getRealsoftSortHeaderNotContainedWithinSortError } from './errors';\r\n\r\n\r\n@Component({\r\n    selector: '[realsoft-sort-header]',\r\n    exportAs: 'realsoftSortHeader',\r\n    templateUrl: 'sort-header.html',\r\n    styleUrl: 'sort-header.scss',\r\n    standalone: true,\r\n    host: {\r\n        'class': 'realsoft-sort-header',\r\n        '(click)': 'sortOnClick()',\r\n        '(keydown)': 'handleKeydown($event)',\r\n        '(mouseleave)': '_previouslySorted.set(null)',\r\n        '[attr.aria-sort]': 'ariaSortAttribute()',\r\n        '[class.realsoft-sort-header-disabled]': 'currentlyDisabled()' \r\n    },\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class RealsoftSortHeader implements OnInit, OnDestroy, AfterViewInit {\r\n    _sort = inject(RealsoftSort, {optional: true})!;\r\n    _columnDef = inject<RealsoftSortHeaderColumnDef>('REALSOFT_SORT_HEADER_COLUMN_DEF' as any, {optional: true});\r\n\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _focusMonitor = inject(FocusMonitor);\r\n    private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n    private _sortActionDescription: string = 'Sort';\r\n    private _changes: Subscription | undefined;\r\n\r\n    //id of this sort header. If used within the context of a CdkColumnDef, this will default to the column's name.\r\n    @Input('realsoft-sort-header') id: string;\r\n\r\n    //Sets the position of the arrow that displays when sorted\r\n    @Input() arrowPosition: RealsoftSortHeaderArrowPosition = 'after';\r\n\r\n    //Overrides the sort start value of the containing RealsoftSort for this RealsoftSortable\r\n    @Input() start: RealsoftSortDirection;\r\n\r\n    //Whether the sort header is disabled\r\n    @Input({transform: booleanAttribute}) disabled: boolean = false;\r\n    \r\n    _previouslySorted = signal<RealsoftSortDirection | null>(null);\r\n\r\n    _sortButton: HTMLElement; //Needed to apply a description with AriaDescriber\r\n\r\n    _defaultOptions = inject<RealsoftSortDefaultOptions>(REALSOFT_SORT_DEFAULT_OPTIONS, {optional: true});\r\n\r\n    _ariaDescriber = inject(AriaDescriber, {optional: true});\r\n\r\n    updateSortActionDescription(description: string) {\r\n        if(this._sortButton) {\r\n            this._ariaDescriber?.removeDescription(this._sortButton, this._sortActionDescription);\r\n            this._ariaDescriber?.describe(this._sortButton, description);\r\n        }\r\n        this._sortActionDescription = description;\r\n    }\r\n\r\n    //Description applied to RealsoftSortHeader's button element with aria-describedby. This text should describe the action that will occu when the user clicks the sort header.\r\n    @Input()\r\n    get sortActionDescription(): string {\r\n        return this._sortActionDescription;\r\n    }\r\n    set sortActionDescription(value: string) {\r\n        this.updateSortActionDescription(value)\r\n    }\r\n\r\n    //Overrides the disable clear value of the containing RealsoftSort for this RealsoftSortable\r\n    @Input({transform: booleanAttribute}) disableClear: boolean;\r\n\r\n    constructor() {\r\n        if(!this._sort) {\r\n            throw getRealsoftSortHeaderNotContainedWithinSortError();\r\n        }\r\n\r\n        if(this._defaultOptions?.arrowPosition) {\r\n            this.arrowPosition = this._defaultOptions.arrowPosition;\r\n        }\r\n    }\r\n\r\n    ngOnInit() {\r\n        if(!this.id && this._columnDef) {\r\n            this.id = this._columnDef.name;\r\n        }\r\n\r\n        this._sort.register(this);\r\n        this._changes = merge(this._sort._stateChanges, this._sort.sortChange).subscribe(() => this._changeDetectorRef.markForCheck());\r\n        this._sortButton = this._elementRef.nativeElement.querySelector('.realsoft-sort-header-container')!;\r\n        this.updateSortActionDescription(this._sortActionDescription);\r\n    }\r\n\r\n    ngAfterViewInit() {\r\n        this._focusMonitor.monitor(this._elementRef, true).subscribe(() => this._previouslySorted.set(null));\r\n    }\r\n\r\n    //Utility Functions\r\n\r\n    //Whether this RealsoftSortHeader is currently sorted in either ascending or descending order\r\n    currentlySorted() {\r\n        const currentlySorted = (this._sort.active === this.id && (this._sort.direction === 'asc' || this._sort.direction === 'desc'));\r\n        return currentlySorted;\r\n    }\r\n\r\n    //Whether the RealsoftSortHeader is disabled \r\n    currentlyDisabled() {\r\n        return this._sort.disabled || this.disabled;\r\n    }\r\n\r\n    //aria-sort attribute getter\r\n    ariaSortAttribute() {\r\n        if(this.currentlySorted()) {\r\n            return 'none';\r\n        }\r\n        return this._sort.direction === 'asc' ? 'ascending' : 'descending';\r\n    }\r\n\r\n    //Whether the arrow inside the sort header should be rendered\r\n    renderArrow() {\r\n        return !this.currentlyDisabled() || this.currentlySorted();\r\n    }\r\n\r\n    //Triggers the sort on this sort header\r\n    sortOnClick() {\r\n        if(!this.currentlyDisabled()) {\r\n            const previouslySorted = this.currentlySorted();\r\n            const previousDirection = this._sort.direction;\r\n            this._sort.sort(this);\r\n            this._previouslySorted.set(previouslySorted && !this.currentlySorted() ? previousDirection : null);\r\n\r\n        }\r\n    }\r\n\r\n    //Keyboard event handler\r\n    handleKeydown(event: KeyboardEvent) {\r\n        if(event.keyCode === SPACE || event.keyCode === ENTER) {\r\n            event.preventDefault();\r\n            this.sortOnClick();\r\n        }\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this._focusMonitor.stopMonitoring(this._elementRef);\r\n        this._sort.deregister(this);\r\n        this._changes?.unsubscribe();\r\n\r\n        if (this._sortButton) {\r\n            this._ariaDescriber?.removeDescription(this._sortButton, this._sortActionDescription);\r\n        }\r\n    }\r\n}\r\n","<div class=\"realsoft-sort-header-container realsoft-focus-indicator\"\r\n    [class.realsoft-sort-header-sorted]=\"currentlySorted()\"\r\n    [class.realsoft-sort-header-position-before]=\"arrowPosition === 'before'\"\r\n    [class.realsoft-sort-header-descending]=\"_sort.direction === 'desc'\"\r\n    [class.realsoft-sort-header-ascending]=\"_sort.direction === 'asc'\"\r\n    [class.realsoft-sort-header-recently-cleared-ascending]=\"_previouslySorted() === 'asc'\"\r\n    [class.realsoft-sort-header-recently-cleared-descending]=\"_previouslySorted() === 'desc'\"\r\n    [attr.tabindex]=\"currentlyDisabled() ? null : 0\"\r\n    [attr.role]=\"currentlyDisabled() ? null : 'button'\">\r\n    \r\n    <div class=\"realsoft-sort-header-content\">\r\n        <ng-content></ng-content>\r\n    </div>\r\n\r\n  @if (renderArrow()) {\r\n    <div class=\"realsoft-sort-header-arrow\">\r\n      <svg viewBox=\"0 -960 960 960\" focusable=\"false\" aria-hidden=\"true\">\r\n        <path d=\"M440-240v-368L296-464l-56-56 240-240 240 240-56 56-144-144v368h-80Z\"/>\r\n      </svg>\r\n    </div>\r\n  }\r\n</div>","import { CdkCell, CdkFooterCell, CdkHeaderCell } from \"@angular/cdk/table\";\r\nimport { Directive } from \"@angular/core\";\r\n\r\n// The Cell template that adds the needed classes\r\n@Directive({\r\n    selector: 'realsoft-cell, td[realsoft-cell]',\r\n    host: {'class' : 'realsoft-cell'},\r\n    standalone: true\r\n})\r\nexport class RealsoftCell extends CdkCell {}\r\n\r\n//The Header Cell Template that adds the needed classes\r\n@Directive({\r\n    selector: 'realsoft-header-cell, th[realsoft-header-cell]',\r\n    host: {'class' : 'realsoft-header-cell'},\r\n    standalone: true\r\n})\r\nexport class RealsoftHeaderCell extends CdkHeaderCell {}\r\n\r\n// The Footer Cell Template that adds the needed classes\r\n@Directive({\r\n    selector: 'realsoft-footer-cell, td[realsoft-footer-cell]',\r\n    host: {'class': 'realsoft-footer-cell'},\r\n    standalone: true\r\n})\r\nexport class RealsoftFooterCell extends CdkFooterCell {}","import {Directive, Input} from '@angular/core';\r\nimport {\r\n  CdkCellDef,\r\n  CdkColumnDef,\r\n  CdkFooterCellDef,\r\n  CdkHeaderCellDef,\r\n} from '@angular/cdk/table';\r\n\r\n\r\n// This Directive will be used as the cell definition for the table\r\n@Directive({\r\n  selector: '[realsoftCellDef]',\r\n  providers: [{provide: CdkCellDef, useExisting: RealsoftCellDef }],\r\n  standalone: true\r\n})\r\nexport class RealsoftCellDef extends CdkCellDef {}\r\n\r\n// This Directive will be used as the header cell definition for the table\r\n@Directive({\r\n  selector: '[realsoftHeaderCellDef]',\r\n  providers: [{provide: CdkHeaderCellDef, useExisting: RealsoftHeaderCellDef}],\r\n  standalone: true\r\n})\r\nexport class RealsoftHeaderCellDef extends CdkHeaderCellDef {}\r\n\r\n// This Directive will be used as the footer cell definition for the table\r\n@Directive({\r\n  selector: '[realsoftFooterCellDef]',\r\n  providers: [{provide: CdkFooterCellDef, useExisting: RealsoftFooterCellDef}],\r\n  standalone: true\r\n})\r\nexport class RealsoftFooterCellDef extends CdkFooterCellDef {}\r\n\r\n// This Directive will be used as the entire column definition for the table\r\n@Directive({\r\n  selector: '[realsoftColumnDef]',\r\n  standalone: true,\r\n  providers: [\r\n    {provide: CdkColumnDef, useExisting: RealsoftColumnDef},\r\n    {provide: 'REALSOFT_SORT_HEADER_COLUMN_DEF', useExisting: RealsoftColumnDef},\r\n  ],\r\n})\r\nexport class RealsoftColumnDef extends CdkColumnDef {\r\n  /** Unique name for this column. */\r\n  @Input('realsoftColumnDef')\r\n  override get name(): string {\r\n    return this._name;\r\n  }\r\n  override set name(name: string) {\r\n    this._setNameInput(name);\r\n  }\r\n\r\n  protected override _updateColumnCssClassName() {\r\n    super._updateColumnCssClassName();\r\n    this._columnCssClassName!.push(`realsoft-column-${this.cssClassFriendlyName}`);\r\n  }\r\n}","\r\nimport {\r\n    CdkFooterRow,\r\n    CdkHeaderRow,\r\n    CdkRow,\r\n    CdkNoDataRow,\r\n    CdkCellOutlet,\r\n} from '@angular/cdk/table';\r\nimport {\r\n    ChangeDetectionStrategy,\r\n    Component,\r\n    Directive,\r\n    ViewEncapsulation,\r\n} from '@angular/core';\r\n  \r\n@Component({\r\n    selector: 'realsoft-header-row, tr[realsoft-header-row]',\r\n    template:  `<ng-container cdkCellOutlet></ng-container>`,\r\n    standalone: true,\r\n    host: {\r\n      'class': 'realsoft-header-row realsoft-data-table__header-row',\r\n      'role': 'row',\r\n    },\r\n    changeDetection: ChangeDetectionStrategy.Default,\r\n    encapsulation: ViewEncapsulation.None,\r\n    exportAs: 'realsoftHeaderRow',\r\n    providers: [{provide: CdkHeaderRow, useExisting: RealsoftHeaderRow}],\r\n    imports: [CdkCellOutlet],\r\n  })\r\nexport class RealsoftHeaderRow extends CdkHeaderRow {}\r\n  \r\n  /** Footer template container that contains the cell outlet. Adds the right class and role. */\r\n  @Component({\r\n    selector: 'realsoft-footer-row, tr[realsoft-footer-row]',\r\n    template: `<ng-container cdkCellOutlet></ng-container>`,\r\n    standalone: true,\r\n    host: {\r\n      'class': 'realsoft-footer-row realsoft-data-table__row',\r\n      'role': 'row',\r\n    },\r\n    changeDetection: ChangeDetectionStrategy.Default,\r\n    encapsulation: ViewEncapsulation.None,\r\n    exportAs: 'realsoftFooterRow',\r\n    providers: [{provide: CdkFooterRow, useExisting: RealsoftFooterRow}],\r\n    imports: [CdkCellOutlet],\r\n  })\r\n  export class RealsoftFooterRow extends CdkFooterRow {}\r\n  \r\n  /** Data row template container that contains the cell outlet. Adds the right class and role. */\r\n  @Component({\r\n    selector: 'realsoft-row, tr[realsoft-row]',\r\n    template: `<ng-container cdkCellOutlet></ng-container>`,\r\n    standalone: true,\r\n    host: {\r\n      'class': 'realsoft-row realsoft-data-table__row',\r\n      'role': 'row',\r\n    },\r\n\r\n    changeDetection: ChangeDetectionStrategy.Default,\r\n    encapsulation: ViewEncapsulation.None,\r\n    exportAs: 'realsoftRow',\r\n    providers: [{provide: CdkRow, useExisting: RealsoftRow}],\r\n    imports: [CdkCellOutlet],\r\n  })\r\n  export class RealsoftRow extends CdkRow {}\r\n  \r\n  /** Row that can be used to display a message when no data is shown in the table. */\r\n  @Directive({\r\n    selector: 'ng-template[realsoftNoDataRow]',\r\n    standalone: true,\r\n    providers: [{provide: CdkNoDataRow, useExisting: RealsoftNoDataRow}],\r\n  })\r\n  export class RealsoftNoDataRow extends CdkNoDataRow {\r\n    override _contentClassName = 'realsoft-no-data-row';\r\n  }","import { CdkFooterRowDef, CdkHeaderRowDef, CdkRowDef } from \"@angular/cdk/table\";\r\nimport { booleanAttribute, Directive } from \"@angular/core\";\r\n\r\n\r\n// This Directive is responsible of defining the header of the table including the columns to be displayed in the header\r\n\r\n@Directive({\r\n    selector: '[realsoftHeaderRowDef]',\r\n    providers: [{provide: CdkHeaderRowDef, useExisting: RealsoftHeaderRowDef}],\r\n    inputs: [\r\n        {name: 'columns', alias: 'realsoftHeaderRowDef' },\r\n        {name: 'sticky', alias: 'realsoftHeaderRowDefSticky', transform: booleanAttribute},\r\n    ],\r\n    standalone: true\r\n})\r\nexport class RealsoftHeaderRowDef extends CdkHeaderRowDef {}\r\n\r\n// This Directive is responsible for defining the footer of the table including the columns to be displayed in the footer\r\n\r\n@Directive({\r\n    selector: '[realsoftFooterRowDef]',\r\n    providers: [{provide: CdkFooterRowDef, useExisting: RealsoftFooterRowDef }],\r\n    inputs: [\r\n        {name: 'columns', alias: 'realsoftFooterRowDef'},\r\n        {name: 'sticky', alias: 'realsoftFooterRowDefSticky', transform: booleanAttribute}\r\n    ],\r\n    standalone: true\r\n})\r\nexport class RealsoftFooterRowDef extends CdkFooterRowDef {}\r\n\r\n// This Directive is responsible for defining the rows of the table including the columns names to be displayes in each row.\r\n\r\n@Directive({\r\n    selector: '[realsoftRowDef]',\r\n    providers: [{provide: CdkRowDef, useExisting: RealsoftRowDef}],\r\n    standalone: true,\r\n    inputs: [\r\n      {name: 'columns', alias: 'realsoftRowDefColumns'},\r\n      {name: 'when', alias: 'realsoftRowDefWhen'},\r\n    ],\r\n  })\r\n  export class RealsoftRowDef<T> extends CdkRowDef<T> {}","import { _COALESCED_STYLE_SCHEDULER, _CoalescedStyleScheduler, CDK_TABLE, CdkTable, DataRowOutlet, FooterRowOutlet, HeaderRowOutlet, NoDataRowOutlet } from \"@angular/cdk/table\";\r\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from \"@angular/core\";\r\nimport { _DisposeViewRepeaterStrategy, _VIEW_REPEATER_STRATEGY, _ViewRepeater } from '@angular/cdk/collections';\r\n\r\n\r\n@Component({\r\n    selector: 'realsoft-table ,table[realsoft-table]',\r\n    exportAs: 'realsoftTable',\r\n    templateUrl: './table.html',\r\n    styleUrl: './table.scss',\r\n    providers: [\r\n        {provide: CdkTable, useExisting: RealsoftTable},\r\n        {provide: CDK_TABLE, useExisting: RealsoftTable},\r\n        {provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy},\r\n        {provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler}, // Due to Angular CDK\r\n    ],\r\n    host: {\r\n        'class': 'realsoft-table realsoft-data-table__table',\r\n        '[class.realsoft-table-fixed-layout]': 'fixedLayout',\r\n    },\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    changeDetection: ChangeDetectionStrategy.Default,\r\n    imports: [HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet]\r\n})\r\nexport class RealsoftTable<T> extends CdkTable<T> {\r\n    protected override needsPositionStickyOnElement = false; //No need to provide position: sticky on every sticky cell element in CdkTable\r\n}","@if (_isNativeHtmlTable) {\r\n    <thead role=\"rowgroup\">\r\n      <ng-container headerRowOutlet/>\r\n    </thead>\r\n    <tbody class=\"realsoft-data-table__content\" role=\"rowgroup\">\r\n      <ng-container rowOutlet/>\r\n      <ng-container noDataRowOutlet/>\r\n    </tbody>\r\n    <tfoot role=\"rowgroup\">\r\n      <ng-container footerRowOutlet/>\r\n    </tfoot>\r\n  } @else {\r\n    <ng-container headerRowOutlet/>\r\n    <ng-container rowOutlet/>\r\n    <ng-container noDataRowOutlet/>\r\n    <ng-container footerRowOutlet/>\r\n}","\r\nimport {\r\n    BehaviorSubject,\r\n    combineLatest,\r\n    merge,\r\n    Observable,\r\n    of as observableOf,\r\n    of,\r\n    Subject,\r\n    Subscription,\r\n  } from 'rxjs';\r\n  import { DataSource } from '@angular/cdk/collections';\r\n  import { _isNumberValue } from '@angular/cdk/coercion';\r\n  import { map } from 'rxjs/operators';\r\n  import { RealsoftPaginator } from '../paginator/paginator';\r\n  import { RealsoftSort } from '../sort/sort';\r\n  import { Sort } from '../sort/models';\r\n  import { PageEvent } from '../paginator/paginator-config';\r\n  \r\n  \r\n  export class RealsoftTableDataSource<T, P extends RealsoftPaginator = RealsoftPaginator> extends DataSource<T> {\r\n    // Stream that emits when a new data array is set on the data source.\r\n    private readonly _data: BehaviorSubject<T[]>;\r\n  \r\n    // Stream emitting render data to the table (depends on ordered data changes)\r\n    private readonly _renderData = new BehaviorSubject<T[]>([]);\r\n  \r\n    // Stream that emits when a new filter string is set on the data source.\r\n    private readonly _filter = new BehaviorSubject<string>('');\r\n  \r\n    // Used to react to internal changes of the paginator that are made by the data source itself. */\r\n    private readonly _internalPageChanges = new Subject<void>();\r\n  \r\n    /**\r\n     * Subscription to the changes that should trigger an update to the table's rendered rows, such\r\n     * as filtering, sorting, pagination, or base data changes.\r\n     */\r\n    _renderChangesSubscription: Subscription | null = null;\r\n  \r\n    filteredData: T[];\r\n  \r\n    // Array of data that should be rendered by the table, where each object represents one row.\r\n    get data() {\r\n      return this._data.value;\r\n    }\r\n  \r\n    set data(data: T[]) {\r\n      data = Array.isArray(data) ? data : [];\r\n      this._data.next(data);\r\n      // Normally the `filteredData` is updated by the re-render\r\n      // subscription, but that won't happen if it's inactive.\r\n      if (!this._renderChangesSubscription) {\r\n        this._filterData(data);\r\n      }\r\n    }\r\n  \r\n    get filter(): string {\r\n      return this._filter.value;\r\n    }\r\n  \r\n    set filter(filter: string) {\r\n      this._filter.next(filter);\r\n      if (!this._renderChangesSubscription) {\r\n        this._filterData(this.data);\r\n      }\r\n    }\r\n  \r\n    get sort(): RealsoftSort | null {\r\n      return this._sort;\r\n    }\r\n  \r\n    set sort(sort: RealsoftSort | null) {\r\n      this._sort = sort;\r\n      this._updateChangeSubscription();\r\n    }\r\n  \r\n    private _sort: RealsoftSort | null;\r\n  \r\n    get paginator(): P | null {\r\n      return this._paginator;\r\n    }\r\n  \r\n    set paginator(paginator: P | null) {\r\n      this._paginator = paginator;\r\n      this._updateChangeSubscription();\r\n    }\r\n  \r\n    private _paginator: P | null;\r\n  \r\n    //This function is used to extract a srotable value either a string or a number from a given data object based on a specified sorting header id.\r\n    /**\r\n     * ensures proper sorting behavior in tables when sorting mixed data types\r\n     * prevents issues with large numbers that js cannot safely handle.\r\n     * avoids coercion problems where \"25\" string may be treated differently than 25 (number)\r\n     * Ensures proper sorting behavior in tables, especially when sorting mixed data types.\r\n     */\r\n    sortingDataAccessor: (data: T, sortHeaderId: string) => string | number = (data, sortHeaderId) => {\r\n      const sortingValue = (data as Record<string,any>)[sortHeaderId]; // Extract the value from the object using sortHeaderId as a key.\r\n  \r\n      if(typeof sortingValue === 'number' || (!isNaN(sortingValue) && sortingValue !== null && sortingValue !== undefined)) {\r\n          const numberValue = Number(sortingValue);\r\n          return numberValue < Number.MAX_SAFE_INTEGER ? numberValue : sortingValue;\r\n      }\r\n      return sortingValue;\r\n    };\r\n  \r\n    sortData: (data: T[], sort: RealsoftSort) => T[] = (data,sort) => {\r\n      const {active, direction} = sort;\r\n  \r\n      if(!active || !direction) return data;\r\n  \r\n      return [...data].sort((a,b) => {\r\n          let A = this.sortingDataAccessor(a, active);\r\n          let B = this.sortingDataAccessor(b, active);\r\n  \r\n          //Type checking\r\n          if(typeof A !== typeof B) {\r\n              A = String(A);\r\n              B = String(B);\r\n          }\r\n          // When sorting, we need to decide what happens when a value is null or undefined. Typically, null values are pushed to the end of the sorted list.\r\n          /**\r\n          * If A and B are both null, the function returns 0, meaning they are considered equal, and their order remains unchanged.\r\n          * If A is null but B is not, it returns -1, meaning A should be placed after B.\r\n          * If B is null but A is not, it returns 1, meaning B should be placed after A.\r\n         */\r\n  \r\n          if(A === null) return B === null ? 0 : -1;\r\n          if(B === null) return -1;\r\n  \r\n          const value = A > B ? 1 : A < B ? -1 : 0;\r\n          return value * (direction === 'asc' ? 1 : -1);\r\n      })\r\n    }\r\n  \r\n    // This function is used for searching/filtering through an object based on a given search string.\r\n    /**\r\n     * @returns true if any value in the object matches the filter, otherwise it returns false;\r\n     */\r\n    filterPredicate: (data: T, filter: string) => boolean = (data, filter) => {\r\n      const transformedFilter = filter.trim().toLowerCase(); // Making the search case insensitive\r\n    \r\n      // Extract All Values from the Data Object => Object.values(data) ->  Retrieves all values from the object regardless of keys.\r\n      // as Record<string, any>: Ensures TypeScript treats data as an object with string keys and any values.\r\n      return Object.values(data as Record<string, any>).some(value =>\r\n        String(value).toLowerCase().includes(transformedFilter) // Checks if the transformed filter is a substring of the value\r\n      );\r\n    };\r\n    \r\n  \r\n  \r\n    constructor(initialData: T[] = []) {\r\n      super();\r\n      this._data = new BehaviorSubject<T[]>(initialData); // Data Initialization\r\n      this._updateChangeSubscription();\r\n    }\r\n  \r\n  \r\n    _updateChangeSubscription() {\r\n      const sortChange: Observable<Sort | null | void> = this._sort\r\n        ? (merge(this._sort.sortChange, this._sort._initializedStream) as Observable<Sort | void>)\r\n        : observableOf(null);\r\n      const pageChange: Observable<PageEvent | null | void> = this._paginator\r\n        ? (merge(\r\n            this._paginator.page,\r\n            this._internalPageChanges,\r\n            this._paginator.initialized,\r\n          ) as Observable<PageEvent | void>)\r\n        : observableOf(null);\r\n      const dataStream = this._data;\r\n      // Watch for base data or filter changes to provide a filtered set of data.\r\n      const filteredData = combineLatest([dataStream, this._filter]).pipe(\r\n        map(([data]) => this._filterData(data)),\r\n      );\r\n      // Watch for filtered data or sort changes to provide an ordered set of data.\r\n      const orderedData = combineLatest([filteredData, sortChange]).pipe(\r\n        map(([data]) => this._orderData(data)),\r\n      );\r\n      // Watch for ordered data or page changes to provide a paged set of data.\r\n      const paginatedData = combineLatest([orderedData, pageChange]).pipe(\r\n        map(([data]) => this._pageData(data)),\r\n      );\r\n      // Watched for paged data changes and send the result to the table to render.\r\n      this._renderChangesSubscription?.unsubscribe();\r\n      this._renderChangesSubscription = paginatedData.subscribe(data => this._renderData.next(data));\r\n    }\r\n  \r\n  \r\n    _filterData(data: T[]) {\r\n      this.filteredData =\r\n        this.filter == null || this.filter === ''\r\n          ? data\r\n          : data.filter(obj => this.filterPredicate(obj, this.filter));\r\n  \r\n      if (this.paginator) {\r\n        this._updatePaginator(this.filteredData.length);\r\n      }\r\n  \r\n      return this.filteredData;\r\n    }\r\n  \r\n  \r\n    _orderData(data: T[]): T[] {\r\n      if (!this.sort) {\r\n        return data;\r\n      }\r\n  \r\n      return this.sortData(data.slice(), this.sort);\r\n    }\r\n  \r\n  \r\n    _pageData(data: T[]): T[] {\r\n      if (!this.paginator) {\r\n        return data;\r\n      }\r\n  \r\n      const startIndex = this.paginator.pageIndex * this.paginator.pageSize;\r\n      return data.slice(startIndex, startIndex + this.paginator.pageSize);\r\n    }\r\n  \r\n  \r\n    _updatePaginator(filteredDataLength: number) {\r\n      queueMicrotask(() => {\r\n        const paginator = this.paginator;\r\n  \r\n        if (!paginator) {\r\n          return;\r\n        }\r\n  \r\n        paginator.length = filteredDataLength;\r\n  \r\n        // If the page index is set beyond the page, reduce it to the last page.\r\n        if (paginator.pageIndex > 0) {\r\n          const lastPageIndex = Math.ceil(paginator.length / paginator.pageSize) - 1 || 0;\r\n          const newPageIndex = Math.min(paginator.pageIndex, lastPageIndex);\r\n  \r\n          if (newPageIndex !== paginator.pageIndex) {\r\n            paginator.pageIndex = newPageIndex;\r\n  \r\n            this._internalPageChanges.next();\r\n          }\r\n        }\r\n      });\r\n    }\r\n  \r\n    connect() {\r\n      if (!this._renderChangesSubscription) {\r\n        this._updateChangeSubscription();\r\n      }\r\n  \r\n      return this._renderData;\r\n    }\r\n  \r\n    disconnect() {\r\n      this._renderChangesSubscription?.unsubscribe();\r\n      this._renderChangesSubscription = null;\r\n    }\r\n  }","export function realsoftMenuInvalidPositionX() {\r\n    return Error(`xPosition value must be either 'before' or after'.`);\r\n}\r\n\r\nexport function realsoftMenuInvalidPositionY() {\r\n    return Error(`yPosition value must be either 'above' or below'`)\r\n}\r\n\r\nexport function realsoftMenuRecursiveError() {\r\n    return Error(\r\n        `realsoftMenuTiggerFor: menu cannot contain its own trigger. Assign a menu that is ` +\r\n          `not a parent of the trigger or move the trigger outside of the menu.`,\r\n      );\r\n}","import { FocusOrigin } from \"@angular/cdk/a11y\";\r\nimport { Direction } from \"@angular/cdk/bidi\";\r\nimport { Overlay, ScrollStrategy } from \"@angular/cdk/overlay\";\r\nimport { EventEmitter, inject, InjectionToken, TemplateRef } from \"@angular/core\";\r\nimport { RealsoftMenuContent } from \"./menu-content\";\r\n\r\nexport type RealsoftMenuPositionY = 'above' | 'below';\r\n\r\nexport type RealsoftMenuPositionX = 'before' | 'after'; //The x-axis position of the menu\r\n\r\nexport type RealsoftMenuCloseReason = void | 'click' | 'keydown' | 'tab'; //Reason why the menu was closed\r\n\r\n//Default Menu options that can be overriden\r\nexport interface RealsoftMenuDefaultOptions {\r\n    xPosition: RealsoftMenuPositionX; //The x-axis position of the menu\r\n    yPosition: RealsoftMenuPositionY; //The y-axis position of the menu\r\n    overlapTrigger: boolean; //Whether the menu should overlap the menu trigger\r\n    backdropClass: string; //The class to be applied to the menu's backdrop\r\n    overlayPanelClass?: string | string[]; //The class or list of classes to be applied to the menu's overlay panel\r\n    hasBackdrop?: boolean; //Whether the menu has a backdrop\r\n}\r\n\r\n//Injection token to be used to override the default options for `realsoft-menu`\r\nexport const REALSOFT_MENU_DEFAULT_OPTIONS = new InjectionToken<RealsoftMenuDefaultOptions>(\r\n    'realsoft-menu-default-options',\r\n    {\r\n        providedIn: 'root',\r\n        factory: REALSOFT_MENU_DEFAULT_OPTIONS_FACTORY,\r\n    }\r\n)\r\n\r\n//Factory function to provide the default options for `realsoft-menu`\r\nexport function REALSOFT_MENU_DEFAULT_OPTIONS_FACTORY(): RealsoftMenuDefaultOptions {\r\n    return {\r\n      overlapTrigger: false,\r\n      xPosition: 'after',\r\n      yPosition: 'below',\r\n      backdropClass: 'cdk-overlay-transparent-backdrop',\r\n    }\r\n}\r\n\r\nexport interface RealsoftMenuPanel<T = any> {\r\n    xPosition: RealsoftMenuPositionX;\r\n    yPosition: RealsoftMenuPositionY;\r\n    overlapTrigger: boolean;\r\n    templateRef: TemplateRef<any>;\r\n    readonly close?: EventEmitter<void | 'click' | 'keydown' | 'tab'>;\r\n    parentMenu?: RealsoftMenuPanel | undefined;\r\n    direction?: Direction;\r\n    focusFirstItem: (origin?: FocusOrigin) => void;\r\n    resetActiveItem: () => void;\r\n    setPositionClasses?: (x: RealsoftMenuPositionX, y: RealsoftMenuPositionY) => void;\r\n  \r\n    setElevation?(depth: number): void;\r\n    lazyContent?: RealsoftMenuContent;\r\n    backdropClass?: string;\r\n    overlayPanelClass?: string | string[];\r\n    hasBackdrop?: boolean;\r\n    readonly panelId?: string;\r\n  \r\n    addItem?: (item: T) => void;\r\n  \r\n    removeItem?: (item: T) => void;\r\n}\r\n\r\nexport const REALSOFT_MENU_PANEL = new InjectionToken<RealsoftMenuPanel>('REALSOFT_MENU_PANEL');\r\n\r\n//Injection Token that determines the scroll handling while the menu is open\r\nexport const REALSOFT_MENU_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\r\n    'realsoft-menu-scroll-strategy',\r\n    {\r\n        providedIn: 'root',\r\n        factory: () => {\r\n            const overlay = inject(Overlay);\r\n            return () => overlay.scrollStrategies.reposition();\r\n        }\r\n    }\r\n)\r\n\r\n\r\n","import {\r\n    ChangeDetectionStrategy,\r\n    Component,\r\n    ElementRef,\r\n    OnDestroy,\r\n    ViewEncapsulation,\r\n    Input,\r\n    AfterViewInit,\r\n    ChangeDetectorRef,\r\n    booleanAttribute,\r\n    inject,\r\n} from '@angular/core';\r\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\r\nimport { Subject } from 'rxjs';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { REALSOFT_MENU_PANEL, RealsoftMenuPanel } from './models';\r\n  \r\n\r\n@Component({\r\n    selector: '[realsoft-menu-item]',\r\n    standalone: true,\r\n    exportAs: 'realsoftMenuItem',\r\n    host: {\r\n        '[attr.role]': 'role',\r\n        '[attr.tabindex]': 'tabIndex()',\r\n        '[attr.aria-disabled]': 'disabled',\r\n        '[attr.disabled]': 'disabled || null',\r\n        'class': 'realsoft-menu-item realsoft-focus-indicator',\r\n        '[class.realsoft-menu-item-submenu-trigger]': '_triggersSubmenu',\r\n        '(click)': 'menuItemClick($event)',\r\n        '(mouseenter)': 'mouseEnter()'\r\n    },\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    encapsulation: ViewEncapsulation.None,\r\n    templateUrl: 'menu-item.html',\r\n\r\n})\r\nexport class RealsoftMenuItem implements AfterViewInit, OnDestroy {\r\n    _parentMenu? = inject<RealsoftMenuPanel<RealsoftMenuItem>>(REALSOFT_MENU_PANEL, {optional: true});\r\n    _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n    private _document = inject(DOCUMENT);\r\n    private _focusMonitor = inject(FocusMonitor);\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n  \r\n    // ARIA role for the menu item.\r\n    @Input() role: 'menuitem' | 'menuitemradio' | 'menuitemcheckbox' = 'menuitem';\r\n  \r\n    // Whether the menu item is disabled.\r\n    @Input({transform: booleanAttribute}) disabled: boolean = false;\r\n  \r\n    // Stream that emits when the menu item is hovered.\r\n    readonly currentlyHovered: Subject<RealsoftMenuItem> = new Subject<RealsoftMenuItem>();\r\n  \r\n    //Stream that emits when the menu item is focused.\r\n    readonly _currentlyFocused = new Subject<RealsoftMenuItem>();\r\n  \r\n    // Whether the menu item is highlighted.\r\n    _highlighted: boolean = false;\r\n  \r\n    // Whether the menu item acts as a trigger for a sub-menu.\r\n    _triggersSubmenu: boolean = false;\r\n\r\n    constructor() {\r\n        this._parentMenu?.addItem?.(this); //Adding the menu item to the parent menu\r\n    }\r\n\r\n    ngAfterViewInit() {\r\n        if(this._focusMonitor) {\r\n            this._focusMonitor.monitor(this._elementRef, false);\r\n        }\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        if(this._focusMonitor) {\r\n            this._focusMonitor.stopMonitoring(this._elementRef);\r\n        }\r\n\r\n        if(this._parentMenu && this._parentMenu.removeItem) {\r\n            this._parentMenu.removeItem(this);\r\n        }\r\n\r\n        this._currentlyFocused.complete();\r\n        this.currentlyHovered.complete();\r\n    }\r\n\r\n    //Determinig the tabindex of the menu item based on the disabled state\r\n    tabIndex(): string {\r\n        return this.disabled ? '-1' : '0';\r\n    }\r\n    //Returns the host DOM element\r\n    menuHostElement(): HTMLElement {\r\n        return this._elementRef.nativeElement;\r\n    }\r\n\r\n    menuItemClick(event: Event) {\r\n        if(this.disabled) {\r\n            event.preventDefault();\r\n            event.stopPropagation();\r\n        }\r\n    }\r\n\r\n    currentlyFocused(): boolean {\r\n        return this._document && this._document.activeElement === this.menuHostElement();\r\n    }\r\n\r\n    setTriggersSubmenu(triggersSubmenu: boolean) {\r\n        this._triggersSubmenu = triggersSubmenu;\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    currentlyHighlighted(currentlyHighlighted: boolean) {\r\n        this._highlighted = currentlyHighlighted;\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    mouseEnter() {\r\n        this.currentlyHovered.next(this);\r\n    }\r\n\r\n    //Item label getter \r\n    getLabel(): string {\r\n        const elementClone = this.menuHostElement().cloneNode(true) as HTMLElement;\r\n        const icons = elementClone.querySelectorAll('.material-icons');\r\n\r\n        //Remove all icons from the element\r\n        for(let i = 0; i < icons.length; i++) {\r\n            icons[i].remove();\r\n        }\r\n\r\n        return elementClone.textContent?.trim() || '';\r\n    }\r\n\r\n    //For focusing the menu item\r\n    focus(origin?: FocusOrigin, options?: FocusOptions): void {\r\n        if(this._focusMonitor && origin) {\r\n            this._focusMonitor.focusVia(this.menuHostElement(), origin, options);\r\n        } else {\r\n            this.menuHostElement().focus(options);\r\n        }\r\n\r\n        this._currentlyFocused.next(this);\r\n    }\r\n\r\n}","<ng-content select=\"realsoft-icon, [realsoftMenuItemIcon]\"></ng-content>\r\n<span class=\"realsoft-menu-item-text\"><ng-content></ng-content></span>\r\n<div class=\"realsoft-menu-ripple\"></div>\r\n\r\n@if (_triggersSubmenu) {\r\n     <svg\r\n       class=\"realsoft-menu-submenu-icon\"\r\n       viewBox=\"0 0 5 10\"\r\n       focusable=\"false\"\r\n       aria-hidden=\"true\"><polygon points=\"0,0 5,5 0,10\"/></svg>\r\n}","import { DomPortalOutlet } from \"@angular/cdk/portal\";\r\nimport { TemplatePortal } from \"@angular/cdk/portal\";\r\nimport { DOCUMENT } from \"@angular/common\";\r\nimport { ApplicationRef, ChangeDetectorRef, inject, InjectionToken, Injector, OnDestroy, TemplateRef, ViewContainerRef, ComponentFactoryResolver, Inject } from \"@angular/core\";\r\n\r\nimport { Directive } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\n\r\nexport const REALSOFT_MENU_CONTENT = new InjectionToken<RealsoftMenuContent>('RealsoftMenuContent');\r\n\r\n@Directive({\r\n    selector: 'ng-template[realsoftMenuContent]',\r\n    standalone: true,\r\n    providers: [{provide: REALSOFT_MENU_CONTENT, useExisting: RealsoftMenuContent}]\r\n})\r\nexport class RealsoftMenuContent implements OnDestroy {\r\n    private _portal: TemplatePortal<any> | undefined;\r\n    private _template = inject<TemplateRef<any>>(TemplateRef);\r\n    private _viewContainerRef = inject(ViewContainerRef);\r\n    private _outlet: DomPortalOutlet | undefined;\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    readonly _attached = new Subject<void>();\r\n  \r\n\r\n    constructor(\r\n  @Inject(DOCUMENT) private _document: Document,\r\n  private _appRef: ApplicationRef,\r\n  private _injector: Injector,\r\n  private _componentFactoryResolver: ComponentFactoryResolver\r\n) {}\r\n\r\n\r\n    attach(context: any = {}) {\r\n        if(!this._portal) {\r\n            this._portal = new TemplatePortal(this._template, this._viewContainerRef);\r\n        }\r\n\r\n\r\n        this.detach();\r\n\r\n\r\n        this._outletInitialization();\r\n\r\n        this._insertOutletBeforeTemplate();\r\n\r\n        this._markForCheck();\r\n\r\n        this._portal.attach(this._outlet, context);\r\n\r\n        this._attached.next();\r\n\r\n    }\r\n\r\n    _markForCheck(): void {\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    private _outletInitialization(): void { \r\n        if (!this._outlet) {\r\n          this._outlet = new DomPortalOutlet(\r\n          this._document.createElement('div'),\r\n          this._componentFactoryResolver,\r\n           this._appRef,\r\n           this._injector\r\n    );\r\n  }\r\n}\r\n\r\n\r\n    private _insertOutletBeforeTemplate(): void {\r\n        const element: HTMLElement = this._template.elementRef.nativeElement;\r\n        element.parentNode!.insertBefore(this._outlet.outletElement, element);\r\n    }\r\n\r\n    detach() {\r\n        if (this._portal?.isAttached) {\r\n          this._portal.detach();\r\n        }\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this.detach();\r\n        this._outlet?.dispose();\r\n    }\r\n\r\n}\r\n","import {\r\n    AfterContentInit,\r\n    ChangeDetectionStrategy,\r\n    Component,\r\n    ContentChild,\r\n    ContentChildren,\r\n    ElementRef,\r\n    EventEmitter,\r\n    Input,\r\n    OnDestroy,\r\n    Output,\r\n    TemplateRef,\r\n    QueryList,\r\n    ViewChild,\r\n    ViewEncapsulation,\r\n    OnInit,\r\n    ChangeDetectorRef,\r\n    booleanAttribute,\r\n    AfterRenderRef,\r\n    inject,\r\n    Injector,\r\n    ANIMATION_MODULE_TYPE,\r\n    NgZone,\r\n  } from '@angular/core';\r\n  import { FocusKeyManager, FocusOrigin} from '@angular/cdk/a11y';\r\n  import { Direction} from '@angular/cdk/bidi';\r\n  import { hasModifierKey } from '@angular/cdk/keycodes';\r\n  import {merge, Observable, Subject} from 'rxjs';\r\n  import {startWith, switchMap} from 'rxjs/operators';\r\n  import { RealsoftMenuItem} from './menu-item';\r\n  import { REALSOFT_MENU_CONTENT, RealsoftMenuContent} from './menu-content';\r\n  import { REALSOFT_MENU_DEFAULT_OPTIONS, REALSOFT_MENU_PANEL, RealsoftMenuCloseReason, RealsoftMenuDefaultOptions, RealsoftMenuPanel, RealsoftMenuPositionX, RealsoftMenuPositionY } from './models';\r\n  import { UniqueIdGeneratorService } from '../id-generator';\r\n  import { realsoftMenuInvalidPositionY, realsoftMenuInvalidPositionX } from './errors';\r\n  \r\n  \r\n  \r\n  // Name of the enter animation `@keyframes`\r\n  const ENTER_ANIMATION = '_realsoft-menu-enter';\r\n  \r\n// Name of the exit animation `@keyframes`.\r\n  const EXIT_ANIMATION = '_realsoft-menu-exit';\r\n  \r\n  @Component({\r\n    selector: 'realsoft-menu',\r\n    templateUrl: 'menu.html',\r\n    styleUrl: 'menu.scss',\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    encapsulation: ViewEncapsulation.None,\r\n    exportAs: 'realsoftMenu',\r\n    standalone: true,\r\n    host: {\r\n      '[attr.aria-label]': 'null',\r\n      '[attr.aria-labelledby]': 'null',\r\n      '[attr.aria-describedby]': 'null',\r\n    },\r\n    providers: [{provide: REALSOFT_MENU_PANEL, useExisting: RealsoftMenu}],\r\n  })\r\n  export class RealsoftMenu implements AfterContentInit, RealsoftMenuPanel<RealsoftMenuItem>, OnInit, OnDestroy {\r\n    public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n  \r\n    private _keyManager: FocusKeyManager<RealsoftMenuItem>;\r\n    private _xPosition: RealsoftMenuPositionX;\r\n    private _yPosition: RealsoftMenuPositionY;\r\n    private _firstItemFocusRef?: AfterRenderRef;\r\n    private _exitFallbackTimeout: ReturnType<typeof setTimeout> | undefined;\r\n    private _animationModule = inject(ANIMATION_MODULE_TYPE, {optional: true});\r\n  \r\n    // Whether animations are currently disabled.\r\n    protected _animationsDisabled: boolean;\r\n  \r\n    \r\n  \r\n    // Only the direct descendant menu items. \r\n    _directDescendantMenuItems = new QueryList<RealsoftMenuItem>();\r\n  \r\n    // Classes to be applied to the menu panel.\r\n    _classList: {[key: string]: boolean} = {};\r\n  \r\n    // Current state of the panel animation.\r\n    _panelAnimationState: 'void' | 'enter' = 'void';\r\n  \r\n    // Emits whenever an animation on the menu completes. \r\n    readonly _animationDone = new Subject<'void' | 'enter'>();\r\n  \r\n    // Whether the menu is animating.\r\n    _isAnimating = false;\r\n  \r\n    // Parent menu of the current menu panel.\r\n    parentMenu: RealsoftMenuPanel | undefined;\r\n  \r\n    // Layout direction of the menu.\r\n    direction: Direction;\r\n  \r\n    // Class or list of classes to be added to the overlay panel.\r\n    overlayPanelClass: string | string[];\r\n  \r\n    // Class to be added to the backdrop element.\r\n    @Input() backdropClass: string;\r\n  \r\n    // aria-label for the menu panel.\r\n    @Input('aria-label') ariaLabel: string;\r\n  \r\n    // aria-labelledby for the menu panel.\r\n    @Input('aria-labelledby') ariaLabelledby: string;\r\n  \r\n    // aria-describedby for the menu panel.\r\n    @Input('aria-describedby') ariaDescribedby: string;\r\n\r\n    // All items inside the menu. Includes items nested inside another menu.\r\n    @ContentChildren(RealsoftMenuItem, {descendants: true}) _menuItems: QueryList<RealsoftMenuItem>;\r\n  \r\n    // Position of the menu in the X axis.\r\n    @Input()\r\n    get xPosition(): RealsoftMenuPositionX {\r\n      return this._xPosition;\r\n    }\r\n    set xPosition(value: RealsoftMenuPositionX) {\r\n      if (value !== 'before' && value !== 'after') {\r\n        realsoftMenuInvalidPositionX();\r\n      }\r\n      this._xPosition = value;\r\n      this.setPositionClasses();\r\n    }\r\n  \r\n    /** Position of the menu in the Y axis. */\r\n    @Input()\r\n    get yPosition(): RealsoftMenuPositionY {\r\n      return this._yPosition;\r\n    }\r\n    set yPosition(value: RealsoftMenuPositionY) {\r\n      if (value !== 'above' && value !== 'below') {\r\n        realsoftMenuInvalidPositionY();\r\n      }\r\n      this._yPosition = value;\r\n      this.setPositionClasses();\r\n    }\r\n  \r\n    @ViewChild(TemplateRef) templateRef: TemplateRef<any>;\r\n  \r\n  \r\n    @ContentChildren(RealsoftMenuItem, {descendants: false}) items: QueryList<RealsoftMenuItem>;\r\n  \r\n    @ContentChild(REALSOFT_MENU_CONTENT) lazyContent: RealsoftMenuContent;\r\n  \r\n    // Whether the menu should overlap its trigger. \r\n    @Input({transform: booleanAttribute}) overlapTrigger: boolean;\r\n  \r\n    // Whether the menu has a backdrop. \r\n    @Input({transform: (value: any) => (value == null ? null : booleanAttribute(value))}) hasBackdrop?: boolean;\r\n  \r\n    /**\r\n     * This method takes classes set on the host mat-menu element and applies them on the\r\n     * menu template that displays in the overlay container.  Otherwise, it's difficult\r\n     * to style the containing menu from outside the component.\r\n     * @param classes list of class names\r\n     */\r\n    @Input('class')\r\n    set panelClass(classes: string) {\r\n      const previousPanelClass = this._previousPanelClass;\r\n      const newClassList = {...this._classList};\r\n  \r\n      if (previousPanelClass && previousPanelClass.length) {\r\n        previousPanelClass.split(' ').forEach((className: string) => {\r\n          newClassList[className] = false;\r\n        });\r\n      }\r\n  \r\n      this._previousPanelClass = classes;\r\n  \r\n      if (classes && classes.length) {\r\n        classes.split(' ').forEach((className: string) => {\r\n          newClassList[className] = true;\r\n        });\r\n  \r\n        this.elementRef.nativeElement.className = '';\r\n      }\r\n  \r\n      this._classList = newClassList;\r\n    }\r\n    private _previousPanelClass: string;\r\n  \r\n  \r\n    // Event emitted when the menu is closed.\r\n    @Output() readonly closed: EventEmitter<RealsoftMenuCloseReason> = new EventEmitter<RealsoftMenuCloseReason>();\r\n  \r\n    @Output() readonly close: EventEmitter<RealsoftMenuCloseReason> = this.closed;\r\n  \r\n    readonly panelId: string = inject(UniqueIdGeneratorService).generateID('realsoft-menu-panel-');\r\n  \r\n    defaultOptions = inject<RealsoftMenuDefaultOptions>(REALSOFT_MENU_DEFAULT_OPTIONS);\r\n  \r\n    constructor() {\r\n      this._animationsDisabled = this._animationModule === 'NoopAnimations';\r\n      if(this.defaultOptions) {\r\n        this.overlayPanelClass = this.defaultOptions.overlayPanelClass || '';\r\n        this._xPosition = this.defaultOptions.xPosition;\r\n        this._yPosition = this.defaultOptions.yPosition;\r\n        this.backdropClass = this.defaultOptions.backdropClass;\r\n        this.overlapTrigger = this.defaultOptions.overlapTrigger;\r\n        this.hasBackdrop = this.defaultOptions.hasBackdrop;\r\n      }\r\n    }\r\n  \r\n    ngOnInit() {\r\n      this.setPositionClasses();\r\n    }\r\n  \r\n    ngAfterContentInit() {\r\n      this.updateDirectDescendants();\r\n      this._keyManager = new FocusKeyManager(this._directDescendantMenuItems)\r\n        .withWrap()\r\n        .withTypeAhead()\r\n        .withHomeAndEnd();\r\n      this._keyManager.tabOut.subscribe(() => this.closed.emit('tab'));\r\n  \r\n      // If a user manually (programmatically) focuses a menu item, we need to reflect that focus\r\n      // change back to the key manager. Note that we don't need to unsubscribe here because _focused\r\n      // is internal and we know that it gets completed on destroy.\r\n      this._directDescendantMenuItems.changes\r\n        .pipe(\r\n          startWith(this._directDescendantMenuItems),\r\n          switchMap(items => merge(...items.map((item: RealsoftMenuItem) => item._currentlyFocused))),\r\n        )\r\n        .subscribe(focusedItem => this._keyManager.updateActiveItem(focusedItem as RealsoftMenuItem));\r\n  \r\n      this._directDescendantMenuItems.changes.subscribe((itemsList: QueryList<RealsoftMenuItem>) => {\r\n        const manager = this._keyManager;\r\n  \r\n        if (this._panelAnimationState === 'enter' && manager.activeItem?._currentlyFocused) {\r\n          const items = itemsList.toArray();\r\n          const index = Math.max(0, Math.min(items.length - 1, manager.activeItemIndex || 0));\r\n  \r\n          if (items[index] && !items[index].disabled) {\r\n            manager.setActiveItem(index);\r\n          } else {\r\n            manager.setNextItemActive();\r\n          }\r\n        }\r\n      });\r\n    }\r\n  \r\n   \r\n  \r\n    // Stream that emits whenever the hovered menu item changes.\r\n    _hovered(): Observable<RealsoftMenuItem> {\r\n      const itemChanges = this._directDescendantMenuItems.changes as Observable<QueryList<RealsoftMenuItem>>;\r\n      return itemChanges.pipe(\r\n        startWith(this._directDescendantMenuItems),\r\n        switchMap(items => merge(...items.map((item: RealsoftMenuItem) => item.currentlyHovered))),\r\n      ) as Observable<RealsoftMenuItem>;\r\n    }\r\n  \r\n  \r\n    addItem(_item: RealsoftMenuItem) {}\r\n  \r\n    removeItem(_item: RealsoftMenuItem) {}\r\n  \r\n    /** Handle a keyboard event from the menu, delegating to the appropriate action. */\r\n  \r\n    handleKeydown(event: KeyboardEvent): void {\r\n      const { key, keyCode } = event;\r\n      const manager = this._keyManager;\r\n    \r\n      if (key === 'Escape' && !hasModifierKey(event)) {\r\n        event.preventDefault();\r\n        this.closed.emit('keydown');\r\n        return;\r\n      }\r\n    \r\n      if ((key === 'ArrowLeft' && this.parentMenu && this.direction === 'ltr') ||\r\n          (key === 'ArrowRight' && this.parentMenu && this.direction === 'rtl')) {\r\n        this.closed.emit('keydown');\r\n        return;\r\n      }\r\n    \r\n      if (key === 'ArrowUp' || key === 'ArrowDown') {\r\n        manager.setFocusOrigin('keyboard');\r\n      }\r\n    \r\n      manager.onKeydown(event);\r\n    }\r\n  \r\n  \r\n    focusFirstItem(origin: FocusOrigin = 'program'): void {\r\n      // Ensure previous focus reference is cleaned up.\r\n      this._firstItemFocusRef?.destroy();\r\n    \r\n      // Wait for the next microtask to ensure rendering is complete before setting focus.\r\n      Promise.resolve().then(() => {\r\n        const menuPanel = this._resolvePanel();\r\n    \r\n        if (!menuPanel || menuPanel.contains(document.activeElement)) {\r\n          return; // Avoid overriding focus if something is already focused.\r\n        }\r\n    \r\n        const manager = this._keyManager;\r\n        manager.setFocusOrigin(origin).setFirstItemActive();\r\n    \r\n        // If no item is active (all are disabled), focus the menu panel itself.\r\n        if (!manager.activeItem && menuPanel) {\r\n          menuPanel.focus();\r\n        }\r\n      });\r\n    }\r\n  \r\n    // Resets the active item in the menu. This is used when the menu is opened, allowing the user to start from the first option when pressing the down arrow.\r\n    resetActiveItem() {\r\n      this._keyManager.setActiveItem(-1);\r\n    }\r\n  \r\n    // Adds classes to the menu panel based on its position.\r\n    setPositionClasses(posX: RealsoftMenuPositionX = this.xPosition, posY: RealsoftMenuPositionY = this.yPosition) {\r\n      this._classList = {\r\n        ...this._classList,\r\n        ['realsoft-menu-before']: posX === 'before',\r\n        ['realsoft-menu-after']: posX === 'after',\r\n        ['realsoft-menu-above']: posY === 'above',\r\n        ['realsoft-menu-below']: posY === 'below',\r\n      };\r\n  \r\n      this._changeDetectorRef.markForCheck();\r\n    }\r\n  \r\n    // Detects if an Animation is Exiting (EXIT_ANIMATION) or Entering (ENTER_ANIMATION).\r\n    protected onAnimationDone(state: string): void {\r\n      const isExiting = state === EXIT_ANIMATION;\r\n    \r\n      // If the animation is an exit, it clears any existing timeout (_exitFallbackTimeout).\r\n      if (isExiting) {\r\n        clearTimeout(this._exitFallbackTimeout);\r\n        this._exitFallbackTimeout = undefined;\r\n      }\r\n    \r\n      // Emits an Event When Animation is Done:\r\n      if (isExiting || state === ENTER_ANIMATION) {\r\n        this._animationDone.next(isExiting ? 'void' : 'enter'); // If the animation is exiting, it emits 'void'. If the animation is entering, it emits 'enter'.\r\n        this._isAnimating = false; // Marks _isAnimating as false to indicate that animation is complete.\r\n      }\r\n    }\r\n  \r\n  \r\n    // Detects the start of an animation\r\n    protected onAnimationStart(state: string) {\r\n      if (state === ENTER_ANIMATION || state === EXIT_ANIMATION) {\r\n        this._isAnimating = true;\r\n      }\r\n    }\r\n  \r\n    openMenuState(isOpen: boolean): void {\r\n      //Setting the animation state for the panel\r\n      //Adjusts the _panelAnimationState based on whether the panel is opening ('enter') or closing ('void').\r\n      this._panelAnimationState = isOpen ? 'enter' : 'void';\r\n    \r\n      if (isOpen) {\r\n        // If the panel is opening and the first item is focused (_keyManager.activeItemIndex === 0), it scrolls the menu panel to the top immediately to avoid focus issues during animation.\r\n        if (this._keyManager.activeItemIndex === 0) {\r\n          const menuPanel = this._resolvePanel();\r\n          menuPanel?.scrollTo({ top: 0, behavior: 'instant' });\r\n        }\r\n      } else if (!this._animationsDisabled) {\r\n        // If the panel is closing and animations are not disabled, it sets a fallback timer for when the animation doesn't complete within a reasonable time (10ms).\r\n        this._exitFallbackTimeout = setTimeout(() => this.onAnimationDone(EXIT_ANIMATION), 10); // This ensures that the exit animation completes and triggers the cleanup logic\r\n      }\r\n    \r\n      // Simulate animation events if animations are disabled.\r\n      if (this._animationsDisabled) {\r\n        setTimeout(() => {\r\n          this.onAnimationDone(isOpen ? ENTER_ANIMATION : EXIT_ANIMATION);\r\n        });\r\n      }\r\n    \r\n      // Mark the component for change detection.\r\n      this._changeDetectorRef.markForCheck();\r\n    }\r\n    \r\n  \r\n    // This function listens for changes in the list of items (_menuItems), which is a collection of RealsoftMenuItem instances.\r\n    private updateDirectDescendants(): void {\r\n      // The pipe(startWith(this._allItems)) ensures that it immediately emits the current list of items when the subscription begins, rather than waiting for the first update.\r\n      this._menuItems.changes\r\n        .pipe(startWith(this._menuItems)) // Ensure the first emission includes the current state\r\n        .subscribe((items: QueryList<RealsoftMenuItem>) => {\r\n          const directDescendants = items.filter(item => item._parentMenu === this); // It filters the items to find those that have _parentMenu equal to this, i.e., it identifies the direct descendants of the current menu.\r\n          this._directDescendantMenuItems.reset(directDescendants); // Resets the _directDescendantMenuItems collection with the filtered direct descendants.\r\n          this._directDescendantMenuItems.notifyOnChanges(); // Finally, it notifies the system that changes have occurred with notifyOnChanges(), ensuring that any observers of _directDescendantMenuItems are updated with the new set of direct descendants.\r\n        });\r\n    }\r\n    \r\n    // Gets the menu panel DOM node. \r\n    private _resolvePanel(): HTMLElement | null {\r\n      let menuPanel: HTMLElement | null = null;\r\n  \r\n      if (this._directDescendantMenuItems.length) {\r\n        menuPanel = this._directDescendantMenuItems.first!.menuHostElement().closest('[role=\"menu\"]');\r\n      }\r\n  \r\n      return menuPanel;\r\n    }\r\n  \r\n    ngOnDestroy() {\r\n      this._keyManager?.destroy();\r\n      this._directDescendantMenuItems.destroy();\r\n      this.closed.complete();\r\n      this._firstItemFocusRef?.destroy();\r\n      clearTimeout(this._exitFallbackTimeout);\r\n    }\r\n  }","<ng-template>\r\n    <div\r\n      class=\"realsoft-menu-panel\"\r\n      [id]=\"panelId\"\r\n      [class]=\"_classList\"\r\n      [class.realsoftmenu-panel-animations-disabled]=\"_animationsDisabled\"\r\n      [class.realsoftmenu-panel-exit-animation]=\"_panelAnimationState === 'void'\"\r\n      [class.realsoftmenu-panel-animating]=\"_isAnimating\"\r\n      (click)=\"closed.emit('click')\"\r\n      tabindex=\"-1\"\r\n      role=\"menu\"\r\n      (animationstart)=\"onAnimationStart($event.animationName)\"\r\n      (animationend)=\"onAnimationDone($event.animationName)\"\r\n      (animationcancel)=\"onAnimationDone($event.animationName)\"\r\n      [attr.aria-label]=\"ariaLabel || null\"\r\n      [attr.aria-labelledby]=\"ariaLabelledby || null\"\r\n      [attr.aria-describedby]=\"ariaDescribedby || null\">\r\n      <div class=\"realsoft-menu-content\">\r\n        <ng-content></ng-content>\r\n      </div>\r\n    </div>\r\n  </ng-template>","import {\r\n    FocusMonitor,\r\n    FocusOrigin,\r\n    isFakeMousedownFromScreenReader,\r\n    isFakeTouchstartFromScreenReader,\r\n  } from '@angular/cdk/a11y';\r\n  import {Direction, Directionality} from '@angular/cdk/bidi';\r\n  import {ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE} from '@angular/cdk/keycodes';\r\n  import {\r\n    FlexibleConnectedPositionStrategy,\r\n    HorizontalConnectionPos,\r\n    Overlay,\r\n    OverlayConfig,\r\n    OverlayRef,\r\n    VerticalConnectionPos,\r\n  } from '@angular/cdk/overlay';\r\n  import {TemplatePortal} from '@angular/cdk/portal';\r\n  import {\r\n    AfterContentInit,\r\n    ANIMATION_MODULE_TYPE,\r\n    ChangeDetectorRef,\r\n    Directive,\r\n    ElementRef,\r\n    EventEmitter,\r\n    inject,\r\n    Input,\r\n    NgZone,\r\n    OnDestroy,\r\n    Output,\r\n    Renderer2,\r\n    ViewContainerRef,\r\n  } from '@angular/core';\r\n  import {merge, Observable, of as observableOf, Subscription} from 'rxjs';\r\n  import {filter, take, takeUntil} from 'rxjs/operators';\r\n  import { RealsoftMenu } from './menu';\r\n  import { RealsoftMenuItem } from './menu-item';\r\n  import { REALSOFT_MENU_PANEL, REALSOFT_MENU_SCROLL_STRATEGY, RealsoftMenuCloseReason, RealsoftMenuPanel, RealsoftMenuPositionX, RealsoftMenuPositionY } from './models';\r\n  import { realsoftMenuRecursiveError } from './errors';\r\n  \r\n  /** Options for binding a passive event listener. */\r\n  const passiveEventListenerOptions = {passive: true};\r\n  \r\n  \r\n  export const MENU_PANEL_TOP_PADDING = 8;\r\n  \r\n  // Mapping between menu panels and the last trigger that opened them\r\n  const PANELS_TO_TRIGGERS = new Map<RealsoftMenuPanel, RealsoftMenuTrigger>();\r\n  \r\n  @Directive({\r\n    selector: `[realsoft-menu-trigger-for], [realsoftMenuTriggerFor]`,\r\n    exportAs: 'realsoftMenuTrigger',\r\n    host: {\r\n      'class': 'realsoft-menu-trigger',\r\n      '[attr.aria-haspopup]': 'menu ? \"menu\" : null',\r\n      '[attr.aria-expanded]': 'menuOpen',\r\n      '[attr.aria-controls]': 'menuOpen ? menu?.panelId : null',\r\n      '(click)': '_handleClick($event)',\r\n      '(mousedown)': '_handleMousedown($event)',\r\n      '(keydown)': '_handleKeydown($event)',\r\n    },\r\n    standalone: true,\r\n  })\r\n  export class RealsoftMenuTrigger implements AfterContentInit, OnDestroy {\r\n    private _overlay = inject(Overlay);\r\n    private _element = inject<ElementRef<HTMLElement>>(ElementRef);\r\n    private _viewContainerRef = inject(ViewContainerRef);\r\n    private _menuItemInstance = inject(RealsoftMenuItem, {optional: true, self: true})!;\r\n    private _dir = inject(Directionality, {optional: true});\r\n    private _focusMonitor = inject(FocusMonitor);\r\n    private _ngZone = inject(NgZone);\r\n    private _scrollStrategy = inject(REALSOFT_MENU_SCROLL_STRATEGY);\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _animationModule = inject(ANIMATION_MODULE_TYPE, {optional: true});\r\n    private _animationsDisabled : boolean;\r\n    private _cleanupTouchstart: () => void;\r\n  \r\n    private _portal: TemplatePortal;\r\n    private _overlayRef: OverlayRef | null = null;\r\n    private _menuOpen: boolean = false;\r\n    private _closingActionsSubscription = new Subscription();\r\n    private _hoverSubscription = new Subscription();\r\n    private _menuCloseSubscription = new Subscription();\r\n    private _pendingRemoval: Subscription | undefined;\r\n    private _menu: RealsoftMenuPanel | null;\r\n    private _parentMenu: RealsoftMenu | undefined;\r\n    private _parentInnerPadding: number | undefined;\r\n    _openedBy: Exclude<FocusOrigin, 'program' | null> | undefined = undefined;\r\n  \r\n  \r\n    // References the menu instance that the trigger is associated with. \r\n    @Input('realsoftMenuTriggerFor')\r\n    get menu(): RealsoftMenuPanel | null {\r\n      return this._menu;\r\n    }\r\n    set menu(menu: RealsoftMenuPanel | null) {\r\n      if (menu === this._menu) {\r\n        return; // Early Exit\r\n      }\r\n  \r\n      this._menu = menu;\r\n      this._menuCloseSubscription.unsubscribe();\r\n  \r\n      if (menu) {\r\n        if (menu === this._parentMenu) {\r\n          realsoftMenuRecursiveError();\r\n        }\r\n  \r\n        if (menu.close) {\r\n          this._menuCloseSubscription = menu.close.subscribe((reason: RealsoftMenuCloseReason) => {\r\n            this._destroyMenu(reason);\r\n  \r\n            // If a click closed the menu, we should close the entire chain of nested menus.\r\n            if ((reason === 'click' || reason === 'tab') && this._parentMenu) {\r\n              this._parentMenu.closed.emit(reason);\r\n            }\r\n          });\r\n        }\r\n      }\r\n  \r\n      this._menuItemInstance?.setTriggersSubmenu(this.triggersSubmenu());\r\n    }\r\n    \r\n  \r\n    // Data to be passed along to any lazily-rendered content. \r\n    @Input('realsoftMenuTriggerData') menuData: any;\r\n  \r\n    // Whether focus should be restored when the menu is closed.\r\n    @Input('realsoftMenuTriggerRestoreFocus') restoreFocus: boolean = true;\r\n  \r\n    // Event emitted when the associated menu is opened.\r\n    @Output() readonly menuOpened: EventEmitter<void> = new EventEmitter<void>();\r\n  \r\n    // Event emitted when the associated menu is closed.\r\n    @Output() readonly menuClosed: EventEmitter<void> = new EventEmitter<void>();\r\n  \r\n  \r\n    constructor() {\r\n      const parentMenu = inject<RealsoftMenuPanel>(REALSOFT_MENU_PANEL, {optional: true});\r\n      const renderer = inject(Renderer2);\r\n      this._animationsDisabled = this._animationModule === 'NoopAnimations';\r\n  \r\n      this._parentMenu = parentMenu instanceof RealsoftMenu ? parentMenu : undefined;\r\n      this._cleanupTouchstart = renderer.listen(\r\n        this._element.nativeElement,\r\n        'touchstart',\r\n        (event: TouchEvent) => {\r\n          if (!isFakeTouchstartFromScreenReader(event)) {\r\n            this._openedBy = 'touch';\r\n          }\r\n        }\r\n      );\r\n    }\r\n  \r\n    ngAfterContentInit() {\r\n      this._handleHover();\r\n    }\r\n  \r\n    ngOnDestroy() {\r\n      if (this.menu && this._ownsMenu(this.menu)) {\r\n        PANELS_TO_TRIGGERS.delete(this.menu);\r\n      }\r\n  \r\n      this._cleanupTouchstart();\r\n      this._pendingRemoval?.unsubscribe();\r\n      this._menuCloseSubscription.unsubscribe();\r\n      this._closingActionsSubscription.unsubscribe();\r\n      this._hoverSubscription.unsubscribe();\r\n  \r\n      if (this._overlayRef) {\r\n        this._overlayRef.dispose();\r\n        this._overlayRef = null;\r\n      }\r\n    }\r\n  \r\n    // The text direction of the containing app.\r\n    get dir(): Direction {\r\n      return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\r\n    }\r\n  \r\n    // Whether the menu is open \r\n    get menuOpen(): boolean {\r\n      return this._menuOpen;\r\n    }\r\n  \r\n    // Whether the menu triggers a sub-menu or a top-level one.\r\n    triggersSubmenu(): boolean {\r\n      return !!(this._menuItemInstance && this._parentMenu && this.menu);\r\n    }\r\n  \r\n    // Toggles the menu between the open and closed states.\r\n    toggleMenu(): void {\r\n      return this._menuOpen ? this.closeMenu() : this.openMenu();\r\n    }\r\n  \r\n    // Opens the menu.\r\n    openMenu(): void {\r\n      const menu = this.menu;\r\n  \r\n      if (this._menuOpen || !menu) {\r\n        return; //Early exit if the menu is aloready opened or the menu doesn't exist\r\n      }\r\n  \r\n      this._pendingRemoval?.unsubscribe();\r\n      const previousTrigger = PANELS_TO_TRIGGERS.get(menu);\r\n      PANELS_TO_TRIGGERS.set(menu, this);\r\n  \r\n      // If the same menu is currently attached to another trigger,\r\n      // we need to close it so it doesn't end up in a broken state.\r\n      if (previousTrigger && previousTrigger !== this) {\r\n        previousTrigger.closeMenu();\r\n      }\r\n  \r\n      const overlayRef = this._createOverlay(menu);\r\n      const overlayConfig = overlayRef.getConfig();\r\n      const positionStrategy = overlayConfig.positionStrategy as FlexibleConnectedPositionStrategy;\r\n  \r\n      this._setPosition(menu, positionStrategy);\r\n      overlayConfig.hasBackdrop =\r\n        menu.hasBackdrop == null ? !this.triggersSubmenu() : menu.hasBackdrop;\r\n  \r\n      // We need the `hasAttached` check for the case where the user kicked off a removal animation,\r\n      // but re-entered the menu. Re-attaching the same portal will trigger an error otherwise.\r\n      if (!overlayRef.hasAttached()) {\r\n        overlayRef.attach(this._getPortal(menu));\r\n        menu.lazyContent?.attach(this.menuData);\r\n      }\r\n  \r\n      this._closingActionsSubscription = this._menuClosingActions().subscribe(() => this.closeMenu());\r\n      menu.parentMenu = this.triggersSubmenu() ? this._parentMenu : undefined;\r\n      menu.direction = this.dir;\r\n      menu.focusFirstItem(this._openedBy || 'program');\r\n      this._setIsMenuOpen(true);\r\n  \r\n      if (menu instanceof RealsoftMenu) {\r\n        menu.openMenuState(true);\r\n        menu._directDescendantMenuItems.changes.pipe(takeUntil(menu.closed)).subscribe(() => {\r\n          // Re-adjust the position without locking when the amount of items\r\n          // changes so that the overlay is allowed to pick a new optimal position.\r\n          positionStrategy.withLockedPosition(false).reapplyLastPosition();\r\n          positionStrategy.withLockedPosition(true);\r\n        });\r\n      }\r\n    }\r\n  \r\n    // Closes the menu.\r\n    closeMenu(): void {\r\n      this.menu?.close.emit();\r\n    }\r\n  \r\n  \r\n    focus(origin?: FocusOrigin, options?: FocusOptions) {\r\n      if (this._focusMonitor && origin) {\r\n        this._focusMonitor.focusVia(this._element, origin, options);\r\n      } else {\r\n        this._element.nativeElement.focus(options);\r\n      }\r\n    }\r\n  \r\n    // Updates the position of the menu to ensure that it fits all options within the viewport\r\n    updatePosition(): void {\r\n      this._overlayRef?.updatePosition();\r\n    }\r\n  \r\n    // Closes the menu and does the necessary cleanup.\r\n    private _destroyMenu(reason: RealsoftMenuCloseReason) {\r\n      const overlayRef = this._overlayRef;\r\n      const menu = this._menu;\r\n  \r\n      if (!overlayRef || !this.menuOpen) {\r\n        return; // Early Exit\r\n      }\r\n  \r\n      this._closingActionsSubscription.unsubscribe();\r\n      this._pendingRemoval?.unsubscribe();\r\n  \r\n      if (menu instanceof RealsoftMenu && this._ownsMenu(menu)) {\r\n        this._pendingRemoval = menu._animationDone.pipe(take(1)).subscribe(() => {\r\n          overlayRef.detach();\r\n          menu.lazyContent?.detach();\r\n        });\r\n        menu.openMenuState(false);\r\n      } else {\r\n        overlayRef.detach();\r\n        menu?.lazyContent?.detach();\r\n      }\r\n  \r\n      if (menu && this._ownsMenu(menu)) {\r\n        PANELS_TO_TRIGGERS.delete(menu);\r\n      }\r\n  \r\n      if (this.restoreFocus && (reason === 'keydown' || !this._openedBy || !this.triggersSubmenu())) {\r\n        this.focus(this._openedBy);\r\n      }\r\n  \r\n      this._openedBy = undefined;\r\n      this._setIsMenuOpen(false);\r\n    }\r\n  \r\n    // set state rather than toggle to support triggers sharing a menu\r\n    private _setIsMenuOpen(isOpen: boolean): void {\r\n      if (isOpen !== this._menuOpen) {\r\n        this._menuOpen = isOpen;\r\n        this._menuOpen ? this.menuOpened.emit() : this.menuClosed.emit();\r\n  \r\n        if (this.triggersSubmenu()) {\r\n          this._menuItemInstance.currentlyHighlighted(isOpen);\r\n        }\r\n  \r\n        this._changeDetectorRef.markForCheck();\r\n      }\r\n    }\r\n  \r\n    private _createOverlay(menu: RealsoftMenuPanel): OverlayRef {\r\n      if (!this._overlayRef) {\r\n        const config = this._getOverlayConfig(menu);\r\n        this._subscribeToPositions(\r\n          menu,\r\n          config.positionStrategy as FlexibleConnectedPositionStrategy,\r\n        );\r\n        this._overlayRef = this._overlay.create(config);\r\n        this._overlayRef.keydownEvents().subscribe(event => {\r\n          if (this.menu instanceof RealsoftMenu) {\r\n            this.menu.handleKeydown(event);\r\n          }\r\n        });\r\n      }\r\n  \r\n      return this._overlayRef;\r\n    }\r\n  \r\n    private _getOverlayConfig(menu: RealsoftMenuPanel): OverlayConfig {\r\n      return new OverlayConfig({\r\n        positionStrategy: this._overlay\r\n          .position()\r\n          .flexibleConnectedTo(this._element)\r\n          .withLockedPosition()\r\n          .withGrowAfterOpen()\r\n          .withTransformOriginOn('.realsoft-menu-panel'),\r\n        backdropClass: menu.backdropClass || 'cdk-overlay-transparent-backdrop',\r\n        panelClass: menu.overlayPanelClass,\r\n        scrollStrategy: this._scrollStrategy(),\r\n        direction: this._dir || 'ltr',\r\n      });\r\n    }\r\n  \r\n    private _subscribeToPositions(menu: RealsoftMenuPanel, position: FlexibleConnectedPositionStrategy) {\r\n      if (menu.setPositionClasses) {\r\n        position.positionChanges.subscribe(change => {\r\n          this._ngZone.run(() => {\r\n            const posX: RealsoftMenuPositionX =\r\n              change.connectionPair.overlayX === 'start' ? 'after' : 'before';\r\n            const posY: RealsoftMenuPositionY = change.connectionPair.overlayY === 'top' ? 'below' : 'above';\r\n            menu.setPositionClasses!(posX, posY);\r\n          });\r\n        });\r\n      }\r\n    }\r\n  \r\n    private _setPosition(menu: RealsoftMenuPanel, positionStrategy: FlexibleConnectedPositionStrategy) {\r\n      let [originX, originFallbackX]: HorizontalConnectionPos[] =\r\n        menu.xPosition === 'before' ? ['end', 'start'] : ['start', 'end'];\r\n  \r\n      let [overlayY, overlayFallbackY]: VerticalConnectionPos[] =\r\n        menu.yPosition === 'above' ? ['bottom', 'top'] : ['top', 'bottom'];\r\n  \r\n      let [originY, originFallbackY] = [overlayY, overlayFallbackY];\r\n      let [overlayX, overlayFallbackX] = [originX, originFallbackX];\r\n      let offsetY = 0;\r\n  \r\n      if (this.triggersSubmenu()) {\r\n        // When the menu is a sub-menu, it should always align itself\r\n        // to the edges of the trigger, instead of overlapping it.\r\n        overlayFallbackX = originX = menu.xPosition === 'before' ? 'start' : 'end';\r\n        originFallbackX = overlayX = originX === 'end' ? 'start' : 'end';\r\n  \r\n        if (this._parentMenu) {\r\n          if (this._parentInnerPadding == null) {\r\n            const firstItem = this._parentMenu.items.first;\r\n            this._parentInnerPadding = firstItem ? firstItem._elementRef.nativeElement.offsetTop : 0;\r\n          }\r\n  \r\n          offsetY = overlayY === 'bottom' ? this._parentInnerPadding : -this._parentInnerPadding;\r\n        }\r\n      } else if (!menu.overlapTrigger) {\r\n        originY = overlayY === 'top' ? 'bottom' : 'top';\r\n        originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\r\n      }\r\n  \r\n      positionStrategy.withPositions([\r\n        {originX, originY, overlayX, overlayY, offsetY},\r\n        {originX: originFallbackX, originY, overlayX: overlayFallbackX, overlayY, offsetY},\r\n        {\r\n          originX,\r\n          originY: originFallbackY,\r\n          overlayX,\r\n          overlayY: overlayFallbackY,\r\n          offsetY: -offsetY,\r\n        },\r\n        {\r\n          originX: originFallbackX,\r\n          originY: originFallbackY,\r\n          overlayX: overlayFallbackX,\r\n          overlayY: overlayFallbackY,\r\n          offsetY: -offsetY,\r\n        },\r\n      ]);\r\n    }\r\n  \r\n    /** Returns a stream that emits whenever an action that should close the menu occurs. */\r\n    private _menuClosingActions() {\r\n      const backdrop = this._overlayRef!.backdropClick();\r\n      const detachments = this._overlayRef!.detachments();\r\n      const parentClose = this._parentMenu ? this._parentMenu.closed : observableOf();\r\n      const hover = this._parentMenu\r\n        ? this._parentMenu\r\n            ._hovered()\r\n            .pipe(filter(active => this._menuOpen && active !== this._menuItemInstance))\r\n        : observableOf();\r\n  \r\n      return merge(backdrop, parentClose as Observable<RealsoftMenuCloseReason>, hover, detachments);\r\n    }\r\n  \r\n    /** Handles mouse presses on the trigger. */\r\n    _handleMousedown(event: MouseEvent): void {\r\n      if (!isFakeMousedownFromScreenReader(event)) {\r\n  \r\n        this._openedBy = event.button === 0 ? 'mouse' : undefined;\r\n  \r\n        if (this.triggersSubmenu()) {\r\n          event.preventDefault();\r\n        }\r\n      }\r\n    }\r\n  \r\n    /** Handles key presses on the trigger. */\r\n    _handleKeydown(event: KeyboardEvent): void {\r\n      const keyCode = event.keyCode;\r\n  \r\n      // Pressing enter on the trigger will trigger the click handler later.\r\n      if (keyCode === ENTER || keyCode === SPACE) {\r\n        this._openedBy = 'keyboard';\r\n      }\r\n  \r\n      if (\r\n        this.triggersSubmenu() &&\r\n        ((keyCode === RIGHT_ARROW && this.dir === 'ltr') ||\r\n          (keyCode === LEFT_ARROW && this.dir === 'rtl'))\r\n      ) {\r\n        this._openedBy = 'keyboard';\r\n        this.openMenu();\r\n      }\r\n    }\r\n  \r\n    /** Handles click events on the trigger. */\r\n    _handleClick(event: MouseEvent): void {\r\n      if (this.triggersSubmenu()) {\r\n        // Stop event propagation to avoid closing the parent menu.\r\n        event.stopPropagation();\r\n        this.openMenu();\r\n      } else {\r\n        this.toggleMenu();\r\n      }\r\n    }\r\n  \r\n    /** Handles the cases where the user hovers over the trigger. */\r\n    private _handleHover() {\r\n      // Subscribe to changes in the hovered item in order to toggle the panel.\r\n      if (this.triggersSubmenu() && this._parentMenu) {\r\n        this._hoverSubscription = this._parentMenu._hovered().subscribe(active => {\r\n          if (active === this._menuItemInstance && !active.disabled) {\r\n            this._openedBy = 'mouse';\r\n            this.openMenu();\r\n          }\r\n        });\r\n      }\r\n    }\r\n  \r\n    /** Gets the portal that should be attached to the overlay. */\r\n    private _getPortal(menu: RealsoftMenuPanel): TemplatePortal {\r\n      if (!this._portal || this._portal.templateRef !== menu.templateRef) {\r\n        this._portal = new TemplatePortal(menu.templateRef, this._viewContainerRef);\r\n      }\r\n  \r\n      return this._portal;\r\n    }\r\n  \r\n  \r\n    private _ownsMenu(menu: RealsoftMenuPanel): boolean {\r\n      return PANELS_TO_TRIGGERS.get(menu) === this;\r\n    }\r\n  }","import {\r\n    Directive,\r\n    ElementRef,\r\n    Input,\r\n    OnDestroy,\r\n    OnInit,\r\n    QueryList,\r\n    booleanAttribute,\r\n    inject,\r\n} from '@angular/core';\r\n\r\nexport interface InkBarItem extends OnInit, OnDestroy {\r\n    elementRef: ElementRef<HTMLElement>;\r\n    activateInkBar(previousIndicatorClientRect?: DOMRect): void;\r\n    deactivateInkBar(): void;\r\n    fitInkBarToContent: boolean;\r\n  }\r\n\r\nexport class RealsoftInkBar {\r\n    private _currentItem: InkBarItem | undefined;\r\n  \r\n    constructor(private _items: QueryList<InkBarItem>) {}\r\n  \r\n    hide() {\r\n      this._items.forEach(item => item.deactivateInkBar());\r\n      this._currentItem = undefined;\r\n    }\r\n  \r\n    alignToElement(element: HTMLElement) {\r\n      const correspondingItem = this._items.find(item => item.elementRef.nativeElement === element);\r\n      const currentItem = this._currentItem;\r\n  \r\n      if (correspondingItem === currentItem) {\r\n        return;\r\n      }\r\n  \r\n      currentItem?.deactivateInkBar();\r\n  \r\n      if (correspondingItem) {\r\n        const domRect = currentItem?.elementRef.nativeElement.getBoundingClientRect?.();\r\n  \r\n        correspondingItem.activateInkBar(domRect);\r\n        this._currentItem = correspondingItem;\r\n      }\r\n    }\r\n  }\r\n  \r\n@Directive({\r\n    selector: '[realsoftInkBar]',\r\n    standalone: true,\r\n  })\r\nexport abstract class RealsoftInkBarItem implements OnInit, OnDestroy {\r\n    private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n    private _inkBarElement: HTMLElement | null = null;\r\n    private _inkBarContentElement: HTMLElement | null = null;\r\n    private _fitToContent = false;\r\n    private _currentItem: HTMLElement | null = null;\r\n  \r\n    @Input({ transform: booleanAttribute })\r\n    get fitInkBarToContent(): boolean {\r\n      return this._fitToContent;\r\n    }\r\n    set fitInkBarToContent(newValue: boolean) {\r\n      if (this._fitToContent !== newValue) {\r\n        this._fitToContent = newValue;\r\n        this._appendInkBarElement();\r\n      }\r\n    }\r\n  \r\n    constructor() {}\r\n  \r\n    ngOnInit() {\r\n      this._createInkBarElement();\r\n    }\r\n  \r\n    ngOnDestroy() {\r\n      this._inkBarElement?.remove();\r\n      this._inkBarElement = this._inkBarContentElement = null;\r\n    }\r\n  \r\n    hideInkBar() {\r\n      this._currentItem?.classList.remove('realsoft-tab-indicator--active');\r\n      this._currentItem = null;\r\n    }\r\n  \r\n    alignInkBarToElement(element: HTMLElement) {\r\n      if (this._currentItem === element) {\r\n        return;\r\n      }\r\n  \r\n      this._currentItem?.classList.remove('realsoft-tab-indicator--active');\r\n      const previousIndicatorClientRect = this._currentItem?.getBoundingClientRect();\r\n      this._currentItem = element;\r\n  \r\n      if (previousIndicatorClientRect) {\r\n        this._animateInkBar(previousIndicatorClientRect);\r\n      } else {\r\n        element.classList.add('realsoft-tab-indicator--active');\r\n      }\r\n    }\r\n  \r\n    private _animateInkBar(previousIndicatorClientRect: DOMRect) {\r\n      if (!this._currentItem || !this._inkBarContentElement) return;\r\n      \r\n      const currentClientRect = this._currentItem.getBoundingClientRect();\r\n      const widthDelta = previousIndicatorClientRect.width / currentClientRect.width;\r\n      const xPosition = previousIndicatorClientRect.left - currentClientRect.left;\r\n      \r\n      this._currentItem.classList.add('realsoft-tab-indicator--no-transition');\r\n      this._inkBarContentElement.style.transform = `translateX(${xPosition}px) scaleX(${widthDelta})`;\r\n      \r\n      this._currentItem.getBoundingClientRect();\r\n      \r\n      this._currentItem.classList.remove('realsoft-tab-indicator--no-transition');\r\n      this._currentItem.classList.add('realsoft-tab-indicator--active');\r\n      this._inkBarContentElement.style.transform = '';\r\n    }\r\n  \r\n    private _createInkBarElement() {\r\n      const documentNode = this._elementRef.nativeElement.ownerDocument || document;\r\n      this._inkBarElement = documentNode.createElement('span');\r\n      this._inkBarContentElement = documentNode.createElement('span');\r\n  \r\n      this._inkBarElement.className = 'realsoft-tab-indicator';\r\n      this._inkBarContentElement.className =\r\n        'realsoft-tab-indicator__content realsoft-tab-indicator__content--underline';\r\n  \r\n      this._inkBarElement.appendChild(this._inkBarContentElement);\r\n      this._appendInkBarElement();\r\n    }\r\n\r\n    private _appendInkBarElement() {\r\n      if (!this._inkBarElement) {\r\n        throw new Error('Ink bar element has not been created and cannot be appended');\r\n      }\r\n  \r\n      const parentElement = this._fitToContent\r\n        ? this._elementRef.nativeElement.querySelector('.realsoft-tab__content')\r\n        : this._elementRef.nativeElement;\r\n  \r\n      if (!parentElement) {\r\n        throw new Error('Missing element to host the ink bar');\r\n      }\r\n  \r\n      parentElement.appendChild(this._inkBarElement);\r\n    }\r\n  }\r\n  ","import {Directive, InjectionToken, TemplateRef, inject} from '@angular/core';\r\n\r\nexport const REALSOFT_TAB_CONTENT = new InjectionToken<RealsoftTabContent>('RealsoftTabContent');\r\n\r\n// Decorates the `ng-template` tags and reads out the template from it.\r\n@Directive({\r\n  selector: '[realsoftTabContent]',\r\n  providers: [{provide: REALSOFT_TAB_CONTENT, useExisting: RealsoftTabContent}],\r\n  standalone: true\r\n})\r\nexport class RealsoftTabContent {\r\n  template = inject<TemplateRef<any>>(TemplateRef);\r\n\r\n  constructor(...args: unknown[]);\r\n  constructor() {}\r\n}","import {Directive, InjectionToken, inject} from '@angular/core';\r\nimport {CdkPortal} from '@angular/cdk/portal';\r\n\r\nexport const REALSOFT_TAB_LABEL = new InjectionToken<RealsoftTabLabel>('RealsoftTabLabel');\r\n\r\nexport const REALSOFT_TAB = new InjectionToken<any>('REALSOFT_TAB');\r\n\r\n@Directive({\r\n  selector: '[realsoft-tab-label], [realsoftTabLabel]',\r\n  providers: [{provide: REALSOFT_TAB_LABEL, useExisting: RealsoftTabLabel}],\r\n  standalone: true\r\n})\r\nexport class RealsoftTabLabel extends CdkPortal {\r\n  _tab = inject(REALSOFT_TAB, {optional: true});\r\n}","import {\r\n    ChangeDetectionStrategy,\r\n    Component,\r\n    ContentChild,\r\n    InjectionToken,\r\n    Input,\r\n    OnChanges,\r\n    OnDestroy,\r\n    OnInit,\r\n    SimpleChanges,\r\n    TemplateRef,\r\n    ViewChild,\r\n    ViewContainerRef,\r\n    ViewEncapsulation,\r\n    booleanAttribute,\r\n    inject,\r\n  } from '@angular/core';\r\n  import { RealsoftTabContent } from './tab-content';\r\n  import { REALSOFT_TAB, RealsoftTabLabel } from './tab-label';\r\n  import { TemplatePortal } from '@angular/cdk/portal';\r\n  import { Subject } from 'rxjs';\r\n    \r\n  \r\n  export const REALSOFT_TAB_GROUP = new InjectionToken<any>('REALSOFT_TAB_GROUP');\r\n    \r\n  @Component({\r\n    selector: 'realsoft-tab',\r\n    templateUrl: 'tab.html',\r\n    changeDetection: ChangeDetectionStrategy.Default,\r\n    encapsulation: ViewEncapsulation.None,\r\n    exportAs: 'realsoftTab',\r\n    standalone: true,\r\n    providers: [{provide: REALSOFT_TAB, useExisting: RealsoftTab}],\r\n    host: {\r\n      'hidden': '',\r\n      '[attr.id]': 'null',\r\n    },\r\n  })\r\n  export class RealsoftTab implements OnInit, OnChanges, OnDestroy {\r\n    private _viewContainerRef = inject(ViewContainerRef);\r\n    _closestTabGroup = inject(REALSOFT_TAB_GROUP, {optional: true});\r\n    private _templateLabel: RealsoftTabLabel;\r\n    \r\n    // whether the tab is disabled\r\n    @Input({transform: booleanAttribute}) disabled: boolean = false;\r\n    \r\n    // Content for the tab label given by `<ng-template realsoft-tab-label>`\r\n    @ContentChild(RealsoftTabLabel)\r\n    get templateLabel(): RealsoftTabLabel {\r\n      return this._templateLabel;\r\n    }\r\n    set templateLabel(value: RealsoftTabLabel) {\r\n      if (value && value._tab === this) {\r\n        this._templateLabel = value;\r\n      }\r\n    }\r\n  \r\n    //For lazy loading\r\n    @ContentChild(RealsoftTabContent, {read: TemplateRef, static: true}) tab_content: TemplateRef<any> = undefined!;\r\n  \r\n    @ViewChild(TemplateRef, {static: true}) _implicitContent: TemplateRef<any>;\r\n    \r\n    // Plain text label for the tab, used when there is no template label.\r\n    @Input('label') textLabel: string = '';\r\n    \r\n    // Aria label for the tab\r\n    @Input('aria-label') ariaLabel: string;\r\n    \r\n    @Input('aria-labelledby') ariaLabelledby: string;\r\n    \r\n    // Classes to be passed to the tab label inside the realsoft-tab-header container.\r\n    @Input() labelClass: string | string[];\r\n    \r\n    // Classes to be passed to the tab realsoft-tab-body container. \r\n    @Input() bodyClass: string | string[];\r\n    \r\n    @Input() id: string | null = null;\r\n    \r\n    // Portal that will be the hosted content of the tab\r\n    private _contentPortal: TemplatePortal | null = null;\r\n    \r\n    get content(): TemplatePortal | null {\r\n      return this._contentPortal;\r\n    }\r\n  \r\n    // Emits whenever the internal state of the tab changes.\r\n    readonly _stateChanges = new Subject<void>();\r\n    \r\n    // The relatively indexed position where 0 represents the center, negative is left, and positive represents the right.\r\n    position: number | null = null;\r\n    \r\n    origin: number | null = null;\r\n    \r\n    isActive = false; // Whether the tab is currently active.\r\n    \r\n  \r\n    constructor() {}\r\n    \r\n    ngOnChanges(changes: SimpleChanges): void {\r\n      if (changes.hasOwnProperty('textLabel') || changes.hasOwnProperty('disabled')) {\r\n        this._stateChanges.next();\r\n      }\r\n    }\r\n    \r\n    ngOnDestroy(): void {\r\n      this._stateChanges.complete();\r\n    }\r\n    \r\n    ngOnInit(): void {\r\n      this._contentPortal = new TemplatePortal(\r\n        this.tab_content || this._implicitContent,\r\n        this._viewContainerRef,\r\n      );\r\n    }\r\n  }","\r\n<ng-template><ng-content></ng-content></ng-template>","import {Direction, Directionality} from '@angular/cdk/bidi';\r\nimport {CdkPortalOutlet, TemplatePortal} from '@angular/cdk/portal';\r\nimport {CdkScrollable} from '@angular/cdk/scrolling';\r\nimport {\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ComponentFactoryResolver,\r\n  Directive,\r\n  ElementRef,\r\n  EventEmitter,\r\n  forwardRef,\r\n  Inject,\r\n  Injector,\r\n  Input,\r\n  NgZone,\r\n  OnDestroy,\r\n  OnInit,\r\n  Output,\r\n  Renderer2,\r\n  ViewChild,\r\n  ViewContainerRef,\r\n  ViewEncapsulation,\r\n  afterNextRender,\r\n  inject,\r\n  ANIMATION_MODULE_TYPE\r\n} from '@angular/core';\r\nimport {DOCUMENT} from '@angular/common';\r\nimport {Subscription} from 'rxjs';\r\nimport {startWith} from 'rxjs/operators';\r\n\r\n// Forward reference to avoid circular dependency\r\nconst RealsoftTabBodyRef = forwardRef(() => RealsoftTabBody);\r\n\r\n@Directive({\r\n  selector: '[realsoftTabBodyHost]',\r\n  standalone: true,\r\n})\r\nexport class RealsoftTabBodyPortal extends CdkPortalOutlet implements OnInit, OnDestroy {\r\n  private _host = inject(RealsoftTabBodyRef);\r\n\r\n  private _centeringSub = Subscription.EMPTY;\r\n  private _leavingSub = new Subscription();\r\n\r\n  constructor(\r\n    _componentFactoryResolver: ComponentFactoryResolver, \r\n    _viewContainerRef: ViewContainerRef, \r\n    @Inject(DOCUMENT) _document?: any\r\n  ) {\r\n    super(_componentFactoryResolver, _viewContainerRef, _document);\r\n  }\r\n  override ngOnInit(): void {\r\n    super.ngOnInit();\r\n\r\n    this._centeringSub = this._host._beforeCentering\r\n      .pipe(startWith(this._host._isCenterPosition()))\r\n      .subscribe((isCentering: boolean) => {\r\n        if (this._host._content && isCentering && !this.hasAttached()) {\r\n          this.attach(this._host._content);\r\n        }\r\n      });\r\n\r\n    this._leavingSub = this._host._afterLeavingCenter.subscribe(() => {\r\n      if (!this._host.preserveContent) {\r\n        this.detach();\r\n      }\r\n    });\r\n  }\r\n\r\n  override ngOnDestroy(): void {\r\n    super.ngOnDestroy();\r\n    this._centeringSub.unsubscribe();\r\n    this._leavingSub.unsubscribe();\r\n  }\r\n}\r\n\r\n\r\nexport type RealsoftTabBodyPositionState = 'left' | 'center' | 'right';\r\n\r\n\r\nexport type RealsoftTabBodyOriginState = 'left' | 'right';\r\n\r\n@Component({\r\n  selector: 'realsoft-tab-body',\r\n  templateUrl: 'tab-body.html',\r\n  styleUrl: 'tabs.scss',\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.Default,\r\n  standalone: true,\r\n  host: {\r\n    class: 'realsoft-tab-body',\r\n    '[attr.inert]': '_position === \"center\" ? null : \"\"',\r\n  },\r\n  imports: [RealsoftTabBodyPortal, CdkScrollable],\r\n})\r\nexport class RealsoftTabBody implements OnInit, OnDestroy {\r\n  private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n  private _dir = inject(Directionality, { optional: true });\r\n  private _ngZone = inject(NgZone);\r\n  private _injector = inject(Injector);\r\n  private _renderer = inject(Renderer2);\r\n  private _fallbackTimer: ReturnType<typeof setTimeout>;\r\n  private _eventCleanups: (() => void)[] = [];\r\n  private _initialized = false;\r\n  private _positionIndex = 0;\r\n  private _dirChangeSubscription = Subscription.EMPTY;\r\n\r\n  _position: RealsoftTabBodyPositionState;\r\n  protected _previousPosition?: RealsoftTabBodyPositionState;\r\n\r\n  @ViewChild(RealsoftTabBodyPortal) _portalHost!: RealsoftTabBodyPortal;\r\n  @ViewChild('content') _contentElement?: ElementRef<HTMLElement>;\r\n\r\n  @Input('content') _content!: TemplatePortal;\r\n  @Input() preserveContent = false;\r\n\r\n  @Input()\r\n  set position(index: number) {\r\n    this._positionIndex = index;\r\n    this._computePositionAnimationState();\r\n  }\r\n\r\n  @Output() readonly _onCentering = new EventEmitter<number>();\r\n  @Output() readonly _beforeCentering = new EventEmitter<boolean>();\r\n  @Output() readonly _onCentered = new EventEmitter<void>(true);\r\n  readonly _afterLeavingCenter = new EventEmitter<void>();\r\n\r\n  constructor() {\r\n    if (this._dir) {\r\n      const cdr = inject(ChangeDetectorRef);\r\n      this._dirChangeSubscription = this._dir.change.subscribe((dir) => {\r\n        this._computePositionAnimationState(dir);\r\n        cdr.markForCheck();\r\n      });\r\n    }\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this._bindTransitionEvents();\r\n\r\n    if (this._position === 'center') {\r\n      this._setActiveClass(true);\r\n      afterNextRender(\r\n        () => this._onCentering.emit(this._elementRef.nativeElement.clientHeight),\r\n        { injector: this._injector }\r\n      );\r\n    }\r\n\r\n    this._initialized = true;\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    clearTimeout(this._fallbackTimer);\r\n    this._eventCleanups.forEach((cleanup) => cleanup());\r\n    this._dirChangeSubscription.unsubscribe();\r\n  }\r\n\r\n  private _bindTransitionEvents(): void {\r\n    const element = this._elementRef.nativeElement;\r\n\r\n    this._ngZone.runOutsideAngular(() => {\r\n      const onTransitionDone = (event: TransitionEvent) => {\r\n        if (event.target === this._contentElement?.nativeElement) {\r\n          if (event.type === 'transitionend') {\r\n            this._transitionDone();\r\n          }\r\n        }\r\n      };\r\n\r\n      this._eventCleanups = [\r\n        this._renderer.listen(element, 'transitionstart', (event: TransitionEvent) => {\r\n          if (event.target === this._contentElement?.nativeElement) {\r\n            this._transitionStarted();\r\n          }\r\n        }),\r\n        this._renderer.listen(element, 'transitionend', onTransitionDone),\r\n        this._renderer.listen(element, 'transitioncancel', onTransitionDone),\r\n      ];\r\n    });\r\n  }\r\n\r\n\r\n  private _transitionStarted(): void {\r\n    clearTimeout(this._fallbackTimer);\r\n    const isCentering = this._position === 'center';\r\n    this._beforeCentering.emit(isCentering);\r\n\r\n    if (isCentering) {\r\n      this._onCentering.emit(this._elementRef.nativeElement.clientHeight);\r\n    }\r\n  }\r\n\r\n  private _transitionDone(): void {\r\n    if (this._position === 'center') {\r\n      this._onCentered.emit();\r\n    } else if (this._previousPosition === 'center') {\r\n      this._afterLeavingCenter.emit();\r\n    }\r\n  }\r\n\r\n  _setActiveClass(isActive: boolean): void {\r\n    this._elementRef.nativeElement.classList.toggle('realsoft-tab-body-active', isActive);\r\n  }\r\n\r\n  private _getLayoutDirection(): Direction {\r\n    return this._dir?.value === 'rtl' ? 'rtl' : 'ltr';\r\n  }\r\n\r\n  _isCenterPosition(): boolean {\r\n    return this._positionIndex === 0;\r\n  }\r\n\r\n  private _computePositionAnimationState(dir: Direction = this._getLayoutDirection()): void {\r\n    this._previousPosition = this._position;\r\n\r\n    if (this._positionIndex < 0) {\r\n      this._position = dir === 'ltr' ? 'left' : 'right';\r\n    } else if (this._positionIndex > 0) {\r\n      this._position = dir === 'ltr' ? 'right' : 'left';\r\n    } else {\r\n      this._position = 'center';\r\n    }\r\n\r\n    if (\r\n      this._initialized &&\r\n      (this._position === 'center' || this._previousPosition === 'center')\r\n    ) {\r\n      clearTimeout(this._fallbackTimer);\r\n      this._fallbackTimer = this._ngZone.runOutsideAngular(() =>\r\n        setTimeout(() => this._simulateTransitionEvents(), 100)\r\n      );\r\n    }\r\n  }\r\n\r\n  private _simulateTransitionEvents(): void {\r\n    this._transitionStarted();\r\n    afterNextRender(() => this._transitionDone(), { injector: this._injector });\r\n  }\r\n}\r\n","<div class=\"realsoft-tab-body-content\"\r\n     #content\r\n     cdkScrollable\r\n     [class.realsoft-tab-body-content-left]=\"_position === 'left'\"\r\n     [class.realsoft-tab-body-content-right]=\"_position === 'right'\"\r\n>\r\n<ng-template realsoftTabBodyHost></ng-template>\r\n</div>","import {InjectionToken} from '@angular/core';\r\n\r\nexport interface RealsoftTabsConfig {\r\n  animationDuration?: string; // Duration for the tab animation. Must be a valid CSS value (e.g. 600ms).\r\n  disablePagination?: boolean; // Whether pagination should be disabled.\r\n  fitInkBarToContent?: boolean; // Whether the ink bar should fit its width to the size of the tab label content.\r\n  dynamicHeight?: boolean; // Whether the tab group should grow to the size of the active tab.\r\n  contentTabIndex?: number; // `tabindex` to be set on the inner element that wraps the tab content.\r\n  preserveContent?: boolean; // By default tabs remove their content from the DOM while it's off-screen. Setting this to `true` will keep it in the DOM which will prevent elements like iframes and videos from reloading next time it comes back into the view.\r\n  alignTabs?: 'start' | 'center' | 'end'; // Alignment for the tabs label.\r\n}\r\n\r\n//Injection token that can be used to provide the default options the tabs module.\r\nexport const REALSOFT_TABS_CONFIG = new InjectionToken<RealsoftTabsConfig>('REALSOFT_TABS_CONFIG');\r\n\r\n","import { Directive, ElementRef, Input, booleanAttribute, inject } from '@angular/core';\r\nimport { RealsoftInkBarItem } from './ink-bar';\r\n\r\n@Directive({\r\n  selector: '[realsoftTabLabelWrapper]',\r\n  standalone: true,\r\n  host: {\r\n    '[class.realsoft-tab-disabled]': 'disabled',\r\n    '[attr.aria-disabled]': '!!disabled',\r\n  },\r\n})\r\nexport class RealsoftTabLabelWrapper extends RealsoftInkBarItem {\r\n  elementRef = inject(ElementRef);\r\n\r\n  /** Whether the tab is disabled. */\r\n  @Input({transform: booleanAttribute})\r\n  disabled: boolean = false;\r\n\r\n  /** Sets focus on the wrapper element */\r\n  focus(): void {\r\n    this.elementRef.nativeElement.focus();\r\n  }\r\n\r\n  getOffsetLeft(): number {\r\n    return this.elementRef.nativeElement.offsetLeft;\r\n  }\r\n\r\n  getOffsetWidth(): number {\r\n    return this.elementRef.nativeElement.offsetWidth;\r\n  }\r\n  \r\n  // Implement activateInkBar from InkBarItem interface\r\n  activateInkBar(previousIndicatorClientRect?: DOMRect): void {\r\n    this.alignInkBarToElement(this.elementRef.nativeElement);\r\n  }\r\n  \r\n  // Implement deactivateInkBar from InkBarItem interface\r\n  deactivateInkBar(): void {\r\n    this.hideInkBar();\r\n  }\r\n}","import { RealsoftTabLabelWrapper } from './tab-label-wrapper';\r\nimport { CdkObserveContent } from '@angular/cdk/observers';\r\nimport { InkBarItem, RealsoftInkBar, RealsoftInkBarItem } from './ink-bar';\r\nimport {FocusKeyManager, FocusableOption} from '@angular/cdk/a11y';\r\nimport {Direction, Directionality} from '@angular/cdk/bidi';\r\nimport {ENTER, SPACE, hasModifierKey} from '@angular/cdk/keycodes';\r\nimport {SharedResizeObserver} from '@angular/cdk/observers/private';\r\nimport {Platform} from '@angular/cdk/platform';\r\nimport {ViewportRuler} from '@angular/cdk/scrolling';\r\nimport {\r\n  AfterContentChecked,\r\n  AfterContentInit,\r\n  AfterViewInit,\r\n  ANIMATION_MODULE_TYPE,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ContentChildren,\r\n  ViewChild,\r\n  ViewEncapsulation,\r\n  ChangeDetectorRef,\r\n  Directive,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Injector,\r\n  Input,\r\n  NgZone,\r\n  OnDestroy,\r\n  Output,\r\n  QueryList,\r\n  Renderer2,\r\n  afterNextRender,\r\n  booleanAttribute,\r\n  inject,\r\n  numberAttribute,\r\n} from '@angular/core';\r\nimport {EMPTY, Observable, Observer, Subject, merge, of as observableOf, timer} from 'rxjs';\r\nimport {debounceTime, filter, skip, startWith, switchMap, takeUntil} from 'rxjs/operators';\r\n\r\n\r\nexport type ScrollDirection = 'after' | 'before';\r\n\r\nconst HEADER_SCROLL_DELAY = 650;\r\n\r\nconst HEADER_SCROLL_INTERVAL = 100;\r\n\r\nexport type RealsoftPaginatedTabHeaderItem = FocusableOption & {elementRef: ElementRef};\r\n\r\n@Directive()\r\nexport abstract class RealsoftPaginatedTabHeader\r\n  implements AfterContentChecked, AfterContentInit, AfterViewInit, OnDestroy\r\n{\r\n  protected _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n  protected _changeDetectorRef = inject(ChangeDetectorRef);\r\n  private _dir = inject(Directionality, {optional: true});\r\n  private _ngZone = inject(NgZone);\r\n  private _platform = inject(Platform);\r\n  private _sharedResizeObserver = inject(SharedResizeObserver);\r\n  private _injector = inject(Injector);\r\n  private _viewportRuler = inject(ViewportRuler);\r\n  private _renderer = inject(Renderer2);\r\n  private _animationModule = inject(ANIMATION_MODULE_TYPE, {optional: true});\r\n  _animationsDisabled = this._animationModule === 'NoopAnimations';\r\n  private _eventCleanups: (() => void)[];\r\n\r\n  abstract _items: QueryList<RealsoftPaginatedTabHeaderItem>;\r\n  abstract _inkBar: {hide: () => void; alignToElement: (element: HTMLElement) => void};\r\n  abstract _tabListContainer: ElementRef<HTMLElement>;\r\n  abstract _tabList: ElementRef<HTMLElement>;\r\n  abstract _tabListInner: ElementRef<HTMLElement>;\r\n  abstract _nextPaginator: ElementRef<HTMLElement>;\r\n  abstract _previousPaginator: ElementRef<HTMLElement>;\r\n\r\n  private _scrollDistance = 0;\r\n\r\n  private _selectedIndexChanged = false;\r\n\r\n  protected readonly _destroyed = new Subject<void>();\r\n\r\n  _showPaginationControls = false;\r\n\r\n  _disableScrollAfter = true;\r\n\r\n  _disableScrollBefore = true;\r\n\r\n  private _tabLabelCount: number;\r\n\r\n  private _scrollDistanceChanged: boolean;\r\n\r\n  private _keyManager: FocusKeyManager<RealsoftPaginatedTabHeaderItem>;\r\n\r\n  private _currentTextContent: string;\r\n\r\n  private _stopScrolling = new Subject<void>();\r\n\r\n\r\n  @Input({transform: booleanAttribute})\r\n  disablePagination: boolean = false;\r\n\r\n  @Input({transform: numberAttribute})\r\n  get selectedIndex(): number {\r\n    return this._selectedIndex;\r\n  }\r\n  set selectedIndex(v: number) {\r\n    const value = isNaN(v) ? 0 : v;\r\n\r\n    if (this._selectedIndex != value) {\r\n      this._selectedIndexChanged = true;\r\n      this._selectedIndex = value;\r\n\r\n      if (this._keyManager) {\r\n        this._keyManager.updateActiveItem(value);\r\n      }\r\n    }\r\n  }\r\n  private _selectedIndex: number = 0;\r\n\r\n  @Output() readonly selectFocusedIndex: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n  @Output() readonly indexFocused: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n  constructor(...args: unknown[]);\r\n\r\n  constructor() {\r\n    this._eventCleanups = this._ngZone.runOutsideAngular(() => [\r\n      this._renderer.listen(this._elementRef.nativeElement, 'mouseleave', () =>\r\n        this._stopInterval(),\r\n      ),\r\n    ]);\r\n  }\r\n\r\n  protected abstract _itemSelected(event: KeyboardEvent): void;\r\n\r\n  ngAfterViewInit() {\r\n    this._eventCleanups.push(\r\n      this._renderer.listen(\r\n        this._previousPaginator.nativeElement,\r\n        'touchstart',\r\n        () => this._handlePaginatorPress('before')\r\n      ),\r\n      this._renderer.listen(\r\n        this._nextPaginator.nativeElement,\r\n        'touchstart',\r\n        () => this._handlePaginatorPress('after')\r\n      ),\r\n    );\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    const dirChange = this._dir ? this._dir.change : observableOf('ltr');\r\n    const resize = this._sharedResizeObserver\r\n      .observe(this._elementRef.nativeElement)\r\n      .pipe(debounceTime(32), takeUntil(this._destroyed));\r\n    const viewportResize = this._viewportRuler.change(150).pipe(takeUntil(this._destroyed));\r\n\r\n    const realign = () => {\r\n      this.updatePagination();\r\n      this._alignInkBarToSelectedTab();\r\n    };\r\n\r\n    this._keyManager = new FocusKeyManager<RealsoftPaginatedTabHeaderItem>(this._items)\r\n      .withHorizontalOrientation(this._getLayoutDirection())\r\n      .withHomeAndEnd()\r\n      .withWrap()\r\n      .skipPredicate(() => false);\r\n\r\n    this._keyManager.updateActiveItem(this._selectedIndex);\r\n\r\n    afterNextRender(realign, {injector: this._injector});\r\n\r\n    merge(dirChange, viewportResize, resize, this._items.changes, this._itemsResized())\r\n      .pipe(takeUntil(this._destroyed))\r\n      .subscribe(() => {\r\n\r\n        this._ngZone.run(() => {\r\n          Promise.resolve().then(() => {\r\n            this._scrollDistance = Math.max(\r\n              0,\r\n              Math.min(this._getMaxScrollDistance(), this._scrollDistance),\r\n            );\r\n            realign();\r\n          });\r\n        });\r\n        this._keyManager.withHorizontalOrientation(this._getLayoutDirection());\r\n      });\r\n\r\n    this._keyManager.change.subscribe(newFocusIndex => {\r\n      this.indexFocused.emit(newFocusIndex);\r\n      this._setTabFocus(newFocusIndex);\r\n    });\r\n  }\r\n\r\n  private _itemsResized(): Observable<ResizeObserverEntry[]> {\r\n    if (typeof ResizeObserver !== 'function') {\r\n      return EMPTY;\r\n    }\r\n\r\n    return this._items.changes.pipe(\r\n      startWith(this._items),\r\n      switchMap(\r\n        (tabItems: QueryList<RealsoftPaginatedTabHeaderItem>) =>\r\n          new Observable((observer: Observer<ResizeObserverEntry[]>) =>\r\n            this._ngZone.runOutsideAngular(() => {\r\n              const resizeObserver = new ResizeObserver(entries => observer.next(entries));\r\n              tabItems.forEach(item => resizeObserver.observe(item.elementRef.nativeElement));\r\n              return () => {\r\n                resizeObserver.disconnect();\r\n              };\r\n            }),\r\n          ),\r\n      ),\r\n      skip(1),\r\n      filter(entries => entries.some(e => e.contentRect.width > 0 && e.contentRect.height > 0)),\r\n    );\r\n  }\r\n\r\n  ngAfterContentChecked(): void {\r\n    if (this._tabLabelCount != this._items.length) {\r\n      this.updatePagination();\r\n      this._tabLabelCount = this._items.length;\r\n      this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    if (this._selectedIndexChanged) {\r\n      this._scrollToLabel(this._selectedIndex);\r\n      this._checkScrollingControls();\r\n      this._alignInkBarToSelectedTab();\r\n      this._selectedIndexChanged = false;\r\n      this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n\r\n    if (this._scrollDistanceChanged) {\r\n      this._updateTabScrollPosition();\r\n      this._scrollDistanceChanged = false;\r\n      this._changeDetectorRef.markForCheck();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._eventCleanups.forEach(cleanup => cleanup());\r\n    this._keyManager?.destroy();\r\n    this._destroyed.next();\r\n    this._destroyed.complete();\r\n    this._stopScrolling.complete();\r\n  }\r\n\r\n  _handleKeydown(event: KeyboardEvent) {\r\n    if (hasModifierKey(event)) {\r\n      return;\r\n    }\r\n\r\n    switch (event.keyCode) {\r\n      case ENTER:\r\n      case SPACE:\r\n        if (this.focusIndex !== this.selectedIndex) {\r\n          const item = this._items.get(this.focusIndex);\r\n\r\n          if (item && !item.disabled) {\r\n            this.selectFocusedIndex.emit(this.focusIndex);\r\n            this._itemSelected(event);\r\n          }\r\n        }\r\n        break;\r\n      default:\r\n        this._keyManager.onKeydown(event);\r\n    }\r\n  }\r\n\r\n\r\n  _onContentChanges() {\r\n    const textContent = this._elementRef.nativeElement.textContent;\r\n    if (textContent !== this._currentTextContent) {\r\n      this._currentTextContent = textContent || '';\r\n\r\n      this._ngZone.run(() => {\r\n        this.updatePagination();\r\n        this._alignInkBarToSelectedTab();\r\n        this._changeDetectorRef.markForCheck();\r\n      });\r\n    }\r\n  }\r\n\r\n\r\n  updatePagination() {\r\n    this._checkPaginationEnabled();\r\n    this._checkScrollingControls();\r\n    this._updateTabScrollPosition();\r\n  }\r\n\r\n  get focusIndex(): number {\r\n    return this._keyManager ? this._keyManager.activeItemIndex! : 0;\r\n  }\r\n\r\n  set focusIndex(value: number) {\r\n    if (!this._isValidIndex(value) || this.focusIndex === value || !this._keyManager) {\r\n      return;\r\n    }\r\n\r\n    this._keyManager.setActiveItem(value);\r\n  }\r\n\r\n  _isValidIndex(index: number): boolean {\r\n    return this._items ? !!this._items.toArray()[index] : true;\r\n  }\r\n\r\n  _setTabFocus(tabIndex: number) {\r\n    if (this._showPaginationControls) {\r\n      this._scrollToLabel(tabIndex);\r\n    }\r\n\r\n    if (this._items && this._items.length) {\r\n      this._items.toArray()[tabIndex].focus();\r\n\r\n      const containerEl = this._tabListContainer.nativeElement;\r\n      const dir = this._getLayoutDirection();\r\n\r\n      if (dir == 'ltr') {\r\n        containerEl.scrollLeft = 0;\r\n      } else {\r\n        containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\r\n      }\r\n    }\r\n  }\r\n\r\n  _getLayoutDirection(): Direction {\r\n    return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\r\n  }\r\n\r\n  _updateTabScrollPosition() {\r\n    if (this.disablePagination) {\r\n      return;\r\n    }\r\n\r\n    const scrollDistance = this.scrollDistance;\r\n    const translateX = this._getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\r\n\r\n    this._tabList.nativeElement.style.transform = `translateX(${Math.round(translateX)}px)`;\r\n    if (this._platform.TRIDENT || this._platform.EDGE) {\r\n      this._tabListContainer.nativeElement.scrollLeft = 0;\r\n    }\r\n  }\r\n\r\n  get scrollDistance(): number {\r\n    return this._scrollDistance;\r\n  }\r\n  set scrollDistance(value: number) {\r\n    this._scrollTo(value);\r\n  }\r\n\r\n  _scrollHeader(direction: ScrollDirection) {\r\n    const viewLength = this._tabListContainer.nativeElement.offsetWidth;\r\n\r\n    const scrollAmount = ((direction == 'before' ? -1 : 1) * viewLength) / 3;\r\n\r\n    return this._scrollTo(this._scrollDistance + scrollAmount);\r\n  }\r\n\r\n  _handlePaginatorClick(direction: ScrollDirection) {\r\n    this._stopInterval();\r\n    this._scrollHeader(direction);\r\n  }\r\n\r\n\r\n  _scrollToLabel(labelIndex: number) {\r\n    if (this.disablePagination) {\r\n      return;\r\n    }\r\n\r\n    const selectedLabel = this._items ? this._items.toArray()[labelIndex] : null;\r\n\r\n    if (!selectedLabel) {\r\n      return;\r\n    }\r\n\r\n    const viewLength = this._tabListContainer.nativeElement.offsetWidth;\r\n    const {offsetLeft, offsetWidth} = selectedLabel.elementRef.nativeElement;\r\n\r\n    let labelBeforePos: number, labelAfterPos: number;\r\n    if (this._getLayoutDirection() == 'ltr') {\r\n      labelBeforePos = offsetLeft;\r\n      labelAfterPos = labelBeforePos + offsetWidth;\r\n    } else {\r\n      labelAfterPos = this._tabListInner.nativeElement.offsetWidth - offsetLeft;\r\n      labelBeforePos = labelAfterPos - offsetWidth;\r\n    }\r\n\r\n    const beforeVisiblePos = this.scrollDistance;\r\n    const afterVisiblePos = this.scrollDistance + viewLength;\r\n\r\n    if (labelBeforePos < beforeVisiblePos) {\r\n      this.scrollDistance -= beforeVisiblePos - labelBeforePos;\r\n    } else if (labelAfterPos > afterVisiblePos) {\r\n      this.scrollDistance += Math.min(\r\n        labelAfterPos - afterVisiblePos,\r\n        labelBeforePos - beforeVisiblePos,\r\n      );\r\n    }\r\n  }\r\n\r\n\r\n  _checkPaginationEnabled() {\r\n    if (this.disablePagination) {\r\n      this._showPaginationControls = false;\r\n    } else {\r\n      const scrollWidth = this._tabListInner.nativeElement.scrollWidth;\r\n      const containerWidth = this._elementRef.nativeElement.offsetWidth;\r\n      const isEnabled = scrollWidth - containerWidth >= 5;\r\n\r\n      if (!isEnabled) {\r\n        this.scrollDistance = 0;\r\n      }\r\n\r\n      if (isEnabled !== this._showPaginationControls) {\r\n        this._showPaginationControls = isEnabled;\r\n        this._changeDetectorRef.markForCheck();\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  _checkScrollingControls() {\r\n    if (this.disablePagination) {\r\n      this._disableScrollAfter = this._disableScrollBefore = true;\r\n    } else {\r\n      // Check if the pagination arrows should be activated.\r\n      this._disableScrollBefore = this.scrollDistance == 0;\r\n      this._disableScrollAfter = this.scrollDistance == this._getMaxScrollDistance();\r\n      this._changeDetectorRef.markForCheck();\r\n    }\r\n  }\r\n\r\n  _getMaxScrollDistance(): number {\r\n    const lengthOfTabList = this._tabListInner.nativeElement.scrollWidth;\r\n    const viewLength = this._tabListContainer.nativeElement.offsetWidth;\r\n    return lengthOfTabList - viewLength || 0;\r\n  }\r\n\r\n  _alignInkBarToSelectedTab(): void {\r\n    const selectedItem =\r\n      this._items && this._items.length ? this._items.toArray()[this.selectedIndex] : null;\r\n    const selectedLabelWrapper = selectedItem ? selectedItem.elementRef.nativeElement : null;\r\n\r\n    if (selectedLabelWrapper) {\r\n      this._inkBar.alignToElement(selectedLabelWrapper);\r\n    } else {\r\n      this._inkBar.hide();\r\n    }\r\n  }\r\n\r\n  _stopInterval() {\r\n    this._stopScrolling.next();\r\n  }\r\n\r\n  _handlePaginatorPress(direction: ScrollDirection, mouseEvent?: MouseEvent) {\r\n    if (mouseEvent && mouseEvent.button != null && mouseEvent.button !== 0) {\r\n      return;\r\n    }\r\n\r\n    this._stopInterval();\r\n\r\n    timer(HEADER_SCROLL_DELAY, HEADER_SCROLL_INTERVAL)\r\n      .pipe(takeUntil(merge(this._stopScrolling, this._destroyed)))\r\n      .subscribe(() => {\r\n        const {maxScrollDistance, distance} = this._scrollHeader(direction);\r\n\r\n        if (distance === 0 || distance >= maxScrollDistance) {\r\n          this._stopInterval();\r\n        }\r\n      });\r\n  }\r\n\r\n  private _scrollTo(position: number) {\r\n    if (this.disablePagination) {\r\n      return {maxScrollDistance: 0, distance: 0};\r\n    }\r\n\r\n    const maxScrollDistance = this._getMaxScrollDistance();\r\n    this._scrollDistance = Math.max(0, Math.min(maxScrollDistance, position));\r\n    this._scrollDistanceChanged = true;\r\n    this._checkScrollingControls();\r\n\r\n    return {maxScrollDistance, distance: this._scrollDistance};\r\n  }\r\n}\r\n  \r\n@Component({\r\n  selector: 'realsoft-tab-header',\r\n  templateUrl: 'tab-header.html',\r\n  styleUrl: 'tabs.scss',\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.Default,\r\n  standalone: true,\r\n  host: {\r\n    'class': 'realsoft-tab-header',\r\n    '[class.realsoft-tab-header-pagination-controls-enabled]': '_showPaginationControls',\r\n    '[class.realsoft-tab-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\r\n  },\r\n  imports: [CdkObserveContent],\r\n})\r\nexport class RealsoftTabHeader\r\n  extends RealsoftPaginatedTabHeader\r\n  implements AfterContentChecked, AfterContentInit, AfterViewInit, OnDestroy\r\n{\r\n  @ContentChildren(RealsoftTabLabelWrapper, {descendants: false}) _items: QueryList<RealsoftTabLabelWrapper>;\r\n  @ViewChild('tabListContainer', {static: true}) _tabListContainer: ElementRef;\r\n  @ViewChild('tabList', {static: true}) _tabList: ElementRef;\r\n  @ViewChild('tabListInner', {static: true}) _tabListInner: ElementRef;\r\n  @ViewChild('nextPaginator') _nextPaginator: ElementRef<HTMLElement>;\r\n  @ViewChild('previousPaginator') _previousPaginator: ElementRef<HTMLElement>;\r\n  _inkBar: RealsoftInkBar;\r\n\r\n  @Input('aria-label') ariaLabel: string;\r\n\r\n  @Input('aria-labelledby') ariaLabelledby: string;\r\n\r\n  override ngAfterContentInit() {\r\n    this._inkBar = new RealsoftInkBar(this._items);\r\n    super.ngAfterContentInit();\r\n  }\r\n\r\n  protected _itemSelected(event: KeyboardEvent) {\r\n    event.preventDefault();\r\n  }\r\n}","<div class=\"realsoft-tab-header-pagination realsoft-tab-header-pagination-before\"\r\n     #previousPaginator\r\n     realsoft-ripple\r\n     [class.realsoft-tab-header-pagination-disabled]=\"_disableScrollBefore\"\r\n     (click)=\"_handlePaginatorClick('before')\"\r\n     (mousedown)=\"_handlePaginatorPress('before', $event)\"\r\n     (touchend)=\"_stopInterval()\">\r\n  <div class=\"realsoft-tab-header-pagination-chevron\"></div>\r\n</div>\r\n\r\n<div\r\n  class=\"realsoft-tab-label-container\"\r\n  #tabListContainer\r\n  (keydown)=\"_handleKeydown($event)\"\r\n  [class._realsoft-animation-noopable]=\"_animationsDisabled\">\r\n  <div\r\n    #tabList\r\n    class=\"realsoft-tab-list\"\r\n    role=\"tablist\"\r\n    [attr.aria-label]=\"ariaLabel || null\"\r\n    [attr.aria-labelledby]=\"ariaLabelledby || null\"\r\n    (cdkObserveContent)=\"_onContentChanges()\">\r\n    <div class=\"realsoft-tab-labels\" #tabListInner>\r\n      <ng-content></ng-content>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<div class=\"realsoft-tab-header-pagination realsoft-tab-header-pagination-after\"\r\n     #nextPaginator\r\n     realsoft-ripple\r\n     [class.realsoft-tab-header-pagination-disabled]=\"_disableScrollAfter\"\r\n     (mousedown)=\"_handlePaginatorPress('after', $event)\"\r\n     (click)=\"_handlePaginatorClick('after')\"\r\n     (touchend)=\"_stopInterval()\">\r\n  <div class=\"realsoft-tab-header-pagination-chevron\"></div>\r\n</div>","import {\r\n    AfterContentChecked,\r\n    AfterContentInit,\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    ContentChildren,\r\n    ElementRef,\r\n    EventEmitter,\r\n    Input,\r\n    OnDestroy,\r\n    Output,\r\n    QueryList,\r\n    ViewChild,\r\n    ViewEncapsulation,\r\n    booleanAttribute,\r\n    inject,\r\n    numberAttribute,\r\n    ViewChildren,\r\n    AfterViewInit,\r\n    NgZone,\r\n    ANIMATION_MODULE_TYPE,\r\n  } from '@angular/core';\r\n  import {REALSOFT_TAB_GROUP, RealsoftTab} from './tab';\r\n  import {RealsoftTabHeader} from './tab-header';\r\n  import {merge, Subscription} from 'rxjs';\r\n  import {startWith} from 'rxjs/operators';\r\n  import {CdkMonitorFocus, FocusOrigin} from '@angular/cdk/a11y';\r\n  import {RealsoftTabBody} from './tab-body';\r\n  import {CdkPortalOutlet} from '@angular/cdk/portal';\r\n  import {RealsoftTabLabelWrapper} from './tab-label-wrapper';\r\n  import {Platform} from '@angular/cdk/platform';\r\n  import { UniqueIdGeneratorService } from '../id-generator';\r\n  import { REALSOFT_TABS_CONFIG } from './tab-config';\r\n  import { RealsoftTabsConfig } from './tab-config';\r\n  \r\n  /** @docs-private */\r\n  export interface RealsoftTabGroupBaseHeader {\r\n    _alignInkBarToSelectedTab(): void;\r\n    updatePagination(): void;\r\n    focusIndex: number;\r\n  }\r\n  \r\n  /** Possible positions for the tab header. */\r\n  export type RealsoftTabHeaderPosition = 'above' | 'below';\r\n  \r\n \r\n  @Component({\r\n    selector: 'realsoft-tab-group',\r\n    exportAs: 'realsoftTabGroup',\r\n    templateUrl: 'tab-group.html',\r\n    styleUrl: 'tabs.scss',\r\n    encapsulation: ViewEncapsulation.None,\r\n    // tslint:disable-next-line:validate-decorators\r\n    changeDetection: ChangeDetectionStrategy.Default,\r\n    providers: [\r\n      {\r\n        provide: REALSOFT_TAB_GROUP,\r\n        useExisting: RealsoftTabGroup,\r\n      },\r\n    ],\r\n    host: {\r\n      'class': 'realsoft-tab-group',\r\n      '[class.realsoft-tab-group-dynamic-height]': 'dynamicHeight',\r\n      '[class.realsoft-tab-group-inverted-header]': 'headerPosition === \"below\"',\r\n      '[class.realsoft-tab-group-stretch-tabs]': 'stretchTabs',\r\n      '[class.realsoft-tab-group-vertical]': 'appearance === \"vertical\"',\r\n      '[attr.realsoft-align-tabs]': 'alignTabs',\r\n    },\r\n    standalone: true,\r\n    imports: [\r\n      RealsoftTabHeader,\r\n      RealsoftTabLabelWrapper,\r\n      CdkMonitorFocus,\r\n      CdkPortalOutlet,\r\n      RealsoftTabBody,\r\n    ],\r\n  })\r\n  export class RealsoftTabGroup\r\n    implements AfterViewInit, AfterContentInit, AfterContentChecked, OnDestroy\r\n  {\r\n    readonly _elementRef = inject(ElementRef);\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _ngZone = inject(NgZone);\r\n    private _tabsSubscription = Subscription.EMPTY;\r\n    private _tabLabelSubscription = Subscription.EMPTY;\r\n    private _tabBodySubscription = Subscription.EMPTY;\r\n  \r\n  \r\n   \r\n    @ContentChildren(RealsoftTab, {descendants: true}) _allTabs: QueryList<RealsoftTab>;\r\n    @ViewChildren(RealsoftTabBody) _tabBodies: QueryList<RealsoftTabBody> | undefined;\r\n    @ViewChild('tabBodyWrapper') _tabBodyWrapper: ElementRef;\r\n    @ViewChild('tabHeader') _tabHeader: RealsoftTabHeader;\r\n\r\n    _tabs: QueryList<RealsoftTab> = new QueryList<RealsoftTab>();\r\n  \r\n    private _indexToSelect: number | null = 0;\r\n  \r\n    private _lastFocusedTabIndex: number | null = null;\r\n  \r\n    private _tabBodyWrapperHeight: number = 0;\r\n  \r\n\r\n    @Input({transform: booleanAttribute})\r\n    get fitInkBarToContent(): boolean {\r\n      return this._fitInkBarToContent;\r\n    }\r\n    set fitInkBarToContent(value: boolean) {\r\n      this._fitInkBarToContent = value;\r\n      this._changeDetectorRef.markForCheck();\r\n    }\r\n    private _fitInkBarToContent = false;\r\n\r\n    @Input({alias: 'realsoft-stretch-tabs', transform: booleanAttribute})\r\n    stretchTabs: boolean = true;\r\n  \r\n    @Input() appearance: 'horizontal' | 'vertical' = 'horizontal';\r\n  \r\n    @Input({alias: 'realsoft-align-tabs'})\r\n    alignTabs: string | null = null;\r\n  \r\n    @Input({transform: booleanAttribute})\r\n    dynamicHeight: boolean = false;\r\n  \r\n    @Input({transform: numberAttribute})\r\n    get selectedIndex(): number | null {\r\n      return this._selectedIndex;\r\n    }\r\n    set selectedIndex(value: number) {\r\n      this._indexToSelect = isNaN(value) ? null : value;\r\n    }\r\n     _selectedIndex: number | null = null;\r\n  \r\n    @Input() headerPosition: RealsoftTabHeaderPosition = 'above';\r\n  \r\n  \r\n    @Input({transform: numberAttribute})\r\n    get contentTabIndex(): number | null {\r\n      return this._contentTabIndex;\r\n    }\r\n  \r\n    set contentTabIndex(value: number) {\r\n      this._contentTabIndex = isNaN(value) ? null : value;\r\n    }\r\n  \r\n    private _contentTabIndex: number | null;\r\n  \r\n\r\n    @Input({transform: booleanAttribute})\r\n    disablePagination: boolean = false;\r\n  \r\n\r\n    @Input({transform: booleanAttribute})\r\n    preserveContent: boolean = false;\r\n  \r\n\r\n    @Input('aria-label') ariaLabel: string;\r\n  \r\n    @Input('aria-labelledby') ariaLabelledby: string;\r\n  \r\n    @Output() readonly selectedIndexChange: EventEmitter<number> = new EventEmitter<number>();\r\n  \r\n    @Output() readonly focusChange: EventEmitter<RealsoftTabChangeEvent> =\r\n      new EventEmitter<RealsoftTabChangeEvent>();\r\n  \r\n    @Output() readonly animationDone: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n    @Output() readonly selectedTabChange: EventEmitter<RealsoftTabChangeEvent> =\r\n      new EventEmitter<RealsoftTabChangeEvent>(true);\r\n  \r\n    private _groupId: string;\r\n\r\n    protected _isServer: boolean = !inject(Platform).isBrowser;\r\n  \r\n    constructor(...args: unknown[]);\r\n  \r\n    constructor() {\r\n      const defaultConfig = inject<RealsoftTabsConfig>(REALSOFT_TABS_CONFIG, {optional: true});\r\n  \r\n      this._groupId = inject(UniqueIdGeneratorService).generateID('realsoft-tab-group-');\r\n      this.disablePagination =\r\n        defaultConfig && defaultConfig.disablePagination != null\r\n          ? defaultConfig.disablePagination\r\n          : false;\r\n      this.dynamicHeight =\r\n        defaultConfig && defaultConfig.dynamicHeight != null ? defaultConfig.dynamicHeight : false;\r\n      if (defaultConfig?.contentTabIndex != null) {\r\n        this.contentTabIndex = defaultConfig.contentTabIndex;\r\n      }\r\n      this.preserveContent = !!defaultConfig?.preserveContent;\r\n      this.fitInkBarToContent =\r\n        defaultConfig && defaultConfig.fitInkBarToContent != null\r\n          ? defaultConfig.fitInkBarToContent\r\n          : false;\r\n      this.alignTabs =\r\n        defaultConfig && defaultConfig.alignTabs != null ? defaultConfig.alignTabs : null;\r\n    }\r\n  \r\n\r\n    ngAfterContentChecked() {\r\n\r\n      const indexToSelect = (this._indexToSelect = this._clampTabIndex(this._indexToSelect));\r\n  \r\n      if (this._selectedIndex != indexToSelect) {\r\n        const isFirstRun = this._selectedIndex == null;\r\n  \r\n        if (!isFirstRun) {\r\n          this.selectedTabChange.emit(this._createChangeEvent(indexToSelect));\r\n          const wrapper = this._tabBodyWrapper.nativeElement;\r\n          wrapper.style.minHeight = wrapper.clientHeight + 'px';\r\n        }\r\n        Promise.resolve().then(() => {\r\n          this._tabs.forEach((tab, index) => (tab.isActive = index === indexToSelect));\r\n  \r\n          if (!isFirstRun) {\r\n            this.selectedIndexChange.emit(indexToSelect);\r\n            this._tabBodyWrapper.nativeElement.style.minHeight = '';\r\n          }\r\n        });\r\n      }\r\n  \r\n      this._tabs.forEach((tab: RealsoftTab, index: number) => {\r\n        tab.position = index - indexToSelect;\r\n  \r\n\r\n        if (this._selectedIndex != null && tab.position == 0 && !tab.origin) {\r\n          tab.origin = indexToSelect - this._selectedIndex;\r\n        }\r\n      });\r\n  \r\n      if (this._selectedIndex !== indexToSelect) {\r\n        this._selectedIndex = indexToSelect;\r\n        this._lastFocusedTabIndex = null;\r\n        this._changeDetectorRef.markForCheck();\r\n      }\r\n    }\r\n  \r\n    ngAfterContentInit() {\r\n      this._subscribeToAllTabChanges();\r\n      this._subscribeToTabLabels();\r\n\r\n      this._tabsSubscription = this._tabs.changes.subscribe(() => {\r\n        const indexToSelect = this._clampTabIndex(this._indexToSelect);\r\n\r\n        if (indexToSelect === this._selectedIndex) {\r\n          const tabs = this._tabs.toArray();\r\n          let selectedTab: RealsoftTab | undefined;\r\n  \r\n          for (let i = 0; i < tabs.length; i++) {\r\n            if (tabs[i].isActive) {\r\n              this._indexToSelect = this._selectedIndex = i;\r\n              this._lastFocusedTabIndex = null;\r\n              selectedTab = tabs[i];\r\n              break;\r\n            }\r\n          }\r\n  \r\n\r\n          if (!selectedTab && tabs[indexToSelect]) {\r\n            Promise.resolve().then(() => {\r\n              tabs[indexToSelect].isActive = true;\r\n              this.selectedTabChange.emit(this._createChangeEvent(indexToSelect));\r\n            });\r\n          }\r\n        }\r\n  \r\n        this._changeDetectorRef.markForCheck();\r\n      });\r\n    }\r\n  \r\n    ngAfterViewInit() {\r\n      this._tabBodySubscription = this._tabBodies!.changes.subscribe(() => this._bodyCentered(true));\r\n    }\r\n\r\n    private _subscribeToAllTabChanges() {\r\n\r\n      this._allTabs.changes.pipe(startWith(this._allTabs)).subscribe((tabs: QueryList<RealsoftTab>) => {\r\n        this._tabs.reset(\r\n          tabs.filter(tab => {\r\n            return tab._closestTabGroup === this || !tab._closestTabGroup;\r\n          }),\r\n        );\r\n        this._tabs.notifyOnChanges();\r\n      });\r\n    }\r\n  \r\n    ngOnDestroy() {\r\n      this._tabs.destroy();\r\n      this._tabsSubscription.unsubscribe();\r\n      this._tabLabelSubscription.unsubscribe();\r\n      this._tabBodySubscription.unsubscribe();\r\n    }\r\n  \r\n    realignInkBar() {\r\n      if (this._tabHeader) {\r\n        this._tabHeader._alignInkBarToSelectedTab();\r\n      }\r\n    }\r\n\r\n    updatePagination() {\r\n      if (this._tabHeader) {\r\n        this._tabHeader.updatePagination();\r\n      }\r\n    }\r\n\r\n    focusTab(index: number) {\r\n      const header = this._tabHeader;\r\n  \r\n      if (header) {\r\n        header.focusIndex = index;\r\n      }\r\n    }\r\n  \r\n    _focusChanged(index: number) {\r\n      this._lastFocusedTabIndex = index;\r\n      this.focusChange.emit(this._createChangeEvent(index));\r\n    }\r\n  \r\n    private _createChangeEvent(index: number): RealsoftTabChangeEvent {\r\n      const event = new RealsoftTabChangeEvent();\r\n      event.index = index;\r\n      if (this._tabs && this._tabs.length) {\r\n        event.tab = this._tabs.toArray()[index];\r\n      }\r\n      return event;\r\n    }\r\n  \r\n\r\n    private _subscribeToTabLabels() {\r\n      if (this._tabLabelSubscription) {\r\n        this._tabLabelSubscription.unsubscribe();\r\n      }\r\n  \r\n      this._tabLabelSubscription = merge(...this._tabs.map(tab => tab._stateChanges)).subscribe(() =>\r\n        this._changeDetectorRef.markForCheck(),\r\n      );\r\n    }\r\n  \r\n    private _clampTabIndex(index: number | null): number {\r\n      return Math.min(this._tabs.length - 1, Math.max(index || 0, 0));\r\n    }\r\n    _getTabLabelId(tab: RealsoftTab, index: number): string {\r\n      return tab.id || `${this._groupId}-label-${index}`;\r\n    }\r\n\r\n    _getTabContentId(index: number): string {\r\n      return `${this._groupId}-content-${index}`;\r\n    }\r\n  \r\n\r\n    _setTabBodyWrapperHeight(tabHeight: number): void {\r\n      if (!this.dynamicHeight || !this._tabBodyWrapperHeight) {\r\n        this._tabBodyWrapperHeight = tabHeight;\r\n        return;\r\n      }\r\n  \r\n      const wrapper: HTMLElement = this._tabBodyWrapper.nativeElement;\r\n  \r\n      wrapper.style.height = this._tabBodyWrapperHeight + 'px';\r\n  \r\n\r\n      if (this._tabBodyWrapper.nativeElement.offsetHeight) {\r\n        wrapper.style.height = tabHeight + 'px';\r\n      }\r\n    }\r\n\r\n    _removeTabBodyWrapperHeight(): void {\r\n      const wrapper = this._tabBodyWrapper.nativeElement;\r\n      this._tabBodyWrapperHeight = wrapper.clientHeight;\r\n      wrapper.style.height = '';\r\n      this._ngZone.run(() => this.animationDone.emit());\r\n    }\r\n  \r\n    _handleClick(tab: RealsoftTab, tabHeader: RealsoftTabGroupBaseHeader, index: number) {\r\n      tabHeader.focusIndex = index;\r\n  \r\n      if (!tab.disabled) {\r\n        this.selectedIndex = index;\r\n      }\r\n    }\r\n  \r\n    _getTabIndex(index: number): number {\r\n      const targetIndex = this._lastFocusedTabIndex ?? this.selectedIndex;\r\n      return index === targetIndex ? 0 : -1;\r\n    }\r\n\r\n    _tabFocusChanged(focusOrigin: FocusOrigin, index: number) {\r\n\r\n      if (focusOrigin && focusOrigin !== 'mouse' && focusOrigin !== 'touch') {\r\n        this._tabHeader.focusIndex = index;\r\n      }\r\n    }\r\n  \r\n\r\n    protected _bodyCentered(isCenter: boolean) {\r\n\r\n      if (isCenter) {\r\n        this._tabBodies?.forEach((body, i) => body._setActiveClass(i === this._selectedIndex));\r\n      }\r\n    }\r\n  }\r\n  \r\n\r\n  export class RealsoftTabChangeEvent {\r\n    index: number;\r\n    tab: RealsoftTab;\r\n  }","<realsoft-tab-header #tabHeader\r\n                [selectedIndex]=\"selectedIndex || 0\"\r\n                [disablePagination]=\"disablePagination\"\r\n                [aria-label]=\"ariaLabel\"\r\n                [aria-labelledby]=\"ariaLabelledby\"\r\n                (indexFocused)=\"_focusChanged($event)\"\r\n                (selectFocusedIndex)=\"selectedIndex = $event\">\r\n\r\n  @for (tab of _tabs; track tab) {\r\n    <div class=\"realsoft-tab realsoft-focus-indicator\"\r\n        #tabNode\r\n        role=\"tab\"\r\n        realsoftTabLabelWrapper\r\n        cdkMonitorElementFocus\r\n        [id]=\"_getTabLabelId(tab, $index)\"\r\n        [attr.tabIndex]=\"_getTabIndex($index)\"\r\n        [attr.aria-posinset]=\"$index + 1\"\r\n        [attr.aria-setsize]=\"_tabs.length\"\r\n        [attr.aria-controls]=\"_getTabContentId($index)\"\r\n        [attr.aria-selected]=\"selectedIndex === $index\"\r\n        [attr.aria-label]=\"tab.ariaLabel || null\"\r\n        [attr.aria-labelledby]=\"(!tab.ariaLabel && tab.ariaLabelledby) ? tab.ariaLabelledby : null\"\r\n        [class.realsoft-tab--active]=\"selectedIndex === $index\"\r\n        [class.realsoft-tab-indicator--active]=\"selectedIndex === $index\"\r\n        [class]=\"tab.labelClass\"\r\n        [disabled]=\"tab.disabled\"\r\n        [fitInkBarToContent]=\"fitInkBarToContent\"\r\n        (click)=\"_handleClick(tab, tabHeader, $index)\"\r\n        (cdkFocusChange)=\"_tabFocusChanged($event, $index)\">\r\n      <span class=\"realsoft-tab-ripple\"></span>\r\n\r\n      <!-- Needs to be a separate element, because we can't put\r\n          `overflow: hidden` on tab due to the ink bar. -->\r\n      <div\r\n        class=\"realsoft-tab-ripple\"></div>\r\n\r\n      <span class=\"realsoft-tab__content\">\r\n        <span class=\"realsoft-tab__text-label\">\r\n          <!--\r\n            If there is a label template, use it, otherwise fall back to the text label.\r\n            Note that we don't have indentation around the text label, because it adds\r\n            whitespace around the text which breaks some internal tests.\r\n          -->\r\n          @if (tab.templateLabel) {\r\n            <ng-template [cdkPortalOutlet]=\"tab.templateLabel\"></ng-template>\r\n          } @else {\r\n            {{tab.textLabel}}\r\n          }\r\n        </span>\r\n      </span>\r\n    </div>\r\n  }\r\n</realsoft-tab-header>\r\n\r\n<!--\r\n  We need to project the content somewhere to avoid hydration errors. Some observations:\r\n  1. This is only necessary on the server.\r\n  2. We get a hydration error if there aren't any nodes after the `ng-content`.\r\n  3. We get a hydration error if `ng-content` is wrapped in another element.\r\n-->\r\n@if (_isServer) {\r\n  <ng-content/>\r\n}\r\n\r\n<div\r\n  class=\"realsoft-tab-body-wrapper\"\r\n  #tabBodyWrapper>\r\n  @for (tab of _tabs; track tab;) {\r\n    <realsoft-tab-body role=\"tabpanel\"\r\n                 [id]=\"_getTabContentId($index)\"\r\n                 [attr.tabindex]=\"(contentTabIndex != null && selectedIndex === $index) ? contentTabIndex : null\"\r\n                 [attr.aria-labelledby]=\"_getTabLabelId(tab, $index)\"\r\n                 [attr.aria-hidden]=\"selectedIndex !== $index\"\r\n                 [class]=\"tab.bodyClass\"\r\n                 [content]=\"tab.content!\"\r\n                 [position]=\"tab.position!\"\r\n                 [preserveContent]=\"preserveContent\"\r\n                 (_onCentered)=\"_removeTabBodyWrapperHeight()\"\r\n                 (_onCentering)=\"_setTabBodyWrapperHeight($event)\"\r\n                 (_beforeCentering)=\"_bodyCentered($event)\"/>\r\n  }\r\n</div>","import {InjectionToken, ChangeDetectorRef, WritableSignal} from '@angular/core';\r\nimport { RealsoftSliderThumb } from './slider-input';\r\n\r\n// Thumb types -> A range slider has two thumb, start and end. A single point slider has one thumb.\r\nexport enum RealsoftThumb {\r\n  START = 1,\r\n  END = 2,\r\n}\r\n\r\n// Tick mark enumeration -> For discrete sliders\r\nexport enum RealsoftTickMark {\r\n  ACTIVE = 0,\r\n  INACTIVE = 1,\r\n}\r\n\r\n\r\n// Injection token that can be used for a RealsoftSlider to provide itself as a parent to the RealsoftSliderThumb and RealsoftSliderRangeThumb -> For avoiding circular imports\r\nexport const REALSOFT_SLIDER = new InjectionToken<{}>('RealsoftSliderInterface');\r\n\r\n// Injection token that can be used to query for a RealsoftSliderThumb\r\nexport const REALSOFT_SLIDER_THUMB = new InjectionToken<{}>('RealsoftSliderThumb');\r\n\r\n// Injection Token that can be used to query for a RealsoftSliderRangeThumb -> Used for avoiding circular imports\r\nexport const REALSOFT_SLIDER_RANGE_THUMB = new InjectionToken<{}>('RealsoftSliderRangeThumb');\r\n\r\n// Injection token that can be used to query for a RealsoftSliderVisualThumb -> Used for avoiding circular imports\r\nexport const REALSOFT_SLIDER_VISUAL_THUMB = new InjectionToken<{}>('RealsoftSliderVisualThumb');\r\n\r\n// An interface for the drag event emitted by the RealsoftSlider component\r\nexport interface RealsoftSliderDragEvent {\r\n    source: RealsoftSliderThumb; // The RealsoftSlideThumb that was interacted with\r\n    parent: RealsoftSliderInterface; // The RealsoftSlider that was interacted with\r\n    value: number; // The current value of the slider\r\n}\r\n\r\n// Change event emitted by the RealsoftSlider Component \r\nexport class RealsoftSliderChange {\r\n    source: RealsoftSliderThumb; // The thumb that was interacted with\r\n    parent: RealsoftSliderInterface; // The RealsoftSlider that was interacted with\r\n    value: number; // The new value of the source slider\r\n}\r\n\r\n\r\nexport interface RealsoftSliderInterface {\r\n  /** Whether the given pointer event occurred within the bounds of the slider pointer's DOM Rect. */\r\n  _isCursorOnSliderThumb(event: PointerEvent, rect: DOMRect): boolean;\r\n\r\n  /** Gets the slider thumb input of the given thumb position. */\r\n  _getInput(thumbPosition: RealsoftThumb): RealsoftSliderThumbInterface | RealsoftSliderRangeThumbInterface | undefined;\r\n\r\n  /** Gets the slider thumb HTML input element of the given thumb position. */\r\n  _getThumb(thumbPosition: RealsoftThumb): RealsoftSliderVisualThumbInterface;\r\n\r\n  /** The minimum value that the slider can have. */\r\n  min: number;\r\n\r\n  /** The maximum value that the slider can have. */\r\n  max: number;\r\n\r\n  /** The amount that slider values can increment or decrement by. */\r\n  step: number;\r\n\r\n  /** Whether the slider is disabled. */\r\n  disabled: boolean;\r\n\r\n  /** Whether the slider is a range slider. */\r\n  _isRange: boolean;\r\n\r\n  /** Whether the slider is rtl. */\r\n  _isRtl: boolean;\r\n\r\n  /** The stored width of the host element's bounding client rect. */\r\n  _cachedWidth: number;\r\n\r\n  /** The stored width of the host element's bounding client rect. */\r\n  _cachedLeft: number;\r\n\r\n  /**\r\n   * The padding of the native slider input. This is added in order to make the region where the\r\n   * thumb ripple extends past the end of the slider track clickable.\r\n   */\r\n  _inputPadding: number;\r\n\r\n  /** The radius of the visual slider's ripple. */\r\n  _rippleRadius: number;\r\n\r\n\r\n  /** Whether animations have been disabled. */\r\n  _noopAnimations: boolean;\r\n\r\n  /** Whether or not the slider should use animations. */\r\n  _hasAnimation: boolean;\r\n\r\n  /** Triggers UI updates that are needed after a slider input value has changed. */\r\n  _onValueChange: (source: RealsoftSliderThumbInterface) => void;\r\n\r\n  /** Triggers UI updates that are needed after the slider thumb position has changed. */\r\n  _onTranslateXChange: (source: RealsoftSliderThumbInterface) => void;\r\n\r\n  /** Updates the stored slider dimensions using the current bounding client rect. */\r\n  _updateDimensions: () => void;\r\n\r\n  /** Updates the scale on the active portion of the track. */\r\n  _updateTrackUI: (source: RealsoftSliderThumbInterface) => void;\r\n\r\n  /** Used to set the transition duration for thumb and track animations. */\r\n  _setTransition: (withAnimation: boolean) => void;\r\n\r\n  _changeDetectorRef: ChangeDetectorRef;\r\n}\r\n\r\nexport interface RealsoftSliderThumbInterface {\r\n  /** The minimum value that the slider can have. */\r\n  min: number;\r\n\r\n  /** The maximum value that the slider can have. */\r\n  max: number;\r\n\r\n  /** The amount that slider values can increment or decrement by. */\r\n  step: number;\r\n\r\n  /** The current value of this slider input. */\r\n  value: number;\r\n\r\n  /** The current translateX in px of the slider visual thumb. */\r\n  translateX: number;\r\n\r\n  /** Indicates whether this thumb is the start or end thumb. */\r\n  thumbPosition: RealsoftThumb;\r\n\r\n  /** Similar to percentage but calcualted using translateX relative to the total track width. */\r\n  fillPercentage: number;\r\n\r\n  /** Whether the slider is disabled. */\r\n  disabled: boolean;\r\n\r\n  /** The host native HTML input element. */\r\n  _hostElement: HTMLInputElement;\r\n\r\n  /** Whether the input is currently focused (either by tab or after clicking). */\r\n  _isFocused: boolean;\r\n\r\n  /** The aria-valuetext string representation of the input's value. */\r\n  _valuetext: WritableSignal<string>;\r\n\r\n  _skipUIUpdate: boolean;\r\n\r\n  /** Handles the initialization of properties for the slider input. */\r\n  initProps: () => void;\r\n\r\n  /** Handles UI initialization controlled by this slider input. */\r\n  initUI: () => void;\r\n\r\n  /** Calculates the visual thumb's translateX based on the slider input's current value. */\r\n  _calcTranslateXByValue: () => number;\r\n\r\n  /** Updates the visual thumb based on the slider input's current value. */\r\n  _updateThumbUIByValue: () => void;\r\n\r\n  /**\r\n   * Sets the slider input to disproportionate dimensions to allow for touch\r\n   * events to be captured on touch devices.\r\n   */\r\n  _updateWidthInactive: () => void;\r\n\r\n  /**\r\n   * Used to set the slider width to the correct\r\n   * dimensions while the user is dragging.\r\n   */\r\n  _updateWidthActive: () => void;\r\n}\r\n\r\nexport interface RealsoftSliderRangeThumbInterface extends RealsoftSliderThumbInterface {\r\n  /** Whether this slider corresponds to the input on the left hand side. */\r\n  _isLeftThumb: boolean;\r\n\r\n  /**\r\n   * Gets the sibling MatSliderRangeThumb.\r\n   * Returns undefined if it is too early in Angular's life cycle.\r\n   */\r\n  getSibling: () => RealsoftSliderRangeThumbInterface | undefined;\r\n\r\n  /** Used to cache whether this slider input corresponds to the visual left thumb. */\r\n  _setIsLeftThumb: () => void;\r\n\r\n  /** Updates the input styles to control whether it is pinned to the start or end of the mat-slider. */\r\n  _updateStaticStyles: () => void;\r\n\r\n  /** Updates the min and max properties of this slider input according to it's sibling. */\r\n  _updateMinMax: () => void;\r\n}\r\n\r\nexport interface RealsoftSliderVisualThumbInterface {\r\n\r\n\r\n  /** Whether the slider thumb is currently being pressed. */\r\n  _isActive: boolean;\r\n\r\n  /** The host native HTML input element. */\r\n  _hostElement: HTMLElement;\r\n\r\n  /** Shows the value indicator ui. */\r\n  _showValueIndicator: () => void;\r\n\r\n  /** Hides the value indicator ui. */\r\n  _hideValueIndicator: () => void;\r\n\r\n}","import {\r\n    AfterViewInit,\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    ElementRef,\r\n    Input,\r\n    NgZone,\r\n    OnDestroy,\r\n    Renderer2,\r\n    ViewChild,\r\n    ViewEncapsulation,\r\n    inject,\r\n} from '@angular/core';\r\nimport {Platform} from '@angular/cdk/platform';\r\nimport { REALSOFT_SLIDER_VISUAL_THUMB, RealsoftSliderInterface, RealsoftSliderThumbInterface, RealsoftThumb } from './models';\r\nimport { REALSOFT_SLIDER } from './models';\r\nimport { RealsoftSliderVisualThumbInterface } from './models';\r\n  \r\n// Visual Slider Thumb \r\n@Component({\r\n    selector: 'realsoft-slider-visual-thumb',\r\n    templateUrl: './slider-thumb.html',\r\n    styleUrl: './slider.scss',\r\n    host: {\r\n      'class': 'realsoft-slider__thumb realsoft-slider-visual-thumb',\r\n    },\r\n    standalone: true,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    encapsulation: ViewEncapsulation.None,\r\n    providers: [{provide: REALSOFT_SLIDER_VISUAL_THUMB, useExisting: RealsoftSliderVisualThumb}],\r\n})\r\nexport class RealsoftSliderVisualThumb implements RealsoftSliderVisualThumbInterface, AfterViewInit, OnDestroy {\r\n    readonly _cdr = inject(ChangeDetectorRef);\r\n    private readonly _ngZone = inject(NgZone);\r\n    private _slider = inject<RealsoftSliderInterface>(REALSOFT_SLIDER);\r\n    private _renderer = inject(Renderer2);\r\n    private _listenerCleanups: (() => void)[] | undefined;\r\n  \r\n    @Input() discrete: boolean;\r\n  \r\n    @Input() thumbPosition: RealsoftThumb;\r\n\r\n    @Input() valueIndicatorText: string;\r\n  \r\n\r\n    @ViewChild('knob') _knob: ElementRef<HTMLElement>;\r\n\r\n    @ViewChild('valueIndicatorContainer') _valueIndicatorContainer: ElementRef<HTMLElement>;\r\n  \r\n    private _sliderInput: RealsoftSliderThumbInterface;\r\n\r\n    private _sliderInputEl: HTMLInputElement | undefined;\r\n  \r\n\r\n    private _isHovered: boolean = false;\r\n\r\n    _isActive = false;\r\n\r\n    _isValueIndicatorVisible: boolean = false;\r\n  \r\n    _hostElement = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n\r\n  \r\n    constructor(...args: unknown[]);\r\n    constructor() {}\r\n  \r\n    ngAfterViewInit() {\r\n      const sliderInput = this._slider._getInput(this.thumbPosition);\r\n      if (!sliderInput) {\r\n        return;\r\n      }\r\n\r\n      this._sliderInput = sliderInput;\r\n      this._sliderInputEl = this._sliderInput._hostElement;\r\n  \r\n      this._ngZone.runOutsideAngular(() => {\r\n        const input = this._sliderInputEl!;\r\n        const renderer = this._renderer;\r\n        this._listenerCleanups = [\r\n          renderer.listen(input, 'pointermove', this._onPointerMove),\r\n          renderer.listen(input, 'pointerdown', this._onDragStart),\r\n          renderer.listen(input, 'pointerup', this._onDragEnd),\r\n          renderer.listen(input, 'pointerleave', this._onMouseLeave),\r\n          renderer.listen(input, 'focus', this._onFocus),\r\n          renderer.listen(input, 'blur', this._onBlur),\r\n        ];\r\n      });\r\n    }\r\n  \r\n    ngOnDestroy() {\r\n      this._listenerCleanups?.forEach(cleanup => cleanup());\r\n    }\r\n  \r\n    private _onPointerMove = (event: PointerEvent): void => {\r\n      if (this._sliderInput._isFocused) {\r\n        return;\r\n      }\r\n  \r\n      const rect = this._hostElement.getBoundingClientRect();\r\n      const isHovered = this._slider._isCursorOnSliderThumb(event, rect);\r\n      this._isHovered = isHovered;\r\n    };\r\n  \r\n    private _onMouseLeave = (): void => {\r\n      this._isHovered = false;\r\n    };\r\n  \r\n    private _onFocus = (): void => {\r\n      this._hostElement.classList.add('realsoft-slider__thumb--focused');\r\n    };\r\n  \r\n    private _onBlur = (): void => {\r\n      this._hostElement.classList.remove('realsoft-slider__thumb--focused');\r\n    };\r\n  \r\n    private _onDragStart = (event: PointerEvent): void => {\r\n      if (event.button !== 0) {\r\n        return;\r\n      }\r\n      this._isActive = true;\r\n    };\r\n  \r\n    private _onDragEnd = (): void => {\r\n      this._isActive = false;\r\n    };\r\n\r\n    _showValueIndicator(): void {\r\n      this._hostElement.classList.add('realsoft-slider__thumb--with-indicator');\r\n    }\r\n  \r\n    _hideValueIndicator(): void {\r\n      this._hostElement.classList.remove('realsoft-slider__thumb--with-indicator');\r\n    }\r\n  \r\n    _getSibling(): RealsoftSliderVisualThumbInterface {\r\n      return this._slider._getThumb(\r\n        this.thumbPosition === RealsoftThumb.START ? RealsoftThumb.END : RealsoftThumb.START,\r\n      );\r\n    }\r\n\r\n    _getValueIndicatorContainer(): HTMLElement | undefined {\r\n      return this._valueIndicatorContainer?.nativeElement;\r\n    }\r\n\r\n    _getKnob(): HTMLElement {\r\n      return this._knob.nativeElement;\r\n    }\r\n  \r\n  }","@if (discrete) {\r\n    <div class=\"realsoft-slider__value-indicator-container\" #valueIndicatorContainer>\r\n      <div class=\"realsoft-slider__value-indicator\">\r\n        <span class=\"realsoft-slider__value-indicator-text\">{{valueIndicatorText}}</span>\r\n      </div>\r\n    </div>\r\n  }\r\n  <div class=\"realsoft-slider__thumb-knob\" #knob></div>\r\n<div class=\"realsoft-focus-indicator\"></div>","import {Directionality} from '@angular/cdk/bidi';\r\nimport {Platform} from '@angular/cdk/platform';\r\nimport {\r\n  AfterViewInit,\r\n  ANIMATION_MODULE_TYPE,\r\n  booleanAttribute,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ContentChild,\r\n  ContentChildren,\r\n  ElementRef,\r\n  inject,\r\n  Input,\r\n  NgZone,\r\n  numberAttribute,\r\n  OnDestroy,\r\n  QueryList,\r\n  ViewChild,\r\n  ViewChildren,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { REALSOFT_SLIDER, REALSOFT_SLIDER_RANGE_THUMB, REALSOFT_SLIDER_THUMB, REALSOFT_SLIDER_VISUAL_THUMB, RealsoftSliderDragEvent, RealsoftSliderInterface, RealsoftSliderRangeThumbInterface, RealsoftSliderThumbInterface, RealsoftSliderVisualThumbInterface, RealsoftThumb, RealsoftTickMark } from './models';\r\nimport { RealsoftSliderVisualThumb } from './slider-thumb';\r\n\r\n\r\n@Component({\r\n  selector: 'realsoft-slider',\r\n  templateUrl: 'slider.html',\r\n  styleUrl: 'slider.scss',\r\n  host: {\r\n    'class': 'realsoft-slider realsoft-slider',\r\n    '[class.realsoft-slider--range]': '_isRange',\r\n    '[class.realsoft-slider--disabled]': 'disabled',\r\n    '[class.realsoft-slider--discrete]': 'discrete',\r\n    '[class.realsoft-slider--tick-marks]': 'showTickMarks',\r\n    '[class.realsoft-animation-noopable]': '_noopAnimations',\r\n  },\r\n  exportAs: 'realsoftSlider',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n  providers: [{provide: REALSOFT_SLIDER, useExisting: RealsoftSlider}],\r\n  imports: [RealsoftSliderVisualThumb],\r\n})\r\nexport class RealsoftSlider implements AfterViewInit, OnDestroy, RealsoftSliderInterface {\r\n  readonly _ngZone = inject(NgZone);\r\n\r\n  readonly _changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n  readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n  readonly _dir = inject(Directionality, {optional: true});\r\n\r\n  private _disabled: boolean = false;\r\n  private _discrete: boolean = false;\r\n  private _min: number = 0;\r\n  private _max: number = 100;\r\n  private _step: number = 1;\r\n\r\n  @Input() displayWith: (value: number) => string = (value: number) => `${value}`;\r\n\r\n  _tickMarks: RealsoftTickMark[];\r\n\r\n  animationsModule = inject(ANIMATION_MODULE_TYPE, {optional: true})\r\n\r\n  _noopAnimations = this.animationsModule === 'NoopAnimations';\r\n\r\n  private _dirChangeSubscription: Subscription;\r\n\r\n  private _resizeObserver: ResizeObserver | null;\r\n\r\n  _cachedWidth: number;\r\n  _cachedLeft: number;\r\n\r\n  _rippleRadius: number = 24;\r\n\r\n  protected startValueIndicatorText: string = '';\r\n\r\n  protected endValueIndicatorText: string = '';\r\n\r\n\r\n  _endThumbTransform: string;\r\n  _startThumbTransform: string;\r\n\r\n  _isRange: boolean = false;\r\n\r\n  _isRtl: boolean = false;\r\n\r\n  private _hasViewInitialized: boolean = false;\r\n\r\n  _tickMarkTrackWidth: number = 0;\r\n\r\n  _hasAnimation: boolean = false;\r\n\r\n  private _resizeTimer: null | ReturnType<typeof setTimeout> = null;\r\n\r\n  private _platform = inject(Platform);\r\n\r\n  constructor(...args: unknown[]);\r\n\r\n  constructor() {\r\n\r\n    if (this._dir) {\r\n      this._dirChangeSubscription = this._dir.change.subscribe(() => this._onDirChange());\r\n      this._isRtl = this._dir.value === 'rtl';\r\n    }\r\n  }\r\n\r\n  _knobRadius: number = 8;\r\n\r\n  _inputPadding: number;\r\n\r\n  @ViewChild('trackActive') _trackActive: ElementRef<HTMLElement>;\r\n\r\n  @ViewChildren(REALSOFT_SLIDER_VISUAL_THUMB) _thumbs: QueryList<RealsoftSliderVisualThumbInterface>;\r\n\r\n  @ContentChild(REALSOFT_SLIDER_THUMB) _input: RealsoftSliderThumbInterface;\r\n\r\n  @ContentChildren(REALSOFT_SLIDER_RANGE_THUMB, {descendants: false})_inputs: QueryList<RealsoftSliderRangeThumbInterface>;\r\n\r\n\r\n  @Input({transform: booleanAttribute})\r\n  get disabled(): boolean {\r\n    return this._disabled;\r\n  }\r\n  set disabled(v: boolean) {\r\n    this._disabled = v;\r\n    const endInput = this._getInput(RealsoftThumb.END);\r\n    const startInput = this._getInput(RealsoftThumb.START);\r\n\r\n    if (endInput) {\r\n      endInput.disabled = this._disabled;\r\n    }\r\n    if (startInput) {\r\n      startInput.disabled = this._disabled;\r\n    }\r\n  }\r\n  \r\n  @Input({transform: booleanAttribute})\r\n  get discrete(): boolean {\r\n    return this._discrete;\r\n  }\r\n  set discrete(v: boolean) {\r\n    this._discrete = v;\r\n    this.updateValueIndicatorUI();\r\n  }\r\n\r\n  @Input({transform: booleanAttribute}) showTickMarks: boolean = false;\r\n\r\n  @Input({transform: numberAttribute})\r\n  get min(): number {\r\n    return this._min;\r\n  }\r\n  set min(value: number) {\r\n    const min = value === undefined || value === null || isNaN(value) ? this._min : value;\r\n    if (this._min !== min) {\r\n      this.updateMin(min);\r\n    }\r\n  }\r\n  \r\n  @Input({transform: numberAttribute})\r\n  get max(): number {\r\n    return this._max;\r\n  }\r\n  set max(value: number) {\r\n    const max = value === undefined || value === null || isNaN(value) ? this._max : value;\r\n    if (this._max !== max) {\r\n       this._updateMax(max);\r\n    }\r\n  }\r\n\r\n  @Input({transform: numberAttribute})\r\n  get step(): number {\r\n    return this._step;\r\n  }\r\n  set step(v: number) {\r\n    const step = isNaN(v) ? this._step : v;\r\n    if (this._step !== step) {\r\n      this._updateStep(step);\r\n    }\r\n  }\r\n  \r\n\r\n  private updateMin(min: number): void {\r\n    const prevMin = this._min;\r\n    this._min = min;\r\n    this._isRange ? this.updateMinRange({old: prevMin, new: min}) : this._updateMinNonRange(min);\r\n    this._onMinMaxOrStepChange();\r\n  }\r\n\r\n  private updateMinRange(min: {old: number; new: number}): void {\r\n    const endInput = this._getInput(RealsoftThumb.END) as RealsoftSliderRangeThumbInterface;\r\n    const startInput = this._getInput(RealsoftThumb.START) as RealsoftSliderRangeThumbInterface;\r\n\r\n    const oldEndValue = endInput.value;\r\n    const oldStartValue = startInput.value;\r\n\r\n    startInput.min = min.new;\r\n    endInput.min = Math.max(min.new, startInput.value);\r\n    startInput.max = Math.min(endInput.max, endInput.value);\r\n\r\n    startInput._updateWidthInactive();\r\n    endInput._updateWidthInactive();\r\n\r\n    min.new < min.old\r\n      ? this._onTranslateXChangeBySideEffect(endInput, startInput)\r\n      : this._onTranslateXChangeBySideEffect(startInput, endInput);\r\n\r\n    if (oldEndValue !== endInput.value) {\r\n      this._onValueChange(endInput);\r\n    }\r\n\r\n    if (oldStartValue !== startInput.value) {\r\n      this._onValueChange(startInput);\r\n    }\r\n  }\r\n\r\n  private _updateMinNonRange(min: number): void {\r\n    const input = this._getInput(RealsoftThumb.END);\r\n    if (input) {\r\n      const oldValue = input.value;\r\n\r\n      input.min = min;\r\n      input._updateThumbUIByValue();\r\n      this._updateTrackUI(input);\r\n\r\n      if (oldValue !== input.value) {\r\n        this._onValueChange(input);\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  private _updateMax(max: number): void {\r\n    const prevMax = this._max;\r\n    this._max = max;\r\n    this._isRange ? this.updateMaxRange({old: prevMax, new: max}) : this.updateMaxNonRange(max);\r\n    this._onMinMaxOrStepChange();\r\n  }\r\n\r\n  private updateMaxRange(max: {old: number; new: number}): void {\r\n    const endInput = this._getInput(RealsoftThumb.END) as RealsoftSliderRangeThumbInterface;\r\n    const startInput = this._getInput(RealsoftThumb.START) as RealsoftSliderRangeThumbInterface;\r\n\r\n    const oldEndValue = endInput.value;\r\n    const oldStartValue = startInput.value;\r\n\r\n    endInput.max = max.new;\r\n    startInput.max = Math.min(max.new, endInput.value);\r\n    endInput.min = startInput.value;\r\n\r\n    endInput._updateWidthInactive();\r\n    startInput._updateWidthInactive();\r\n\r\n    max.new > max.old\r\n      ? this._onTranslateXChangeBySideEffect(startInput, endInput)\r\n      : this._onTranslateXChangeBySideEffect(endInput, startInput);\r\n\r\n    if (oldEndValue !== endInput.value) {\r\n      this._onValueChange(endInput);\r\n    }\r\n\r\n    if (oldStartValue !== startInput.value) {\r\n      this._onValueChange(startInput);\r\n    }\r\n  }\r\n\r\n  private updateMaxNonRange(max: number): void {\r\n    const input = this._getInput(RealsoftThumb.END);\r\n    if (input) {\r\n      const oldValue = input.value;\r\n\r\n      input.max = max;\r\n      input._updateThumbUIByValue();\r\n      this._updateTrackUI(input);\r\n\r\n      if (oldValue !== input.value) {\r\n        this._onValueChange(input);\r\n      }\r\n    }\r\n  }\r\n\r\n  \r\n\r\n  private _updateStep(step: number): void {\r\n    this._step = step;\r\n    this._isRange ? this.updateStepRange() : this._updateStepNonRange();\r\n    this._onMinMaxOrStepChange();\r\n  }\r\n\r\n  private updateStepRange(): void {\r\n    const endInput = this._getInput(RealsoftThumb.END) as RealsoftSliderRangeThumbInterface;\r\n    const startInput = this._getInput(RealsoftThumb.START) as RealsoftSliderRangeThumbInterface;\r\n\r\n    const oldEndValue = endInput.value;\r\n    const oldStartValue = startInput.value;\r\n\r\n    const prevStartValue = startInput.value;\r\n\r\n    endInput.min = this._min;\r\n    startInput.max = this._max;\r\n\r\n    endInput.step = this._step;\r\n    startInput.step = this._step;\r\n\r\n    if (this._platform.SAFARI) {\r\n      endInput.value = endInput.value;\r\n      startInput.value = startInput.value;\r\n    }\r\n\r\n    endInput.min = Math.max(this._min, startInput.value);\r\n    startInput.max = Math.min(this._max, endInput.value);\r\n\r\n    startInput._updateWidthInactive();\r\n    endInput._updateWidthInactive();\r\n\r\n    endInput.value < prevStartValue\r\n      ? this._onTranslateXChangeBySideEffect(startInput, endInput)\r\n      : this._onTranslateXChangeBySideEffect(endInput, startInput);\r\n\r\n    if (oldEndValue !== endInput.value) {\r\n      this._onValueChange(endInput);\r\n    }\r\n\r\n    if (oldStartValue !== startInput.value) {\r\n      this._onValueChange(startInput);\r\n    }\r\n  }\r\n\r\n  private _updateStepNonRange(): void {\r\n    const input = this._getInput(RealsoftThumb.END);\r\n    if (input) {\r\n      const oldValue = input.value;\r\n\r\n      input.step = this._step;\r\n      if (this._platform.SAFARI) {\r\n        input.value = input.value;\r\n      }\r\n\r\n      input._updateThumbUIByValue();\r\n\r\n      if (oldValue !== input.value) {\r\n        this._onValueChange(input);\r\n      }\r\n    }\r\n  }\r\n\r\n  \r\n\r\n  ngAfterViewInit(): void {\r\n    if (this._platform.isBrowser) {\r\n      this._updateDimensions();\r\n    }\r\n\r\n    const eInput = this._getInput(RealsoftThumb.END);\r\n    const sInput = this._getInput(RealsoftThumb.START);\r\n    this._isRange = !!eInput && !!sInput;\r\n    this._changeDetectorRef.detectChanges();\r\n\r\n\r\n    const thumb = this._getThumb(RealsoftThumb.END);\r\n    this._inputPadding = this._rippleRadius - this._knobRadius;\r\n\r\n    this._isRange\r\n      ? this._initUIRange(eInput as RealsoftSliderRangeThumbInterface, sInput as RealsoftSliderRangeThumbInterface)\r\n      : this._initUINonRange(eInput!);\r\n\r\n    this._updateTrackUI(eInput!);\r\n    this._updateTickMarkUI();\r\n    this._updateTickMarkTrackUI();\r\n\r\n    this._observeHostResize();\r\n    this._changeDetectorRef.detectChanges();\r\n  }\r\n\r\n  private _initUINonRange(eInput: RealsoftSliderThumbInterface): void {\r\n    if (!eInput) {\r\n      return;\r\n    }\r\n    eInput.initProps();\r\n    eInput.initUI();\r\n\r\n    this._updateValueIndicatorUI(eInput);\r\n\r\n    this._hasViewInitialized = true;\r\n    eInput._updateThumbUIByValue();\r\n  }\r\n\r\n  private _initUIRange(eInput: RealsoftSliderRangeThumbInterface, sInput: RealsoftSliderRangeThumbInterface): void {\r\n    eInput.initProps();\r\n    eInput.initUI();\r\n\r\n    sInput.initProps();\r\n    sInput.initUI();\r\n\r\n    eInput._updateMinMax();\r\n    sInput._updateMinMax();\r\n\r\n    eInput._updateStaticStyles();\r\n    sInput._updateStaticStyles();\r\n\r\n    this.updateValueIndicatorUI();\r\n\r\n    this._hasViewInitialized = true;\r\n\r\n    eInput._updateThumbUIByValue();\r\n    sInput._updateThumbUIByValue();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._dirChangeSubscription.unsubscribe();\r\n    this._resizeObserver?.disconnect();\r\n    this._resizeObserver = null;\r\n  }\r\n  private _onDirChange(): void {\r\n    this._isRtl = this._dir?.value === 'rtl';\r\n    this._isRange ? this._onDirChangeRange() : this._onDirChangeNonRange();\r\n    this._updateTickMarkUI();\r\n  }\r\n\r\n  private _onDirChangeRange(): void {\r\n    const endInput = this._getInput(RealsoftThumb.END) as RealsoftSliderRangeThumbInterface;\r\n    const startInput = this._getInput(RealsoftThumb.START) as RealsoftSliderRangeThumbInterface;\r\n\r\n    endInput._setIsLeftThumb();\r\n    startInput._setIsLeftThumb();\r\n\r\n    endInput.translateX = endInput._calcTranslateXByValue();\r\n    startInput.translateX = startInput._calcTranslateXByValue();\r\n\r\n    endInput._updateStaticStyles();\r\n    startInput._updateStaticStyles();\r\n\r\n    endInput._updateWidthInactive();\r\n    startInput._updateWidthInactive();\r\n\r\n    endInput._updateThumbUIByValue();\r\n    startInput._updateThumbUIByValue();\r\n  }\r\n\r\n  private _onDirChangeNonRange(): void {\r\n    const input = this._getInput(RealsoftThumb.END)!;\r\n    input._updateThumbUIByValue();\r\n  }\r\n\r\n  private _observeHostResize() {\r\n    if (typeof ResizeObserver === 'undefined' || !ResizeObserver) {\r\n      return;\r\n    }\r\n\r\n    this._ngZone.runOutsideAngular(() => {\r\n      this._resizeObserver = new ResizeObserver(() => {\r\n        if (this._isActive()) {\r\n          return;\r\n        }\r\n        if (this._resizeTimer) {\r\n          clearTimeout(this._resizeTimer);\r\n        }\r\n        this._onResize();\r\n      });\r\n      this._resizeObserver.observe(this._elementRef.nativeElement);\r\n    });\r\n  }\r\n\r\n  private _isActive(): boolean {\r\n    return this._getThumb(RealsoftThumb.START)._isActive || this._getThumb(RealsoftThumb.END)._isActive;\r\n  }\r\n\r\n  private _getValue(thumbPosition: RealsoftThumb = RealsoftThumb.END): number {\r\n    const input = this._getInput(thumbPosition);\r\n    if (!input) {\r\n      return this.min;\r\n    }\r\n    return input.value;\r\n  }\r\n\r\n  private _skipUpdate(): boolean {\r\n    return !!(\r\n      this._getInput(RealsoftThumb.START)?._skipUIUpdate || this._getInput(RealsoftThumb.END)?._skipUIUpdate\r\n    );\r\n  }\r\n\r\n  _updateDimensions(): void {\r\n    this._cachedWidth = this._elementRef.nativeElement.offsetWidth;\r\n    this._cachedLeft = this._elementRef.nativeElement.getBoundingClientRect().left;\r\n  }\r\n\r\n  _setTrackActiveStyles(styles: {\r\n    left: string;\r\n    right: string;\r\n    transform: string;\r\n    transformOrigin: string;\r\n  }): void {\r\n    const trackStyle = this._trackActive.nativeElement.style;\r\n\r\n    trackStyle.left = styles.left;\r\n    trackStyle.right = styles.right;\r\n    trackStyle.transformOrigin = styles.transformOrigin;\r\n    trackStyle.transform = styles.transform;\r\n  }\r\n\r\n  _calcTickMarkTransform(index: number): string {\r\n    const offset = index * (this._tickMarkTrackWidth / (this._tickMarks.length - 1));\r\n    const translateX = this._isRtl ? this._cachedWidth - 6 - offset : offset;\r\n    return `translateX(${translateX}px`;\r\n  }\r\n\r\n  _onTranslateXChange(source: RealsoftSliderThumbInterface): void {\r\n    if (!this._hasViewInitialized) {\r\n      return;\r\n    }\r\n\r\n    this._updateThumbUI(source);\r\n    this._updateTrackUI(source);\r\n    this._updateOverlappingThumbUI(source as RealsoftSliderRangeThumbInterface);\r\n  }\r\n\r\n  _onTranslateXChangeBySideEffect(\r\n    input1: RealsoftSliderRangeThumbInterface,\r\n    input2: RealsoftSliderRangeThumbInterface,\r\n  ): void {\r\n    if (!this._hasViewInitialized) {\r\n      return;\r\n    }\r\n\r\n    input1._updateThumbUIByValue();\r\n    input2._updateThumbUIByValue();\r\n  }\r\n\r\n  _onValueChange(source: RealsoftSliderThumbInterface): void {\r\n    if (!this._hasViewInitialized) {\r\n      return;\r\n    }\r\n\r\n    this._updateValueIndicatorUI(source);\r\n    this._updateTickMarkUI();\r\n    this._changeDetectorRef.detectChanges();\r\n  }\r\n\r\n  _onMinMaxOrStepChange(): void {\r\n    if (!this._hasViewInitialized) {\r\n      return;\r\n    }\r\n\r\n    this._updateTickMarkUI();\r\n    this._updateTickMarkTrackUI();\r\n    this._changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  _onResize(): void {\r\n    if (!this._hasViewInitialized) {\r\n      return;\r\n    }\r\n\r\n    this._updateDimensions();\r\n    if (this._isRange) {\r\n      const eInput = this._getInput(RealsoftThumb.END) as RealsoftSliderRangeThumbInterface;\r\n      const sInput = this._getInput(RealsoftThumb.START) as RealsoftSliderRangeThumbInterface;\r\n\r\n      eInput._updateThumbUIByValue();\r\n      sInput._updateThumbUIByValue();\r\n\r\n      eInput._updateStaticStyles();\r\n      sInput._updateStaticStyles();\r\n\r\n      eInput._updateMinMax();\r\n      sInput._updateMinMax();\r\n\r\n      eInput._updateWidthInactive();\r\n      sInput._updateWidthInactive();\r\n    } else {\r\n      const eInput = this._getInput(RealsoftThumb.END);\r\n      if (eInput) {\r\n        eInput._updateThumbUIByValue();\r\n      }\r\n    }\r\n\r\n    this._updateTickMarkUI();\r\n    this._updateTickMarkTrackUI();\r\n    this._changeDetectorRef.detectChanges();\r\n  }\r\n\r\n  private _thumbsOverlap: boolean = false;\r\n\r\n  private _areThumbsOverlapping(): boolean {\r\n    const startInput = this._getInput(RealsoftThumb.START);\r\n    const endInput = this._getInput(RealsoftThumb.END);\r\n    if (!startInput || !endInput) {\r\n      return false;\r\n    }\r\n    return endInput.translateX - startInput.translateX < 20;\r\n  }\r\n\r\n  private _updateOverlappingThumbClassNames(source: RealsoftSliderRangeThumbInterface): void {\r\n    const sibling = source.getSibling()!;\r\n    const sourceThumb = this._getThumb(source.thumbPosition);\r\n    const siblingThumb = this._getThumb(sibling.thumbPosition);\r\n    siblingThumb._hostElement.classList.remove('realsoft-slider__thumb--top');\r\n    sourceThumb._hostElement.classList.toggle('realsoft-slider__thumb--top', this._thumbsOverlap);\r\n  }\r\n\r\n  private _updateOverlappingThumbUI(source: RealsoftSliderRangeThumbInterface): void {\r\n    if (!this._isRange || this._skipUpdate()) {\r\n      return;\r\n    }\r\n    if (this._thumbsOverlap !== this._areThumbsOverlapping()) {\r\n      this._thumbsOverlap = !this._thumbsOverlap;\r\n      this._updateOverlappingThumbClassNames(source);\r\n    }\r\n  }\r\n\r\n  _updateThumbUI(source: RealsoftSliderThumbInterface) {\r\n    if (this._skipUpdate()) {\r\n      return;\r\n    }\r\n    const thumb = this._getThumb(\r\n      source.thumbPosition === RealsoftThumb.END ? RealsoftThumb.END : RealsoftThumb.START,\r\n    )!;\r\n    thumb._hostElement.style.transform = `translateX(${source.translateX}px)`;\r\n  }\r\n\r\n\r\n  _updateValueIndicatorUI(source: RealsoftSliderThumbInterface): void {\r\n    if (this._skipUpdate()) {\r\n      return;\r\n    }\r\n\r\n    const valuetext = this.displayWith(source.value);\r\n\r\n    this._hasViewInitialized\r\n      ? source._valuetext.set(valuetext)\r\n      : source._hostElement.setAttribute('aria-valuetext', valuetext);\r\n\r\n    if (this.discrete) {\r\n      source.thumbPosition === RealsoftThumb.START\r\n        ? (this.startValueIndicatorText = valuetext)\r\n        : (this.endValueIndicatorText = valuetext);\r\n\r\n      const visualThumb = this._getThumb(source.thumbPosition);\r\n      valuetext.length < 3\r\n        ? visualThumb._hostElement.classList.add('realsoft-slider__thumb--short-value')\r\n        : visualThumb._hostElement.classList.remove('realsoft-slider__thumb--short-value');\r\n    }\r\n  }\r\n\r\n  private updateValueIndicatorUI(): void {\r\n    const eInput = this._getInput(RealsoftThumb.END);\r\n    const sInput = this._getInput(RealsoftThumb.START);\r\n\r\n    if (eInput) {\r\n      this._updateValueIndicatorUI(eInput);\r\n    }\r\n    if (sInput) {\r\n      this._updateValueIndicatorUI(sInput);\r\n    }\r\n  }\r\n\r\n\r\n  private _updateTickMarkTrackUI(): void {\r\n    if (!this.showTickMarks || this._skipUpdate()) {\r\n      return;\r\n    }\r\n\r\n    const step = this._step && this._step > 0 ? this._step : 1;\r\n    const maxValue = Math.floor(this.max / step) * step;\r\n    const percentage = (maxValue - this.min) / (this.max - this.min);\r\n    this._tickMarkTrackWidth = (this._cachedWidth - 6) * percentage;\r\n  }\r\n\r\n\r\n  _updateTrackUI(source: RealsoftSliderThumbInterface): void {\r\n    if (this._skipUpdate()) {\r\n      return;\r\n    }\r\n\r\n    this._isRange\r\n      ? this._updateTrackUIRange(source as RealsoftSliderRangeThumbInterface)\r\n      : this._updateTrackUINonRange(source as RealsoftSliderThumbInterface);\r\n  }\r\n\r\n  private _updateTrackUIRange(source: RealsoftSliderRangeThumbInterface): void {\r\n    const sibling = source.getSibling();\r\n    if (!sibling || !this._cachedWidth) {\r\n      return;\r\n    }\r\n\r\n    const activePercentage = Math.abs(sibling.translateX - source.translateX) / this._cachedWidth;\r\n\r\n    if (source._isLeftThumb && this._cachedWidth) {\r\n      this._setTrackActiveStyles({\r\n        left: 'auto',\r\n        right: `${this._cachedWidth - sibling.translateX}px`,\r\n        transformOrigin: 'right',\r\n        transform: `scaleX(${activePercentage})`,\r\n      });\r\n    } else {\r\n      this._setTrackActiveStyles({\r\n        left: `${sibling.translateX}px`,\r\n        right: 'auto',\r\n        transformOrigin: 'left',\r\n        transform: `scaleX(${activePercentage})`,\r\n      });\r\n    }\r\n  }\r\n\r\n  private _updateTrackUINonRange(source: RealsoftSliderThumbInterface): void {\r\n    if (!source) {\r\n      return;\r\n    }\r\n    this._isRtl\r\n      ? this._setTrackActiveStyles({\r\n          left: 'auto',\r\n          right: '0px',\r\n          transformOrigin: 'right',\r\n          transform: `scaleX(${1 - source.fillPercentage})`,\r\n        })\r\n      : this._setTrackActiveStyles({\r\n          left: '0px',\r\n          right: 'auto',\r\n          transformOrigin: 'left',\r\n          transform: `scaleX(${source.fillPercentage})`,\r\n        });\r\n  }\r\n  _updateTickMarkUI(): void {\r\n    if (\r\n      !this.showTickMarks ||\r\n      this.step === undefined ||\r\n      this.min === undefined ||\r\n      this.max === undefined\r\n    ) {\r\n      return;\r\n    }\r\n    const step = this.step > 0 ? this.step : 1;\r\n    this._isRange ? this._updateTickMarkUIRange(step) : this._updateTickMarkUINonRange(step);\r\n  }\r\n\r\n  private _updateTickMarkUINonRange(step: number): void {\r\n    const value = this._getValue();\r\n    let numActive = Math.max(Math.round((value - this.min) / step), 0) + 1;\r\n    let numInactive = Math.max(Math.round((this.max - value) / step), 0) - 1;\r\n    this._isRtl ? numActive++ : numInactive++;\r\n\r\n    this._tickMarks = Array(numActive)\r\n      .fill(RealsoftTickMark.ACTIVE)\r\n      .concat(Array(numInactive).fill(RealsoftTickMark.INACTIVE));\r\n  }\r\n\r\n  private _updateTickMarkUIRange(step: number): void {\r\n    const endValue = this._getValue();\r\n    const startValue = this._getValue(RealsoftThumb.START);\r\n\r\n    const numInactiveBeforeStartThumb = Math.max(Math.round((startValue - this.min) / step), 0);\r\n    const numActive = Math.max(Math.round((endValue - startValue) / step) + 1, 0);\r\n    const numInactiveAfterEndThumb = Math.max(Math.round((this.max - endValue) / step), 0);\r\n    this._tickMarks = Array(numInactiveBeforeStartThumb)\r\n      .fill(RealsoftTickMark.INACTIVE)\r\n      .concat(\r\n        Array(numActive).fill(RealsoftTickMark.ACTIVE),\r\n        Array(numInactiveAfterEndThumb).fill(RealsoftTickMark.INACTIVE),\r\n      );\r\n  }\r\n\r\n  _getInput(thumbPosition: RealsoftThumb): RealsoftSliderThumbInterface | RealsoftSliderRangeThumbInterface | undefined {\r\n    if (thumbPosition === RealsoftThumb.END && this._input) {\r\n      return this._input;\r\n    }\r\n    if (this._inputs?.length) {\r\n      return thumbPosition === RealsoftThumb.START ? this._inputs.first : this._inputs.last;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  _getThumb(thumbPosition: RealsoftThumb): RealsoftSliderVisualThumbInterface {\r\n    return thumbPosition === RealsoftThumb.END ? this._thumbs?.last! : this._thumbs?.first!;\r\n  }\r\n\r\n  _setTransition(withAnimation: boolean): void {\r\n    this._hasAnimation = !this._platform.IOS && withAnimation && !this._noopAnimations;\r\n    this._elementRef.nativeElement.classList.toggle(\r\n      'realsoft-slider-with-animation',\r\n      this._hasAnimation,\r\n    );\r\n  }\r\n\r\n  _isCursorOnSliderThumb(event: PointerEvent, rect: DOMRect) {\r\n    const radius = rect.width / 2;\r\n    const centerX = rect.x + radius;\r\n    const centerY = rect.y + radius;\r\n    const dx = event.clientX - centerX;\r\n    const dy = event.clientY - centerY;\r\n    return Math.pow(dx, 2) + Math.pow(dy, 2) < Math.pow(radius, 2);\r\n  }\r\n}\r\nfunction _validateInputs(\r\n  isRange: boolean,\r\n  endInputElement: RealsoftSliderThumbInterface | RealsoftSliderRangeThumbInterface | undefined,\r\n  startInputElement: RealsoftSliderThumbInterface | undefined,\r\n): void {\r\n  const startValid =\r\n    !isRange || startInputElement?._hostElement.hasAttribute('realsoftSliderStartThumb');\r\n  const endValid = endInputElement?._hostElement.hasAttribute(\r\n    isRange ? 'realsoftSliderEndThumb' : 'realsoftSliderThumb',\r\n  );\r\n\r\n  if (!startValid || !endValid) {\r\n    _throwInvalidInputConfigurationError();\r\n  }\r\n}\r\n\r\nfunction _throwInvalidInputConfigurationError(): void {\r\n  throw Error(`Invalid slider thumb input configuration!\r\n\r\n   Valid configurations are as follows:\r\n\r\n     <realsoft-slider>\r\n       <input realsoftSliderThumb>\r\n     </realsoft-slider>\r\n\r\n     or\r\n\r\n     <realsoft-slider>\r\n       <input realsoftSliderStartThumb>\r\n       <input realsoftSliderEndThumb>\r\n     </realsoft-slider>\r\n   `);\r\n}","<!-- Inputs -->\r\n<ng-content></ng-content>\r\n\r\n<!-- Track -->\r\n<div class=\"realsoft-slider__track\">\r\n  <div class=\"realsoft-slider__track--inactive\"></div>\r\n  <div class=\"realsoft-slider__track--active\">\r\n    <div #trackActive class=\"realsoft-slider__track--active_fill\"></div>\r\n  </div>\r\n  @if (showTickMarks) {\r\n    <div class=\"realsoft-slider__tick-marks\" #tickMarkContainer>\r\n      @if (_cachedWidth) {\r\n        @for (tickMark of _tickMarks; track i; let i = $index) {\r\n          <div\r\n            [class]=\"tickMark === 0 ? 'realsoft-slider__tick-mark--active' : 'realsoft-slider__tick-mark--inactive'\"\r\n            [style.transform]=\"_calcTickMarkTransform(i)\"></div>\r\n        }\r\n      }\r\n    </div>\r\n  }\r\n</div>\r\n\r\n<!-- Thumbs -->\r\n@if (_isRange) {\r\n  <realsoft-slider-visual-thumb\r\n    [discrete]=\"discrete\"\r\n    [thumbPosition]=\"1\"\r\n    [valueIndicatorText]=\"startValueIndicatorText\">\r\n  </realsoft-slider-visual-thumb>\r\n}\r\n\r\n<realsoft-slider-visual-thumb\r\n  [discrete]=\"discrete\"\r\n  [thumbPosition]=\"2\"\r\n  [valueIndicatorText]=\"endValueIndicatorText\">\r\n</realsoft-slider-visual-thumb>","import {\r\n    booleanAttribute,\r\n    ChangeDetectorRef,\r\n    Directive,\r\n    ElementRef,\r\n    EventEmitter,\r\n    forwardRef,\r\n    inject,\r\n    Input,\r\n    NgZone,\r\n    numberAttribute,\r\n    OnDestroy,\r\n    Output,\r\n    Renderer2,\r\n    signal,\r\n  } from '@angular/core';\r\nimport {ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {Subject} from 'rxjs';\r\nimport {Platform} from '@angular/cdk/platform';\r\nimport { REALSOFT_SLIDER_RANGE_THUMB, REALSOFT_SLIDER_THUMB, RealsoftSliderDragEvent, RealsoftSliderRangeThumbInterface, RealsoftThumb } from './models';\r\nimport { REALSOFT_SLIDER, RealsoftSliderInterface, RealsoftSliderThumbInterface } from './models';\r\n  \r\n\r\nexport const REALSOFT_SLIDER_THUMB_VALUE_ACCESSOR: any = {\r\n    provide: NG_VALUE_ACCESSOR,\r\n    useExisting: forwardRef(() => RealsoftSliderThumb),\r\n    multi: true,\r\n};\r\n  \r\n\r\nexport const REALSOFT_SLIDER_RANGE_THUMB_VALUE_ACCESSOR: any = {\r\n    provide: NG_VALUE_ACCESSOR,\r\n    useExisting: forwardRef(() => RealsoftSliderRangeThumb),\r\n    multi: true,\r\n};\r\n  \r\n\r\n@Directive({\r\n    selector: 'input[realsoftSliderThumb]',\r\n    exportAs: 'realsoftSliderThumb',\r\n    host: {\r\n      'class': 'realsoft-slider__input',\r\n      'type': 'range',\r\n      '[attr.aria-valuetext]': '_valuetext()',\r\n      '(change)': '_onChange()',\r\n      '(input)': '_onInput()',\r\n      '(blur)': '_onBlur()',\r\n      '(focus)': '_onFocus()',\r\n    },\r\n    standalone: true,\r\n    providers: [\r\n      REALSOFT_SLIDER_THUMB_VALUE_ACCESSOR,\r\n      {provide: REALSOFT_SLIDER_THUMB, useExisting: RealsoftSliderThumb},\r\n    ],\r\n  })\r\n  export class RealsoftSliderThumb implements RealsoftSliderThumbInterface, OnDestroy, ControlValueAccessor {\r\n    readonly _ngZone = inject(NgZone);\r\n    readonly _elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\r\n    readonly _changeDetectorRef = inject(ChangeDetectorRef);\r\n    protected _slider = inject<RealsoftSliderInterface>(REALSOFT_SLIDER);\r\n    private _platform = inject(Platform);\r\n    private _listenerCleanups: (() => void)[];\r\n  \r\n    @Input({transform: numberAttribute})\r\n    get value(): number {\r\n      return numberAttribute(this._hostElement.value, 0);\r\n    }\r\n    set value(value: number) {\r\n      if (value === null) {\r\n        value = this._getDefaultValue();\r\n      }\r\n      value = isNaN(value) ? 0 : value;\r\n      const stringValue = value + '';\r\n      if (!this._hasSetInitialValue) {\r\n        this._initialValue = stringValue;\r\n        return;\r\n      }\r\n      if (this._isActive) {\r\n        return;\r\n      }\r\n      this._setValue(stringValue);\r\n    }\r\n\r\n\r\n    protected _setValue(value: string) {\r\n      this._hostElement.value = value;\r\n      this._updateThumbUIByValue();\r\n      this._slider._onValueChange(this);\r\n      this._changeDetectorRef.detectChanges();\r\n      this._slider._changeDetectorRef.markForCheck();\r\n    }\r\n  \r\n    @Output() readonly valueChange: EventEmitter<number> = new EventEmitter<number>();\r\n\r\n    @Output() readonly dragStart: EventEmitter<RealsoftSliderDragEvent> =\r\n      new EventEmitter<RealsoftSliderDragEvent>();\r\n\r\n    @Output() readonly dragEnd: EventEmitter<RealsoftSliderDragEvent> =\r\n      new EventEmitter<RealsoftSliderDragEvent>();\r\n  \r\n\r\n    get translateX(): number {\r\n      if (this._slider.min >= this._slider.max) {\r\n        this._translateX = this._tickMarkOffset;\r\n        return this._translateX;\r\n      }\r\n      if (this._translateX === undefined) {\r\n        this._translateX = this._calcTranslateXByValue();\r\n      }\r\n      return this._translateX;\r\n    }\r\n    set translateX(v: number) {\r\n      this._translateX = v;\r\n    }\r\n    private _translateX: number | undefined;\r\n  \r\n    thumbPosition: RealsoftThumb = RealsoftThumb.END;\r\n\r\n    get min(): number {\r\n      return numberAttribute(this._hostElement.min, 0);\r\n    }\r\n    set min(v: number) {\r\n      this._hostElement.min = v + '';\r\n      this._changeDetectorRef.detectChanges();\r\n    }\r\n  \r\n    get max(): number {\r\n      return numberAttribute(this._hostElement.max, 0);\r\n    }\r\n    set max(v: number) {\r\n      this._hostElement.max = v + '';\r\n      this._changeDetectorRef.detectChanges();\r\n    }\r\n  \r\n    get step(): number {\r\n      return numberAttribute(this._hostElement.step, 0);\r\n    }\r\n    set step(v: number) {\r\n      this._hostElement.step = v + '';\r\n      this._changeDetectorRef.detectChanges();\r\n    }\r\n  \r\n    get disabled(): boolean {\r\n      return booleanAttribute(this._hostElement.disabled);\r\n    }\r\n    set disabled(v: boolean) {\r\n      this._hostElement.disabled = v;\r\n      this._changeDetectorRef.detectChanges();\r\n  \r\n      if (this._slider.disabled !== this.disabled) {\r\n        this._slider.disabled = this.disabled;\r\n      }\r\n    }\r\n\r\n    get percentage(): number {\r\n      if (this._slider.min >= this._slider.max) {\r\n        return this._slider._isRtl ? 1 : 0;\r\n      }\r\n      return (this.value - this._slider.min) / (this._slider.max - this._slider.min);\r\n    }\r\n  \r\n    get fillPercentage(): number {\r\n      if (!this._slider._cachedWidth) {\r\n        return this._slider._isRtl ? 1 : 0;\r\n      }\r\n      if (this._translateX === 0) {\r\n        return 0;\r\n      }\r\n      return this.translateX / this._slider._cachedWidth;\r\n    }\r\n  \r\n    _hostElement = this._elementRef.nativeElement;\r\n\r\n    _valuetext = signal('');\r\n  \r\n    _knobRadius: number = 8;\r\n  \r\n    _tickMarkOffset = 3;\r\n  \r\n    _isActive: boolean = false;\r\n\r\n    _isFocused: boolean = false;\r\n  \r\n    private _setIsFocused(v: boolean): void {\r\n      this._isFocused = v;\r\n    }\r\n  \r\n\r\n    private _hasSetInitialValue: boolean = false;\r\n  \r\n    _initialValue: string | undefined;\r\n  \r\n    private _formControl: FormControl | undefined;\r\n  \r\n    protected readonly _destroyed = new Subject<void>();\r\n  \r\n\r\n    _skipUIUpdate: boolean = false;\r\n  \r\n    protected _onChangeFn: ((value: any) => void) | undefined;\r\n  \r\n    private _onTouchedFn: () => void = () => {};\r\n  \r\n\r\n    protected _isControlInitialized = false;\r\n  \r\n    constructor(...args: unknown[]);\r\n  \r\n    constructor() {\r\n      const renderer = inject(Renderer2);\r\n  \r\n      this._ngZone.runOutsideAngular(() => {\r\n        this._listenerCleanups = [\r\n          renderer.listen(this._hostElement, 'pointerdown', this._onPointerDown.bind(this)),\r\n          renderer.listen(this._hostElement, 'pointermove', this._onPointerMove.bind(this)),\r\n          renderer.listen(this._hostElement, 'pointerup', this._onPointerUp.bind(this)),\r\n        ];\r\n      });\r\n    }\r\n  \r\n    ngOnDestroy(): void {\r\n      this._listenerCleanups.forEach(cleanup => cleanup());\r\n      this._destroyed.next();\r\n      this._destroyed.complete();\r\n      this.dragStart.complete();\r\n      this.dragEnd.complete();\r\n    }\r\n  \r\n    initProps(): void {\r\n      this._updateWidthInactive();\r\n  \r\n      if (this.disabled !== this._slider.disabled) {\r\n        this._slider.disabled = true;\r\n      }\r\n  \r\n      this.step = this._slider.step;\r\n      this.min = this._slider.min;\r\n      this.max = this._slider.max;\r\n      this._initValue();\r\n    }\r\n  \r\n    initUI(): void {\r\n      this._updateThumbUIByValue();\r\n    }\r\n  \r\n    _initValue(): void {\r\n      this._hasSetInitialValue = true;\r\n      if (this._initialValue === undefined) {\r\n        this.value = this._getDefaultValue();\r\n      } else {\r\n        this._hostElement.value = this._initialValue;\r\n        this._updateThumbUIByValue();\r\n        this._slider._onValueChange(this);\r\n        this._changeDetectorRef.detectChanges();\r\n      }\r\n    }\r\n  \r\n    _getDefaultValue(): number {\r\n      return this.min;\r\n    }\r\n  \r\n    _onBlur(): void {\r\n      this._setIsFocused(false);\r\n      this._onTouchedFn();\r\n    }\r\n  \r\n    _onFocus(): void {\r\n      this._slider._setTransition(false);\r\n      this._slider._updateTrackUI(this);\r\n      this._setIsFocused(true);\r\n    }\r\n  \r\n    _onChange(): void {\r\n      this.valueChange.emit(this.value);\r\n      if (this._isActive) {\r\n        this._updateThumbUIByValue({withAnimation: true});\r\n      }\r\n    }\r\n  \r\n    _onInput(): void {\r\n      this._onChangeFn?.(this.value);\r\n      if (this._slider.step || !this._isActive) {\r\n        this._updateThumbUIByValue({withAnimation: true});\r\n      }\r\n      this._slider._onValueChange(this);\r\n    }\r\n  \r\n    _onNgControlValueChange(): void {\r\n      if (!this._isActive || !this._isFocused) {\r\n        this._slider._onValueChange(this);\r\n        this._updateThumbUIByValue();\r\n      }\r\n      this._slider.disabled = this._formControl!.disabled;\r\n    }\r\n  \r\n    _onPointerDown(event: PointerEvent): void {\r\n      if (this.disabled || event.button !== 0) {\r\n        return;\r\n      }\r\n      if (this._platform.IOS) {\r\n        const isCursorOnSliderThumb = this._slider._isCursorOnSliderThumb(\r\n          event,\r\n          this._slider._getThumb(this.thumbPosition)._hostElement.getBoundingClientRect(),\r\n        );\r\n  \r\n        this._isActive = isCursorOnSliderThumb;\r\n        this._updateWidthActive();\r\n        this._slider._updateDimensions();\r\n        return;\r\n      }\r\n  \r\n      this._isActive = true;\r\n      this._setIsFocused(true);\r\n      this._updateWidthActive();\r\n      this._slider._updateDimensions();\r\n  \r\n      if (!this._slider.step) {\r\n        this._updateThumbUIByPointerEvent(event, {withAnimation: true});\r\n      }\r\n  \r\n      if (!this.disabled) {\r\n        this._handleValueCorrection(event);\r\n        this.dragStart.emit({source: this, parent: this._slider, value: this.value});\r\n      }\r\n    }\r\n  \r\n\r\n    private _handleValueCorrection(event: PointerEvent): void {\r\n\r\n      this._skipUIUpdate = true;\r\n  \r\n      setTimeout(() => {\r\n        this._skipUIUpdate = false;\r\n        this._fixValue(event);\r\n      }, 0);\r\n    }\r\n    _fixValue(event: PointerEvent): void {\r\n      const xPos = event.clientX - this._slider._cachedLeft;\r\n      const width = this._slider._cachedWidth;\r\n      const step = this._slider.step === 0 ? 1 : this._slider.step;\r\n      const numSteps = Math.floor((this._slider.max - this._slider.min) / step);\r\n      const percentage = this._slider._isRtl ? 1 - xPos / width : xPos / width;\r\n  \r\n      const fixedPercentage = Math.round(percentage * numSteps) / numSteps;\r\n  \r\n      const impreciseValue = fixedPercentage * (this._slider.max - this._slider.min) + this._slider.min;\r\n      const value = Math.round(impreciseValue / step) * step;\r\n      const prevValue = this.value;\r\n  \r\n      if (value === prevValue) {\r\n        this._slider._onValueChange(this);\r\n        this._slider.step > 0\r\n          ? this._updateThumbUIByValue()\r\n          : this._updateThumbUIByPointerEvent(event, {withAnimation: this._slider._hasAnimation});\r\n        return;\r\n      }\r\n  \r\n      this.value = value;\r\n      this.valueChange.emit(this.value);\r\n      this._onChangeFn?.(this.value);\r\n      this._slider._onValueChange(this);\r\n      this._slider.step > 0\r\n        ? this._updateThumbUIByValue()\r\n        : this._updateThumbUIByPointerEvent(event, {withAnimation: this._slider._hasAnimation});\r\n    }\r\n  \r\n    _onPointerMove(event: PointerEvent): void {\r\n      if (!this._slider.step && this._isActive) {\r\n        this._updateThumbUIByPointerEvent(event);\r\n      }\r\n    }\r\n  \r\n    _onPointerUp(): void {\r\n      if (this._isActive) {\r\n        this._isActive = false;\r\n        if (this._platform.SAFARI) {\r\n          this._setIsFocused(false);\r\n        }\r\n        this.dragEnd.emit({source: this, parent: this._slider, value: this.value});\r\n  \r\n        setTimeout(() => this._updateWidthInactive(), this._platform.IOS ? 10 : 0);\r\n      }\r\n    }\r\n  \r\n    _clamp(v: number): number {\r\n      const min = this._tickMarkOffset;\r\n      const max = this._slider._cachedWidth - this._tickMarkOffset;\r\n      return Math.max(Math.min(v, max), min);\r\n    }\r\n  \r\n    _calcTranslateXByValue(): number {\r\n      if (this._slider._isRtl) {\r\n        return (\r\n          (1 - this.percentage) * (this._slider._cachedWidth - this._tickMarkOffset * 2) +\r\n          this._tickMarkOffset\r\n        );\r\n      }\r\n      return (\r\n        this.percentage * (this._slider._cachedWidth - this._tickMarkOffset * 2) +\r\n        this._tickMarkOffset\r\n      );\r\n    }\r\n  \r\n    _calcTranslateXByPointerEvent(event: PointerEvent): number {\r\n      return event.clientX - this._slider._cachedLeft;\r\n    }\r\n\r\n    _updateWidthActive(): void {}\r\n  \r\n\r\n    _updateWidthInactive(): void {\r\n      this._hostElement.style.padding = `0 ${this._slider._inputPadding}px`;\r\n      this._hostElement.style.width = `calc(100% + ${\r\n        this._slider._inputPadding - this._tickMarkOffset * 2\r\n      }px)`;\r\n    }\r\n  \r\n    _updateThumbUIByValue(options?: {withAnimation: boolean}): void {\r\n      this.translateX = this._clamp(this._calcTranslateXByValue());\r\n      this._updateThumbUI(options);\r\n    }\r\n  \r\n    _updateThumbUIByPointerEvent(event: PointerEvent, options?: {withAnimation: boolean}): void {\r\n      this.translateX = this._clamp(this._calcTranslateXByPointerEvent(event));\r\n      this._updateThumbUI(options);\r\n    }\r\n  \r\n    _updateThumbUI(options?: {withAnimation: boolean}) {\r\n      this._slider._setTransition(!!options?.withAnimation);\r\n      this._slider._onTranslateXChange(this);\r\n    }\r\n  \r\n\r\n    writeValue(value: any): void {\r\n      if (this._isControlInitialized || value !== null) {\r\n        this.value = value;\r\n      }\r\n    }\r\n  \r\n\r\n    registerOnChange(fn: any): void {\r\n      this._onChangeFn = fn;\r\n      this._isControlInitialized = true;\r\n    }\r\n\r\n    registerOnTouched(fn: any): void {\r\n      this._onTouchedFn = fn;\r\n    }\r\n  \r\n\r\n    setDisabledState(isDisabled: boolean): void {\r\n      this.disabled = isDisabled;\r\n    }\r\n  \r\n    focus(): void {\r\n      this._hostElement.focus();\r\n    }\r\n  \r\n    blur(): void {\r\n      this._hostElement.blur();\r\n    }\r\n  }\r\n  \r\n  @Directive({\r\n    selector: 'input[realsoftSliderStartThumb], input[realsoftSliderEndThumb]',\r\n    exportAs: 'realsoftSliderRangeThumb',\r\n    providers: [\r\n      REALSOFT_SLIDER_RANGE_THUMB_VALUE_ACCESSOR,\r\n      {provide: REALSOFT_SLIDER_RANGE_THUMB, useExisting: RealsoftSliderRangeThumb},\r\n    ],\r\n    standalone: true\r\n  })\r\n  export class RealsoftSliderRangeThumb extends RealsoftSliderThumb implements RealsoftSliderRangeThumbInterface {\r\n    override readonly _changeDetectorRef = inject(ChangeDetectorRef);\r\n  \r\n    getSibling(): RealsoftSliderRangeThumbInterface | undefined {\r\n      if (!this._sibling) {\r\n        this._sibling = this._slider._getInput(this._isEndThumb ? RealsoftThumb.START : RealsoftThumb.END) as\r\n          | RealsoftSliderRangeThumb\r\n          | undefined;\r\n      }\r\n      return this._sibling;\r\n    }\r\n    private _sibling: RealsoftSliderRangeThumb | undefined;\r\n  \r\n\r\n    getMinPos(): number {\r\n      const sibling = this.getSibling();\r\n      if (!this._isLeftThumb && sibling) {\r\n        return sibling.translateX;\r\n      }\r\n      return this._tickMarkOffset;\r\n    }\r\n  \r\n\r\n    getMaxPos(): number {\r\n      const sibling = this.getSibling();\r\n      if (this._isLeftThumb && sibling) {\r\n        return sibling.translateX;\r\n      }\r\n      return this._slider._cachedWidth - this._tickMarkOffset;\r\n    }\r\n  \r\n    _setIsLeftThumb(): void {\r\n      this._isLeftThumb =\r\n        (this._isEndThumb && this._slider._isRtl) || (!this._isEndThumb && !this._slider._isRtl);\r\n    }\r\n  \r\n    _isLeftThumb: boolean;\r\n  \r\n    _isEndThumb: boolean;\r\n  \r\n    constructor(...args: unknown[]);\r\n  \r\n    constructor() {\r\n      super();\r\n  \r\n      this._isEndThumb = this._hostElement.hasAttribute('realsoftSliderEndThumb');\r\n      this._setIsLeftThumb();\r\n      this.thumbPosition = this._isEndThumb ? RealsoftThumb.END : RealsoftThumb.START;\r\n    }\r\n  \r\n    override _getDefaultValue(): number {\r\n      return this._isEndThumb && this._slider._isRange ? this.max : this.min;\r\n    }\r\n  \r\n    override _onInput(): void {\r\n      super._onInput();\r\n      this._updateSibling();\r\n      if (!this._isActive) {\r\n        this._updateWidthInactive();\r\n      }\r\n    }\r\n  \r\n    override _onNgControlValueChange(): void {\r\n      super._onNgControlValueChange();\r\n      this.getSibling()?._updateMinMax();\r\n    }\r\n  \r\n    override _onPointerDown(event: PointerEvent): void {\r\n      if (this.disabled || event.button !== 0) {\r\n        return;\r\n      }\r\n      if (this._sibling) {\r\n        this._sibling._updateWidthActive();\r\n        this._sibling._hostElement.classList.add('realsoft-slider-input-no-pointer-events');\r\n      }\r\n      super._onPointerDown(event);\r\n    }\r\n  \r\n    override _onPointerUp(): void {\r\n      super._onPointerUp();\r\n      if (this._sibling) {\r\n        setTimeout(() => {\r\n          this._sibling!._updateWidthInactive();\r\n          this._sibling!._hostElement.classList.remove('realsoft-slider-input-no-pointer-events');\r\n        });\r\n      }\r\n    }\r\n  \r\n    override _onPointerMove(event: PointerEvent): void {\r\n      super._onPointerMove(event);\r\n      if (!this._slider.step && this._isActive) {\r\n        this._updateSibling();\r\n      }\r\n    }\r\n  \r\n    override _fixValue(event: PointerEvent): void {\r\n      super._fixValue(event);\r\n      this._sibling?._updateMinMax();\r\n    }\r\n  \r\n    override _clamp(v: number): number {\r\n      return Math.max(Math.min(v, this.getMaxPos()), this.getMinPos());\r\n    }\r\n  \r\n    _updateMinMax(): void {\r\n      const sibling = this.getSibling();\r\n      if (!sibling) {\r\n        return;\r\n      }\r\n      if (this._isEndThumb) {\r\n        this.min = Math.max(this._slider.min, sibling.value);\r\n        this.max = this._slider.max;\r\n      } else {\r\n        this.min = this._slider.min;\r\n        this.max = Math.min(this._slider.max, sibling.value);\r\n      }\r\n    }\r\n  \r\n    override _updateWidthActive(): void {\r\n      const minWidth = this._slider._rippleRadius * 2 - this._slider._inputPadding * 2;\r\n      const maxWidth =\r\n        this._slider._cachedWidth + this._slider._inputPadding - minWidth - this._tickMarkOffset * 2;\r\n      const percentage =\r\n        this._slider.min < this._slider.max\r\n          ? (this.max - this.min) / (this._slider.max - this._slider.min)\r\n          : 1;\r\n      const width = maxWidth * percentage + minWidth;\r\n      this._hostElement.style.width = `${width}px`;\r\n      this._hostElement.style.padding = `0 ${this._slider._inputPadding}px`;\r\n    }\r\n  \r\n    override _updateWidthInactive(): void {\r\n      const sibling = this.getSibling();\r\n      if (!sibling) {\r\n        return;\r\n      }\r\n      const maxWidth = this._slider._cachedWidth - this._tickMarkOffset * 2;\r\n      const midValue = this._isEndThumb\r\n        ? this.value - (this.value - sibling.value) / 2\r\n        : this.value + (sibling.value - this.value) / 2;\r\n  \r\n      const _percentage = this._isEndThumb\r\n        ? (this.max - midValue) / (this._slider.max - this._slider.min)\r\n        : (midValue - this.min) / (this._slider.max - this._slider.min);\r\n  \r\n      const percentage = this._slider.min < this._slider.max ? _percentage : 1;\r\n  \r\n      let ripplePadding = this._slider._rippleRadius;\r\n  \r\n\r\n      if (percentage === 1) {\r\n        ripplePadding = 48;\r\n      } else if (percentage === 0) {\r\n        ripplePadding = 0;\r\n      }\r\n  \r\n      const width = maxWidth * percentage + ripplePadding;\r\n      this._hostElement.style.width = `${width}px`;\r\n      this._hostElement.style.padding = '0px';\r\n  \r\n      if (this._isLeftThumb) {\r\n        this._hostElement.style.left = `-${this._slider._rippleRadius - this._tickMarkOffset}px`;\r\n        this._hostElement.style.right = 'auto';\r\n      } else {\r\n        this._hostElement.style.left = 'auto';\r\n        this._hostElement.style.right = `-${this._slider._rippleRadius - this._tickMarkOffset}px`;\r\n      }\r\n    }\r\n  \r\n    _updateStaticStyles(): void {\r\n      this._hostElement.classList.toggle('realsoft-slider__right-input', !this._isLeftThumb);\r\n    }\r\n  \r\n    private _updateSibling(): void {\r\n      const sibling = this.getSibling();\r\n      if (!sibling) {\r\n        return;\r\n      }\r\n      sibling._updateMinMax();\r\n      if (this._isActive) {\r\n        sibling._updateWidthActive();\r\n      } else {\r\n        sibling._updateWidthInactive();\r\n      }\r\n    }\r\n  \r\n\r\n\r\n    override writeValue(value: any): void {\r\n      if (this._isControlInitialized || value !== null) {\r\n        this.value = value;\r\n        this._updateWidthInactive();\r\n        this._updateSibling();\r\n      }\r\n    }\r\n  \r\n    override _setValue(value: string) {\r\n      super._setValue(value);\r\n      this._updateWidthInactive();\r\n      this._updateSibling();\r\n    }\r\n  }","import {ENTER} from '@angular/cdk/keycodes';\r\nimport {InjectionToken} from '@angular/core';\r\nimport { RealsoftChip } from './chip';\r\n\r\n/** Default options, for the chips module, that can be overridden. */\r\nexport interface RealsoftChipsDefaultOptions {\r\n  /** The list of key codes that will trigger a chipEnd event. */\r\n  separatorKeyCodes: readonly number[] | ReadonlySet<number>;\r\n\r\n  /** Whether icon indicators should be hidden for single-selection. */\r\n  hideSingleSelectionIndicator?: boolean;\r\n\r\n  /** Whether icon indicators should be hidden for multiple-selection. */\r\n  hideMultipleSelectionIndicator?: boolean;\r\n}\r\n\r\n/** Injection token to be used to override the default options for the chips module. */\r\nexport const REALSOFT_CHIPS_DEFAULT_OPTIONS = new InjectionToken<RealsoftChipsDefaultOptions>(\r\n  'realsoft-chips-default-options',\r\n  {\r\n    providedIn: 'root',\r\n    factory: () => ({\r\n      separatorKeyCodes: [ENTER],\r\n    }),\r\n  },\r\n);\r\n\r\n/**\r\n * Injection token that can be used to reference instances of `MatChipAvatar`. It serves as\r\n * alternative token to the actual `MatChipAvatar` class which could cause unnecessary\r\n * retention of the class and its directive metadata.\r\n */\r\nexport const REALSOFT_CHIP_AVATAR = new InjectionToken('RealsoftChipAvatar');\r\n\r\n/**\r\n * Injection token that can be used to reference instances of `MatChipTrailingIcon`. It serves as\r\n * alternative token to the actual `MatChipTrailingIcon` class which could cause unnecessary\r\n * retention of the class and its directive metadata.\r\n */\r\nexport const REALSOFT_CHIP_TRAILING_ICON = new InjectionToken('RealsoftChipTrailingIcon');\r\n\r\n/**\r\n * Injection token that can be used to reference instances of `MatChipRemove`. It serves as\r\n * alternative token to the actual `MatChipRemove` class which could cause unnecessary\r\n * retention of the class and its directive metadata.\r\n */\r\nexport const REALSOFT_CHIP_REMOVE = new InjectionToken('RealsoftChipRemove');\r\n\r\n/**\r\n * Injection token used to avoid a circular dependency between the `RealsoftChip` and `RealsoftChipAction`.\r\n */\r\nexport const REALSOFT_CHIP = new InjectionToken('RealsoftChip');\r\n\r\nexport interface RealsoftChipEvent {\r\n    chip: RealsoftChip;\r\n}\r\n\r\n// Interface for a text control that is used to drive interaction with a realsoft-chip-list\r\nexport interface RealsoftChipTextControl {\r\n  id: string; // Unique identifier for the text control\r\n\r\n  placeholder: string; // The text control's placeholder text\r\n\r\n  focused: boolean; // Whether the text control has browser focus\r\n\r\n  empty: boolean; // Whether the text control is empty\r\n\r\n  focus(): void; // Focuses the text control\r\n\r\n  setDescribedByIds(ids: string[]): void; // Sets the list of ids the input is described by\r\n}\r\n\r\n","import {ENTER, SPACE} from '@angular/cdk/keycodes';\r\nimport {booleanAttribute, Directive, ElementRef, inject, Input, numberAttribute} from '@angular/core';\r\nimport { REALSOFT_CHIP, REALSOFT_CHIP_AVATAR, REALSOFT_CHIP_REMOVE, REALSOFT_CHIP_TRAILING_ICON } from './models';\r\n\r\n\r\n@Directive({\r\n    selector: '[realsoftChipAction]',\r\n    standalone: true,\r\n    host: {\r\n      'class': 'realsoft-evolution-chip__action realsoft-chip-action',\r\n      '[class.realsoft-evolution-chip__action--primary]': '_isPrimary',\r\n      '[class.realsoft-evolution-chip__action--presentational]': '!isInteractive',\r\n      '[class.realsoft-evolution-chip__action--trailing]': '!_isPrimary',\r\n      '[attr.tabindex]': '_getTabindex()',\r\n      '[attr.disabled]': 'disabled',\r\n      '[attr.aria-disabled]': 'disabled',\r\n      '(click)': '_handleClick($event)',\r\n      '(keydown)': '_handleKeydown($event)',\r\n    },\r\n  })\r\n  export class RealsoftChipAction {\r\n    _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n    protected _parentChip = inject<{\r\n      _handlePrimaryActionInteraction(): void;\r\n      remove(): void;\r\n      disabled: boolean;\r\n      _isEditing?: boolean;\r\n    }>(REALSOFT_CHIP);\r\n\r\n    private _disabled = false;\r\n  \r\n    // Whether the action is interactive\r\n    @Input() isInteractive = true;\r\n  \r\n    // Whether this is the primary action in the chip.\r\n    _isPrimary = true;\r\n  \r\n    // Whether the action is disabled.\r\n    @Input({transform: booleanAttribute})\r\n    get disabled(): boolean {\r\n      return this._disabled || this._parentChip?.disabled || false;\r\n    }\r\n    set disabled(value: boolean) {\r\n      this._disabled = value;\r\n    }\r\n    \r\n  \r\n    // Tab index of the action. \r\n    @Input({\r\n      transform: (value: unknown) => (value == null ? -1 : numberAttribute(value)),\r\n    })\r\n    tabIndex: number = -1;\r\n  \r\n    protected _getTabindex(): string | null {\r\n      return this.disabled  || !this.isInteractive\r\n        ? null\r\n        : this.tabIndex.toString();\r\n    }\r\n  \r\n  \r\n    constructor() {\r\n      if (this._elementRef.nativeElement.nodeName === 'BUTTON') {\r\n        this._elementRef.nativeElement.setAttribute('type', 'button');\r\n      }\r\n    }\r\n  \r\n    focus() {\r\n      this._elementRef.nativeElement.focus();\r\n    }\r\n  \r\n    _handleClick(event: MouseEvent) {\r\n      if (!this.disabled && this.isInteractive && this._isPrimary) {\r\n        event.preventDefault();\r\n        this._parentChip._handlePrimaryActionInteraction();\r\n      }\r\n    }\r\n  \r\n    _handleKeydown(event: KeyboardEvent) {\r\n      if (\r\n        (event.keyCode === ENTER || event.keyCode === SPACE) &&\r\n        !this.disabled &&\r\n        this.isInteractive &&\r\n        this._isPrimary &&\r\n        !this._parentChip._isEditing\r\n      ) {\r\n        event.preventDefault();\r\n        this._parentChip._handlePrimaryActionInteraction();\r\n      }\r\n    }\r\n  }\r\n\r\n@Directive({\r\n  selector: 'realsoft-chip-avatar, [realsoftChipAvatar]',\r\n  host: {\r\n    'class': 'realsoft-chip-avatar realsoft-evolution-chip__icon realsoft-evolution-chip__icon--primary',\r\n    'role': 'img',\r\n  },\r\n  providers: [{provide: REALSOFT_CHIP_AVATAR, useExisting: RealsoftChipAvatar}],\r\n  standalone: true,\r\n})\r\nexport class RealsoftChipAvatar {}\r\n\r\n@Directive({\r\n  selector: 'realsoft-chip-trailing-icon, [realsoftChipTrailingIcon]',\r\n  host: {\r\n    'class':\r\n      'realsoft-chip-trailing-icon realsoft-evolution-chip__icon realsoft-evolution-chip__icon--trailing',\r\n    'aria-hidden': 'true',\r\n  },\r\n  providers: [{provide: REALSOFT_CHIP_TRAILING_ICON, useExisting: RealsoftChipTrailingIcon}],\r\n  standalone: true,\r\n})\r\nexport class RealsoftChipTrailingIcon extends RealsoftChipAction {\r\n  override isInteractive = false;\r\n\r\n  override _isPrimary = false;\r\n}\r\n\r\n@Directive({\r\n  selector: '[realsoftChipRemove]',\r\n  standalone: true,\r\n  host: {\r\n    'class':\r\n      'realsoft-chip-remove realsoft-chip-trailing-icon realsoft-focus-indicator ' +\r\n      'realsoft-evolution-chip__icon realsoft-evolution-chip__icon--trailing',\r\n    'role': 'button',\r\n    '[attr.aria-hidden]': 'null',\r\n    \r\n  },\r\n  providers: [{provide: REALSOFT_CHIP_REMOVE, useExisting: RealsoftChipRemove}],\r\n})\r\nexport class RealsoftChipRemove extends RealsoftChipAction {\r\n  override _isPrimary = false;\r\n\r\n  override _handleClick(event: MouseEvent): void {\r\n    if (!this.disabled) {\r\n      event.stopPropagation();\r\n      event.preventDefault();\r\n      console.log('remove')\r\n      this._parentChip.remove();\r\n    }\r\n  }\r\n\r\n  override _handleKeydown(event: KeyboardEvent) {\r\n    if ((event.keyCode === ENTER || event.keyCode === SPACE) && !this.disabled) {\r\n      event.stopPropagation();\r\n      event.preventDefault();\r\n      this._parentChip.remove();\r\n    }\r\n  }\r\n}","\r\nimport { ChangeDetectionStrategy, NgZone, OnInit, Component, ViewEncapsulation, ChangeDetectorRef, AfterViewInit, ElementRef, HOST_TAG_NAME, AfterContentInit, OnDestroy, Input, ANIMATION_MODULE_TYPE, ContentChildren, QueryList, booleanAttribute, Output, EventEmitter, ContentChild, ViewChild, Injector, inject } from \"@angular/core\";\r\nimport { REALSOFT_CHIP, REALSOFT_CHIP_AVATAR, REALSOFT_CHIP_REMOVE, REALSOFT_CHIP_TRAILING_ICON, RealsoftChipEvent } from \"./models\";\r\nimport { RealsoftChipAction, RealsoftChipAvatar, RealsoftChipRemove, RealsoftChipTrailingIcon } from \"./chip-avatar\";\r\nimport { merge, Subscription } from \"rxjs\";\r\nimport { DOCUMENT } from \"@angular/common\";\r\nimport { Subject } from \"rxjs\";\r\nimport { UniqueIdGeneratorService } from \"../id-generator\";\r\nimport { BACKSPACE, DELETE } from \"@angular/cdk/keycodes\";\r\nimport {FocusMonitor} from '@angular/cdk/a11y';\r\n\r\n\r\n@Component({\r\n  selector: 'realsoft-basic-chip, [realsoft-basic-chip], realsoft-chip, [realsoft-chip]',\r\n  exportAs: 'realsoftChip',\r\n  templateUrl: './chip.html',\r\n  styleUrl: './chip.scss',\r\n  host: {\r\n    'class': 'realsoft-evolution-chip',\r\n    '[class.realsoft-evolution-chip]': '!_isBasicChip',\r\n    '[class.realsoft-evolution-chip--disabled]': 'disabled',\r\n    '[class.realsoft-evolution-chip--with-trailing-action]': '_hasTrailingIcon()',\r\n    '[class.realsoft-evolution-chip--with-primary-graphic]': 'leadingIcon',\r\n    '[class.realsoft-evolution-chip--with-primary-icon]': 'leadingIcon',\r\n    '[class.realsoft-evolution-chip--with-avatar]': 'leadingIcon',\r\n    '[class.realsoft-chip-with-avatar]': 'leadingIcon',\r\n    '[class.realsoft-chip-highlighted]': 'highlighted',\r\n    '[class.realsoft-chip-disabled]': 'disabled',\r\n    '[class.realsoft-basic-chip]': '_isBasicChip',\r\n    '[class.realsoft-standard-chip]': '!_isBasicChip',\r\n    '[class.realsoft-chip-with-trailing-icon]': '_hasTrailingIcon()',\r\n    '[class._realsoft-animation-noopable]': '_animationsDisabled',\r\n    '[id]': 'id',\r\n    '[attr.role]': 'role',\r\n    '[attr.aria-label]': 'ariaLabel',\r\n    '(keydown)': '_handleKeydown($event)',\r\n    '(click)': 'remove()'\r\n  },\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  providers: [{provide: REALSOFT_CHIP, useExisting: RealsoftChip}],\r\n  imports: [RealsoftChipAction],\r\n  standalone:true\r\n})\r\nexport class RealsoftChip implements OnInit, AfterViewInit, AfterContentInit, OnDestroy {\r\n  _changeDetectorRef = inject(ChangeDetectorRef);\r\n  _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n  private readonly _tagName = inject(HOST_TAG_NAME);\r\n  protected _ngZone = inject(NgZone);\r\n  private _focusMonitor = inject(FocusMonitor);\r\n  protected _document = inject(DOCUMENT);\r\n  readonly _onFocus = new Subject<RealsoftChipEvent>();\r\n  readonly _onBlur = new Subject<RealsoftChipEvent>();\r\n  _isBasicChip: boolean;\r\n  private _hasFocusInternal = false;\r\n  private _pendingFocus: boolean;\r\n  private _actionChanges: Subscription | undefined;\r\n  private _animationsModule = inject(ANIMATION_MODULE_TYPE, {optional: true})\r\n  _animationsDisabled = this._animationsModule === 'NoopAnimations';\r\n  @Input() id: string = inject(UniqueIdGeneratorService).generateID('realsoft-chip-');\r\n  _ariaDescriptionId = `${this.id}-aria-description`;\r\n  private _disabled = false;\r\n  protected basicChipAttrName = 'realsoft-basic-chip';\r\n\r\n  _chipListDisabled: boolean = false;\r\n\r\n  private _textElement!: HTMLElement;\r\n  protected _value: any;\r\n  protected _injector = inject(Injector);\r\n\r\n\r\n  @Input() role: string | null = null;\r\n\r\n  @ContentChildren(REALSOFT_CHIP_AVATAR, {descendants: true})\r\n  protected _allLeadingIcons: QueryList<RealsoftChipAvatar>;\r\n\r\n  @ContentChildren(REALSOFT_CHIP_TRAILING_ICON, {descendants: true})\r\n  protected _allTrailingIcons: QueryList<RealsoftChipTrailingIcon>;\r\n\r\n  @ContentChildren(REALSOFT_CHIP_REMOVE, {descendants: true})\r\n  protected _allRemoveIcons: QueryList<RealsoftChipRemove>;\r\n\r\n  _hasFocus() {\r\n    return this._hasFocusInternal;\r\n  }\r\n\r\n  @Input('aria-label') ariaLabel: string | null = null;\r\n\r\n  @Input('aria-description') ariaDescription: string | null = null;\r\n\r\n  @Input()\r\n  get value(): any {\r\n    return this._value !== undefined ? this._value : this._textElement.textContent!.trim();\r\n  }\r\n  set value(value: any) {\r\n    this._value = value;\r\n  }\r\n \r\n\r\n  @Input({transform: booleanAttribute})\r\n  removable: boolean = true;\r\n\r\n  @Input({transform: booleanAttribute})\r\n  highlighted: boolean = false;\r\n\r\n\r\n  @Input({transform: booleanAttribute})\r\n  get disabled(): boolean {\r\n    return this._disabled || this._chipListDisabled;\r\n  }\r\n  set disabled(value: boolean) {\r\n    this._disabled = value;\r\n  }\r\n  \r\n\r\n  @Output() readonly removed: EventEmitter<RealsoftChipEvent> = new EventEmitter<RealsoftChipEvent>();\r\n\r\n  @Output() readonly destroyed: EventEmitter<RealsoftChipEvent> = new EventEmitter<RealsoftChipEvent>();\r\n\r\n  @ContentChild(REALSOFT_CHIP_AVATAR) leadingIcon: RealsoftChipAvatar;\r\n\r\n  @ContentChild(REALSOFT_CHIP_TRAILING_ICON) trailingIcon: RealsoftChipTrailingIcon;\r\n\r\n  @ContentChild(REALSOFT_CHIP_REMOVE) removeIcon: RealsoftChipRemove;\r\n\r\n  @ViewChild(RealsoftChipAction) primaryAction: RealsoftChipAction;\r\n\r\n\r\n  constructor(...args: unknown[]);\r\n\r\n  constructor() {\r\n    this._monitorFocus();\r\n  }\r\n\r\n  ngOnInit() {\r\n    this._isBasicChip =\r\n      this._elementRef.nativeElement.hasAttribute(this.basicChipAttrName) ||\r\n      this._tagName.toLowerCase() === this.basicChipAttrName;\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this._textElement = this._elementRef.nativeElement.querySelector('.realsoft-chip-action-label')!;\r\n\r\n    if (this._pendingFocus) {\r\n      this._pendingFocus = false;\r\n      this.focus();\r\n    }\r\n  }\r\n\r\n  ngAfterContentInit(): void {\r\n    this._actionChanges = merge(\r\n      this._allLeadingIcons.changes,\r\n      this._allTrailingIcons.changes,\r\n      this._allRemoveIcons.changes,\r\n    ).subscribe(() => this._changeDetectorRef.markForCheck());\r\n  }\r\n\r\n\r\n\r\n  ngOnDestroy() {\r\n    this._focusMonitor.stopMonitoring(this._elementRef);\r\n    this._actionChanges?.unsubscribe();\r\n    this.destroyed.emit({chip: this});\r\n    this.destroyed.complete();\r\n  }\r\n\r\n  remove(): void {\r\n    if (this.removable) {\r\n      this.removed.emit({chip: this});\r\n    }\r\n  }\r\n\r\n  _hasTrailingIcon() {\r\n    return !!(this.trailingIcon || this.removeIcon);\r\n  }\r\n\r\n  _handleKeydown(event: KeyboardEvent) {\r\n\r\n    if ((event.keyCode === BACKSPACE && !event.repeat) || event.keyCode === DELETE) {\r\n      event.preventDefault();\r\n      this.remove();\r\n    }\r\n  }\r\n\r\n  focus(): void {\r\n    if (!this.disabled) {\r\n      if (this.primaryAction) {\r\n        this.primaryAction.focus();\r\n      } else {\r\n        this._pendingFocus = true;\r\n      }\r\n    }\r\n  }\r\n\r\n  _getSourceAction(target: Node): RealsoftChipAction | undefined {\r\n    return this._getActions().find(action => {\r\n      const element = action._elementRef.nativeElement;\r\n      return element === target || element.contains(target);\r\n    });\r\n  }\r\n\r\n  _getActions(): RealsoftChipAction[] {\r\n    const result: RealsoftChipAction[] = [];\r\n\r\n    if (this.primaryAction) {\r\n      result.push(this.primaryAction);\r\n    }\r\n\r\n    if (this.removeIcon) {\r\n      result.push(this.removeIcon);\r\n    }\r\n\r\n    if (this.trailingIcon) {\r\n      result.push(this.trailingIcon);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  _handlePrimaryActionInteraction() {\r\n    // Empty here, but is overwritten in child classes.\r\n  }\r\n\r\n  private _monitorFocus() {\r\n    this._focusMonitor.monitor(this._elementRef, true).subscribe(origin => {\r\n      const hasFocus = origin !== null;\r\n\r\n      if (hasFocus !== this._hasFocusInternal) {\r\n        this._hasFocusInternal = hasFocus;\r\n\r\n        if (hasFocus) {\r\n          this._onFocus.next({chip: this});\r\n        } else {\r\n          this._changeDetectorRef.markForCheck();\r\n          setTimeout(() => this._ngZone.run(() => this._onBlur.next({chip: this})));\r\n        }\r\n      }\r\n    });\r\n  }\r\n}","<span class=\"realsoft-chip-focus-overlay\"></span>\r\n\r\n<span class=\"realsoft-evolution-chip__cell realsoft-evolution-chip__cell--primary\">\r\n  <span realsoftChipAction [isInteractive]=\"false\">\r\n    @if (leadingIcon) {\r\n      <span class=\"realsoft-evolution-chip__graphic realsoft-chip-graphic\">\r\n        <ng-content select=\"realsoft-chip-avatar, [realsoftChipAvatar]\"></ng-content>\r\n      </span>\r\n    }\r\n    <span class=\"realsoft-evolution-chip__text-label realsoft-chip-action-label\">\r\n      <ng-content></ng-content>\r\n      <span class=\"realsoft-chip-primary-focus-indicator realsoft-focus-indicator\"></span>\r\n    </span>\r\n  </span>\r\n</span>\r\n\r\n@if (_hasTrailingIcon()) {\r\n  <span class=\"realsoft-evolution-chip__cell realsoft-evolution-chip__cell--trailing\">\r\n    <ng-content select=\"realsoft-chip-trailing-icon,[realsoftChipRemove],[realsoftChipTrailingIcon]\"></ng-content>\r\n  </span>\r\n}","import { DOCUMENT } from \"@angular/common\";\r\nimport { Directive, inject, ElementRef } from \"@angular/core\";\r\n\r\n@Directive({\r\n    selector: 'span[realsoftChipEditInput]',\r\n    standalone: true,\r\n    host: {\r\n      'class': 'realsoft-chip-edit-input',\r\n      'role': 'textbox',\r\n      'tabindex': '-1',\r\n      'contenteditable': 'true',\r\n    },\r\n})\r\nexport class RealsoftChipEditInput {\r\n    private readonly _elementRef = inject(ElementRef);\r\n  \r\n    constructor(...args: unknown[]);\r\n    constructor() {}\r\n  \r\n    initialize(initialValue: string) {\r\n      this.getNativeElement().focus();\r\n      this.setValue(initialValue);\r\n    }\r\n  \r\n    getNativeElement(): HTMLElement {\r\n      return this._elementRef.nativeElement;\r\n    }\r\n  \r\n    setValue(value: string) {\r\n      this.getNativeElement().textContent = value;\r\n      this._moveCursorToEndOfInput();\r\n    }\r\n  \r\n    getValue(): string {\r\n      return this.getNativeElement().textContent || '';\r\n    }\r\n  \r\n    private _moveCursorToEndOfInput(): void {\r\n        const element = this.getNativeElement();\r\n        if (!element) return;\r\n      \r\n        const range = document.createRange();\r\n        const selection = window.getSelection();\r\n      \r\n        range.selectNodeContents(element);\r\n        range.collapse(false); // Move cursor to the end\r\n      \r\n        selection?.removeAllRanges();\r\n        selection?.addRange(range);\r\n      }\r\n  }","import {ENTER} from '@angular/cdk/keycodes';\r\nimport {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ContentChild,\r\n  EventEmitter,\r\n  Input,\r\n  Output,\r\n  ViewChild,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { RealsoftChip } from './chip';\r\nimport { RealsoftChipEditInput } from './chip-edit-input';\r\nimport { RealsoftChipAction } from './chip-avatar';\r\nimport { REALSOFT_CHIP, RealsoftChipEvent } from './models';\r\n\r\n\r\nexport interface RealsoftChipEditedEvent extends RealsoftChipEvent {\r\n  value: string;\r\n}\r\n\r\n@Component({\r\n  selector: 'realsoft-chip-row, [realsoft-chip-row], realsoft-basic-chip-row, [realsoft-basic-chip-row]',\r\n  templateUrl: 'chip-row.html',\r\n  styleUrl: 'chip.scss',\r\n  host: {\r\n    'class': 'realsoft-chip realsoft-chip-row realsoft-evolution-chip',\r\n    '[class.realsoft-chip-with-avatar]': 'leadingIcon',\r\n    '[class.realsoft-chip-disabled]': 'disabled',\r\n    '[class.realsoft-chip-editing]': '_isEditing',\r\n    '[class.realsoft-chip-editable]': 'editable',\r\n    '[class.realsoft-evolution-chip--disabled]': 'disabled',\r\n    '[class.realsoft-evolution-chip--with-trailing-action]': '_hasTrailingIcon()',\r\n    '[class.realsoft-evolution-chip--with-primary-graphic]': 'leadingIcon',\r\n    '[class.realsoft-evolution-chip--with-primary-icon]': 'leadingIcon',\r\n    '[class.realsoft-evolution-chip--with-avatar]': 'leadingIcon',\r\n    '[class.realsoft-chip-highlighted]': 'highlighted',\r\n    '[class.realsoft-chip-with-trailing-icon]': '_hasTrailingIcon()',\r\n    '[id]': 'id',\r\n    '[attr.tabindex]': 'disabled ? null : -1',\r\n    '[attr.aria-label]': 'null',\r\n    '[attr.aria-description]': 'null',\r\n    '[attr.role]': 'role',\r\n    '(focus)': '_handleFocus()',\r\n    '(dblclick)': '_handleDoubleclick($event)',\r\n  },\r\n  providers: [\r\n    {provide: RealsoftChip, useExisting: RealsoftChipRow},\r\n    {provide: REALSOFT_CHIP, useExisting: RealsoftChipRow},\r\n  ],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  imports: [RealsoftChipAction, RealsoftChipEditInput],\r\n  standalone: true,\r\n})\r\nexport class RealsoftChipRow extends RealsoftChip implements AfterViewInit {\r\n  protected override basicChipAttrName = 'realsoft-basic-chip-row';\r\n\r\n  private _editStartPending = false;\r\n\r\n  @Input() editable: boolean = false;\r\n\r\n  @Output() readonly edited: EventEmitter<RealsoftChipEditedEvent> = new EventEmitter<RealsoftChipEditedEvent>();\r\n\r\n  /** The default chip edit input that is used if none is projected into this chip row. */\r\n  @ViewChild(RealsoftChipEditInput) defaultEditInput?: RealsoftChipEditInput;\r\n\r\n  /** The projected chip edit input. */\r\n  @ContentChild(RealsoftChipEditInput) contentEditInput?: RealsoftChipEditInput;\r\n\r\n  _isEditing = false;\r\n\r\n  constructor() {\r\n    super();\r\n    this.role = 'row';\r\n  }\r\n\r\n  override _hasTrailingIcon() {\r\n    // The trailing icon is hidden while editing.\r\n    return !this._isEditing && super._hasTrailingIcon();\r\n  }\r\n\r\n  /** Sends focus to the first gridcell when the user clicks anywhere inside the chip. */\r\n  _handleFocus() {\r\n    if (!this._isEditing && !this.disabled) {\r\n      this.focus();\r\n    }\r\n  }\r\n\r\n  override _handleKeydown(event: KeyboardEvent): void {\r\n    if (event.keyCode === ENTER && !this.disabled) {\r\n      if (this._isEditing) {\r\n        event.preventDefault();\r\n        this._onEditFinish();\r\n      } else if (this.editable) {\r\n        this._startEditing(event);\r\n      }\r\n    } else if (this._isEditing) {\r\n      // Stop the event from reaching the chip set in order to avoid navigating.\r\n      event.stopPropagation();\r\n    } else {\r\n      super._handleKeydown(event);\r\n    }\r\n  }\r\n\r\n  _handleDoubleclick(event: MouseEvent) {\r\n    if (!this.disabled && this.editable) {\r\n      this._startEditing(event);\r\n    }\r\n  }\r\n\r\n  private _startEditing(event: Event) {\r\n    // If the action is done on the remove icon, simple return no need to start the editing process.\r\n    if (\r\n      !this.primaryAction ||\r\n      (this.removeIcon && this._getSourceAction(event.target as Node) === this.removeIcon)\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    // The value depends on the DOM so we need to extract it before we flip the flag.\r\n    const value = this.value;\r\n\r\n    this._isEditing = this._editStartPending = true;\r\n\r\n    this._ngZone.runOutsideAngular(() => {\r\n        setTimeout(() => {\r\n          this._getEditInput().initialize(value);\r\n          this._editStartPending = false;\r\n        });\r\n      });\r\n  }\r\n\r\n  private _onEditFinish() {\r\n    this._isEditing = this._editStartPending = false;\r\n    this.edited.emit({chip: this, value: this._getEditInput().getValue()});\r\n\r\n    if (\r\n      this._document.activeElement === this._getEditInput().getNativeElement() ||\r\n      this._document.activeElement === this._document.body\r\n    ) {\r\n      this.primaryAction.focus();\r\n    }\r\n  }\r\n\r\n  private _getEditInput(): RealsoftChipEditInput {\r\n    return this.contentEditInput || this.defaultEditInput!;\r\n  }\r\n}","@if (!_isEditing) {\r\n    <span class=\"realsoft-chip-focus-overlay\"></span>\r\n  }\r\n  \r\n  <span class=\"realsoft-evolution-chip__cell realsoft-evolution-chip__cell--primary\" role=\"gridcell\"\r\n      realsoftChipAction\r\n      [disabled]=\"disabled\"\r\n      [attr.aria-label]=\"ariaLabel\"\r\n      [attr.aria-describedby]=\"_ariaDescriptionId\">\r\n    @if (leadingIcon) {\r\n      <span class=\"realsoft-evolution-chip__graphic realsoft-chip-graphic\">\r\n        <ng-content select=\"realsoft-chip-avatar, [realsoftChipAvatar]\"></ng-content>\r\n      </span>\r\n    }\r\n  \r\n    <span class=\"realsoft-evolution-chip__text-label realsoft-chip-action-label\">\r\n      @if (_isEditing) {\r\n        @if (contentEditInput) {\r\n          <ng-content select=\"[realsoftChipEditInput]\"></ng-content>\r\n        } @else {\r\n          <span realsoftChipEditInput></span>\r\n        }\r\n      } @else {\r\n        <ng-content></ng-content>\r\n      }\r\n  \r\n      <span class=\"realsoft-chip-primary-focus-indicator realsoft-focus-indicator\" aria-hidden=\"true\"></span>\r\n    </span>\r\n  </span>\r\n  \r\n  @if (_hasTrailingIcon()) {\r\n    <span\r\n      class=\"realsoft-evolution-chip__cell realsoft-evolution-chip__cell--trailing\"\r\n      role=\"gridcell\">\r\n      <ng-content select=\"realsoft-chip-trailing-icon,[realsoftChipRemove],[realsoftChipTrailingIcon]\"></ng-content>\r\n    </span>\r\n  }\r\n  \r\n  <span class=\"cdk-visually-hidden\" [id]=\"_ariaDescriptionId\">{{ariaDescription}}</span>","import { FocusKeyManager } from '@angular/cdk/a11y';\r\nimport { Directionality } from '@angular/cdk/bidi';\r\nimport {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ContentChildren,\r\n  ElementRef,\r\n  Input,\r\n  OnDestroy,\r\n  QueryList,\r\n  ViewEncapsulation,\r\n  booleanAttribute,\r\n  numberAttribute,\r\n  inject,\r\n} from '@angular/core';\r\nimport { Observable, Subject, merge } from 'rxjs';\r\nimport { startWith, switchMap, takeUntil } from 'rxjs/operators';\r\nimport { RealsoftChip } from './chip';\r\nimport { RealsoftChipAction } from './chip-avatar';\r\nimport { RealsoftChipEvent } from './models';\r\n\r\n\r\n@Component({\r\n  selector: 'realsoft-chip-set',\r\n  template: `\r\n    <div class=\"realsoft-evolution-chip-set__chips\" role=\"presentation\">\r\n      <ng-content></ng-content>\r\n    </div>\r\n  `,\r\n  styleUrl: 'chip.scss',\r\n  host: {\r\n    'class': 'realsoft-chip-set realsoft-evolution-chip-set',\r\n    '(keydown)': '_handleKeydown($event)',\r\n    '[attr.role]': 'role',\r\n  },\r\n  standalone: true,\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RealsoftChipSet implements AfterViewInit, OnDestroy {\r\n  protected _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n  protected _changeDetectorRef = inject(ChangeDetectorRef);\r\n  private _dir = inject(Directionality, {optional: true});\r\n  private _lastDestroyedFocusedChipIndex: number | null = null;\r\n  protected _keyManager: FocusKeyManager<RealsoftChipAction>;\r\n  protected _destroyed = new Subject<void>();\r\n  protected _defaultRole = 'presentation';\r\n  protected _disabled: boolean = false;\r\n  private _explicitRole: string | null = null;\r\n  _chipActions = new QueryList<RealsoftChipAction>();\r\n\r\n  get chipFocusChanges(): Observable<RealsoftChipEvent> {\r\n    return this._getChipStream(chip => chip._onFocus);\r\n  }\r\n\r\n  get chipDestroyedChanges(): Observable<RealsoftChipEvent> {\r\n    return this._getChipStream(chip => chip.destroyed);\r\n  }\r\n\r\n  get chipRemovedChanges(): Observable<RealsoftChipEvent> {\r\n    return this._getChipStream(chip => chip.removed);\r\n  }\r\n\r\n  @Input({transform: booleanAttribute})\r\n  get disabled(): boolean {\r\n    return this._disabled;\r\n  }\r\n  set disabled(value: boolean) {\r\n    this._disabled = value;\r\n    this._syncChipsState();\r\n  }\r\n  \r\n\r\n  /** Whether the chip list contains chips or not. */\r\n  get empty(): boolean {\r\n    return !this._chips || this._chips.length === 0;\r\n  }\r\n\r\n  /** The ARIA role applied to the chip set. */\r\n  @Input()\r\n  get role(): string | null {\r\n    if (this._explicitRole) {\r\n      return this._explicitRole;\r\n    }\r\n\r\n    return this.empty ? null : this._defaultRole;\r\n  }\r\n\r\n  @Input({\r\n    transform: (value: unknown) => (value == null ? 0 : numberAttribute(value)),\r\n  })\r\n  tabIndex: number = 0;\r\n\r\n  set role(value: string | null) {\r\n    this._explicitRole = value;\r\n  }\r\n  \r\n  get focused(): boolean {\r\n    return this._hasFocusedChip();\r\n  }\r\n\r\n  @ContentChildren(RealsoftChip, {\r\n    descendants: true,\r\n  })\r\n  _chips: QueryList<RealsoftChip>;\r\n\r\n  \r\n\r\n  constructor(...args: unknown[]);\r\n  constructor() {}\r\n\r\n  ngAfterViewInit() {\r\n    this._setUpFocusManagement();\r\n    this._trackChipSetChanges();\r\n    this._trackDestroyedFocusedChip();\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._keyManager?.destroy();\r\n    this._chipActions.destroy();\r\n    this._destroyed.next();\r\n    this._destroyed.complete();\r\n  }\r\n\r\n  protected _hasFocusedChip() {\r\n    return this._chips && this._chips.some(chip => chip._hasFocus());\r\n  }\r\n\r\n  protected _syncChipsState() {\r\n    this._chips?.forEach(chip => {\r\n      chip._chipListDisabled = this._disabled;\r\n      chip._changeDetectorRef.markForCheck();\r\n    });\r\n  }\r\n\r\n  focus() {}\r\n\r\n  _handleKeydown(event: KeyboardEvent) {\r\n    if (this._originatesFromChip(event)) {\r\n      this._keyManager.onKeydown(event);\r\n    }\r\n  }\r\n\r\n\r\n  protected _isValidIndex(index: number): boolean {\r\n    return index >= 0 && index < this._chips.length;\r\n  }\r\n\r\n\r\n  protected _allowFocusEscape() {\r\n    const previous = this._elementRef.nativeElement.tabIndex;\r\n\r\n    if (previous !== -1) {\r\n      this._elementRef.nativeElement.tabIndex = -1;\r\n\r\n      setTimeout(() => (this._elementRef.nativeElement.tabIndex = previous));\r\n    }\r\n  }\r\n\r\n  protected _getChipStream<T, C extends RealsoftChip = RealsoftChip>(\r\n    mappingFunction: (chip: C) => Observable<T>,\r\n  ): Observable<T> {\r\n    return this._chips.changes.pipe(\r\n      startWith(null),\r\n      switchMap(() => merge(...(this._chips as QueryList<C>).map(mappingFunction))),\r\n    );\r\n  }\r\n\r\n  protected _originatesFromChip(event: Event): boolean {\r\n    let currentElement = event.target as HTMLElement | null;\r\n\r\n    while (currentElement && currentElement !== this._elementRef.nativeElement) {\r\n      if (currentElement.classList.contains('realsoft-chip')) {\r\n        return true;\r\n      }\r\n      currentElement = currentElement.parentElement;\r\n    }\r\n    return false;\r\n  }\r\n\r\n\r\n  private _setUpFocusManagement() {\r\n\r\n    this._chips.changes.pipe(startWith(this._chips)).subscribe((chips: QueryList<RealsoftChip>) => {\r\n      const actions: RealsoftChipAction[] = [];\r\n      chips.forEach(chip => chip._getActions().forEach(action => actions.push(action)));\r\n      this._chipActions.reset(actions);\r\n      this._chipActions.notifyOnChanges();\r\n    });\r\n\r\n    this._keyManager = new FocusKeyManager(this._chipActions)\r\n      .withVerticalOrientation()\r\n      .withHorizontalOrientation(this._dir ? this._dir.value : 'ltr')\r\n      .withHomeAndEnd()\r\n      .skipPredicate(action => this._skipPredicate(action));\r\n\r\n    this.chipFocusChanges.pipe(takeUntil(this._destroyed)).subscribe(({chip}) => {\r\n      const action = chip._getSourceAction(document.activeElement as Element);\r\n\r\n      if (action) {\r\n        this._keyManager.updateActiveItem(action);\r\n      }\r\n    });\r\n\r\n    this._dir?.change\r\n      .pipe(takeUntil(this._destroyed))\r\n      .subscribe(direction => this._keyManager.withHorizontalOrientation(direction));\r\n  }\r\n\r\n\r\n  protected _skipPredicate(action: RealsoftChipAction): boolean {\r\n    return !action.isInteractive || action.disabled;\r\n  }\r\n\r\n  private _trackChipSetChanges() {\r\n    this._chips.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {\r\n      if (this.disabled) {\r\n        Promise.resolve().then(() => this._syncChipsState());\r\n      }\r\n\r\n      this._redirectDestroyedChipFocus();\r\n    });\r\n  }\r\n\r\n  private _trackDestroyedFocusedChip() {\r\n    this.chipDestroyedChanges.pipe(takeUntil(this._destroyed)).subscribe((event: RealsoftChipEvent) => {\r\n      const chipArray = this._chips.toArray();\r\n      const chipIndex = chipArray.indexOf(event.chip);\r\n      if (this._isValidIndex(chipIndex) && event.chip._hasFocus()) {\r\n        this._lastDestroyedFocusedChipIndex = chipIndex;\r\n      }\r\n    });\r\n  }\r\n\r\n  private _redirectDestroyedChipFocus() {\r\n    if (this._lastDestroyedFocusedChipIndex == null) {\r\n      return;\r\n    }\r\n\r\n    if (this._chips.length) {\r\n      const newIndex = Math.min(this._lastDestroyedFocusedChipIndex, this._chips.length - 1);\r\n      const chipToFocus = this._chips.toArray()[newIndex];\r\n\r\n      if (chipToFocus.disabled) {\r\n        if (this._chips.length === 1) {\r\n          this.focus();\r\n        } else {\r\n          this._keyManager.setPreviousItemActive();\r\n        }\r\n      } else {\r\n        chipToFocus.focus();\r\n      }\r\n    } else {\r\n      this.focus();\r\n    }\r\n\r\n    this._lastDestroyedFocusedChipIndex = null;\r\n  }\r\n}","\r\n\r\n\r\nimport { Injectable } from \"@angular/core\";\r\nimport { AbstractControl, FormGroupDirective, NgControl, NgForm } from \"@angular/forms\";\r\nimport { Subject } from 'rxjs';\r\n\r\nexport interface RealsoftErrorState extends ErrorStateMatcher {}\r\n\r\n\r\n//This code defines an Angular service called ErrorState which is used to determine whether a form control should be displayed in an error state. It's designed to work with Angular's form validation system, particularly is scenarios where you want to customize error display logic.\r\n@Injectable({providedIn: 'root'})\r\nexport class ErrorStateMatcher {\r\n\r\n  //The method determines if a form control should be marked as having an error, it takes two parameters: control is the form control being checked, and the parent form which is optional\r\n  //The method returns a boolan where if true => This means that the control is an an error state, and if false the control is valid\r\n  isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\r\n    //contol && control.invalid => Ensures the control exists and has validation errors where invalid is true\r\n    //(control.touched || (form && form.submitted)) => Ensures the user has interacted with the control or the form has been submitted\r\n    //The !! ensures the result is a boolean value\r\n    return !!(control && control.invalid && (control.touched || (form && form.submitted)));\r\n  }\r\n}\r\n\r\nexport class ErrorState {\r\n    errorState = false;\r\n    matcher: ErrorStateMatcher;\r\n\r\n    constructor(\r\n        private _defaultMatcher: ErrorStateMatcher | null,\r\n        public ngControl: NgControl | null,\r\n        private _parentFormGroup: FormGroupDirective | null,\r\n        private _parentForm: NgForm | null,\r\n        private _stateChanges: Subject<void>,\r\n    ) {}\r\n\r\n    updateErrorState() {\r\n        const oldState = this.errorState;\r\n        const parent = this._parentFormGroup || this._parentForm;\r\n        const matcher = this._defaultMatcher || this.matcher;\r\n        const control = this.ngControl?.control as AbstractControl ?? null;\r\n        const newState = matcher?.isErrorState(control, parent) ?? false;\r\n\r\n        if(newState !== oldState) {\r\n            this.errorState = newState;\r\n            this._stateChanges.next();\r\n        }\r\n    }\r\n\r\n}\r\n\r\n","import {DOWN_ARROW, hasModifierKey, TAB, UP_ARROW} from '@angular/cdk/keycodes';\r\nimport {\r\n  AfterContentInit,\r\n  AfterViewInit,\r\n  booleanAttribute,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ContentChildren,\r\n  DoCheck,\r\n  EventEmitter,\r\n  Input,\r\n  OnDestroy,\r\n  Output,\r\n  QueryList,\r\n  ViewEncapsulation,\r\n  inject,\r\n} from '@angular/core';\r\nimport {\r\n  ControlValueAccessor,\r\n  FormGroupDirective,\r\n  NgControl,\r\n  NgForm,\r\n  Validators,\r\n} from '@angular/forms';\r\nimport { merge, Observable, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { RealsoftChipRow } from './chip-row';\r\nimport { RealsoftChipSet } from './chip-set';\r\nimport { RealsoftFormFieldControl } from '../form-field/directives/form-field-control';\r\nimport { RealsoftChipEvent, RealsoftChipTextControl } from './models';\r\nimport { ErrorState, ErrorStateMatcher } from '../error-state-matcher';\r\n\r\nexport class RealsoftChipGridChange {\r\n  constructor(\r\n    public source: RealsoftChipGrid,\r\n    public value: any,\r\n  ) {}\r\n}\r\n\r\n@Component({\r\n  selector: 'realsoft-chip-grid',\r\n  template: `\r\n    <div class=\"realsoft-evolution-chip-set__chips\" role=\"presentation\">\r\n      <ng-content></ng-content>\r\n    </div>\r\n  `,\r\n  styleUrl: 'chip.scss',\r\n  host: {\r\n    'class': 'realsoft-chip-set realsoft-chip-grid realsoft-evolution-chip-set',\r\n    '[attr.role]': 'role',\r\n    '[attr.tabindex]': '(disabled || (_chips && _chips.length === 0)) ? -1 : tabIndex',\r\n    '[attr.aria-disabled]': 'disabled.toString()',\r\n    '[attr.aria-invalid]': 'errorState',\r\n    '[class.realsoft-chip-list-disabled]': 'disabled',\r\n    '[class.realsoft-chip-list-invalid]': 'errorState',\r\n    '[class.realsoft-chip-list-required]': 'required',\r\n    '(focus)': 'focus()',\r\n    '(blur)': '_blur()',\r\n  },\r\n  providers: [{provide: RealsoftFormFieldControl, useExisting: RealsoftChipGrid}],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true\r\n})\r\nexport class RealsoftChipGrid\r\n  extends RealsoftChipSet\r\n  implements\r\n    AfterContentInit,\r\n    AfterViewInit,\r\n    ControlValueAccessor,\r\n    DoCheck,\r\n    RealsoftFormFieldControl<any>,\r\n    OnDestroy\r\n{\r\n  ngControl = inject(NgControl, {optional: true, self: true})!;\r\n  readonly controlType: string = 'realsoft-chip-grid';\r\n  protected _chipInput: RealsoftChipTextControl;\r\n  protected override _defaultRole = 'grid';\r\n  private _errorStateTracker: ErrorState;\r\n  private _ariaDescribedbyIds: string[] = [];\r\n  _onTouched = () => {};\r\n  _onChange: (value: any) => void = () => {};\r\n  protected _placeholder: string;\r\n  protected _required: boolean | undefined;\r\n  protected _value: any[] = [];\r\n  readonly stateChanges = new Subject<void>();\r\n\r\n\r\n\r\n  @Input({transform: booleanAttribute})\r\n  override get disabled(): boolean {\r\n    return this.ngControl ? !!this.ngControl.disabled : this._disabled;\r\n  }\r\n  override set disabled(value: boolean) {\r\n    this._disabled = value;\r\n    this._syncChipsState();\r\n    this.stateChanges.next();\r\n  }\r\n\r\n\r\n  get id(): string {\r\n    return this._chipInput.id;\r\n  }\r\n\r\n\r\n  override get empty(): boolean {\r\n    return (\r\n      (!this._chipInput || this._chipInput.empty) && (!this._chips || this._chips.length === 0)\r\n    );\r\n  }\r\n\r\n\r\n  @Input()\r\n  get placeholder(): string {\r\n    return this._chipInput ? this._chipInput.placeholder : this._placeholder;\r\n  }\r\n  set placeholder(value: string) {\r\n    this._placeholder = value;\r\n    this.stateChanges.next();\r\n  }\r\n  \r\n\r\n  override get focused(): boolean {\r\n    return this._chipInput.focused || this._hasFocusedChip();\r\n  }\r\n\r\n\r\n  @Input({transform: booleanAttribute})\r\n  get required(): boolean {\r\n    return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\r\n  }\r\n  set required(value: boolean) {\r\n    this._required = value;\r\n    this.stateChanges.next();\r\n  }\r\n  \r\n\r\n\r\n  get shouldLabelFloat(): boolean {\r\n    return !this.empty || this.focused;\r\n  }\r\n\r\n\r\n  @Input()\r\n  get value(): any {\r\n    return this._value;\r\n  }\r\n  set value(value: any) {\r\n    this._value = value;\r\n  }\r\n  \r\n  @Input()\r\n  get errorStateMatcher() {\r\n    return this._errorStateTracker.matcher;\r\n  }\r\n  set errorStateMatcher(value: ErrorStateMatcher) {\r\n    this._errorStateTracker.matcher = value;\r\n  }\r\n\r\n  get chipBlurChanges(): Observable<RealsoftChipEvent> {\r\n    return this._getChipStream(chip => chip._onBlur);\r\n  }\r\n\r\n  @Output() readonly change: EventEmitter<RealsoftChipGridChange> =\r\n    new EventEmitter<RealsoftChipGridChange>();\r\n\r\n  @Output() readonly valueChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n  @ContentChildren(RealsoftChipRow, {\r\n    descendants: true,\r\n  })\r\n  override _chips: QueryList<RealsoftChipRow> = undefined!;\r\n\r\n\r\n  get errorState() {\r\n    return this._errorStateTracker.errorState;\r\n  }\r\n  set errorState(value: boolean) {\r\n    this._errorStateTracker.errorState = value;\r\n  }\r\n\r\n  constructor(...args: unknown[]);\r\n\r\n  constructor() {\r\n    super();\r\n\r\n    const parentForm = inject(NgForm, {optional: true});\r\n    const parentFormGroup = inject(FormGroupDirective, {optional: true});\r\n    const defaultErrorStateMatcher = inject(ErrorStateMatcher);\r\n\r\n    if (this.ngControl) {\r\n      this.ngControl.valueAccessor = this;\r\n    }\r\n\r\n    this._errorStateTracker = new ErrorState(\r\n      defaultErrorStateMatcher,\r\n      this.ngControl,\r\n      parentFormGroup,\r\n      parentForm,\r\n      this.stateChanges,\r\n    );\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    this.chipBlurChanges.pipe(takeUntil(this._destroyed)).subscribe(() => {\r\n      this._blur();\r\n      this.stateChanges.next();\r\n    });\r\n\r\n    merge(this.chipFocusChanges, this._chips.changes)\r\n      .pipe(takeUntil(this._destroyed))\r\n      .subscribe(() => this.stateChanges.next());\r\n  }\r\n\r\n  override ngAfterViewInit() {\r\n    super.ngAfterViewInit();\r\n\r\n    if (!this._chipInput) {\r\n      throw Error('realsoft-chip-grid must be used in combination with realsoftChipInputFor.');\r\n    }\r\n  }\r\n\r\n  ngDoCheck() {\r\n    if (this.ngControl) {\r\n      this.updateErrorState();\r\n    }\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n    this.stateChanges.complete();\r\n  }\r\n  registerInput(inputElement: RealsoftChipTextControl): void {\r\n    this._chipInput = inputElement;\r\n    this._chipInput.setDescribedByIds(this._ariaDescribedbyIds);\r\n  }\r\n\r\n\r\n  onContainerClick(event: MouseEvent) {\r\n    if (!this.disabled && !this._originatesFromChip(event)) {\r\n      this.focus();\r\n    }\r\n  }\r\n\r\n  override focus(): void {\r\n    if (this.disabled || this._chipInput.focused) {\r\n      return;\r\n    }\r\n\r\n    if (!this._chips.length || this._chips.first.disabled) {\r\n      Promise.resolve().then(() => this._chipInput.focus());\r\n    } else {\r\n      const activeItem = this._keyManager.activeItem;\r\n\r\n      if (activeItem) {\r\n        activeItem.focus();\r\n      } else {\r\n        this._keyManager.setFirstItemActive();\r\n      }\r\n    }\r\n\r\n    this.stateChanges.next();\r\n  }\r\n\r\n\r\n\r\n\r\n  setDescribedByIds(ids: string[]) {\r\n    this._ariaDescribedbyIds = ids;\r\n    this._chipInput?.setDescribedByIds(ids);\r\n  }\r\n\r\n\r\n  writeValue(value: any): void {\r\n    this._value = value;\r\n  }\r\n\r\n  registerOnChange(fn: (value: any) => void): void {\r\n    this._onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: () => void): void {\r\n    this._onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n    this.stateChanges.next();\r\n  }\r\n  updateErrorState() {\r\n    this._errorStateTracker.updateErrorState();\r\n  }\r\n\r\n\r\n  _blur() {\r\n    if (!this.disabled) {\r\n      setTimeout(() => {\r\n        if (!this.focused) {\r\n          this._propagateChanges();\r\n          this._markAsTouched();\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n\r\n  protected override _allowFocusEscape() {\r\n    if (!this._chipInput.focused) {\r\n      super._allowFocusEscape();\r\n    }\r\n  }\r\n\r\n  override _handleKeydown(event: KeyboardEvent) {\r\n    const keyCode = event.keyCode;\r\n    const activeItem = this._keyManager.activeItem;\r\n\r\n    if (keyCode === TAB) {\r\n      if (\r\n        this._chipInput.focused &&\r\n        hasModifierKey(event, 'shiftKey') &&\r\n        this._chips.length &&\r\n        !this._chips.last.disabled\r\n      ) {\r\n        event.preventDefault();\r\n\r\n        if (activeItem) {\r\n          this._keyManager.setActiveItem(activeItem);\r\n        } else {\r\n          this._focusLastChip();\r\n        }\r\n      } else {\r\n        super._allowFocusEscape();\r\n      }\r\n    } else if (!this._chipInput.focused) {\r\n      if ((keyCode === UP_ARROW || keyCode === DOWN_ARROW) && activeItem) {\r\n        const eligibleActions = this._chipActions.filter(\r\n          action => action._isPrimary === activeItem._isPrimary && !this._skipPredicate(action),\r\n        );\r\n        const currentIndex = eligibleActions.indexOf(activeItem);\r\n        const delta = event.keyCode === UP_ARROW ? -1 : 1;\r\n\r\n        event.preventDefault();\r\n        if (currentIndex > -1 && this._isValidIndex(currentIndex + delta)) {\r\n          this._keyManager.setActiveItem(eligibleActions[currentIndex + delta]);\r\n        }\r\n      } else {\r\n        super._handleKeydown(event);\r\n      }\r\n    }\r\n\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  _focusLastChip() {\r\n    if (this._chips.length) {\r\n      this._chips.last.focus();\r\n    }\r\n  }\r\n\r\n  private _propagateChanges(): void {\r\n    const valueToEmit = this._chips.length ? this._chips.toArray().map(chip => chip.value) : [];\r\n    this._value = valueToEmit;\r\n    this.change.emit(new RealsoftChipGridChange(this, valueToEmit));\r\n    this.valueChange.emit(valueToEmit);\r\n    this._onChange(valueToEmit);\r\n    this._changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  private _markAsTouched() {\r\n    this._onTouched();\r\n    this._changeDetectorRef.markForCheck();\r\n    this.stateChanges.next();\r\n  }\r\n}","import {BACKSPACE, hasModifierKey} from '@angular/cdk/keycodes';\r\nimport {\r\n  Directive,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  Output,\r\n  booleanAttribute,\r\n  inject,\r\n} from '@angular/core';\r\nimport { REALSOFT_CHIPS_DEFAULT_OPTIONS, RealsoftChipsDefaultOptions, RealsoftChipTextControl } from './models';\r\nimport { UniqueIdGeneratorService } from '../id-generator';\r\nimport { RealsoftFormField } from '../form-field/form-field';\r\nimport { REALSOFT_FORM_FIELD } from '../form-field/models';\r\nimport { RealsoftChipGrid } from './chip-grid';\r\n\r\n// Represents an input event on a realsoftChipInput\r\nexport interface RealsoftChipInputEvent {\r\n\r\n  input: HTMLInputElement; // The native input element that the event is being fired for\r\n\r\n  value: string; // The value of the input\r\n\r\n  chipInput: RealsoftChipInput; // Reference to the chip inpu that emitted this event.\r\n}\r\n\r\n// Directive that adds chip-specific behaviors to an input element inside realsoft-form-field\r\n@Directive({\r\n  selector: 'input[realsoftChipInputFor]',\r\n  exportAs: 'realsoftChipInput',\r\n  standalone: true,\r\n  host: {\r\n    'class': 'realsoft-chip-input realsoft-input-element realsoft-text-field__input',\r\n    '[id]': 'id',\r\n    '[attr.disabled]': 'disabled ? \"\" : null',\r\n    '[attr.placeholder]': 'placeholder || null',\r\n    '[attr.aria-invalid]': '_chipGrid && _chipGrid.ngControl ? _chipGrid.ngControl.invalid : null',\r\n    '[attr.aria-required]': '_chipGrid && _chipGrid.required || null',\r\n    '[attr.aria-disabled]': 'disabled && disabledInteractive ? \"true\" : null',\r\n    '[attr.readonly]': 'getReadonlyAttribute()',\r\n    '[attr.required]': '_chipGrid && _chipGrid.required || null',\r\n    '(keydown)': 'keydown($event)',\r\n    '(blur)': 'blur()',\r\n    '(focus)': 'focus()',\r\n    '(input)': 'onInput()',\r\n  },\r\n})\r\nexport class RealsoftChipInput implements RealsoftChipTextControl,OnChanges, OnDestroy {\r\n  protected _elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\r\n\r\n  focused: boolean = false; // Whether the control is focused\r\n\r\n  private _disabled: boolean = false;\r\n\r\n  private _defaultOptions = inject<RealsoftChipsDefaultOptions>(REALSOFT_CHIPS_DEFAULT_OPTIONS, {optional: true});\r\n\r\n  private _formField = inject<RealsoftFormField>(REALSOFT_FORM_FIELD, {optional: true});\r\n\r\n  protected _chipGrid: RealsoftChipGrid;\r\n\r\n  // The native input element to which this directive is attached\r\n  readonly inputElement!: HTMLInputElement;\r\n\r\n  // An input indicating whether or not the chipEnd event will be emitted when the input is blurred.\r\n  @Input({alias: 'realsoftChipInputAddOnBlur', transform: booleanAttribute}) addOnBlur: boolean = false;\r\n\r\n  // An input containing a list of key codes that will trigger a chipEnd event\r\n  @Input('realsoftChipInputSeparatorKeyCodes') separatorKeyCodes: readonly number[] | ReadonlySet<number>;\r\n\r\n  // An event emitted when a chip is to be added \r\n  @Output('realsoftChipInputTokenEnd') readonly chipEnd: EventEmitter<RealsoftChipInputEvent> = new EventEmitter<RealsoftChipInputEvent>();\r\n\r\n  // The input's placeholder text\r\n  @Input() placeholder: string = '';\r\n\r\n  // Unique id for the input \r\n  @Input() id: string = inject(UniqueIdGeneratorService).generateID('realsoft-chip-list-input-');\r\n\r\n  // An input indicating whether the input is disabled\r\n  @Input({transform: booleanAttribute}) \r\n  get disabled(): boolean {\r\n    return this._disabled;\r\n  }\r\n  set disabled(value: boolean) {\r\n    this._disabled = value;\r\n  }\r\n\r\n  onInput() {\r\n    // Let chip list know whenever the value changes.\r\n    this._chipGrid.stateChanges.next();\r\n  }\r\n\r\n  /** Register input for chip list */\r\n  @Input('realsoftChipInputFor')\r\n  get chipGrid(): RealsoftChipGrid {\r\n    return this._chipGrid;\r\n  }\r\n  set chipGrid(value: RealsoftChipGrid) {\r\n    if (value) {\r\n      this._chipGrid = value;\r\n      this._chipGrid.registerInput(this);\r\n    }\r\n  }\r\n  \r\n\r\n  // An input indicating whether the input is readonly\r\n  @Input({transform: booleanAttribute}) readonly: boolean = false;\r\n\r\n\r\n  // Getter for the input's empty state\r\n  get empty() : boolean {\r\n    return !this.inputElement.value\r\n  }\r\n\r\n  \r\n\r\n  constructor() {\r\n    this.inputElement = this._elementRef.nativeElement as HTMLInputElement;\r\n    this.separatorKeyCodes = this._defaultOptions.separatorKeyCodes;\r\n\r\n    if(this._formField) this.inputElement.classList.add('realsoft-form-field-input-control');\r\n  }\r\n\r\n\r\n  ngOnChanges() {\r\n    this._chipGrid.stateChanges.next();\r\n  }\r\n\r\n\r\n  ngOnDestroy(): void {\r\n    this.chipEnd.complete();\r\n  }\r\n\r\n  // Keyboard Event Handler \r\n  keydown(event: KeyboardEvent) {\r\n    if(this.empty && event.keyCode === BACKSPACE) {\r\n        event.preventDefault();\r\n    } else {\r\n        this.emitChipEnd(event);\r\n    }\r\n  }\r\n\r\n\r\n  blur() {\r\n    if (this.addOnBlur) {\r\n      this.emitChipEnd();\r\n    }\r\n    this.focused = false;\r\n    // Blur the chip list if it is not focused\r\n    if (!this._chipGrid.focused) {\r\n      this._chipGrid._blur();\r\n    }\r\n    this._chipGrid.stateChanges.next();\r\n  }\r\n\r\n\r\n  // For focusing the input\r\n  focus() {\r\n    this.focused = true;\r\n    this.inputElement.focus();\r\n  }\r\n\r\n\r\n  // When chipEnd event is to be emitted\r\n  emitChipEnd(event?: KeyboardEvent) {\r\n    if(!event || (this.isSeperatorKey(event) && !event.repeat)) {\r\n        this.chipEnd.emit({\r\n            input: this.inputElement,\r\n            value: this.inputElement.value,\r\n            chipInput: this\r\n        });\r\n        event?.preventDefault();\r\n    }\r\n  }\r\n\r\n  // For clearing the input\r\n  clear(): void {\r\n    this.inputElement.value = '';\r\n  }\r\n\r\n  setDescribedByIds(ids: string[]) : void {\r\n    const element = this._elementRef.nativeElement;\r\n\r\n    ids.length ? element.setAttribute('aria-describedby', ids.join(' ')) : element.removeAttribute('aria-describedby');\r\n  }\r\n\r\n  isSeperatorKey(event: KeyboardEvent) {\r\n    const keyCode = event.keyCode;\r\n    const isSeperator = new Set(this.separatorKeyCodes).has(keyCode);\r\n    return !hasModifierKey(event) && isSeperator; ;\r\n  }\r\n\r\n  // readonly attribute getter \r\n  getReadonlyAttribute() {\r\n    return this.readonly || this.disabled ? 'true' : null;\r\n  }\r\n}","import {\r\n    ChangeDetectionStrategy,\r\n    Component,\r\n    EventEmitter,\r\n    Input,\r\n    Output,\r\n    ViewEncapsulation,\r\n    OnInit,\r\n    inject,\r\n    booleanAttribute,\r\n  } from '@angular/core';\r\nimport {RealsoftChip} from './chip';\r\nimport { REALSOFT_CHIP, REALSOFT_CHIPS_DEFAULT_OPTIONS } from './models';\r\nimport { RealsoftChipAction } from './chip-avatar';\r\n  \r\nexport class RealsoftChipSelectionChange {\r\n    constructor(\r\n\r\n      public source: RealsoftChipOption,\r\n      /** Whether the chip that emitted the event is selected. */\r\n      public selected: boolean,\r\n      /** Whether the selection change was a result of a user interaction. */\r\n      public isUserInput = false,\r\n    ) {}\r\n}\r\n  \r\n@Component({\r\n    selector: 'realsoft-basic-chip-option, [realsoft-basic-chip-option], realsoft-chip-option, [realsoft-chip-option]',\r\n    templateUrl: 'chip-option.html',\r\n    styleUrl: 'chip.scss',\r\n    host: {\r\n      'class': 'realsoft-evolution-chip realsoft-evolution-chip-option',\r\n      '[class.realsoft-evolution-chip]': '!_isBasicChip',\r\n      '[class.realsoft-evolution-chip--filter]': '!_isBasicChip',\r\n      '[class.realsoft-evolution-chip--selectable]': '!_isBasicChip',\r\n      '[class.realsoft-evolution-chip-selected]': 'selected',\r\n      '[class.realsoft-evolution-chip-multiple]': '_chipListMultiple',\r\n      '[class.realsoft-evolution-chip-disabled]': 'disabled',\r\n      '[class.realsoft-evolution-chip-with-avatar]': 'leadingIcon',\r\n      '[class.realsoft-evolution-chip--disabled]': 'disabled',\r\n      '[class.realsoft-evolution-chip--selected]': 'selected',\r\n      '[class.realsoft-evolution-chip--selecting]': '!_animationsDisabled',\r\n      '[class.realsoft-evolution-chip--with-trailing-action]': '_hasTrailingIcon()',\r\n      '[class.realsoft-evolution-chip--with-primary-icon]': 'leadingIcon',\r\n      '[class.realsoft-evolution-chip--with-primary-graphic]': '_hasLeadingGraphic()',\r\n      '[class.realsoft-evolution-chip--with-avatar]': 'leadingIcon',\r\n      '[class.realsoft-evolution-chip-highlighted]': 'highlighted',\r\n      '[class.realsoft-evolution-chip-with-trailing-icon]': '_hasTrailingIcon()',\r\n      '[attr.tabindex]': 'null',\r\n      '[attr.aria-label]': 'null',\r\n      '[attr.aria-description]': 'null',\r\n      '[attr.role]': 'role',\r\n      '[id]': 'id',\r\n      '(click)': 'toggleSelected(true)'\r\n    },\r\n    providers: [\r\n      {provide: RealsoftChip, useExisting: RealsoftChipOption},\r\n      {provide: REALSOFT_CHIP, useExisting: RealsoftChipOption},\r\n    ],\r\n    standalone: true,\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    imports: [RealsoftChipAction],\r\n  })\r\nexport class RealsoftChipOption extends RealsoftChip implements OnInit {\r\n    private _defaultOptions = inject(REALSOFT_CHIPS_DEFAULT_OPTIONS, {optional: true});\r\n    chipListSelectable: boolean = true;\r\n    _chipListMultiple: boolean = false;\r\n    protected _selectable: boolean = true;\r\n    protected override basicChipAttrName = 'realsoft-basic-chip-option';\r\n    private _selected = false;\r\n    _chipListHideSingleSelectionIndicator: boolean =\r\n      this._defaultOptions?.hideSingleSelectionIndicator ?? false;\r\n\r\n    @Input({transform: booleanAttribute})\r\n    get selectable(): boolean {\r\n      return this._selectable && this.chipListSelectable;\r\n    }\r\n    set selectable(value: boolean) {\r\n      this._selectable = value;\r\n      this._changeDetectorRef.markForCheck();\r\n    }\r\n    \r\n  \r\n    @Input({transform: booleanAttribute})\r\n    get selected(): boolean {\r\n      return this._selected;\r\n    }\r\n    set selected(value: boolean) {\r\n      this.selectChip(value, false, true);\r\n    }\r\n    \r\n  \r\n\r\n    // get ariaSelected(): string | null {\r\n    //   return this.selectable ? this.selected.toString() : null;\r\n    // }\r\n  \r\n    \r\n  \r\n    // Emitted when the chip is selected or deselected.\r\n    @Output() readonly selectionChange: EventEmitter<RealsoftChipSelectionChange> = new EventEmitter<RealsoftChipSelectionChange>();\r\n  \r\n    override ngOnInit() {\r\n      super.ngOnInit();\r\n      this.role = 'presentation';\r\n    }\r\n  \r\n    // Select the chip programmatically\r\n    select(): void {\r\n      this.selectChip(true, false, true);\r\n    }\r\n  \r\n    // Deselect the chip programmatically\r\n    deselect(): void {\r\n      this.selectChip(false, false, true);\r\n    }\r\n  \r\n    // Selects this chip via user interaction and emits userInputSelection event\r\n    selectViaInteraction(): void {\r\n      this.selectChip(true, true, true);\r\n    }\r\n  \r\n    // Toggles the current selected state of this chip\r\n    toggleSelected(isUserInput: boolean = false): boolean {\r\n      this.selectChip(!this.selected, isUserInput, true);\r\n      return this.selected;\r\n    }\r\n  \r\n    override _handlePrimaryActionInteraction() {\r\n      if (!this.disabled) {\r\n        this.focus();\r\n  \r\n        if (this.selectable) {\r\n          this.toggleSelected(true);\r\n        }\r\n      }\r\n    }\r\n  \r\n    _hasLeadingGraphic() {\r\n      if (this.leadingIcon) {\r\n        return true;\r\n      }\r\n      return !this._chipListHideSingleSelectionIndicator || this._chipListMultiple;\r\n    }\r\n  \r\n    selectChip(isSelected: boolean, isUserInput: boolean, emitEvent: boolean) {\r\n      if (isSelected !== this.selected) {\r\n        this._selected = isSelected;\r\n  \r\n        if (emitEvent) {\r\n          this.selectionChange.emit({\r\n            source: this,\r\n            isUserInput,\r\n            selected: this.selected,\r\n          });\r\n        }\r\n  \r\n        this._changeDetectorRef.markForCheck();\r\n      }\r\n    }\r\n  }","<span class=\"realsoft-chip-focus-overlay\"></span>\r\n\r\n<span class=\"realsoft-evolution-chip__cell realsoft-evolution-chip__cell--primary\">\r\n  <button\r\n    realsoftChipAction\r\n    [attr.aria-label]=\"ariaLabel\"\r\n    [attr.aria-describedby]=\"_ariaDescriptionId\"\r\n    role=\"option\">\r\n    @if (_hasLeadingGraphic()) {\r\n      <span class=\"realsoft-evolution-chip__graphic realsoft-chip-graphic\">\r\n        <ng-content select=\"realsoft-chip-avatar, [realsoftChipAvatar]\"></ng-content>\r\n        <span class=\"realsoft-evolution-chip__checkmark\">\r\n          <svg\r\n            class=\"realsoft-evolution-chip__checkmark-svg\"\r\n            viewBox=\"-2 -3 30 30\"\r\n            focusable=\"false\"\r\n            aria-hidden=\"true\">\r\n            <path class=\"realsoft-evolution-chip__checkmark-path\"\r\n                  fill=\"none\" stroke=\"currentColor\" d=\"M1.73,12.91 8.1,19.28 22.79,4.59\" />\r\n          </svg>\r\n        </span>\r\n      </span>\r\n    }\r\n    <span class=\"realsoft-evolution-chip__text-label realsoft-chip-action-label\">\r\n      <ng-content></ng-content>\r\n      <span class=\"realsoft-chip-primary-focus-indicator realsoft-focus-indicator\"></span>\r\n    </span>\r\n  </button>\r\n</span>\r\n\r\n@if (_hasTrailingIcon()) {\r\n  <span class=\"realsoft-evolution-chip__cell realsoft-evolution-chip__cell--trailing\">\r\n    <ng-content select=\"realsoft-chip-trailing-icon,[realsoftChipRemove],[realsoftChipTrailingIcon]\"></ng-content>\r\n  </span>\r\n}\r\n\r\n<span class=\"cdk-visually-hidden\" [id]=\"_ariaDescriptionId\">{{ariaDescription}}</span>","import {\r\n    AfterContentInit,\r\n    booleanAttribute,\r\n    ChangeDetectionStrategy,\r\n    Component,\r\n    ContentChildren,\r\n    EventEmitter,\r\n    forwardRef,\r\n    inject,\r\n    Input,\r\n    OnDestroy,\r\n    Output,\r\n    QueryList,\r\n    ViewEncapsulation,\r\n  } from '@angular/core';\r\n  import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n  import { Observable } from 'rxjs';\r\n  import { startWith, takeUntil } from 'rxjs/operators';\r\n  import { TAB } from '@angular/cdk/keycodes';\r\n  import { RealsoftChip } from './chip';\r\n  import { RealsoftChipOption, RealsoftChipSelectionChange } from './chip-option';\r\n  import { RealsoftChipSet } from './chip-set';\r\nimport { REALSOFT_CHIPS_DEFAULT_OPTIONS } from './models';\r\n\r\nimport { RealsoftChipEvent } from './models';\r\nimport { RealsoftChipAction } from './chip-avatar';\r\n  \r\n  /** Change event object that is emitted when the chip listbox value has changed. */\r\n  export class RealsoftChipListboxChange {\r\n    constructor(\r\n      /** Chip listbox that emitted the event. */\r\n      public source: RealsoftChipListbox,\r\n      /** Value of the chip listbox when the event was emitted. */\r\n      public value: any,\r\n    ) {}\r\n  }\r\n  \r\n\r\n  export const REALSOFT_CHIP_LISTBOX_CONTROL_VALUE_ACCESSOR: any = {\r\n    provide: NG_VALUE_ACCESSOR,\r\n    useExisting: forwardRef(() => RealsoftChipListbox),\r\n    multi: true,\r\n  };\r\n  \r\n\r\n  @Component({\r\n    selector: 'realsoft-chip-listbox',\r\n    template: `\r\n      <div class=\"realsoft-evolution-chip-set__chips\" role=\"presentation\">\r\n        <ng-content></ng-content>\r\n      </div>\r\n    `,\r\n    styleUrl: 'chip.scss',\r\n    host: {\r\n      'class': 'realsoft-evolution-chip-set realsoft-evolution-chip-listbox',\r\n      '[attr.role]': 'role',\r\n      '[tabIndex]': '(disabled || empty) ? -1 : tabIndex',\r\n      '[attr.aria-required]': 'role ? required : null',\r\n      '[attr.aria-disabled]': 'disabled.toString()',\r\n      '[attr.aria-multiselectable]': 'multiple',\r\n      '[attr.aria-orientation]': 'ariaOrientation',\r\n      '[class.realsoft-chip-list-disabled]': 'disabled',\r\n      '[class.realsoft-chip-list-required]': 'required',\r\n      '(focus)': 'focus()',\r\n      '(blur)': '_blur()',\r\n      '(keydown)': '_keydown($event)',\r\n    },\r\n    standalone: true,\r\n    providers: [REALSOFT_CHIP_LISTBOX_CONTROL_VALUE_ACCESSOR],\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n  })\r\n  export class RealsoftChipListbox\r\n    extends RealsoftChipSet\r\n    implements AfterContentInit, OnDestroy, ControlValueAccessor\r\n  {\r\n\r\n    _onTouched = () => {};\r\n  \r\n\r\n    _onChange: (value: any) => void = () => {};\r\n  \r\n    protected override _defaultRole = 'listbox';\r\n  \r\n    private _defaultOptions = inject(REALSOFT_CHIPS_DEFAULT_OPTIONS, {optional: true});\r\n  \r\n    @Input({transform: booleanAttribute})\r\n    get multiple(): boolean {\r\n      return this._multiple;\r\n    }\r\n    set multiple(value: boolean) {\r\n      this._multiple = value;\r\n      this._syncListboxProperties();\r\n    }\r\n    private _multiple: boolean = false;\r\n  \r\n    get selected(): RealsoftChipOption[] | RealsoftChipOption {\r\n      const selectedChips = this._chips.toArray().filter(chip => chip.selected);\r\n      return this.multiple ? selectedChips : selectedChips[0];\r\n    }\r\n  \r\n    @Input('aria-orientation') ariaOrientation: 'horizontal' | 'vertical' = 'horizontal';\r\n  \r\n    @Input({transform: booleanAttribute})\r\n    get selectable(): boolean {\r\n      return this._selectable;\r\n    }\r\n    set selectable(value: boolean) {\r\n      this._selectable = value;\r\n      this._syncListboxProperties();\r\n    }\r\n    protected _selectable: boolean = true;\r\n  \r\n    @Input() compareWith: (o1: any, o2: any) => boolean = (o1: any, o2: any) => o1 === o2;\r\n  \r\n    @Input({transform: booleanAttribute})\r\n    required: boolean = false;\r\n  \r\n    @Input({transform: booleanAttribute})\r\n    get hideSingleSelectionIndicator(): boolean {\r\n      return this._hideSingleSelectionIndicator;\r\n    }\r\n    set hideSingleSelectionIndicator(value: boolean) {\r\n      this._hideSingleSelectionIndicator = value;\r\n      this._syncListboxProperties();\r\n    }\r\n    private _hideSingleSelectionIndicator: boolean = this._defaultOptions?.hideSingleSelectionIndicator ?? false;\r\n\r\n    @Input({transform: booleanAttribute})\r\n    get hideMultipleSelectionIndicator(): boolean {\r\n      return this._hideMultipleSelectionIndicator;\r\n    }\r\n    set hideMultipleSelectionIndicator(value: boolean) {\r\n      this._hideMultipleSelectionIndicator = value;\r\n      this._syncListboxProperties();\r\n    }\r\n    private _hideMultipleSelectionIndicator: boolean = this._defaultOptions?.hideMultipleSelectionIndicator ?? false;\r\n  \r\n    get chipSelectionChanges(): Observable<RealsoftChipSelectionChange> {\r\n      return this._getChipStream<RealsoftChipSelectionChange, RealsoftChipOption>(chip => chip.selectionChange);\r\n    }\r\n  \r\n    get chipBlurChanges(): Observable<RealsoftChipEvent> {\r\n      return this._getChipStream(chip => chip._onBlur);\r\n    }\r\n  \r\n    @Input()\r\n    get value(): any {\r\n      return this._value;\r\n    }\r\n    set value(value: any) {\r\n      if (this._chips && this._chips.length) {\r\n        this._setSelectionByValue(value, false);\r\n      }\r\n      this._value = value;\r\n    }\r\n    protected _value: any;\r\n\r\n    @Output() readonly change: EventEmitter<RealsoftChipListboxChange> =\r\n      new EventEmitter<RealsoftChipListboxChange>();\r\n  \r\n    @ContentChildren(RealsoftChipOption, {\r\n      descendants: true,\r\n    })\r\n    override _chips: QueryList<RealsoftChipOption> = undefined!;\r\n  \r\n    ngAfterContentInit() {\r\n      this._chips.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {\r\n        if (this.value !== undefined) {\r\n          Promise.resolve().then(() => {\r\n            this._setSelectionByValue(this.value, false);\r\n          });\r\n        }\r\n        this._syncListboxProperties();\r\n      });\r\n  \r\n      this.chipBlurChanges.pipe(takeUntil(this._destroyed)).subscribe(() => this._blur());\r\n      this.chipSelectionChanges.pipe(takeUntil(this._destroyed)).subscribe(event => {\r\n        if (!this.multiple) {\r\n          this._chips.forEach(chip => {\r\n            if (chip !== event.source) {\r\n              chip.selectChip(false, false, false);\r\n            }\r\n          });\r\n        }\r\n  \r\n        if (event.isUserInput) {\r\n          this._propagateChanges();\r\n        }\r\n      });\r\n    }\r\n\r\n    override focus(): void {\r\n      if (this.disabled) {\r\n        return;\r\n      }\r\n  \r\n      const firstSelectedChip = this._getFirstSelectedChip();\r\n  \r\n      if (firstSelectedChip && !firstSelectedChip.disabled) {\r\n        firstSelectedChip.focus();\r\n      } else if (this._chips.length > 0) {\r\n        this._keyManager.setFirstItemActive();\r\n      } else {\r\n        this._elementRef.nativeElement.focus();\r\n      }\r\n    }\r\n  \r\n\r\n    writeValue(value: any): void {\r\n      if (value != null) {\r\n        this.value = value;\r\n      } else {\r\n        this.value = undefined;\r\n      }\r\n    }\r\n  \r\n\r\n    registerOnChange(fn: (value: any) => void): void {\r\n      this._onChange = fn;\r\n    }\r\n  \r\n\r\n    registerOnTouched(fn: () => void): void {\r\n      this._onTouched = fn;\r\n    }\r\n  \r\n\r\n    setDisabledState(isDisabled: boolean): void {\r\n      this.disabled = isDisabled;\r\n    }\r\n  \r\n    _setSelectionByValue(value: any, isUserInput: boolean = true) {\r\n      this._clearSelection();\r\n  \r\n      if (Array.isArray(value)) {\r\n        value.forEach(currentValue => this._selectValue(currentValue, isUserInput));\r\n      } else {\r\n        this._selectValue(value, isUserInput);\r\n      }\r\n    }\r\n\r\n    _blur() {\r\n      if (!this.disabled) {\r\n        setTimeout(() => {\r\n          if (!this.focused) {\r\n            this._markAsTouched();\r\n          }\r\n        });\r\n      }\r\n    }\r\n  \r\n    _keydown(event: KeyboardEvent) {\r\n      if (event.keyCode === TAB) {\r\n        super._allowFocusEscape();\r\n      }\r\n    }\r\n  \r\n    private _markAsTouched() {\r\n      this._onTouched();\r\n      this._changeDetectorRef.markForCheck();\r\n    }\r\n  \r\n    private _propagateChanges(): void {\r\n      let valueToEmit: any = null;\r\n  \r\n      if (Array.isArray(this.selected)) {\r\n        valueToEmit = this.selected.map(chip => chip.value);\r\n      } else {\r\n        valueToEmit = this.selected ? this.selected.value : undefined;\r\n      }\r\n      this._value = valueToEmit;\r\n      this.change.emit(new RealsoftChipListboxChange(this, valueToEmit));\r\n      this._onChange(valueToEmit);\r\n      this._changeDetectorRef.markForCheck();\r\n    }\r\n  \r\n\r\n    private _clearSelection(skip?: RealsoftChip): void {\r\n      this._chips.forEach(chip => {\r\n        if (chip !== skip) {\r\n          chip.deselect();\r\n        }\r\n      });\r\n    }\r\n\r\n    private _selectValue(value: any, isUserInput: boolean): RealsoftChip | undefined {\r\n      const correspondingChip = this._chips.find(chip => {\r\n        return chip.value != null && this.compareWith(chip.value, value);\r\n      });\r\n  \r\n      if (correspondingChip) {\r\n        isUserInput ? correspondingChip.selectViaInteraction() : correspondingChip.select();\r\n      }\r\n  \r\n      return correspondingChip;\r\n    }\r\n\r\n    private _syncListboxProperties() {\r\n      if (this._chips) {\r\n        Promise.resolve().then(() => {\r\n          this._chips.forEach(chip => {\r\n            chip._chipListMultiple = this.multiple;\r\n            chip.chipListSelectable = this._selectable;\r\n            chip._chipListHideSingleSelectionIndicator = this.hideSingleSelectionIndicator;\r\n            chip._changeDetectorRef.markForCheck();\r\n          });\r\n        });\r\n      }\r\n    }\r\n  \r\n    private _getFirstSelectedChip(): RealsoftChipOption | undefined {\r\n      if (Array.isArray(this.selected)) {\r\n        return this.selected.length ? this.selected[0] : undefined;\r\n      } else {\r\n        return this.selected;\r\n      }\r\n    }\r\n\r\n    protected override _skipPredicate(action: RealsoftChipAction): boolean {\r\n\r\n      return !action.isInteractive;\r\n    }\r\n  }","import { Observable, Subject } from 'rxjs';\r\n\r\n\r\n\r\n//An abstract class usable by components that work with dates.\r\n// D -> The type of the date (e.g., Date, MyCustomDate)\r\n// L -> The type of your locale settings (e.g., string, {language: string})setLocale\r\n\r\nexport abstract class DateAdapter<D, L = any> {\r\n  // Locale Management -> Store the locale (e.g., \"en-US\" of \"fr-FR\") and emit an event if it changes\r\n  protected locale: L;\r\n  protected readonly _localeChanges = new Subject<void>();\r\n  readonly localeChanges: Observable<void> = this._localeChanges;\r\n\r\n  //Date Components Implementation\r\n\r\n  // A method to get the year\r\n  abstract getYear(date: D): number; // Returns the year component of the given date\r\n\r\n  // A method to get the month \r\n  abstract getMonth(date: D):number; // Returns the month component of the given date. The month is 0-indexed, 0 = January.\r\n\r\n  // A method to get the date\r\n  abstract getDate(date: D): number; // Returns the date of the month component of the given date. The date is 1-indexed, 1 = first of month.\r\n\r\n  // A method to get the day of the week\r\n  abstract getDayOfWeek(date: D): number; // Returns the day of the week component of the given date. The day is 0-indexed, 0 = Sunday.\r\n\r\n\r\n  // Formatting and Parsing Implementation\r\n    \r\n\r\n  //Turning a string into a date\r\n  abstract parse(value: any, parseFormat: any): D | null; // Returns the parsed date based on the parseFormat and the value.\r\n\r\n  //Turning a date into a string\r\n  abstract format(date: D, displayFormat: any): string; // Returns the formatted date string based on the displayFormat and the date.\r\n\r\n\r\n  // Utility Functions\r\n\r\n\r\n  abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[]; // Returns an ordered list of all month names, starting with January.\r\n\r\n  abstract getDateNames(): string[]; // Returns an ordered list of all dates of the month names, starting with 1.\r\n\r\n  abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[]; // Returns an ordered list of all weekday names, starting with Sunday.\r\n\r\n  abstract getYearName(date: D): string; // Returns the name of the year for the given date.\r\n\r\n  abstract getFirstDayOfWeek(): number; // Returns the first day of the week. (0-indexed, 0 = Sunday).\r\n\r\n  abstract getNumDaysInMonth(date: D): number; // Returns the number of days in the month of the given date.\r\n\r\n  abstract clone(date: D): D; // Returns a new date equal to the given date.\r\n\r\n  abstract createDate(year: number, month: number, date: number): D; // Returns the new date, or null if invalid.\r\n\r\n  abstract today(): D; // Returns Today's Date.\r\n\r\n  abstract addCalendarYears(date: D, years: number): D; // Returns a new date equal to the given one with the specified number of years added.\r\n\r\n  abstract addCalendarMonths(date: D, month: number): D; // Returns a new date equal to the given one with the specified number of months added.\r\n\r\n  abstract addCalendarDays(date: D, days: number): D; // Returns a new date equal to the given one with the specified number of days added.\r\n\r\n  abstract toIso8601(date: D): string; // Returns the ISO date string.\r\n\r\n  abstract isDateInstance(obj: any): boolean; // Returns a boolean indicating whether the object is a date instance.\r\n\r\n  abstract isValid(date: D): boolean; // Returns a boolean indicating whether the date is valid.\r\n\r\n  abstract invalid(): D; // Returns an invalid date.\r\n\r\n  // Sets the time of one date to the time of another.\r\n  setTime(target: D, hours: number, miutes: number, seconds: number): D {\r\n    throw new Error('Method not Implemented');\r\n  }\r\n\r\n  //Gets the hours component part of the given date.\r\n  getHours(date: D): number {\r\n    throw new Error('Method not Implemented');\r\n  }\r\n\r\n  // Gets the minutes component part of the given date\r\n  getMinutes(date: D): number {\r\n    throw new Error('Method not Implemented');\r\n  }\r\n\r\n  // Gets the seconds component part of the given date\r\n  getSeconds(date: D): number {\r\n    throw new Error('Method not Implemented');\r\n  }\r\n\r\n  // Parses a date with a specific time from a user-provided value.\r\n  parseTime(value: any, parseFormat: any): D | null {\r\n    throw new Error('Method not Implemented');\r\n  }\r\n\r\n  // Adds an amount of seconds to the specified date\r\n  addSeconds(date: D, amount: number): D {\r\n    throw new Error('Method not Implemented');\r\n  }\r\n\r\n  // Returns a date or null, based on whether the date was valid or not.\r\n  getValidDateOrNull(obj: unknown): D | null {\r\n    return this.isDateInstance(obj) && this.isValid(obj as D) ? (obj as D) : null;\r\n  }\r\n\r\n  // Returns the deserialized date object, either a valid date, null if the value can be deserialized into a null date \"The empty string\", or an invalid date.\r\n  deserialize(value: any): D | null {\r\n    if (value == null || (this.isDateInstance(value) && this.isValid(value))) {\r\n      return value;\r\n    }\r\n    return this.invalid();\r\n  }\r\n\r\n  // Sets the locale used for all dates\r\n  setLocale(locale: L) {\r\n    this.locale = locale;\r\n    this._localeChanges.next();\r\n  }\r\n\r\n  // Compares two dates ->  Returns 0 if the dates are equal, a number less than 0 if the first date is earlier, a number greater that 0 if the first date is later.\r\n  compareDate(first: D, second: D): number {\r\n    return (\r\n      this.getYear(first) - this.getYear(second) || this.getMonth(first) - this.getMonth(second) || this.getDate(first) - this.getDate(second)\r\n    );\r\n  }\r\n\r\n  // Compares the time values of two dates -> Returns 0 if the times are equal , a number less than 0 if the first time is earlier, a number greater than 0 if the first time is later.\r\n  compareTime(first: D, second: D): number {\r\n    return (\r\n      this.getHours(first) - this.getHours(second) || \r\n      this.getMinutes(first) - this.getMinutes(second) || \r\n      this.getSeconds(first) - this.getSeconds(second)\r\n    );\r\n  }\r\n\r\n  // Checks if two dates are equal -> Returns whether the two dates are equal, Null dates are considered equal to other null dates.\r\n  sameDate(first: D | null, second: D | null): boolean {\r\n    if (first && second) {\r\n      let firstValid = this.isValid(first);\r\n      let secondValid = this.isValid(second);\r\n      if(firstValid && secondValid) {\r\n        return !this.compareDate(first, second);\r\n      }\r\n      return firstValid == secondValid\r\n    }\r\n    return first == second;\r\n  }\r\n\r\n  sameTime(first: D | null, second: D | null): boolean {\r\n    if (first && second) {\r\n      const firstValid = this.isValid(first);\r\n      const secondValid = this.isValid(second);\r\n      if (firstValid && secondValid) {\r\n        return !this.compareTime(first, second);\r\n      }\r\n      return firstValid == secondValid;\r\n    }\r\n    return first == second;\r\n  }\r\n\r\n  // Clamps the given date between min and max dates -> Return min if date is less than min, max if the date is greater than max, otherwise date.\r\n  clampDate(date: D, min?: D | null, max?: D | null): D {\r\n    if (min && this.compareDate(date, min) < 0) {\r\n      return min;\r\n    }\r\n\r\n    if (max && this.compareDate(date, max) > 0) {\r\n      return max;\r\n    }\r\n\r\n    return date;\r\n  }\r\n\r\n}\r\n","\r\nimport { inject, Injectable, InjectionToken } from '@angular/core';\r\nimport { DateAdapter } from '@angular/material/core';\r\n\r\nimport * as _moment from 'moment';\r\n// tslint:disable-next-line:no-duplicate-imports\r\nimport { default as _rollupMoment, Moment, MomentFormatSpecification, MomentInput } from 'moment';\r\nimport { REALSOFT_DATE_LOCALE } from '../models';\r\n\r\nconst moment = _rollupMoment || _moment;\r\n\r\n/** Configurable options for MomentDateAdapter. */\r\nexport interface RealsoftMomentDateAdapterOptions {\r\n\r\n  strict?: boolean;\r\n  useUtc?: boolean;\r\n}\r\n\r\n/** InjectionToken for moment date adapter to configure options. */\r\nexport const REALSOFT_MOMENT_DATE_ADAPTER_OPTIONS = new InjectionToken<RealsoftMomentDateAdapterOptions>(\r\n  'REALSOFT_MOMENT_DATE_ADAPTER_OPTIONS',\r\n  {\r\n    providedIn: 'root',\r\n    factory: REALSOFT_MOMENT_DATE_ADAPTER_OPTIONS_FACTORY,\r\n  },\r\n);\r\n\r\n\r\nexport function REALSOFT_MOMENT_DATE_ADAPTER_OPTIONS_FACTORY(): RealsoftMomentDateAdapterOptions {\r\n  return {\r\n    useUtc: false,\r\n  };\r\n}\r\n\r\n\r\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\r\n  const valuesArray = Array(length);\r\n  for (let i = 0; i < length; i++) {\r\n    valuesArray[i] = valueFunction(i);\r\n  }\r\n  return valuesArray;\r\n}\r\n\r\n@Injectable()\r\nexport class RealsoftMomentDateAdapter extends DateAdapter<Moment> {\r\n  private _options = inject<RealsoftMomentDateAdapterOptions>(REALSOFT_MOMENT_DATE_ADAPTER_OPTIONS, {\r\n    optional: true,\r\n  });\r\n\r\n\r\n  private _localeData: {\r\n    firstDayOfWeek: number;\r\n    longMonths: string[];\r\n    shortMonths: string[];\r\n    dates: string[];\r\n    longDaysOfWeek: string[];\r\n    shortDaysOfWeek: string[];\r\n    narrowDaysOfWeek: string[];\r\n  };\r\n\r\n  constructor(...args: unknown[]);\r\n\r\n  constructor() {\r\n    super();\r\n    const dateLocale = inject<string>(REALSOFT_DATE_LOCALE, {optional: true});\r\n    this.setLocale(dateLocale || moment.locale());\r\n  }\r\n\r\n  override setLocale(locale: string) {\r\n    super.setLocale(locale);\r\n\r\n    let momentLocaleData = moment.localeData(locale);\r\n    this._localeData = {\r\n      firstDayOfWeek: momentLocaleData.firstDayOfWeek(),\r\n      longMonths: momentLocaleData.months(),\r\n      shortMonths: momentLocaleData.monthsShort(),\r\n      dates: range(31, i => this.createDate(2017, 0, i + 1).format('D')),\r\n      longDaysOfWeek: momentLocaleData.weekdays(),\r\n      shortDaysOfWeek: momentLocaleData.weekdaysShort(),\r\n      narrowDaysOfWeek: momentLocaleData.weekdaysMin(),\r\n    };\r\n  }\r\n\r\n  getYear(date: Moment): number {\r\n    return this.clone(date).year();\r\n  }\r\n\r\n  getMonth(date: Moment): number {\r\n    return this.clone(date).month();\r\n  }\r\n\r\n  getDate(date: Moment): number {\r\n    return this.clone(date).date();\r\n  }\r\n\r\n  getDayOfWeek(date: Moment): number {\r\n    return this.clone(date).day();\r\n  }\r\n\r\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    // Moment.js doesn't support narrow month names, so we just use short if narrow is requested.\r\n    return style == 'long' ? this._localeData.longMonths : this._localeData.shortMonths;\r\n  }\r\n\r\n  getDateNames(): string[] {\r\n    return this._localeData.dates;\r\n  }\r\n\r\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    if (style == 'long') {\r\n      return this._localeData.longDaysOfWeek;\r\n    }\r\n    if (style == 'short') {\r\n      return this._localeData.shortDaysOfWeek;\r\n    }\r\n    return this._localeData.narrowDaysOfWeek;\r\n  }\r\n\r\n  getYearName(date: Moment): string {\r\n    return this.clone(date).format('YYYY');\r\n  }\r\n\r\n  getFirstDayOfWeek(): number {\r\n    return this._localeData.firstDayOfWeek;\r\n  }\r\n\r\n  getNumDaysInMonth(date: Moment): number {\r\n    return this.clone(date).daysInMonth();\r\n  }\r\n\r\n  clone(date: Moment): Moment {\r\n    return date.clone().locale(this.locale);\r\n  }\r\n\r\n  createDate(year: number, month: number, date: number): Moment {\r\n      if (month < 0 || month > 11) {\r\n        throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\r\n      }\r\n\r\n      if (date < 1) {\r\n        throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\r\n    }\r\n\r\n    const result = this._createMoment({year, month, date}).locale(this.locale);\r\n\r\n    // If the result isn't valid, the date must have been out of bounds for this month.\r\n    if (!result.isValid()) {\r\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  today(): Moment {\r\n    return this._createMoment().locale(this.locale);\r\n  }\r\n\r\n  parse(value: unknown, parseFormat: string | string[]): Moment | null {\r\n    if (value && typeof value == 'string') {\r\n      return this._createMoment(value, parseFormat, this.locale);\r\n    }\r\n    return value ? this._createMoment(value).locale(this.locale) : null;\r\n  }\r\n\r\n  format(date: Moment, displayFormat: string): string {\r\n    date = this.clone(date);\r\n    if (!this.isValid(date)) {\r\n      throw Error('MomentDateAdapter: Cannot format invalid date.');\r\n    }\r\n    return date.format(displayFormat);\r\n  }\r\n\r\n  addCalendarYears(date: Moment, years: number): Moment {\r\n    return this.clone(date).add({years});\r\n  }\r\n\r\n  addCalendarMonths(date: Moment, months: number): Moment {\r\n    return this.clone(date).add({months});\r\n  }\r\n\r\n  addCalendarDays(date: Moment, days: number): Moment {\r\n    return this.clone(date).add({days});\r\n  }\r\n\r\n  toIso8601(date: Moment): string {\r\n    return this.clone(date).format();\r\n  }\r\n\r\n  override deserialize(value: unknown): Moment | null {\r\n    let date;\r\n    if (value instanceof Date) {\r\n      date = this._createMoment(value).locale(this.locale);\r\n    } else if (this.isDateInstance(value)) {\r\n      // Note: assumes that cloning also sets the correct locale.\r\n      return this.clone(value);\r\n    }\r\n    if (typeof value === 'string') {\r\n      if (!value) {\r\n        return null;\r\n      }\r\n      date = this._createMoment(value, moment.ISO_8601).locale(this.locale);\r\n    }\r\n    if (date && this.isValid(date)) {\r\n      return this._createMoment(date).locale(this.locale);\r\n    }\r\n    return super.deserialize(value);\r\n  }\r\n\r\n  isDateInstance(obj: unknown): obj is Moment {\r\n    return moment.isMoment(obj);\r\n  }\r\n\r\n  isValid(date: Moment): boolean {\r\n    return this.clone(date).isValid();\r\n  }\r\n\r\n  invalid(): Moment {\r\n    return moment.invalid();\r\n  }\r\n\r\n  setTime(target: Moment, hours: number, minutes: number, seconds: number): Moment {\r\n      if (hours < 0 || hours > 23) {\r\n        throw Error(`Invalid hours \"${hours}\". Hours value must be between 0 and 23.`);\r\n      }\r\n\r\n      if (minutes < 0 || minutes > 59) {\r\n        throw Error(`Invalid minutes \"${minutes}\". Minutes value must be between 0 and 59.`);\r\n      }\r\n\r\n      if (seconds < 0 || seconds > 59) {\r\n        throw Error(`Invalid seconds \"${seconds}\". Seconds value must be between 0 and 59.`);\r\n      }\r\n\r\n    return this.clone(target).set({hours, minutes, seconds, milliseconds: 0});\r\n  }\r\n\r\n  getHours(date: Moment): number {\r\n    return date.hours();\r\n  }\r\n\r\n  getMinutes(date: Moment): number {\r\n    return date.minutes();\r\n  }\r\n\r\n  getSeconds(date: Moment): number {\r\n    return date.seconds();\r\n  }\r\n\r\n  parseTime(value: unknown, parseFormat: string | string[]): Moment | null {\r\n    return this.parse(value, parseFormat);\r\n  }\r\n\r\n  addSeconds(date: Moment, amount: number): Moment {\r\n    return this.clone(date).add({seconds: amount});\r\n  }\r\n\r\n  private _createMoment(\r\n    date?: MomentInput,\r\n    format?: MomentFormatSpecification,\r\n    locale?: string,\r\n  ): Moment {\r\n    const {strict, useUtc}: RealsoftMomentDateAdapterOptions = this._options || {};\r\n\r\n    return useUtc ? moment.utc(date, format, locale, strict) : moment(date, format, locale, strict);\r\n  }\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { DateAdapter } from './date-adapter';\r\nimport { REALSOFT_DATE_LOCALE } from '../models';\r\n\r\n\r\nconst ISO_8601_REGEX = /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\r\n\r\nconst TIME_REGEX = /^(\\d?\\d)[:.](\\d?\\d)(?:[:.](\\d?\\d))?\\s*(AM|PM)?$/i;\r\n\r\n/** Creates an array and fills it with values. */\r\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\r\n  const valuesArray = Array(length);\r\n  for (let i = 0; i < length; i++) {\r\n    valuesArray[i] = valueFunction(i);\r\n  }\r\n  return valuesArray;\r\n}\r\n\r\n/** Adapts the native JS Date for use with cdk-based components that work with dates. */\r\n@Injectable()\r\nexport class RealsoftNativeDateAdapter extends DateAdapter<Date> {\r\n  /**\r\n   * @deprecated No longer being used. To be removed.\r\n   * @breaking-change 14.0.0\r\n   */\r\n  useUtcForDisplay: boolean = false;\r\n\r\n  /** The injected locale. */\r\n  private readonly _realsoftDateLocale = inject(REALSOFT_DATE_LOCALE, {optional: true});\r\n\r\n  constructor(...args: unknown[]);\r\n\r\n  constructor() {\r\n    super();\r\n\r\n    const _realsoftDateLocale = inject(REALSOFT_DATE_LOCALE, {optional: true});\r\n\r\n    if (_realsoftDateLocale !== undefined) {\r\n      this._realsoftDateLocale = _realsoftDateLocale;\r\n    }\r\n\r\n    super.setLocale(this._realsoftDateLocale);\r\n  }\r\n\r\n  getYear(date: Date): number {\r\n    return date.getFullYear();\r\n  }\r\n\r\n  getMonth(date: Date): number {\r\n    return date.getMonth();\r\n  }\r\n\r\n  getDate(date: Date): number {\r\n    return date.getDate();\r\n  }\r\n\r\n  getDayOfWeek(date: Date): number {\r\n    return date.getDay();\r\n  }\r\n\r\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    const dtf = new Intl.DateTimeFormat(this.locale, {month: style, timeZone: 'utc'});\r\n    return range(12, i => this._format(dtf, new Date(2017, i, 1)));\r\n  }\r\n\r\n  getDateNames(): string[] {\r\n    const dtf = new Intl.DateTimeFormat(this.locale, {day: 'numeric', timeZone: 'utc'});\r\n    return range(31, i => this._format(dtf, new Date(2017, 0, i + 1)));\r\n  }\r\n\r\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n    const dtf = new Intl.DateTimeFormat(this.locale, {weekday: style, timeZone: 'utc'});\r\n    return range(7, i => this._format(dtf, new Date(2017, 0, i + 1)));\r\n  }\r\n\r\n  getYearName(date: Date): string {\r\n    const dtf = new Intl.DateTimeFormat(this.locale, {year: 'numeric', timeZone: 'utc'});\r\n    return this._format(dtf, date);\r\n  }\r\n\r\n  getFirstDayOfWeek(): number {\r\n    if (typeof Intl !== 'undefined' && (Intl as any).Locale) {\r\n      const locale = new (Intl as any).Locale(this.locale) as {\r\n        getWeekInfo?: () => {firstDay: number};\r\n        weekInfo?: {firstDay: number};\r\n      };\r\n      const firstDay = (locale.getWeekInfo?.() || locale.weekInfo)?.firstDay ?? 0;\r\n      return firstDay === 7 ? 0 : firstDay;\r\n    }\r\n    return 0;\r\n  }\r\n\r\n  getNumDaysInMonth(date: Date): number {\r\n    return this.getDate(\r\n      this._createDateWithOverflow(this.getYear(date), this.getMonth(date) + 1, 0),\r\n    );\r\n  }\r\n\r\n  clone(date: Date): Date {\r\n    return new Date(date.getTime());\r\n  }\r\n\r\n  createDate(year: number, month: number, date: number): Date {\r\n    // Check for invalid month and date (except upper bound on date which we have to check after\r\n    // creating the Date).\r\n    if (month < 0 || month > 11) {\r\n        throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\r\n    }\r\n\r\n    if (date < 1) {\r\n        throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\r\n    }\r\n\r\n    let result = this._createDateWithOverflow(year, month, date);\r\n    // Check that the date wasn't above the upper bound for the month, causing the month to overflow\r\n    if (result.getMonth() != month) {\r\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  today(): Date {\r\n    return new Date();\r\n  }\r\n\r\n  parse(value: any, parseFormat?: any): Date | null {\r\n    // We have no way using the native JS Date to set the parse format or locale, so we ignore these\r\n    // parameters.\r\n    if (typeof value == 'number') {\r\n      return new Date(value);\r\n    }\r\n    return value ? new Date(Date.parse(value)) : null;\r\n  }\r\n\r\n  format(date: Date, displayFormat: Object): string {\r\n    if (!this.isValid(date)) {\r\n      throw Error('RealsoftNativeDateAdapter: Cannot format invalid date.');\r\n    }\r\n\r\n    const dtf = new Intl.DateTimeFormat(this.locale, {...displayFormat, timeZone: 'utc'});\r\n    return this._format(dtf, date);\r\n  }\r\n\r\n  addCalendarYears(date: Date, years: number): Date {\r\n    return this.addCalendarMonths(date, years * 12);\r\n  }\r\n\r\n  addCalendarMonths(date: Date, months: number): Date {\r\n    let newDate = this._createDateWithOverflow(\r\n      this.getYear(date),\r\n      this.getMonth(date) + months,\r\n      this.getDate(date),\r\n    );\r\n\r\n    if (this.getMonth(newDate) != (((this.getMonth(date) + months) % 12) + 12) % 12) {\r\n      newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);\r\n    }\r\n\r\n    return newDate;\r\n  }\r\n\r\n  addCalendarDays(date: Date, days: number): Date {\r\n    return this._createDateWithOverflow(\r\n      this.getYear(date),\r\n      this.getMonth(date),\r\n      this.getDate(date) + days,\r\n    );\r\n  }\r\n\r\n  toIso8601(date: Date): string {\r\n    return [\r\n      date.getUTCFullYear(),\r\n      this._2digit(date.getUTCMonth() + 1),\r\n      this._2digit(date.getUTCDate()),\r\n    ].join('-');\r\n  }\r\n\r\n  override deserialize(value: any): Date | null {\r\n    if (typeof value === 'string') {\r\n      if (!value) {\r\n        return null;\r\n      }\r\n      if (ISO_8601_REGEX.test(value)) {\r\n        let date = new Date(value);\r\n        if (this.isValid(date)) {\r\n          return date;\r\n        }\r\n      }\r\n    }\r\n    return super.deserialize(value);\r\n  }\r\n\r\n  isDateInstance(obj: any) {\r\n    return obj instanceof Date;\r\n  }\r\n\r\n  isValid(date: Date) {\r\n    return !isNaN(date.getTime());\r\n  }\r\n\r\n  invalid(): Date {\r\n    return new Date(NaN);\r\n  }\r\n\r\n  override setTime(target: Date, hours: number, minutes: number, seconds: number): Date {\r\n    if (!inRange(hours, 0, 23)) {\r\n        throw Error(`Invalid hours \"${hours}\". Hours value must be between 0 and 23.`);\r\n    }\r\n\r\n    if (!inRange(minutes, 0, 59)) {\r\n        throw Error(`Invalid minutes \"${minutes}\". Minutes value must be between 0 and 59.`);\r\n    }\r\n\r\n    if (!inRange(seconds, 0, 59)) {\r\n        throw Error(`Invalid seconds \"${seconds}\". Seconds value must be between 0 and 59.`);\r\n    }\r\n\r\n    const clone = this.clone(target);\r\n    clone.setHours(hours, minutes, seconds, 0);\r\n    return clone;\r\n  }\r\n\r\n  override getHours(date: Date): number {\r\n    return date.getHours();\r\n  }\r\n\r\n  override getMinutes(date: Date): number {\r\n    return date.getMinutes();\r\n  }\r\n\r\n  override getSeconds(date: Date): number {\r\n    return date.getSeconds();\r\n  }\r\n\r\n  override parseTime(userValue: any, parseFormat?: any): Date | null {\r\n    if (typeof userValue !== 'string') {\r\n      return userValue instanceof Date ? new Date(userValue.getTime()) : null;\r\n    }\r\n\r\n    const value = userValue.trim();\r\n\r\n    if (value.length === 0) {\r\n      return null;\r\n    }\r\n\r\n    let result = this._parseTimeString(value);\r\n\r\n    if (result === null) {\r\n      const withoutExtras = value.replace(/[^0-9:(AM|PM)]/gi, '').trim();\r\n\r\n      if (withoutExtras.length > 0) {\r\n        result = this._parseTimeString(withoutExtras);\r\n      }\r\n    }\r\n\r\n    return result || this.invalid();\r\n  }\r\n\r\n  override addSeconds(date: Date, amount: number): Date {\r\n    return new Date(date.getTime() + amount * 1000);\r\n  }\r\n\r\n\r\n  private _createDateWithOverflow(year: number, month: number, date: number) {\r\n    const d = new Date();\r\n    d.setFullYear(year, month, date);\r\n    d.setHours(0, 0, 0, 0);\r\n    return d;\r\n  }\r\n\r\n  /**\r\n   * Pads a number to make it two digits.\r\n   * @param n The number to pad.\r\n   * @returns The padded number.\r\n   */\r\n  private _2digit(n: number) {\r\n    return ('00' + n).slice(-2);\r\n  }\r\n\r\n\r\n  private _format(dtf: Intl.DateTimeFormat, date: Date) {\r\n    const d = new Date();\r\n    d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\r\n    d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\r\n    return dtf.format(d);\r\n  }\r\n\r\n\r\n  private _parseTimeString(value: string): Date | null {\r\n    const parsed = value.toUpperCase().match(TIME_REGEX);\r\n\r\n    if (parsed) {\r\n      let hours = parseInt(parsed[1]);\r\n      const minutes = parseInt(parsed[2]);\r\n      let seconds: number | undefined = parsed[3] == null ? undefined : parseInt(parsed[3]);\r\n      const amPm = parsed[4] as 'AM' | 'PM' | undefined;\r\n\r\n      if (hours === 12) {\r\n        hours = amPm === 'AM' ? 0 : hours;\r\n      } else if (amPm === 'PM') {\r\n        hours += 12;\r\n      }\r\n\r\n      if (\r\n        inRange(hours, 0, 23) &&\r\n        inRange(minutes, 0, 59) &&\r\n        (seconds == null || inRange(seconds, 0, 59))\r\n      ) {\r\n        return this.setTime(this.today(), hours, minutes, seconds || 0);\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n}\r\nfunction inRange(value: number, min: number, max: number): boolean {\r\n  return !isNaN(value) && value >= min && value <= max;\r\n}","import { Overlay, ScrollStrategy } from '@angular/cdk/overlay';\r\nimport { ElementRef, EventEmitter, FactoryProvider, Inject, inject, Injectable, InjectionToken, LOCALE_ID, OnDestroy, Provider } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { RealsoftDatepickerInputBase } from './datepicker-input';\r\nimport { DateAdapter } from './shared/date-adapter';\r\nimport { REALSOFT_MOMENT_DATE_ADAPTER_OPTIONS, RealsoftMomentDateAdapter, RealsoftMomentDateAdapterOptions } from './shared/moment-date-adapter';\r\nimport { RealsoftNativeDateAdapter } from './shared/native-date-adapter';\r\n\r\n\r\n// A class representing a range of dates\r\nexport class DateRange<D> {\r\n    constructor(\r\n        readonly start: D | null, // The start date of the range\r\n\r\n        readonly end: D | null // The end date of the range\r\n    ) {}\r\n}\r\n\r\n// Extracting the date type from a DateRange if it is passed in\r\nexport type ExtractDateTypeFromSelection<T> = T extends DateRange<infer D> ? D : NonNullable<T>;\r\n\r\n\r\n// An event that will be emitted by the date selection model when its selection changes \r\nexport interface RealsoftDateSelectionModelChange<S> {\r\n    selection: S; // The new value for the selection\r\n\r\n    source: unknown; // The object that triggered the change\r\n\r\n    previousSelection? : S; // The previous value for the selection\r\n}\r\n\r\n\r\n// Selection model for the datepicker that contains the date selection\r\n@Injectable()\r\nexport abstract class RealsoftDateSelectionModel<S, D = ExtractDateTypeFromSelection<S>> implements OnDestroy {\r\n\r\n    // A stream that emits whenever the selection has changes\r\n    private readonly _selectionChange = new Subject<RealsoftDateSelectionModelChange<S>>();\r\n\r\n    selectionChange: Observable<RealsoftDateSelectionModelChange<S>> = this._selectionChange;\r\n    \r\n    constructor(\r\n        readonly selection: S, // The current selection\r\n        @Inject(DateAdapter) protected _adapter: DateAdapter<D>,\r\n    ) {\r\n        this.selection = selection;\r\n    }\r\n\r\n    // A method for updating the current selection in the model, takes the new selection value that should be assigned and the object that triggered the selection change\r\n    updateSelection(value: S, source: unknown): void {\r\n        const previousSelection = (this as {selection: S}).selection;\r\n        (this as {selection: S}).selection = value;\r\n        this._selectionChange.next({selection: value, source, previousSelection});\r\n    }\r\n\r\n    // A method for checking if a date is an instance of a valid date\r\n    _isValidDateInstance(date: D): boolean {\r\n        return this._adapter.isDateInstance(date) && this._adapter.isValid(date);\r\n    }\r\n\r\n    // Abstract methods \r\n\r\n    // Adding a date to the current selection\r\n    abstract add(date: D | null): void;\r\n\r\n    // Checking if the current selection is valid\r\n    abstract isValid(): boolean;\r\n\r\n    // Checking whether the current selection is complete\r\n    abstract isComplete(): boolean;\r\n\r\n    // Cloning the selection model \r\n    abstract clone(): RealsoftDateSelectionModel<S, D>;\r\n\r\n    // Destroying the selection model\r\n    ngOnDestroy(): void {\r\n        this._selectionChange.complete();\r\n    }\r\n}\r\n\r\n// Selection model for the datepicker that contains a single date\r\n\r\n@Injectable()\r\nexport class RealsoftSingleDateSelectionModel<D> extends RealsoftDateSelectionModel<D | null, D> {\r\n    constructor(@Inject(DateAdapter) adapter: DateAdapter<D>) {\r\n        super(null, adapter);\r\n    }\r\n\r\n    // Adding a date to the current selection, since it's a single date selection model then the added date will overwrite the previous selection\r\n    add(date: D | null) {\r\n        super.updateSelection(date, this);\r\n    }\r\n\r\n    // Checking if the current selection is valid \r\n    isValid(): boolean {\r\n        return this.selection != null && this._isValidDateInstance(this.selection);\r\n    }\r\n\r\n    // Checking whether the current selection is complete. since this is a single date selection model, then the selection is complete if the current selection is simply not null\r\n    isComplete(): boolean {\r\n        return this.selection != null;\r\n    }\r\n\r\n    // Clonning the selection model\r\n    clone() {\r\n        const clone = new RealsoftSingleDateSelectionModel<D>(this._adapter);\r\n        clone.updateSelection(this.selection, this);\r\n        return clone;\r\n    }\r\n}\r\n\r\n// Selection model for the datepicker that contains a date range \r\n@Injectable()\r\nexport class RealsoftRangeDateSelectionModel<D> extends RealsoftDateSelectionModel<DateRange<D>, D> {\r\n    constructor(@Inject(DateAdapter) adapter: DateAdapter<D>) {\r\n        super(new DateRange<D>(null, null), adapter);\r\n    }\r\n\r\n    // Adding a date to the current selection, in the case of a date range selection, the added date fills in the next null value in the range, if both the start and the end already have dates, then it fills the start and the end becomes null.\r\n    add(date: D | null): void {\r\n        let {start, end} = this.selection;\r\n\r\n        if(start == null) {\r\n            start = date;\r\n        } else if (end == null) {\r\n            end = date\r\n        } else {\r\n            start = date;\r\n            end = null;\r\n        }\r\n\r\n        super.updateSelection(new DateRange<D>(start,end), this);\r\n    }\r\n\r\n    // Checking if the current range selection is valid\r\n    isValid(): boolean {\r\n        const {start, end} = this.selection;\r\n\r\n        // An empty range is a valid range\r\n        if(start == null && end == null) {\r\n            return true;\r\n        }\r\n\r\n        // A complete range is valid only if both the start date and the end date are valid and the start date is before the end date\r\n        if(start != null && end != null) {\r\n            return (this._isValidDateInstance(start) && this._isValidDateInstance(end) && this._adapter.compareDate(start, end) <= 0);\r\n        }\r\n\r\n        // A partial range is valid if the start  or the end date is valie\r\n        return ((start == null || this._isValidDateInstance(start)) && (end == null || this._isValidDateInstance(end)));\r\n    }\r\n\r\n    // Checking whether the current range selection is complete, which is true if both the start and the end are not null\r\n    isComplete(): boolean {\r\n        return this.selection.start != null && this.selection.end != null;\r\n    }\r\n\r\n    // Clonning the selection model\r\n    clone() {\r\n        const clone = new RealsoftRangeDateSelectionModel<D>(this._adapter);\r\n        clone.updateSelection(this.selection, this);\r\n        return clone;\r\n    }\r\n}\r\n\r\n\r\n\r\n// Possible positions for the datepicker dropdown along the X axis.\r\nexport type RealsoftDatepickerDropdownPositionX = 'start' | 'end';\r\n\r\n// Possible positions for the datepicker dropdown along the Y axis.\r\nexport type RealsoftDatepickerDropdownPositionY = 'above' | 'below';\r\n\r\n// Function that can be used to filter out dates from a calendar. Datepicker can sometimes receive a null value as input for the date argument. This doesn't represent a null date but rather signifies that no date has been selected yet in the calendar.\r\n\r\nexport type DateFilterFn<D> = (date: D | null) => boolean;\r\n\r\nexport interface RealsoftDatepickerPanel<C extends RealsoftDatepickerControl<D>, S, D = ExtractDateTypeFromSelection<S>> {\r\n    // A stream that emits whenever the date picker is closed \r\n    closedStream: EventEmitter<void>;\r\n\r\n    // A stream that emits whenever the datepicker is opened\r\n    openedStream: EventEmitter<void>\r\n\r\n    // The input element that the datepicker is associated with\r\n    datepickerInput: C;\r\n\r\n    // The id for the datepicker's calendar \r\n    id: string;\r\n\r\n    // Whether the datepicker pop-up should be disabled\r\n    disabled: boolean;\r\n\r\n    // The state of the datepicker -> Whether it is open or closed\r\n    opened: boolean;\r\n\r\n    // Opens the datepicker\r\n    open(): void;\r\n\r\n    // Register as input with the datepicker \r\n    registerInput(input: C): RealsoftDateSelectionModel<S, D>;\r\n\r\n    // Emits when the datepicker's state changes.\r\n    stateChanges: Subject<void>;\r\n\r\n    \r\n}\r\n\r\n// The form control that can be associated with a datepicker\r\nexport interface RealsoftDatepickerControl<D> {\r\n    getStartValue(): D | null;\r\n    min: D | null;\r\n    max: D | null;\r\n    disabled: boolean;\r\n    dateFilter: DateFilterFn<D>;\r\n    getConnectedOverlayOrigin(): ElementRef;\r\n    getOverlayLabelId(): string | null;\r\n    stateChanges: Observable<void>;\r\n}\r\n\r\n// Possible views for the calendar\r\nexport type RealsoftCalendarView = 'month' | 'year' | 'multi-year';\r\n\r\n// Extra CSS classes that can be associated with a calendar cell.\r\nexport type RealsoftCalendarCellCssClasses = string | string[] | Set<string> | {[key: string]: any};\r\n\r\n// Function that can generate the extra classes that should be added to a calendar cell.\r\nexport type RealsoftCalendarCellClassFunction<D> = (\r\n    date: D,\r\n    view: 'month' | 'year' | 'multi-year',\r\n  ) => RealsoftCalendarCellCssClasses;\r\n\r\n// Injection token that determines the scroll handling while the calendar is open.\r\nexport const REALSOFT_DATEPICKER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\r\n    'realsoft-datepicker-scroll-strategy',\r\n    {\r\n      providedIn: 'root',\r\n      factory: () => {\r\n        const overlay = inject(Overlay);\r\n        return () => overlay.scrollStrategies.reposition();\r\n      },\r\n    },\r\n);\r\n\r\nlet uniqueIdCounter = 0;\r\n\r\n// An internal class that represents the data corresponding to a single calendar cell.\r\nexport class RealsoftCalendarCell<D = any> {\r\n    readonly id = uniqueIdCounter++;\r\n\r\n    constructor(\r\n        public value: number,\r\n        public displayValue: string,\r\n        public ariaLabel: string,\r\n        public enabled: boolean,\r\n        public cssClasses: RealsoftCalendarCellCssClasses = {},\r\n        public compareValue = value,\r\n        public rawValue?: D,\r\n    ) {}\r\n}\r\n\r\n// Event emitted when a date inside the calendar is triggered as a result of a user action\r\nexport interface RealsoftCalendarUserEvent<D> {\r\n    value: D;\r\n    event: Event;\r\n}\r\n  \r\n// An event used for datepicker input and change events. \r\nexport class RealsoftDatepickerInputEvent<D, S = unknown> {\r\n    value: D | null; // The new value for the target datepicker input.\r\n\r\n    constructor(\r\n        public target: RealsoftDatepickerInputBase<S, D>, // Reference to the datepicker input component that emitted the event\r\n        public targetElement: HTMLElement, // Reference to the native input element associated with the datepicker input\r\n    ) {\r\n        this.value = this.target.value;\r\n    }\r\n}\r\n\r\n// Partial representation of RealsoftFormField\r\nexport interface RealsoftFormFieldPartial {\r\n    getConnectedOverlayOrigin(): ElementRef;\r\n    getLabelId(): string | null;\r\n    _elementRef: ElementRef;\r\n    _shouldLabelFloat(): boolean;\r\n    _hasFloatingLabel(): boolean;\r\n    _labelId: string;\r\n}\r\n  \r\nexport type RealsoftDateFormats = {\r\n    parse: {\r\n        dateInput: any;\r\n        timeInput?: any;\r\n      };\r\n      display: {\r\n        dateInput: any;\r\n        monthLabel?: any;\r\n        monthYearLabel: any;\r\n        dateA11yLabel: any;\r\n        monthYearA11yLabel: any;\r\n        timeInput?: any;\r\n        timeOptionLabel?: any;\r\n      };\r\n}\r\n\r\nexport const REALSOFT_MOMENT_DATE_FORMATS: RealsoftDateFormats = {\r\n    parse: {\r\n      dateInput: 'l',\r\n      timeInput: 'LT',\r\n    },\r\n    display: {\r\n      dateInput: 'l',\r\n      timeInput: 'LT',\r\n      monthYearLabel: 'MMM YYYY',\r\n      dateA11yLabel: 'LL',\r\n      monthYearA11yLabel: 'MMMM YYYY',\r\n      timeOptionLabel: 'LT',\r\n    },\r\n  };\r\n\r\n\r\nexport const REALSOFT_DATE_FORMATS = new InjectionToken<RealsoftDateFormats>('realsoft-date-formats');\r\n\r\n\r\nexport function REALSOFT_SINGLE_DATE_SELECTION_MODEL_FACTORY(\r\n    parent: RealsoftSingleDateSelectionModel<unknown>,\r\n    adapter: DateAdapter<unknown>) {\r\n        return parent || new RealsoftSingleDateSelectionModel(adapter)\r\n}\r\n\r\n// For providing a single selection model to a component\r\nexport const REALSOFT_SINGLE_DATE_SELECTION_MODEL_PROVIDER: FactoryProvider = {\r\n    provide: RealsoftDateSelectionModel,\r\n    deps: [DateAdapter],\r\n    useFactory: (adapter: DateAdapter<unknown>) => new RealsoftSingleDateSelectionModel(adapter)\r\n}\r\n\r\n// Used to provide a range selection model to a component\r\nexport const REALSOFT_RANGE_DATE_SELECTION_MODEL_PROVIDER: FactoryProvider = {\r\n    provide: RealsoftDateSelectionModel,\r\n    deps: [DateAdapter],\r\n    useFactory: (adapter: DateAdapter<unknown>) => new RealsoftRangeDateSelectionModel(adapter)\r\n}\r\n\r\nexport function REALSOFT_RANGE_DATE_SELECTION_MODEL_FACTORY(\r\n    parent: RealsoftDateSelectionModel<unknown>,\r\n    adapter: DateAdapter<unknown>) {\r\n        return parent || new RealsoftRangeDateSelectionModel(adapter);\r\n}\r\n\r\n\r\n\r\n\r\n\r\n// InjectionToken for datepicker that can be used to override default locale code. \r\nexport const REALSOFT_DATE_LOCALE = new InjectionToken<{}>('REALSOFT_DATE_LOCALE', {\r\n  providedIn: 'root',\r\n  factory: REALSOFT_DATE_LOCALE_FACTORY,\r\n});\r\n\r\n\r\nexport function REALSOFT_DATE_LOCALE_FACTORY(): {} {\r\n  return inject(LOCALE_ID);\r\n}\r\n\r\n\r\nexport const REALSOFT_NATIVE_DATE_FORMATS: RealsoftDateFormats = {\r\n  parse: {\r\n    dateInput: null,\r\n    timeInput: null,\r\n  },\r\n  display: {\r\n    dateInput: {year: 'numeric', month: 'numeric', day: 'numeric'},\r\n    timeInput: {hour: 'numeric', minute: 'numeric'},\r\n    monthYearLabel: {year: 'numeric', month: 'short'},\r\n    dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},\r\n    monthYearA11yLabel: {year: 'numeric', month: 'long'},\r\n    timeOptionLabel: {hour: 'numeric', minute: 'numeric'},\r\n  },\r\n};\r\n\r\nexport function provideNativeDateAdapter(\r\n  formats: RealsoftDateFormats = REALSOFT_NATIVE_DATE_FORMATS,\r\n): Provider[] {\r\n  return [\r\n    {provide: DateAdapter, useClass: RealsoftNativeDateAdapter},\r\n    {provide: REALSOFT_DATE_FORMATS, useValue: formats},\r\n  ]; \r\n}\r\n\r\nexport function provideRealsoftMomentDateAdapter(\r\n    formats: RealsoftDateFormats = REALSOFT_MOMENT_DATE_FORMATS,\r\n    options?: RealsoftMomentDateAdapterOptions,\r\n  ): Provider[] {\r\n    const providers: Provider[] = [\r\n      {\r\n        provide: DateAdapter,\r\n        useClass: RealsoftMomentDateAdapter,\r\n        deps: [REALSOFT_DATE_LOCALE, REALSOFT_MOMENT_DATE_ADAPTER_OPTIONS],\r\n      },\r\n      {provide: REALSOFT_DATE_FORMATS, useValue: formats},\r\n    ];\r\n  \r\n    if (options) {\r\n      providers.push({provide: REALSOFT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: options});\r\n    }\r\n  \r\n    return providers;\r\n  }","import {Injectable} from '@angular/core';\r\nimport {Subject} from 'rxjs';\r\n\r\n/** Datepicker data that requires internationalization. */\r\n\r\n// A service for the datepicker data that requires internationalization\r\n@Injectable({providedIn: 'root'})\r\nexport class RealsoftDatepickerIntl {\r\n    // A stream that emits whenever the labels are changes. Used for notifying components if the labels have changed after internationalization\r\n    readonly changes: Subject<void> = new Subject<void>();\r\n\r\n    // A label for the calendar pop-up -> Used by screen readers\r\n    calendarLabel = 'Calendar';\r\n\r\n    // A label for the button used to open the calendar pop-up -> Used by screen readers\r\n    openCalendarLabel = 'Open Calendar';\r\n\r\n    // A label for the button used to close the calendar pop-up -> Used by screen readers\r\n    closeCalendarLabel = 'Close Calendar';\r\n\r\n    // A label for the previous month button -> Used by screen readers\r\n    prevMonthLabel = 'Previous Month';\r\n\r\n    // A label for the next month button -> Used by screen readers\r\n    nextMonthLabel = 'Next Month';\r\n\r\n    // A label for the previous year button -> Used by screen readers\r\n    prevYearLabel = 'Previous Year';\r\n\r\n    // A label for the next year button -> Used by screen readers\r\n    nextYearLabel = 'Next Year';\r\n\r\n    // A label for the previous multi-year button -> Used by screen readers\r\n    prevMultiYearLabel = 'Previous 24 years';\r\n\r\n    // A label for the next multi-year button -> Used by screen readers \r\n    nextMultiYearLabel = 'Next 24 years';\r\n\r\n    // A label for the 'switch to month view' button -> Used by screen readers\r\n    switchToMonthViewLabel = 'Choose date';\r\n\r\n    // A label for the 'switch to year view' button -> Used by screen readers.\r\n    switchToMultiYearViewLabel = 'Choose month and year';\r\n\r\n    // A label for the first date of a range of dates -> Used by screen readers\r\n    startDateLabel = 'Start date';\r\n\r\n    // A label for the last date of a range of dates -> Used by screen readers\r\n    endDateLabel = 'End date';\r\n\r\n    // A label for the comparison date of a range of dates -> Used by screen readers\r\n    comparisonDateLabel = 'Comparison Range';\r\n\r\n    // A function that formats a range of years -> Used for visuals\r\n    formatYearRange(start: string, end: string): string {\r\n        return `${start} \\u2013 ${end}`;\r\n    }\r\n\r\n    // A function that formats a label for a range of years -> Used by screen readers\r\n    formatYearRangeLabel(start: string, end: string): string {\r\n        return `${start} to ${end}`;\r\n    }\r\n\r\n}","import { Platform } from '@angular/cdk/platform';\r\nimport { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, ViewEncapsulation, NgZone, OnChanges, SimpleChanges, OnDestroy, AfterViewChecked, inject, afterNextRender, Injector, Renderer2 } from '@angular/core';\r\nimport { NgClass } from '@angular/common';\r\nimport { RealsoftCalendarCell, RealsoftCalendarUserEvent } from './models';\r\nimport { UniqueIdGeneratorService } from '../id-generator';\r\nimport { RealsoftDatepickerIntl } from './datepicker-intl';\r\n\r\n\r\n// For displaying calendar data in a table\r\n@Component({\r\n  selector: '[realsoft-calendar-body]',\r\n  templateUrl: 'calendar-body.html',\r\n  exportAs: 'realsoftCalendarBody',\r\n  standalone: true,\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  styleUrl: 'calendar.scss',\r\n  host: {\r\n    'class': 'realsoft-calendar-body',\r\n  },\r\n  imports: [NgClass],\r\n})\r\nexport class RealsoftCalendarBody<D = any> implements OnChanges, OnDestroy, AfterViewChecked {\r\n  // Store a reference to the element\r\n  private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n  // For running events outside of Angular's zone\r\n  private _ngZone = inject(NgZone);\r\n\r\n  // The platform that is currently running\r\n  private _platform = inject(Platform);\r\n\r\n  // The datepicker internationalization service\r\n  private _intl = inject(RealsoftDatepickerIntl);\r\n\r\n  // The event cleanup array\r\n  private _eventCleanups: (() => void)[];\r\n\r\n  // Used to skip the next focus event when rendering the preview range\r\n  private _skipNextFocus: boolean;\r\n\r\n  // Used to focus the active cell after change detection has run\r\n  private _focusActiveCellAfterViewChecked = false;\r\n\r\n  // The number of blank cells to put at the beginning for the first row\r\n  _firstRowOffset: number;\r\n\r\n  // The padding for the individual date cells\r\n  _cellPadding: string;\r\n\r\n  // The width of an individual cells\r\n  _cellWidth: string;\r\n\r\n  // ID for the start date label\r\n  _startDateLabelId: string = inject(UniqueIdGeneratorService).generateID('realsoft-calendar-body-start-');\r\n\r\n  // ID for the end date label\r\n  _endDateLabelId: string = inject(UniqueIdGeneratorService).generateID('realsoft-calendar-body-end-');\r\n\r\n  // ID for the comparison start date label \r\n  _comparisonStartDateLabelId: string = inject(UniqueIdGeneratorService).generateID('realsoft-calendar-body-comparison-start-');\r\n  \r\n  // ID for the comparison end date label.\r\n  _comparisonEndDateLabelId: string = inject(UniqueIdGeneratorService).generateID('realsoft-calendar-body-comparison-end-');\r\n\r\n  private _didDragSinceMouseDown = false;\r\n\r\n  private _injector = inject(Injector);\r\n\r\n  comparisonDateAccessibleName = this._intl.comparisonDateLabel;\r\n\r\n  // Renderer2 Injection\r\n  private _renderer = inject(Renderer2);\r\n\r\n\r\n  // Input Bindings \r\n\r\n  // The label for the table displayed in the calendar \r\n  @Input() label: string;\r\n\r\n  // The cells to be displayed in the table of the calendar\r\n  @Input() rows: RealsoftCalendarCell[][];\r\n\r\n  // The value in the calendar table that corresponds to the current day \"today\"\r\n  @Input() todayValue: number;\r\n\r\n  // The cell number of the active cell in the calendar table\r\n  @Input() activeCell: number = 0;\r\n\r\n  // The number of columns in the calendar table\r\n  @Input() numberOfColumns: number =7;\r\n\r\n  // The minimum number of free cells needed to fit the label in the first row\r\n  @Input() labelMinRequiredCells: number;\r\n\r\n  // The End value of the selected date range\r\n  @Input() endValue: number;\r\n\r\n  // The start value of the selected date range\r\n  @Input() startValue: number;\r\n\r\n  // Whether a range is being selected\r\n  @Input() isRangeSelection: boolean = false;\r\n\r\n  // The aspect ratio to use for the cells in the table. Which will be maintained even as the table resizes.\r\n  @Input() cellAspectRatio: number = 1;\r\n\r\n  // The start of the comparison range\r\n  @Input() comparisonStart: number | null;\r\n\r\n  // The end of the comparison range\r\n  @Input() comparisonEnd: number | null;\r\n\r\n  // The start of the preview range\r\n  @Input() previewStart: number | null = null;\r\n\r\n  // The end of the preview range \r\n  @Input() previewEnd: number | null = null;\r\n\r\n  // ARIA Accessible name of the `<input realsoftStartDate/>`\r\n  @Input() startDateAccessibleName: string | null;\r\n\r\n  // ARIA Accessible name of the `<input realsoftEndDate/>`\r\n  @Input() endDateAccessibleName: string | null;\r\n\r\n  // Emits when a new value is selected\r\n  @Output() readonly selectedValueChange = new EventEmitter<RealsoftCalendarUserEvent<number>>();\r\n\r\n  // Emits when the preview has changes \r\n  @Output() readonly previewChange = new EventEmitter<RealsoftCalendarUserEvent<RealsoftCalendarCell | null>>();\r\n\r\n  // Emits when the active date has changed\r\n  @Output() readonly activeDateChange = new EventEmitter<RealsoftCalendarUserEvent<number>>();\r\n\r\n  // Emits the date at the possible start of a drag event\r\n  @Output() readonly dragStarted = new EventEmitter<RealsoftCalendarUserEvent<D>>();\r\n\r\n  // Emits the date at the conclusion of a drag, or null if mouse was not released on a date\r\n  @Output() readonly dragEnded = new EventEmitter<RealsoftCalendarUserEvent<D | null>>();\r\n  \r\n  ngAfterViewChecked() {\r\n    if (this._focusActiveCellAfterViewChecked) {\r\n      this.focusActiveCell();\r\n      this._focusActiveCellAfterViewChecked = false;\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    const columnChanges = changes['numCols'];\r\n    const {rows, numberOfColumns} = this;\r\n\r\n    if (changes['rows'] || columnChanges) {\r\n      this._firstRowOffset = rows && rows.length && rows[0].length ? numberOfColumns - rows[0].length : 0;\r\n    }\r\n\r\n    if (changes['cellAspectRatio'] || columnChanges || !this._cellPadding) {\r\n      this._cellPadding = `${(50 * this.cellAspectRatio) / numberOfColumns}%`;\r\n    }\r\n\r\n    if (columnChanges || !this._cellWidth) {\r\n      this._cellWidth = `${100 / numberOfColumns}%`;\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._eventCleanups.forEach(cleanup => cleanup());\r\n  }\r\n\r\n  _trackRow = (row: RealsoftCalendarCell[]) => row;\r\n\r\n  constructor(...args: unknown[]);\r\n\r\n  constructor() {\r\n    this._ngZone.runOutsideAngular(() => {\r\n        const element = this._elementRef.nativeElement;\r\n        const cleanups = [\r\n            this._renderer.listen(element, 'touchmove', this._touchmoveHandler),\r\n            this._renderer.listen(element, 'mouseenter', this._userEnterHandler),\r\n            this._renderer.listen(element, 'focus', this._userEnterHandler),\r\n            this._renderer.listen(element, 'mouseleave', this._userLeaveHandler),\r\n            this._renderer.listen(element, 'blur', this._userLeaveHandler),\r\n            this._renderer.listen(element, 'mousedown', this._mousedownHandler),\r\n            this._renderer.listen(element, 'touchstart', this._mousedownHandler),\r\n        ]\r\n        if(this._platform.isBrowser) {\r\n            cleanups.push(\r\n                this._renderer.listen('window', 'mouseup', this._mouseupHandler),\r\n                this._renderer.listen('window', 'touchend', this._touchendHandler),\r\n            )\r\n        }\r\n        this._eventCleanups = cleanups;\r\n    })\r\n  }\r\n\r\n  // Called when a cell is clicked\r\n  cellClicked(cell: RealsoftCalendarCell, event: MouseEvent): void {\r\n    // Make sure to ignore any clicks that are actually canceled \r\n    if(this._didDragSinceMouseDown) {\r\n        return;\r\n    }\r\n    if(cell.enabled) {\r\n        this.selectedValueChange.emit({value: cell.value, event});\r\n    }\r\n  }\r\n\r\n  // Called when the active date changes\r\n  activeDateChangedEmitter(cell: RealsoftCalendarCell, event: FocusEvent): void {\r\n    if(cell.enabled) {\r\n        this.activeDateChange.emit({value: cell.value, event})\r\n    }\r\n  }\r\n\r\n  // Function that returns whether a cell in the calendar should be marked as selected\r\n  isSelected(value: number) {\r\n    return this.startValue === value || this.endValue === value;\r\n  }\r\n\r\n  // Function that returns whether a cell in the calendar should be marked as active\r\n  isActiveCell(rowIndex: number, colIndex: number): boolean {\r\n    let cellNumber = rowIndex * this.numberOfColumns + colIndex;\r\n\r\n    if(rowIndex) {\r\n        cellNumber -= this._firstRowOffset;\r\n    }\r\n\r\n    return cellNumber == this.activeCell;\r\n  }\r\n\r\n  focusActiveCell(movePreview = true) {\r\n    this._ngZone.run(() => {\r\n      setTimeout(() => {\r\n        const activeCell: HTMLElement | null = this._elementRef.nativeElement.querySelector('.realsoft-calendar-body-active');\r\n\r\n        if(activeCell){\r\n          if(!movePreview) {\r\n            this._skipNextFocus= true;\r\n          }\r\n          activeCell.focus();\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  // Focusing the active cell after change detection has run and the microtask queue is empty\r\n  scheduleFocusActiveCellAfterViewChecked() {\r\n    this._focusActiveCellAfterViewChecked = true;\r\n  }\r\n\r\n  // Function that gets whether a value is the start of the main range\r\n  isRangeStart(value: number) {\r\n    return isStart(value, this.startValue, this.endValue);\r\n  }\r\n\r\n  // Function that gets whether a value is the end of the main range\r\n  isRangeEnd(value: number) {\r\n    return isEnd(value, this.startValue, this.endValue);\r\n  }\r\n\r\n  // Function that gets whether a value is within the currently selected range\r\n  isInRange(value: number): boolean {\r\n    return isInRange(value, this.startValue, this.endValue, this.isRangeSelection);\r\n  }\r\n\r\n  // Function that gets whether a value is the start of the comparison range\r\n  isComparisonStart(value: number) {\r\n    return isStart(value, this.comparisonStart, this.comparisonEnd);\r\n  }\r\n\r\n  // Function that gets whether a value is the end of the comparison range\r\n  isComparisonEnd(value: number) {\r\n    return isEnd(value, this.comparisonStart, this.comparisonEnd);\r\n  }\r\n\r\n  // Function that determines whether the cell is a start cell between the main and the comparison range\r\n  isComparisonBridgeStart(value: number, rowIndex: number, colIndex: number) {\r\n    if (!this.isComparisonStart(value) || this.isRangeStart(value) || !this.isInRange(value)) {\r\n      return false;\r\n    }\r\n\r\n    let previousCell: RealsoftCalendarCell | undefined = this.rows[rowIndex][colIndex - 1];\r\n\r\n    if (!previousCell) {\r\n      const previousRow = this.rows[rowIndex - 1];\r\n      previousCell = previousRow && previousRow[previousRow.length - 1];\r\n    }\r\n\r\n    return previousCell && !this.isRangeEnd(previousCell.compareValue);\r\n  }\r\n\r\n\r\n  // Function that determines whether the cell is an end bridge cell between the main and comparison ranges.\r\n  isComparisonBridgeEnd(value: number, rowIndex: number, colIndex: number) {\r\n    if(!this.isComparisonEnd(value) || this.isRangeEnd(value) || !this.isInRange(value)) {\r\n      return false;\r\n    }\r\n\r\n    let nextCell: RealsoftCalendarCell | undefined = this.rows[rowIndex][colIndex + 1];\r\n\r\n    if(!nextCell) {\r\n      const nextRow = this.rows[rowIndex + 1];\r\n      nextCell = nextRow && nextRow[0];\r\n    }\r\n\r\n    return nextCell && this.isRangeStart(nextCell.compareValue);\r\n  }\r\n\r\n\r\n  // Function that gets whether a value is within the current comparison range\r\n  isInComparisonRange(value: number) {\r\n    return isInRange(value, this.comparisonStart, this.comparisonEnd, this.isRangeSelection);\r\n  }\r\n\r\n  // Function that gets whether a value is the same as the start and the end of the comparison range\r\n  isComparisonIdentical(value: number) {\r\n    return this.comparisonStart === this.comparisonEnd && value === this.comparisonStart;\r\n  }\r\n\r\n  // Function that gets whether a certain value is the start of the preview range\r\n  isPreviewStart(value: number) {\r\n    return isStart(value, this.previewStart, this.previewEnd)\r\n  }\r\n\r\n  // Function that gets whether a certain value is the end of the preview range\r\n  isPreviewEnd(value: number) {\r\n    return isEnd(value, this.previewStart, this.previewEnd);\r\n  }\r\n\r\n  // Function that gets whether a value is inside the preview range\r\n  isInPreview(value: number) {\r\n    return isInRange(value, this.previewStart, this.previewEnd, this.isRangeSelection);\r\n  }\r\n\r\n  // An Event Handler for when the user enters an element inside the calendar body -> By hovering in or foucs\r\n  private _userEnterHandler = (event: Event) => {\r\n    if(this._skipNextFocus && event.type === 'focus') {\r\n      this._skipNextFocus = false;\r\n      return;\r\n    }\r\n\r\n    if (event.target && this.isRangeSelection) {\r\n      const cell = this._getCellFromDOMNode(event.target as HTMLElement);\r\n\r\n      if (cell) {\r\n        this._ngZone.run(() => this.previewChange.emit({value: cell.enabled ? cell: null, event}))\r\n      }\r\n    }\r\n  };\r\n\r\n\r\n  private _touchmoveHandler = (event: TouchEvent) => {\r\n    if (!this.isRangeSelection) return;\r\n\r\n    const target = getActualTouchTarget(event);\r\n    const cell = target ? this._getCellFromDOMNode(target as HTMLElement) : null;\r\n\r\n    if (target !== event.target) {\r\n      this._didDragSinceMouseDown = true;\r\n    }\r\n\r\n    if (getCellElement(event.target as HTMLElement)) {\r\n      event.preventDefault();\r\n    }\r\n\r\n    this._ngZone.run(() => this.previewChange.emit({value: cell?.enabled ? cell : null, event}));\r\n  };\r\n\r\n\r\n  // Function for when the user's pointer leaves an element inside the calendar body.\r\n  private _userLeaveHandler = (event: Event) => {\r\n    // We only need to hit the zone when we're selecting a range.\r\n    if (this.previewEnd !== null && this.isRangeSelection) {\r\n      if (event.type !== 'blur') {\r\n        this._didDragSinceMouseDown = true;\r\n      }\r\n\r\n      // Only reset the preview end value when leaving cells. This looks better, because\r\n      // we have a gap between the cells and the rows and we don't want to remove the\r\n      // range just for it to show up again when the user moves a few pixels to the side.\r\n      if (\r\n        event.target &&\r\n        this._getCellFromDOMNode(event.target as HTMLElement) &&\r\n        !(\r\n          (event as MouseEvent).relatedTarget &&\r\n          this._getCellFromDOMNode((event as MouseEvent).relatedTarget as HTMLElement)\r\n        )\r\n      ) {\r\n        this._ngZone.run(() => this.previewChange.emit({value: null, event}));\r\n      }\r\n    }\r\n  };\r\n\r\n\r\n  private _mousedownHandler = (event: Event) => {\r\n    if (!this.isRangeSelection) return;\r\n\r\n    this._didDragSinceMouseDown = false;\r\n    // Begin a drag if a cell within the current range was targeted.\r\n    const cell = event.target && this._getCellFromDOMNode(event.target as HTMLElement);\r\n    if (!cell || !this.isInRange(cell.compareValue)) {\r\n      return;\r\n    }\r\n\r\n    this._ngZone.run(() => {\r\n      this.dragStarted.emit({\r\n        value: cell.rawValue,\r\n        event,\r\n      });\r\n    });\r\n  };\r\n\r\n  // Triggered on mouseup anywhere. Respsonsible for ending a drag sequence.\r\n  private _mouseupHandler = (event: Event) => {\r\n    if (!this.isRangeSelection) return;\r\n\r\n    const cellElement = getCellElement(event.target as HTMLElement);\r\n    if (!cellElement) {\r\n      // Mouseup happened outside of datepicker. Cancel drag.\r\n      this._ngZone.run(() => {\r\n        this.dragEnded.emit({value: null, event});\r\n      });\r\n      return;\r\n    }\r\n\r\n    if (cellElement.closest('.realsoft-calendar-body') !== this._elementRef.nativeElement) {\r\n      return;\r\n    }\r\n\r\n    this._ngZone.run(() => {\r\n      const cell = this._getCellFromDOMNode(cellElement);\r\n      this.dragEnded.emit({value: cell?.rawValue ?? null, event});\r\n    });\r\n  };\r\n\r\n  // Triggered on touchend anywhere. Respsonsible for ending a drag sequence\r\n  private _touchendHandler = (event: TouchEvent) => {\r\n    const target = getActualTouchTarget(event);\r\n\r\n    if (target) {\r\n      this._mouseupHandler({target} as unknown as Event);\r\n    }\r\n  };\r\n\r\n  // Function that finds the RealsoftCalendarCell that corresponds to a DOM node\r\n  private _getCellFromDOMNode(element: HTMLElement): RealsoftCalendarCell | null {\r\n    const cell = getCellElement(element);\r\n\r\n    if (cell) {\r\n      const row = cell.getAttribute('data-realsoft-row');\r\n      const col = cell.getAttribute('data-realsoft-col');\r\n\r\n      if(row && col) {\r\n        return this.rows[parseInt(row)][parseInt(col)];\r\n      }\r\n    }\r\n    return null;\r\n\r\n  }\r\n}\r\n\r\n// Reusable Functions\r\n\r\n// Function that checks whether a node is a table cell element\r\nfunction isTableCell(node: Node | undefined | null): node is HTMLTableCellElement {\r\n    return node?.nodeName === 'TD';\r\n}\r\n\r\n// \r\n\r\n/**\r\n * Gets the date table cell element that is or contains the specified element.\r\n * Or returns null if element is not part of a date cell.\r\n */\r\nfunction getCellElement(element: HTMLElement): HTMLElement | null {\r\n  let cell: HTMLElement | undefined;\r\n  if (isTableCell(element)) {\r\n    cell = element;\r\n  } else if (isTableCell(element.parentNode)) {\r\n    cell = element.parentNode as HTMLElement;\r\n  } else if (isTableCell(element.parentNode?.parentNode)) {\r\n    cell = element.parentNode!.parentNode as HTMLElement;\r\n  }\r\n\r\n  return cell?.getAttribute('data-mat-row') != null ? cell : null;\r\n}\r\n\r\n/** Checks whether a value is the start of a range. */\r\nfunction isStart(value: number, start: number | null, end: number | null): boolean {\r\n  return end !== null && start !== end && value < end && value === start;\r\n}\r\n\r\n/** Checks whether a value is the end of a range. */\r\nfunction isEnd(value: number, start: number | null, end: number | null): boolean {\r\n  return start !== null && start !== end && value >= start && value === end;\r\n}\r\n\r\n/** Checks whether a value is inside of a range. */\r\nfunction isInRange(\r\n  value: number,\r\n  start: number | null,\r\n  end: number | null,\r\n  rangeEnabled: boolean,\r\n): boolean {\r\n  return (\r\n    rangeEnabled &&\r\n    start !== null &&\r\n    end !== null &&\r\n    start !== end &&\r\n    value >= start &&\r\n    value <= end\r\n  );\r\n}\r\n\r\n/**\r\n * Extracts the element that actually corresponds to a touch event's location\r\n * (rather than the element that initiated the sequence of touch events).\r\n */\r\nfunction getActualTouchTarget(event: TouchEvent): Element | null {\r\n  const touchLocation = event.changedTouches[0];\r\n  return document.elementFromPoint(touchLocation.clientX, touchLocation.clientY);\r\n}","\r\n  <!--A seperate label row for when there's not enough space in the first row. This row should be marked as aria-hidden because it shouldn't be read as one of the weeks in the month.-->\r\n@if (_firstRowOffset < labelMinRequiredCells) {\r\n    <tr aria-hidden=\"true\">\r\n      <td class=\"realsoft-calendar-body-label\"\r\n          [attr.colspan]=\"numberOfColumns\"\r\n          [style.paddingTop]=\"_cellPadding\"\r\n          [style.paddingBottom]=\"_cellPadding\">\r\n        {{label}}\r\n      </td>\r\n    </tr>\r\n  }\r\n  \r\n  <!-- Create the first row separately so we can include a special spacer cell. -->\r\n  @for (row of rows; track _trackRow(row); let rowIndex = $index) {\r\n    <tr role=\"row\">\r\n      @if (rowIndex === 0 && _firstRowOffset) {\r\n        <td\r\n          class=\"realsoft-calendar-body-label\"\r\n          [attr.colspan]=\"_firstRowOffset\"\r\n          [style.paddingTop]=\"_cellPadding\"\r\n          [style.paddingBottom]=\"_cellPadding\">\r\n          {{_firstRowOffset >= labelMinRequiredCells ? label : ''}}\r\n        </td>\r\n      }\r\n      @for (item of row; track item.id; let colIndex = $index) {\r\n        <td\r\n          role=\"gridcell\"\r\n          class=\"realsoft-calendar-body-cell-container\"\r\n          [style.width]=\"_cellWidth\"\r\n          [style.paddingTop]=\"_cellPadding\"\r\n          [style.paddingBottom]=\"_cellPadding\"\r\n          [attr.data-realsoft-row]=\"rowIndex\"\r\n          [attr.data-realsoft-col]=\"colIndex\"\r\n        >\r\n          <button\r\n              type=\"button\"\r\n              class=\"realsoft-calendar-body-cell\"\r\n              [ngClass]=\"item.cssClasses\"\r\n              [tabindex]=\"isActiveCell(rowIndex, colIndex) ? 0 : -1\"\r\n              [class.realsoft-calendar-body-disabled]=\"!item.enabled\"\r\n              [class.realsoft-calendar-body-active]=\"isActiveCell(rowIndex, colIndex)\"\r\n              [class.realsoft-calendar-body-range-start]=\"isRangeStart(item.compareValue)\"\r\n              [class.realsoft-calendar-body-range-end]=\"isRangeEnd(item.compareValue)\"\r\n              [class.realsoft-calendar-body-in-range]=\"isInRange(item.compareValue)\"\r\n              [class.realsoft-calendar-body-comparison-bridge-start]=\"isComparisonBridgeStart(item.compareValue, rowIndex, colIndex)\"\r\n              [class.realsoft-calendar-body-comparison-bridge-end]=\"isComparisonBridgeEnd(item.compareValue, rowIndex, colIndex)\"\r\n              [class.realsoft-calendar-body-comparison-start]=\"isComparisonStart(item.compareValue)\"\r\n              [class.realsoft-calendar-body-comparison-end]=\"isComparisonEnd(item.compareValue)\"\r\n              [class.realsoft-calendar-body-in-comparison-range]=\"isInComparisonRange(item.compareValue)\"\r\n              [class.realsoft-calendar-body-preview-start]=\"isPreviewStart(item.compareValue)\"\r\n              [class.realsoft-calendar-body-preview-end]=\"isPreviewEnd(item.compareValue)\"\r\n              [class.realsoft-calendar-body-in-preview]=\"isInPreview(item.compareValue)\"\r\n              [attr.aria-label]=\"item.ariaLabel\"\r\n              [attr.aria-disabled]=\"!item.enabled || null\"\r\n              [attr.aria-pressed]=\"isSelected(item.compareValue)\"\r\n              [attr.aria-current]=\"todayValue === item.compareValue ? 'date' : null\"\r\n              (click)=\"cellClicked(item, $event)\"\r\n              (focus)=\"activeDateChangedEmitter(item, $event)\">\r\n              <span class=\"realsoft-calendar-body-cell-content realsoft-focus-indicator\"\r\n                [class.realsoft-calendar-body-selected]=\"isSelected(item.compareValue)\"\r\n                [class.realsoft-calendar-body-comparison-identical]=\"isComparisonIdentical(item.compareValue)\"\r\n                [class.realsoft-calendar-body-today]=\"todayValue === item.compareValue\">\r\n                {{item.displayValue}}\r\n              </span>\r\n              <span class=\"realsoft-calendar-body-cell-preview\" aria-hidden=\"true\"></span>\r\n          </button>\r\n        </td>\r\n      }\r\n    </tr>\r\n  }\r\n  \r\n<span [id]=\"_startDateLabelId\" class=\"realsoft-calendar-body-hidden-label\">{{startDateAccessibleName}}</span>\r\n<span [id]=\"_endDateLabelId\" class=\"realsoft-calendar-body-hidden-label\">{{endDateAccessibleName}}</span>\r\n<span [id]=\"_comparisonStartDateLabelId\" class=\"realsoft-calendar-body-hidden-label\">{{comparisonDateAccessibleName}} {{startDateAccessibleName}}</span>\r\n<span [id]=\"_comparisonEndDateLabelId\" class=\"realsoft-calendar-body-hidden-label\">{{comparisonDateAccessibleName}} {{endDateAccessibleName}}</span>","export function createMissingDateImplementationError(provider: string) {\r\n    return Error(\r\n      `RealsoftDatepicker: No provider found for ${provider}. You must add one of the following ` +\r\n        `to your app config: provideNativeDateAdapter, provideDateFnsAdapter, ` +\r\n        `provideLuxonDateAdapter, provideRealsoftMomentDateAdapter, or provide a custom implementation.`,\r\n    );\r\n}","import {Injectable, InjectionToken, Optional, SkipSelf, FactoryProvider} from '@angular/core';\r\nimport { DateRange } from '../models';\r\nimport { DateAdapter } from '../shared/date-adapter';\r\n\r\n// Injection token used to customize the date range selection behavior. \r\nexport const REALSOFT_DATE_RANGE_SELECTION_STRATEGY = new InjectionToken<RealsoftDateRangeSelectionStrategy<any>>('REALSOFT_DATE_RANGE_SELECTION_STRATEGY');\r\n\r\n// Object that can be provided in order to customize the date range selection behavior.\r\nexport interface RealsoftDateRangeSelectionStrategy<D> {\r\n  // Method called when the user has finished selecting a value.\r\n  selectionFinished(date: D | null, currentRange: DateRange<D>, event: Event): DateRange<D>;\r\n\r\n  // Method called when the user has activated a new date range -> Either by hovering over it or moving foucs.\r\n  createPreview(activeDate: D | null, currentRange: DateRange<D>, event: Event): DateRange<D>;\r\n\r\n  // Called when the user has dragged a date in the currently selected range to another date.\r\n  createDrag?(dragOrigin: D, originalRange: DateRange<D>, newDate: D, event: Event) : DateRange<D> | null;\r\n} \r\n\r\n\r\n// Service that provides the default range selection behavior\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class DefaultRealsoftCalendarRangeStrategy<D> implements RealsoftDateRangeSelectionStrategy<D> {\r\n  \r\n  constructor(...args: unknown[]);\r\n\r\n  constructor(private _dateAdapter: DateAdapter<D>) {}\r\n\r\n  selectionFinished(date: D, currentRange: DateRange<D>, event: Event): DateRange<D> {\r\n    let {start, end} = currentRange;\r\n\r\n    if (start == null) {\r\n      start = date;\r\n    } else if (end == null && date && this._dateAdapter.compareDate(date, start) >= 0) {\r\n      end = date\r\n    } else {\r\n      start = date;\r\n      end = null;\r\n    }\r\n    return new DateRange<D>(start, end)\r\n  }\r\n\r\n  createPreview(activeDate: D | null, currentRange: DateRange<D>) {\r\n    let start: D | null = null;\r\n    let end: D | null = null;\r\n\r\n    if (currentRange.start && !currentRange.end && activeDate) {\r\n      start = currentRange.start;\r\n      end = activeDate;\r\n    }\r\n\r\n    return new DateRange<D>(start, end);\r\n  }\r\n\r\n\r\n  createDrag(dragOrigin: D, originalRange: DateRange<D>, newDate: D) {\r\n    let start = originalRange.start;\r\n    let end = originalRange.end;\r\n\r\n    if (!start || !end) {\r\n      return null; // Early exit as no drag can happen when one of the ends are null\r\n    }\r\n\r\n    const adapter = this._dateAdapter;\r\n\r\n    const isRange = adapter.compareDate(start, end) !== 0; // Make sure that it's a range selection \r\n    const diffYears = adapter.getYear(newDate) - adapter.getYear(dragOrigin);\r\n    const diffMonths = adapter.getMonth(newDate) - adapter.getMonth(dragOrigin);\r\n    const diffDays = adapter.getDate(newDate) - adapter.getDate(dragOrigin);\r\n\r\n    if (isRange && adapter.sameDate(dragOrigin, originalRange.start)) {\r\n      start = newDate;\r\n      if (adapter.compareDate(newDate, end) > 0) {\r\n        end = adapter.addCalendarYears(end, diffYears);\r\n        end = adapter.addCalendarMonths(end, diffMonths);\r\n        end = adapter.addCalendarDays(end, diffDays);\r\n      }\r\n    } else if (isRange && adapter.sameDate(dragOrigin, originalRange.end)) {\r\n      end = newDate;\r\n      if (adapter.compareDate(newDate, start) < 0) {\r\n        start = adapter.addCalendarYears(start, diffYears);\r\n        start = adapter.addCalendarMonths(start, diffMonths);\r\n        start = adapter.addCalendarDays(start, diffDays);\r\n      }\r\n    } else {\r\n      start = adapter.addCalendarYears(start, diffYears);\r\n      start = adapter.addCalendarMonths(start, diffMonths);\r\n      start = adapter.addCalendarDays(start, diffDays);\r\n      end = adapter.addCalendarYears(end, diffYears);\r\n      end = adapter.addCalendarMonths(end, diffMonths);\r\n      end = adapter.addCalendarDays(end, diffDays);\r\n    }\r\n\r\n    return new DateRange<D>(start, end);\r\n  }\r\n}\r\n\r\n\r\nexport function REALSOFT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY(\r\n  parent: RealsoftDateRangeSelectionStrategy<unknown>,\r\n  adapter: DateAdapter<unknown>,\r\n) {\r\n  return parent || new DefaultRealsoftCalendarRangeStrategy(adapter);\r\n}\r\n\r\n\r\nexport const REALSOFT_CALENDAR_RANGE_STRATEGY_PROVIDER: FactoryProvider = {\r\n  provide: REALSOFT_DATE_RANGE_SELECTION_STRATEGY,\r\n  deps: [[new Optional(), new SkipSelf(), REALSOFT_DATE_RANGE_SELECTION_STRATEGY], DateAdapter],\r\n  useFactory: REALSOFT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY,\r\n};\r\n\r\n\r\n","import {\r\n    DOWN_ARROW,\r\n    END,\r\n    ENTER,\r\n    HOME,\r\n    LEFT_ARROW,\r\n    PAGE_DOWN,\r\n    PAGE_UP,\r\n    RIGHT_ARROW,\r\n    UP_ARROW,\r\n    SPACE,\r\n    ESCAPE,\r\n    hasModifierKey,\r\n  } from '@angular/cdk/keycodes';\r\n  import {\r\n    AfterContentInit,\r\n    ChangeDetectionStrategy,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    EventEmitter,\r\n    Input,\r\n    Output,\r\n    ViewEncapsulation,\r\n    ViewChild,\r\n    OnDestroy,\r\n    SimpleChanges,\r\n    OnChanges,\r\n    inject,\r\n  } from '@angular/core';\r\nimport {Directionality} from '@angular/cdk/bidi';\r\nimport { RealsoftCalendarBody } from './calendar-body';\r\nimport { Subscription } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { DateRange, REALSOFT_DATE_FORMATS, RealsoftCalendarCell, RealsoftCalendarCellClassFunction, RealsoftCalendarUserEvent, RealsoftDateFormats } from './models';\r\nimport { createMissingDateImplementationError } from './shared/datepicker-errors';\r\nimport { DateAdapter } from './shared/date-adapter';\r\nimport { REALSOFT_DATE_RANGE_SELECTION_STRATEGY, RealsoftDateRangeSelectionStrategy } from './services/default-range-selection-strategy';\r\n  \r\nconst DAYS_PER_WEEK = 7;\r\n  \r\nlet uniqueIdCounter = 0;\r\n  \r\n\r\n@Component({\r\n    selector: 'realsoft-month-view',\r\n    templateUrl: 'datepicker-month-view.html',\r\n    exportAs: 'realsoftMonthView',\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    imports: [RealsoftCalendarBody],\r\n})\r\nexport class RealsoftMonthView<D> implements AfterContentInit, OnChanges, OnDestroy {\r\n  // For manual change detection\r\n  readonly _changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n  // Date Formats Injection\r\n  private _dateFormats = inject<RealsoftDateFormats>(REALSOFT_DATE_FORMATS, {optional: true})!;\r\n\r\n  // Date Adapter Injection\r\n  _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\r\n\r\n  // Directionality Service Injection for RTL Mode Support\r\n  private _dir = inject(Directionality, {optional: true});\r\n\r\n  // Range Strategy Injection\r\n  private _rangeStrategy = inject<RealsoftDateRangeSelectionStrategy<D>>(REALSOFT_DATE_RANGE_SELECTION_STRATEGY,{optional: true});\r\n\r\n  // Class Properties\r\n\r\n  // Subscription for re-rendering purposes\r\n  private _rerenderSubscription = new Subscription();\r\n  \r\n  // Flag used to filter out space/enter keyup events that originated outside of the view.\r\n  private _selectionKeyPressed: boolean;\r\n\r\n  // The current active date\r\n  private _activeDate: D;\r\n\r\n  // The currently selected date\r\n  private _selectedDate: DateRange<D> | D | null;\r\n\r\n  // The minimum date that can be selected\r\n  private _minDate: D | null;\r\n\r\n  // The maximum date that can be selected\r\n  private _maxDate: D | null;\r\n\r\n  // The label for this month\r\n  _monthLabel: string;\r\n  \r\n  // Grid of calendar cells representing the dates of the month. \r\n  _weeks: RealsoftCalendarCell[][];\r\n  \r\n  // The number of blank cells in the first row before the 1st of the month.\r\n  _firstWeekOffset: number;\r\n  \r\n  // Start value of the currently-shown date range. \r\n  _rangeStart: number | null;\r\n  \r\n  // End value of the currently-shown date range.\r\n  _rangeEnd: number | null;\r\n  \r\n  // Start value of the currently-shown comparison date range. \r\n  _comparisonRangeStart: number | null;\r\n  \r\n  // End value of the currently-shown comparison date range. \r\n  _comparisonRangeEnd: number | null;\r\n  \r\n  // Start of the preview range. \r\n  _previewStart: number | null;\r\n  \r\n  // End of the preview range. \r\n  _previewEnd: number | null;\r\n  \r\n  // Whether the user is currently selecting a range of dates. \r\n  _isRange: boolean;\r\n  \r\n  // The date of the month that today falls on. Null if today is in another month. \r\n  _todayDate: number | null;\r\n  \r\n  // The names of the weekdays. \r\n  _weekdays: {long: string; narrow: string; id: number}[];\r\n\r\n\r\n  // Input Bindings\r\n\r\n  //The date to display in the month view (everything other than the month and the year is ignored)\r\n  @Input() \r\n  get activeDate(): D {\r\n    return this._activeDate;\r\n  }\r\n  set activeDate(value: D) {\r\n    const oldActiveDate = this._activeDate;\r\n    const validDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value) || this._dateAdapter.today());\r\n    this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\r\n    if(!this._isInTheSameMonthAndYear(oldActiveDate, this._activeDate)) {\r\n      this._initializeDate();\r\n    }\r\n  }\r\n  \r\n  // The currently Selected Date\r\n  @Input()\r\n  get selectedDate(): DateRange<D> | D | null {\r\n    return this._selectedDate;\r\n  }    \r\n  set selectedDate(value: DateRange<D> | D | null) {\r\n    if (value instanceof DateRange) {\r\n      this._selectedDate = value;\r\n    } else {\r\n      this._selectedDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value))\r\n    }\r\n\r\n    this._setRanges(this._selectedDate);\r\n  }\r\n\r\n  // The minimum selectable date\r\n  @Input()\r\n  get minDate(): D | null {\r\n    return this._minDate;\r\n  }\r\n  set minDate(value: D | null) {\r\n    this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n\r\n  // The maximum selectable date\r\n  @Input()\r\n  get maxDate(): D | null {\r\n    return this._maxDate;\r\n  }\r\n  set maxDate(value: D | null) {\r\n    this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n\r\n  // Filter Input function used to determine which dates are selectable\r\n  @Input() dateFilter: (date: D) => boolean;\r\n\r\n  // Input function used for ading custom CSS classes to dates\r\n  @Input() dateClass: RealsoftCalendarCellClassFunction<D>;\r\n\r\n  // An input indicating the start of the comparison range\r\n  @Input() comparisonStart: D | null; \r\n\r\n  // An input indicating the end of the comparison range\r\n  @Input() comparisonEnd: D | null;\r\n\r\n  // ARIA Accessible name of the <input realsoftStartDate/>\r\n  @Input() startDateAccessibleName: string | null;\r\n\r\n  // ARIA Accessible name of the <input realsoftEndDate/>\r\n  @Input() endDateAccessibleName: string | null;\r\n\r\n  // origin of the active drag, or null when dragging is not active\r\n  @Input() activeDrag: RealsoftCalendarUserEvent<D> | null = null;\r\n\r\n  // An output that emits when a new date is selected\r\n  @Output() readonly selectedChange: EventEmitter<D | null> = new EventEmitter<D | null>();\r\n\r\n  // An output that emits when any date is selected\r\n  @Output() readonly userSelection: EventEmitter<RealsoftCalendarUserEvent<D | null>> = new EventEmitter<RealsoftCalendarUserEvent<D | null>>();\r\n\r\n  // Emits when the user initiates a date range drange either via mouse or touch\r\n  @Output() readonly dragStarted = new EventEmitter<RealsoftCalendarUserEvent<D>>();\r\n\r\n  // Emits when the user completes or cancels a date range drag. \r\n  @Output() readonly dragEnded = new EventEmitter<RealsoftCalendarUserEvent<DateRange<D> | null>>();\r\n\r\n  // An event that emits when any date is activated\r\n  @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\r\n\r\n  // The body of the calendar table\r\n  @ViewChild(RealsoftCalendarBody) _realsoftCalendarBody: RealsoftCalendarBody;\r\n\r\n\r\n  constructor(...args: unknown[]);\r\n  \r\n  constructor() {\r\n    if (!this._dateAdapter) {\r\n      throw createMissingDateImplementationError('DateAdapter');\r\n    }\r\n    if (!this._dateFormats) {\r\n      throw createMissingDateImplementationError('MAT_DATE_FORMATS');\r\n    }\r\n  \r\n    this._activeDate = this._dateAdapter.today();\r\n  }\r\n\r\n\r\n  \r\n  ngAfterContentInit() {\r\n    this._rerenderSubscription = this._dateAdapter.localeChanges\r\n      .pipe(startWith(null))\r\n      .subscribe(() => this._initializeDate());\r\n  }\r\n  \r\n  ngOnChanges(changes: SimpleChanges) {\r\n    const comparisonChange = changes['comparisonStart'] || changes['comparisonEnd'];\r\n  \r\n    if (comparisonChange && !comparisonChange.firstChange) {\r\n      this._setRanges(this.selectedDate);\r\n    }\r\n  \r\n    if (changes['activeDrag'] && !this.activeDrag) {\r\n      this._clearPreview();\r\n    }\r\n  }\r\n  \r\n  ngOnDestroy() {\r\n    this._rerenderSubscription.unsubscribe();\r\n  }\r\n\r\n\r\n  // Function that handles what happens when a new date is selected\r\n  _dateSelected(event: RealsoftCalendarUserEvent<number>) {\r\n    const date = event.value;\r\n    const selectedDate = this._getDateFromDayOfMonth(date);\r\n    let rangeStartDate: number | null;\r\n    let rangeEndDate: number | null;\r\n\r\n    if (this._selectedDate instanceof DateRange) {\r\n      rangeStartDate = this._getDateInCurrentMonth(this._selectedDate.start);\r\n      rangeEndDate = this._getDateInCurrentMonth(this._selectedDate.end);\r\n    } else {\r\n      rangeStartDate = rangeEndDate = this._getDateInCurrentMonth(this._selectedDate);\r\n    }\r\n\r\n    if (rangeStartDate !== date || rangeEndDate !== date) {\r\n      this.selectedChange.emit(selectedDate);\r\n    }\r\n\r\n    this.userSelection.emit({value: selectedDate, event: event.event});\r\n    this._clearPreview();\r\n    this._changeDetectorRef.markForCheck();\r\n  }\r\n\r\n\r\n  // Function for updating the value of activeDate\r\n  _updateActiveDate(event: RealsoftCalendarUserEvent<number>) {\r\n    const month = event.value;\r\n    const oldActiveDate = this._activeDate;\r\n    this.activeDate = this._getDateFromDayOfMonth(month);\r\n\r\n    if(this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\r\n      this.activeDateChange.emit(this._activeDate);\r\n    }\r\n  }\r\n\r\n    // Function for handling keydown events on the calendar body when calendar is in month view\r\n  _handleCalendarBodyKeydown(event: KeyboardEvent): void {\r\n    const oldActiveDate = this._activeDate;\r\n    const isRTL = this._isRTL();\r\n\r\n    // Cover the cases of keyboard events that may occur \r\n    switch(event.keyCode) {\r\n      case LEFT_ARROW:\r\n          this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRTL ? 1 : -1);\r\n          break; \r\n      case RIGHT_ARROW: \r\n          this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRTL ? -1 : 1);\r\n          break;\r\n      case UP_ARROW:\r\n          this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, -7);\r\n          break;\r\n      case DOWN_ARROW: \r\n          this._activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 7);\r\n          break;\r\n      case HOME: \r\n          this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 1 - this._dateAdapter.getDate(this._activeDate));\r\n          break;\r\n      case END: \r\n          this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, this._dateAdapter.getNumDaysInMonth(this._activeDate) - this._dateAdapter.getDate(this._activeDate));\r\n          break;\r\n      case PAGE_UP: \r\n          this.activeDate = event.altKey ? this._dateAdapter.addCalendarYears(this._activeDate, -1) : this._dateAdapter.addCalendarMonths(this._activeDate, -1);\r\n          break;\r\n      case PAGE_DOWN: \r\n          this.activeDate = event.altKey ? this._dateAdapter.addCalendarDays(this._activeDate, 1) : this._dateAdapter.addCalendarMonths(this._activeDate, 1);\r\n          break; \r\n      case ENTER:\r\n      case SPACE:\r\n          this._selectionKeyPressed = true;\r\n          if(this._canSelect(this._activeDate)) {\r\n              event.preventDefault();\r\n          }\r\n          return;\r\n      case ESCAPE:\r\n          if (this._previewEnd != null && !hasModifierKey(event)) {\r\n              this._clearPreview();\r\n              if(this.activeDrag) {\r\n                this.dragEnded.emit({value: null, event})\r\n              } else {\r\n                this.selectedChange.emit(null);\r\n                this.userSelection.emit({value: null, event})\r\n              }\r\n              event.preventDefault();\r\n              event.stopPropagation();\r\n          }\r\n          return;\r\n      default: \r\n          return;         \r\n    }\r\n\r\n    if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\r\n      this.activeDateChange.emit(this.activeDate);\r\n      this._realsoftCalendarBody.scheduleFocusActiveCellAfterViewChecked();\r\n    }\r\n\r\n    event.preventDefault();\r\n  }\r\n\r\n    // Function that handles keyup events on the calendar body when calendar is in month view\r\n    _handleCalendarBodyKeyup(event: KeyboardEvent) {\r\n        if (event.keyCode === SPACE || event.keyCode === ENTER) {\r\n            if (this._selectionKeyPressed && this._canSelect(this._activeDate)) {\r\n                this._dateSelected({value: this._dateAdapter.getDate(this._activeDate), event});\r\n            }\r\n\r\n            this._selectionKeyPressed = false;\r\n        }\r\n    }\r\n\r\n  // Function for initializing the month view\r\n  _initializeDate() {\r\n    this._setRanges(this.selectedDate);\r\n    this._todayDate = this._getCellCompareValue(this._dateAdapter.today());\r\n    this._monthLabel = this._dateFormats.display.monthLabel ? this._dateAdapter.format(this.activeDate, this._dateFormats.display.monthLabel) : this._dateAdapter.getMonthNames('short')[this._dateAdapter.getMonth(this.activeDate)].toLocaleUpperCase();\r\n\r\n    let firstOfMonth = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), this._dateAdapter.getMonth(this.activeDate), 1);\r\n    this._firstWeekOffset = (7 + this._dateAdapter.getDayOfWeek(firstOfMonth) - this._dateAdapter.getFirstDayOfWeek()) % 7;\r\n    this._initializeWeekDays();\r\n    this._generateWeekCells();\r\n    this._changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  // Function for focusing the active cell in the calendar\r\n  _focusActiveCell(movePreview?: boolean) {\r\n    this._realsoftCalendarBody.focusActiveCell(movePreview);\r\n  }\r\n\r\n  // Function that focuses the active cell after change detection has run\r\n  _focusActiveCellAfterViewChecked() {\r\n    this._realsoftCalendarBody.scheduleFocusActiveCellAfterViewChecked();\r\n  }\r\n\r\n  // Function called when the user has activated a new cell and the preview needs to be updated -> Only for date range selection\r\n  _previewChanged({event, value: cell}: RealsoftCalendarUserEvent<RealsoftCalendarCell<D> | null>) {\r\n    if(this._rangeStrategy) {\r\n      const value = cell ? cell.rawValue! : null;\r\n      const prewviewRange = this._rangeStrategy.createPreview(\r\n        value,\r\n        this.selectedDate as DateRange<D>,\r\n        event\r\n      );\r\n      this._previewStart = this._getCellCompareValue(prewviewRange.start);\r\n      this._previewEnd = this._getCellCompareValue(prewviewRange.end);\r\n\r\n      if (this.activeDrag && value) {\r\n        const dragRange = this._rangeStrategy.createDrag?.(\r\n          this.activeDrag.value,\r\n          this.selectedDate as DateRange<D>,\r\n          value,\r\n          event\r\n        );\r\n        if(dragRange) {\r\n          this._previewStart = this._getCellCompareValue(dragRange.start);\r\n          this._previewEnd = this._getCellCompareValue(dragRange.end);\r\n        }\r\n      }\r\n      this._changeDetectorRef.detectChanges();\r\n    }\r\n  }\r\n\r\n  // Function called when the user has ended a drag. A new range selection is emitted if the drag operation was successful\r\n  _dragEnded(event: RealsoftCalendarUserEvent<D | null>) {\r\n    if(!this.activeDrag) return; // Early Exit\r\n\r\n    if(event.value) {\r\n      const dragDropResult = this._rangeStrategy?.createDrag?.(this.activeDrag.value, this.selectedDate as DateRange<D>, event.value, event.event);\r\n      this.dragEnded.emit({value: dragDropResult ?? null, event: event.event});\r\n    } else {\r\n      this.dragEnded.emit({value: null, event: event.event});\r\n    }\r\n  }\r\n\r\n  // Function that takes a day of the month and returns a new date in the same month and year as the currently active date. The returned date will have the same day of the month as the argument date.\r\n  private _getDateFromDayOfMonth(dayOfMonth: number) : D {\r\n    const date = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), this._dateAdapter.getMonth(this.activeDate), dayOfMonth);\r\n    return date;\r\n  }\r\n  \r\n  // Function used for initializing the weekdays\r\n  private _initializeWeekDays() {\r\n    const firstDayOfWeek = this._dateAdapter.getFirstDayOfWeek();\r\n    const narrowWeekDays = this._dateAdapter.getDayOfWeekNames('narrow');\r\n    const longWeekDays = this._dateAdapter.getDayOfWeekNames('long');\r\n\r\n    let weekdays = longWeekDays.map((long: any, i: any) => {\r\n        return {long, narrow: narrowWeekDays[i], id: uniqueIdCounter++};\r\n      });\r\n    this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\r\n  }\r\n\r\n  // Function that creates RealsoftCalendarCells for the dates in this month.\r\n  private _generateWeekCells() {\r\n    // Get the number of dates that are in the current month via the date adapter\r\n    const numberOfDaysInMonth = this._dateAdapter.getNumDaysInMonth(this.activeDate);\r\n\r\n    // Get the date names for the current month\r\n    const dateNames = this._dateAdapter.getDateNames();\r\n\r\n    // Initialize the weeks array \r\n    this._weeks = [[]];\r\n\r\n    // Loop through the dates of the month\r\n    for (let i = 0, cell = this._firstWeekOffset; i < numberOfDaysInMonth; i++, cell++) {\r\n      if (cell == DAYS_PER_WEEK) {\r\n        this._weeks.push([]);\r\n        cell = 0\r\n      }\r\n      const date = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), this._dateAdapter.getMonth(this.activeDate), i + 1);\r\n      const enabled = this._shouldDateBeEnabled(date); // Determine whether the date should be enabled\r\n      const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.dateA11yLabel);\r\n      const cellClasses = this.dateClass ? this.dateClass(date, 'month') : undefined;\r\n\r\n      this._weeks[this._weeks.length - 1].push(new RealsoftCalendarCell<D>(\r\n        i + 1,\r\n        dateNames[i],\r\n        ariaLabel,\r\n        enabled,\r\n        cellClasses,\r\n        this._getCellCompareValue(date),\r\n        date\r\n      ));\r\n    }\r\n  }\r\n\r\n  // Function that determines whether date cell in the month view should be enabled\r\n  private _shouldDateBeEnabled(date: D): boolean {\r\n    const shouldDateBeEnabled = !!date && (!this.minDate || this._dateAdapter.compareDate(date, this.minDate) >= 0) && (!this.maxDate || this._dateAdapter.compareDate(date, this.maxDate) <= 0) && (!this.dateFilter || this.dateFilter(date));\r\n\r\n    return shouldDateBeEnabled;\r\n  }\r\n\r\n  // Function that gets the date in the current month that the given date falls on. If the given date is in another month, then the function returns null.\r\n  private _getDateInCurrentMonth(d: D | null): number | null {\r\n    const date = d && this._isInTheSameMonthAndYear(d, this.activeDate);\r\n    if (date) {\r\n      return this._dateAdapter.getDate(d);\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  // Function that checks whether two dates are actually on the same month and the same year while making sure that both months are not null.\r\n  private _isInTheSameMonthAndYear(date1: D | null, date2: D | null): boolean {\r\n    return !!(date1 && date2 && this._dateAdapter.getMonth(date1) == this._dateAdapter.getMonth(date2) && this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2));\r\n  }\r\n  \r\n    \r\n  // Function for determining whether the user has the RTL layout direction\r\n  private _isRTL() {\r\n    return this._dir && this._dir.value === 'rtl';\r\n  }\r\n\r\n  // Function that set the current range based on a model value \r\n  private _setRanges(selectedValue: DateRange<D> | D | null) {\r\n    if (selectedValue instanceof DateRange) {\r\n      this._rangeStart = this._getCellCompareValue(selectedValue.start);\r\n      this._rangeEnd = this._getCellCompareValue(selectedValue.end);\r\n      this._isRange = true;\r\n    } else {\r\n      this._rangeStart = this._rangeEnd = this._getCellCompareValue(selectedValue);\r\n      this._isRange = false;\r\n    }\r\n    this._comparisonRangeStart = this._getCellCompareValue(this.comparisonStart);\r\n    this._comparisonRangeEnd = this._getCellCompareValue(this.comparisonEnd);\r\n  }\r\n\r\n  // Function that gets the value that will be used to compare one cell to another cell\r\n  private _getCellCompareValue(date: D | null): number | null {\r\n    if(date) {\r\n      const year = this._dateAdapter.getYear(date);\r\n      const month = this._dateAdapter.getMonth(date);\r\n      const day = this._dateAdapter.getDate(date);\r\n      return new Date(year, month, day).getTime();\r\n    }\r\n    return null;\r\n  }\r\n\r\n  // Function that determines whether a date can be selected in the month view\r\n  private _canSelect(date: D) {\r\n    return !this.dateFilter || this.dateFilter(date);\r\n  }\r\n\r\n  // Function that clears out preview state\r\n  private _clearPreview() {\r\n    this._previewEnd = this._previewStart = null;\r\n  }  \r\n}","<table class=\"realsoft-calendar-table\" role=\"grid\">\r\n  <thead class=\"realsoft-calendar-table-header\">\r\n    <tr>\r\n      @for (day of _weekdays; track day.id) {\r\n        <th scope=\"col\">\r\n          <span class=\"cdk-visually-hidden\">{{day.long}}</span>\r\n          <span aria-hidden=\"true\">{{day.narrow}}</span>\r\n        </th>\r\n      }\r\n    </tr>\r\n    <tr aria-hidden=\"true\"><th class=\"realsoft-calendar-table-header-divider\" colspan=\"7\"></th></tr>\r\n  </thead>\r\n  <tbody realsoft-calendar-body\r\n        [label]=\"_monthLabel\"\r\n        [rows]=\"_weeks\"\r\n        [todayValue]=\"_todayDate!\"\r\n        [startValue]=\"_rangeStart!\"\r\n        [endValue]=\"_rangeEnd!\"\r\n        [comparisonStart]=\"_comparisonRangeStart\"\r\n        [comparisonEnd]=\"_comparisonRangeEnd\"\r\n        [previewStart]=\"_previewStart\"\r\n        [previewEnd]=\"_previewEnd\"\r\n        [isRangeSelection]=\"_isRange\"\r\n        [labelMinRequiredCells]=\"3\"\r\n        [activeCell]=\"_dateAdapter.getDate(activeDate) - 1\"\r\n        [startDateAccessibleName]=\"startDateAccessibleName\"\r\n        [endDateAccessibleName]=\"endDateAccessibleName\"\r\n        (selectedValueChange)=\"_dateSelected($event)\"\r\n        (activeDateChange)=\"_updateActiveDate($event)\"\r\n        (previewChange)=\"_previewChanged($event)\"\r\n        (dragStarted)=\"dragStarted.emit($event)\"\r\n        (dragEnded)=\"_dragEnded($event)\"\r\n        (keyup)=\"_handleCalendarBodyKeyup($event)\"\r\n        (keydown)=\"_handleCalendarBodyKeydown($event)\">\r\n  </tbody>\r\n</table>","import { DOWN_ARROW, END, ENTER, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, UP_ARROW, SPACE } from '@angular/cdk/keycodes';\r\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation, OnDestroy, inject } from '@angular/core';\r\nimport { Directionality } from '@angular/cdk/bidi';\r\nimport { RealsoftCalendarBody } from './calendar-body';\r\nimport { Subscription } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { DateRange, REALSOFT_DATE_FORMATS, RealsoftCalendarCell, RealsoftCalendarCellClassFunction, RealsoftCalendarUserEvent, RealsoftDateFormats } from './models';\r\nimport { createMissingDateImplementationError } from './shared/datepicker-errors';\r\nimport { DateAdapter } from './shared/date-adapter';\r\n  \r\n\r\n@Component({\r\n    selector: 'realsoft-year-view',\r\n    templateUrl: 'datepicker-year-view.html',\r\n    exportAs: 'realsoftYearView',\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    imports: [RealsoftCalendarBody],\r\n  })\r\nexport class RealsoftYearView<D> implements AfterContentInit, OnDestroy {\r\n    // For change detection\r\n    readonly _changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n    // Possible Date formats\r\n    private _dateFormats = inject<RealsoftDateFormats>(REALSOFT_DATE_FORMATS, {optional: true})!;\r\n\r\n    // Date Adapter Injection\r\n    _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\r\n\r\n    // To know the current direction\r\n    private _direction = inject(Directionality, {optional: true});\r\n\r\n    // Subscription to re-render the year view\r\n    private _rerenderSubscription = new Subscription();\r\n\r\n    // Class properties\r\n    private _activeDate: D;\r\n    private _selectedDate: DateRange<D> | D | null;\r\n    private _minDate: D | null;\r\n    private _maxDate: D | null;\r\n    _months: RealsoftCalendarCell[][]; // The grid of calendar cells representing the months of the year.\r\n    _yearLabel: string; //The label for the year shown in the calendar.\r\n    _todayMonth: number | null; // The month in the current year that today falls on. Is null, if today is in a different year.\r\n    _selectedMonth: number | null; // The month in this year that the selected Date falls on, Null if the selected date is in a different year.\r\n  \r\n\r\n\r\n    /** Flag used to filter out space/enter keyup events that originated outside of the view. */\r\n    private _selectionKeyPressed: boolean;\r\n\r\n    // The date to be displayed in the year view. only year is taken into consideration and everything else is ignored. \r\n    @Input() \r\n    get activeDate(): D {\r\n        return this._activeDate;\r\n    }\r\n    set activeDate(value: D) {\r\n        let oldDate = this._activeDate;\r\n        const validDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\r\n        this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\r\n        if(this._dateAdapter.getYear(oldDate) !== this._dateAdapter.getYear(this._activeDate)) {\r\n            this._initializeDate();\r\n        }\r\n\r\n    }\r\n\r\n    // An input for the currently selected Date \r\n    @Input() \r\n    get selectedDate(): DateRange<D> | D | null {\r\n        return this._selectedDate;\r\n    }\r\n    set selectedDate(value: DateRange<D> | D | null) {\r\n        if (value instanceof DateRange) {\r\n            this._selectedDate = value;\r\n        } else {\r\n            this._selectedDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n        }\r\n\r\n        this._setCurrentlySelectedMonth(value);\r\n    }\r\n\r\n    // An input indicating the minimum selectable date\r\n    @Input()\r\n    get minDate(): D | null {\r\n        return this._minDate;\r\n    }\r\n    set minDate(value: D | null) {\r\n        this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n    }\r\n\r\n    // An input indicating the maximum selectable date\r\n    @Input() \r\n    get maxDate(): D | null {\r\n        return this._maxDate;\r\n    }\r\n    set maxDate(value: D | null) {\r\n        this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n    }\r\n\r\n    // Filter Input function that determines which dates are selectable\r\n    @Input() dateFilter: (date: D) => boolean;\r\n\r\n    // Input function for adding custom CSS classes to date cells\r\n    @Input() dateClass: RealsoftCalendarCellClassFunction<D>;\r\n\r\n    // An output emitter that emits once a new month is selected\r\n    @Output() readonly selectedChange: EventEmitter<D> = new EventEmitter<D>();\r\n\r\n    // An output emitter that emits the selected month. This doesn't mean that there was a change on the selected date. \r\n    @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\r\n\r\n    // An output emitter that emits whenever any date is activated\r\n    @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\r\n\r\n    // The body of the valendar table\r\n    @ViewChild(RealsoftCalendarBody) _realsoftCalendarBody: RealsoftCalendarBody;\r\n\r\n  \r\n    constructor(...args: unknown[]);\r\n\r\n    constructor() {\r\n        if (!this._dateAdapter) {\r\n            throw createMissingDateImplementationError('DateAdapter');\r\n        }\r\n        if (!this._dateFormats) {\r\n            throw createMissingDateImplementationError('REALSOFT_DATE_FORMATS');\r\n        }\r\n\r\n        this._activeDate = this._dateAdapter.today();\r\n    }\r\n\r\n\r\n    ngAfterContentInit() {\r\n      this._rerenderSubscription = this._dateAdapter.localeChanges\r\n        .pipe(startWith(null))\r\n        .subscribe(() => this._initializeDate());\r\n    }\r\n\r\n\r\n    // Function for when a new month is selected \r\n    _newlySelectedMonth(event: RealsoftCalendarUserEvent<number>) {\r\n        const newMonth = event.value;\r\n        const selectedMonth = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), newMonth, 1);\r\n        this.monthSelected.emit(selectedMonth);\r\n        const selectedDate = this._getDateFromMonth(newMonth);\r\n        this.selectedChange.emit(selectedDate);\r\n    }\r\n\r\n    // Function for updating the active date\r\n    _updateActiveDate(event: RealsoftCalendarUserEvent<number>) {\r\n        const month = event.value;\r\n        const oldActiveDate = this._activeDate;\r\n\r\n        this.activeDate = this._getDateFromMonth(month);\r\n\r\n        if(this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\r\n            this.activeDateChange.emit(this.activeDate);\r\n        }\r\n    }\r\n\r\n    // Function for handling keydown events on the calendar body is in year view\r\n    _handleCalendarBodyKeydown(event: KeyboardEvent) {\r\n        const oldActiveDate = this._activeDate;\r\n        const isRTL = this._isRTL();\r\n\r\n        // Cover the cases for the keyboard keys that might be clicked\r\n        switch(event.keyCode) {\r\n            case LEFT_ARROW: \r\n                this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRTL ? 1 : -1);\r\n                break;\r\n            case RIGHT_ARROW: \r\n                this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRTL ? -1 : 1);\r\n                break;\r\n            case UP_ARROW: \r\n                this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, -4);\r\n                break;\r\n            case DOWN_ARROW:\r\n                this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, 4);\r\n                break;\r\n            case HOME:\r\n                this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate , -this._dateAdapter.getMonth(this._activeDate));\r\n                break;\r\n            case END: \r\n                this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, 11- this._dateAdapter.getMonth(this._activeDate));\r\n                break;\r\n            case PAGE_UP: \r\n                this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? -10 : -1);\r\n                break;\r\n            case PAGE_DOWN: \r\n                this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? 10 : 1);\r\n                break;\r\n            case ENTER:\r\n            case SPACE:\r\n                this._selectionKeyPressed = true;\r\n                break;\r\n            default:\r\n                return;\r\n        }\r\n        if(this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\r\n            this.activeDateChange.emit(this.activeDate);\r\n            this._realsoftCalendarBody.scheduleFocusActiveCellAfterViewChecked();\r\n        }\r\n\r\n        event.preventDefault();\r\n\r\n    }\r\n\r\n    // Function for handling key up event on the calendar body when calendar is in year view\r\n    _handleKeyUpOnCalendarBody(event: KeyboardEvent) {\r\n        if (event.keyCode === SPACE || event.keyCode === ENTER) {\r\n            if (this._selectionKeyPressed) {\r\n                this._newlySelectedMonth({value: this._dateAdapter.getMonth(this._activeDate), event});\r\n            }\r\n            this._selectionKeyPressed = false;\r\n        }\r\n    }\r\n\r\n    // For initializing the year view\r\n    _initializeDate() {\r\n        this._setCurrentlySelectedMonth(this.selectedDate);\r\n        this._todayMonth = this._getMonthInCurrentYear(this._dateAdapter.today());\r\n        this._yearLabel = this._dateAdapter.getYearName(this.activeDate);\r\n\r\n        let monthNames = this._dateAdapter.getMonthNames('short');\r\n\r\n        // The first row of months only contains 5 elements, since the year label need to be on the same row\r\n        this._months = [\r\n            [0,1,2,3],\r\n            [4,5,6,7],\r\n            [8,9,10,11]\r\n        ].map(row => row.map(month => this._generateCellForMonth(month, monthNames[month])));\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    // Focuses the active cell after the microtask queue is empty. \r\n    _focusActiveCell() {\r\n      this._realsoftCalendarBody.focusActiveCell();\r\n    }\r\n\r\n    // Once change detection has run, schedule the realsoftCalendarBody to focus the active cell\r\n    _focusActiveCellAfterViewChecked() {\r\n        this._realsoftCalendarBody.scheduleFocusActiveCellAfterViewChecked();\r\n    }\r\n\r\n    // Returns the month in this year that the passed date falls on, if the given date is another year, null is returned.\r\n    private _getMonthInCurrentYear(date: D | null) {\r\n        return date && this._dateAdapter.getYear(date) == this._dateAdapter.getYear(this.activeDate) ? this._dateAdapter.getMonth(date) : null;\r\n    }\r\n  \r\n\r\n\r\n    // Function that takes a month and returns a new date in the same day and year as the currently active date. \r\n    private _getDateFromMonth(month: number) {\r\n        const date = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month , 1);\r\n        const numberOfDaysInMonth = this._dateAdapter.getNumDaysInMonth(date);\r\n        const newDate = this._dateAdapter.createDate(\r\n            this._dateAdapter.getYear(this.activeDate),\r\n            month,\r\n            Math.min(this._dateAdapter.getDate(this.activeDate), numberOfDaysInMonth)\r\n        );\r\n\r\n        return newDate\r\n    }\r\n\r\n\r\n    // Function for creating a RealsoftCalendarCell for the given month\r\n    private _generateCellForMonth(month: number, monthName: string) {\r\n        const date = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);\r\n        const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.monthYearA11yLabel);\r\n        const cellClasses = this.dateClass ? this.dateClass(date, 'year') : undefined;\r\n\r\n        return new RealsoftCalendarCell (\r\n            month, \r\n            monthName.toLocaleUpperCase(),\r\n            ariaLabel,\r\n            this._monthToBeEnabled(month),\r\n            cellClasses\r\n        );\r\n    }\r\n\r\n    // Function that determines whether a month can be enabled for selection\r\n    private _monthToBeEnabled(month: number) {\r\n        const activeYear = this._dateAdapter.getYear(this.activeDate); // Get the active year from the active date\r\n\r\n        // Early Exit\r\n        if (month === null || month === undefined || this._isDateAfterMaxDate(activeYear, month) || this._isDateBeforeMinDate(activeYear, month)) {\r\n            return false;\r\n        }\r\n\r\n        if (!this.dateFilter) {\r\n            return true;\r\n        }\r\n\r\n        const firstOfMonth = this._dateAdapter.createDate(activeYear, month, 1);\r\n\r\n        // If any date in this month is enabled, then this month should be enabled\r\n        for(\r\n            let date = firstOfMonth; \r\n            this._dateAdapter.getMonth(date) == month;\r\n            date = this._dateAdapter.addCalendarDays(date , 1)\r\n        ) {\r\n            if(this.dateFilter(date)) {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n  \r\n    //Function for determining whether the combination of month and year is happening after the maximum date \"this.maxDate\" considering just the month and the year of \"this.maxDate\".\r\n    private _isDateAfterMaxDate(year: number, month: number) {\r\n        if(this.maxDate) {\r\n            const maxYear = this._dateAdapter.getYear(this.maxDate);\r\n            const maxMonth = this._dateAdapter.getMonth(this.maxDate);\r\n\r\n            return year > maxYear || (year === maxYear && month > maxMonth);\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n  \r\n    // Function for determining whether the combination of month and year is happening before the minimum date \"this.minDate\" considering just the month and the year of \"this.minDate\"\r\n    private _isDateBeforeMinDate(year: number, month: number) {\r\n        if (this.minDate) {\r\n            const minYear = this._dateAdapter.getYear(this.minDate);\r\n            const minMonth = this._dateAdapter.getMonth(this.minDate);\r\n\r\n            return year < minYear || (year === minYear && month < minMonth);\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n\r\n    // Function for determining whether the user has the RTL layout direction\r\n    private _isRTL() {\r\n        return this._direction && this._direction.value === 'rtl';\r\n    }\r\n\r\n    // Sets the currently-selected moth based on a model value\r\n    private _setCurrentlySelectedMonth(value: DateRange<D> | D | null) {\r\n        if (value instanceof DateRange) {\r\n            this._selectedMonth = this._getMonthInCurrentYear(value.start) || this._getMonthInCurrentYear(value.end);\r\n        } else {\r\n            this._selectedMonth = this._getMonthInCurrentYear(value);\r\n        }\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this._rerenderSubscription.unsubscribe();\r\n    }\r\n}","<table class=\"realsoft-calendar-table\" role=\"grid\">\r\n    <thead aria-hidden=\"true\" class=\"realsoft-calendar-table-header\">\r\n      <tr><th class=\"realsoft-calendar-table-header-divider\" colspan=\"4\"></th></tr>\r\n    </thead>\r\n    <tbody realsoft-calendar-body\r\n           [label]=\"_yearLabel\"\r\n           [rows]=\"_months\"\r\n           [todayValue]=\"_todayMonth!\"\r\n           [startValue]=\"_selectedMonth!\"\r\n           [endValue]=\"_selectedMonth!\"\r\n           [labelMinRequiredCells]=\"2\"\r\n           [numberOfColumns]=\"4\"\r\n           [cellAspectRatio]=\"4 / 7\"\r\n           [activeCell]=\"_dateAdapter.getMonth(activeDate)\"\r\n           (selectedValueChange)=\"_newlySelectedMonth($event)\"\r\n           (activeDateChange)=\"_updateActiveDate($event)\"\r\n           (keyup)=\"_handleKeyUpOnCalendarBody($event)\"\r\n           (keydown)=\"_handleCalendarBodyKeydown($event)\">\r\n    </tbody>\r\n</table>","import { DOWN_ARROW, END, ENTER, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, UP_ARROW, SPACE } from '@angular/cdk/keycodes';\r\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation, OnDestroy, inject } from '@angular/core';\r\nimport { Directionality } from '@angular/cdk/bidi';\r\nimport { RealsoftCalendarBody } from './calendar-body';\r\nimport { Subscription } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { DateRange, RealsoftCalendarCell, RealsoftCalendarCellClassFunction, RealsoftCalendarUserEvent } from './models';\r\nimport { createMissingDateImplementationError } from './shared/datepicker-errors';\r\nimport { DateAdapter } from './shared/date-adapter';\r\n  \r\nexport const yearsPerPage = 24;\r\n  \r\nexport const yearsPerRow = 4;\r\n\r\n@Component({\r\n    selector: 'realsoft-multi-year-view',\r\n    templateUrl: 'datepicker-multi-year-view.html',\r\n    exportAs: 'realsoftMultiYearView',\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    imports: [RealsoftCalendarBody],\r\n})\r\nexport class RealsoftMultiYearView<D> implements AfterContentInit, OnDestroy {\r\n    // For manual change detection\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n    // Date Adapter Injection\r\n    _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\r\n\r\n    // Directionality Service injection for RTL Mode Support \r\n    private _dir = inject(Directionality, {optional: true});\r\n\r\n    // Class properties\r\n\r\n    // Re-render subscription\r\n    private _rerenderSubscription = new Subscription();\r\n\r\n    // Flag used to filter out space/enter keyup events that originated outside of the view. \r\n    private _selectionKeyPressed: boolean;\r\n    private _activeDate: D; // The current active date\r\n    private _selectedDate: DateRange<D> | D | null; // The current selected date\r\n    private _minDate: D | null; // The minimum selectable date\r\n    private _maxDate: D | null; // The maximum selectable date\r\n    _years: RealsoftCalendarCell[][]; // Grid of the calendar cells that represents the currently displayed years\r\n    _todayYear: number; // The year that today falls on\r\n    _selectedYear: number | null;// The year of the selected date, Null if the selected date is null\r\n\r\n    // Input Bindings \r\n\r\n    // The date to be displayed in the multi-year view\r\n    @Input() \r\n    get activeDate(): D {\r\n        return this._activeDate;\r\n    }\r\n    set activeDate(value: D) {\r\n        let oldActiveDate = this._activeDate;\r\n        const validDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\r\n        this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\r\n\r\n        if(!isSameMultiYearView(this._dateAdapter, oldActiveDate, this._activeDate, this.minDate, this.maxDate)) {\r\n            this._initializeDate();\r\n        }\r\n    }\r\n\r\n    // The currently selected date\r\n    @Input() \r\n    get selectedDate(): DateRange<D> | D | null {\r\n        return this._selectedDate;\r\n    }\r\n    set selectedDate(value: DateRange<D> | D | null) {\r\n        if (value instanceof DateRange) {\r\n            this._selectedDate = value;\r\n        } else {\r\n            this._selectedDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value))\r\n        }\r\n\r\n        this._setSelectedYear(value);\r\n    }\r\n\r\n\r\n    // The minimum selectable date\r\n    @Input() \r\n    get minDate(): D | null {\r\n        return this._minDate;\r\n    }\r\n    set minDate(value: D | null) {\r\n        this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n    }\r\n\r\n    // The maximum selectable date\r\n    @Input()\r\n    get maxDate(): D | null {\r\n        return this._maxDate;\r\n    }\r\n    set maxDate(value: D | null) {\r\n        this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n    }\r\n\r\n    // Filter Input function used to filter which dates are selectable\r\n    @Input() dateFilter: (date: D) => boolean;\r\n  \r\n    // Input function that can be used to add custom CSS classes to date cells\r\n    @Input() dateClass: RealsoftCalendarCellClassFunction<D>;\r\n  \r\n    // Emits when a new year is selected.\r\n    @Output() readonly selectedChange: EventEmitter<D> = new EventEmitter<D>();\r\n  \r\n    // Emits the selected year. This doesn't imply a change on the selected date\r\n    @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\r\n  \r\n    // Emits when any date is activated.\r\n    @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\r\n  \r\n    // The body of calendar table \r\n    @ViewChild(RealsoftCalendarBody) _realsoftCalendarBody: RealsoftCalendarBody;\r\n  \r\n    constructor(...args: unknown[]);\r\n  \r\n    constructor() {\r\n      if (!this._dateAdapter) {\r\n        throw createMissingDateImplementationError('DateAdapter');\r\n      }\r\n  \r\n      this._activeDate = this._dateAdapter.today();\r\n    }\r\n  \r\n    ngAfterContentInit() {\r\n      this._rerenderSubscription = this._dateAdapter.localeChanges\r\n        .pipe(startWith(null))\r\n        .subscribe(() => this._initializeDate());\r\n    }\r\n  \r\n    ngOnDestroy() {\r\n      this._rerenderSubscription.unsubscribe();\r\n    }\r\n\r\n    // For initializing the multi-year view\r\n    _initializeDate() {\r\n        this._todayYear = this._dateAdapter.getYear(this._dateAdapter.today());\r\n\r\n        const activeYear = this._dateAdapter.getYear(this._activeDate);\r\n\r\n        const minYearOfPage = activeYear - getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\r\n\r\n        this._years = [];\r\n\r\n        for (let i = 0, row: number[] = []; i < yearsPerPage; i++) {\r\n            row.push(minYearOfPage + i);\r\n            if (row.length == yearsPerRow) {\r\n                this._years.push(row.map(year => this._generateCellForYear(year)));\r\n                row = [];\r\n            }\r\n        }\r\n\r\n        this._changeDetectorRef.markForCheck();\r\n    }\r\n\r\n    // Function for handling when a new year is selected\r\n    _yearSelected(event: RealsoftCalendarUserEvent<number>) {\r\n        const year = event.value;\r\n        const selectedYear = this._dateAdapter.createDate(year, 0, 1);\r\n        const selectedDate = this._getDateFromYear(year);\r\n\r\n        this.yearSelected.emit(selectedYear);\r\n        this.selectedChange.emit(selectedDate);\r\n    }\r\n\r\n    // Function that updates the active date \r\n    _updateActiveDate(event: RealsoftCalendarUserEvent<number>) {\r\n        const year = event.value;\r\n        const oldActiveDate = this._activeDate;\r\n\r\n        this.activeDate = this._getDateFromYear(year);\r\n        if(this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\r\n            this.activeDateChange.emit(this.activeDate);\r\n        }\r\n    }\r\n\r\n    // Function that handles keydown events on the calendar body.\r\n    _handleCalendarBodyKeydown(event: KeyboardEvent): void {\r\n        const oldActiveDate = this._activeDate;\r\n        const isRTL = this._isRTL();\r\n\r\n        // Cover all cases\r\n        switch(event.keyCode) {\r\n            case LEFT_ARROW:\r\n                this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRTL ? 1 : -1);\r\n                break;\r\n            case RIGHT_ARROW: \r\n                this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRTL ? -1 : 1);\r\n                break;\r\n            case UP_ARROW:\r\n                this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, -yearsPerRow);\r\n                break;\r\n            case DOWN_ARROW: \r\n                this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, yearsPerRow);\r\n                break;\r\n            case HOME: \r\n                this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, -getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate));\r\n                break;\r\n            case END: \r\n                this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, yearsPerPage - getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate) -1);\r\n                break;\r\n            case PAGE_UP:\r\n                this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? -yearsPerPage * 10 : -yearsPerPage);\r\n                break;\r\n            case PAGE_DOWN: \r\n                this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? yearsPerPage * 10 : yearsPerPage);\r\n                break;\r\n            case ENTER:\r\n            case SPACE: \r\n                this._selectionKeyPressed = true;\r\n                break;\r\n            default: \r\n                return;\r\n        }\r\n\r\n        if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\r\n            this.activeDateChange.emit(this.activeDate);\r\n        }\r\n\r\n        this._realsoftCalendarBody.scheduleFocusActiveCellAfterViewChecked();\r\n        event.preventDefault();\r\n    }\r\n\r\n    _handleCalendarBodyKeyUp(event: KeyboardEvent) {\r\n        if (event.keyCode === SPACE || event.keyCode === ENTER) {\r\n            if (this._selectionKeyPressed) {\r\n                this._yearSelected({value: this._dateAdapter.getYear(this._activeDate), event});\r\n            }\r\n            this._selectionKeyPressed = false;\r\n        }\r\n    }\r\n\r\n    _getActiveCell(): number {\r\n      return getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\r\n    }\r\n  \r\n    /** Focuses the active cell after the microtask queue is empty. */\r\n    _focusActiveCell() {\r\n      this._realsoftCalendarBody.focusActiveCell();\r\n    }\r\n  \r\n    /** Focuses the active cell after change detection has run and the microtask queue is empty. */\r\n    _focusActiveCellAfterViewChecked() {\r\n      this._realsoftCalendarBody.scheduleFocusActiveCellAfterViewChecked();\r\n    }\r\n\r\n    // Function that takes a year and returns a new date on the same day as the currently active date, the returned date will have the same year as the argumnet date.\r\n    private _getDateFromYear(year: number) {\r\n        const activeMonth = this._dateAdapter.getMonth(this._activeDate);\r\n        const daysInMonth = this._dateAdapter.getNumDaysInMonth(this._dateAdapter.createDate(year, activeMonth,1));\r\n        const normalizedDate = this._dateAdapter.createDate(year, activeMonth, Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth));\r\n\r\n        return normalizedDate;\r\n    }\r\n\r\n    // Function that creates a RealsoftCalendarCell for the given year\r\n    private _generateCellForYear(year: number) {\r\n        const date = this._dateAdapter.createDate(year, 0 , 1);\r\n        const yearName = this._dateAdapter.getYearName(date);\r\n        const cellClasses = this.dateClass ? this.dateClass(date, 'multi-year') : undefined;\r\n\r\n        return new RealsoftCalendarCell(year, yearName, yearName,  this._shouldEnableYear(year), cellClasses);\r\n    }\r\n\r\n    // Function that detemines whether the given year is enabled\r\n    private _shouldEnableYear(year: number) {\r\n        // Early Exit\r\n        if (year === undefined || year === null || (this.maxDate && year > this._dateAdapter.getYear(this.maxDate)) || (this.minDate && year < this._dateAdapter.getYear(this.minDate))) {\r\n            return false;\r\n        }\r\n\r\n        // If no filter is defined, then the year should be enabled\r\n        if (!this.dateFilter) {\r\n            return true;\r\n        }\r\n\r\n        const firstOfYear = this._dateAdapter.createDate(year, 0, 1);\r\n\r\n        for(\r\n            let date = firstOfYear;\r\n            this._dateAdapter.getYear(date) == year;\r\n            date = this._dateAdapter.addCalendarDays(date,1)\r\n        ) {\r\n            if (this.dateFilter(date)) {\r\n                return true;\r\n            }\r\n        }    \r\n        return false;\r\n    }\r\n\r\n  \r\n    // Function that determines whether the user has the RTL layout direction\r\n    private _isRTL() {\r\n        return this._dir && this._dir.value === 'rtl';\r\n    }\r\n\r\n    // Function that sets the currentl highlighted year based on a model value\r\n    private _setSelectedYear(value: DateRange<D> | D | null) {\r\n        this._selectedYear = null;\r\n        if (value instanceof DateRange) {\r\n            const displayValue = value.start || value.end;\r\n\r\n            if(displayValue) {\r\n                this._selectedYear = this._dateAdapter.getYear(displayValue);\r\n            } \r\n        } else if (value) {\r\n            this._selectedYear = this._dateAdapter.getYear(value);\r\n        }\r\n    } \r\n}\r\n  \r\n export function isSameMultiYearView<D>(\r\n    dateAdapter: DateAdapter<D>,\r\n    date1: D,\r\n    date2: D,\r\n    minDate: D | null,\r\n    maxDate: D | null,\r\n  ): boolean {\r\n    const year1 = dateAdapter.getYear(date1);\r\n    const year2 = dateAdapter.getYear(date2);\r\n    const startingYear = getStartingYear(dateAdapter, minDate, maxDate);\r\n    return (\r\n      Math.floor((year1 - startingYear) / yearsPerPage) ===\r\n      Math.floor((year2 - startingYear) / yearsPerPage)\r\n    );\r\n}\r\n  \r\n/**\r\n   * When the multi-year view is first opened, the active year will be in view.\r\n   * So we compute how many years are between the active year and the *slot* where our\r\n   * \"startingYear\" will render when paged into view.\r\n*/\r\nexport function getActiveOffset<D>(\r\n    dateAdapter: DateAdapter<D>,\r\n    activeDate: D,\r\n    minDate: D | null,\r\n    maxDate: D | null,\r\n  ): number {\r\n    const activeYear = dateAdapter.getYear(activeDate);\r\n    return euclideanModulo(activeYear - getStartingYear(dateAdapter, minDate, maxDate), yearsPerPage);\r\n}\r\n  \r\n// We pick a \"starting\" year such that either the maximum year would be at the end or the minimum year would be at the beginning of a page.\r\nfunction getStartingYear<D>(\r\n    dateAdapter: DateAdapter<D>,\r\n    minDate: D | null,\r\n    maxDate: D | null,\r\n  ): number {\r\n    let startingYear = 0;\r\n    if (maxDate) {\r\n      const maxYear = dateAdapter.getYear(maxDate);\r\n      startingYear = maxYear - yearsPerPage + 1;\r\n    } else if (minDate) {\r\n      startingYear = dateAdapter.getYear(minDate);\r\n    }\r\n    return startingYear;\r\n}\r\n  \r\n// Gets remainder that is non-negative, even if first number is negative \r\nfunction euclideanModulo(a: number, b: number): number {\r\n    return ((a % b) + b) % b;\r\n}","<table class=\"realsoft-calendar-table\" role=\"grid\">\r\n    <thead aria-hidden=\"true\" class=\"realsoft-calendar-table-header\">\r\n      <tr><th class=\"realsoft-calendar-table-header-divider\" colspan=\"4\"></th></tr>\r\n    </thead>\r\n    <tbody realsoft-calendar-body\r\n           [rows]=\"_years\"\r\n           [todayValue]=\"_todayYear\"\r\n           [startValue]=\"_selectedYear!\"\r\n           [endValue]=\"_selectedYear!\"\r\n           [numberOfColumns]=\"4\"\r\n           [cellAspectRatio]=\"4 / 7\"\r\n           [activeCell]=\"_getActiveCell()\"\r\n           (selectedValueChange)=\"_yearSelected($event)\"\r\n           (activeDateChange)=\"_updateActiveDate($event)\"\r\n           (keyup)=\"_handleCalendarBodyKeyUp($event)\"\r\n           (keydown)=\"_handleCalendarBodyKeydown($event)\">\r\n    </tbody>\r\n</table>","\r\n\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewEncapsulation, inject } from \"@angular/core\";\r\nimport { RealsoftDatepickerIntl } from \"./datepicker-intl\";\r\nimport { DateAdapter } from \"./shared/date-adapter\";\r\nimport { REALSOFT_DATE_FORMATS, RealsoftDateFormats } from \"./models\";\r\nimport { RealsoftCalendar } from \"./calendar\";\r\nimport { UniqueIdGeneratorService } from \"../id-generator\";\r\nimport { getActiveOffset, isSameMultiYearView, yearsPerPage } from \"./datepicker-multi-year-view\";\r\n\r\n\r\n// The header component of RealsoftCalendar\r\n@Component({\r\n    selector: 'realsoft-calendar-header',\r\n    templateUrl: 'calendar-header.html',\r\n    exportAs: 'realsoftCalendarHeader',\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true\r\n})\r\nexport class RealsoftCalendarHeader<D> {\r\n\r\n    // Dependency Injection\r\n    private _intl = inject(RealsoftDatepickerIntl); \r\n    private _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\r\n    private _dateFormats = inject<RealsoftDateFormats>(REALSOFT_DATE_FORMATS, {optional: true})!;\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    calendar = inject<RealsoftCalendar<D>>(RealsoftCalendar);\r\n\r\n    // Class Properties\r\n    _periodButtonLabelId = inject(UniqueIdGeneratorService).generateID('realsoft-calendar-period-label-');\r\n\r\n    constructor() {\r\n        this.calendar.stateChanges.subscribe(() => this._changeDetectorRef.markForCheck());\r\n    }\r\n\r\n    // Component Logic\r\n\r\n    // The display text for the current calendar view\r\n    get periodButtonText(): string {\r\n        if (this.calendar.currentView == 'month') {\r\n            return this._dateAdapter.format(this.calendar.activeDate, this._dateFormats.display.monthLabel).toLocaleUpperCase();\r\n        }\r\n\r\n        if (this.calendar.currentView == 'year') {\r\n            return this._dateAdapter.getYearName(this.calendar.activeDate);\r\n        }\r\n\r\n        return this._intl.formatYearRange(...this._formatMultiYearViewLabels());\r\n    }\r\n\r\n    // The aria-description for the current calendar view\r\n    get periodButtonDescription(): string {\r\n        if (this.calendar.currentView == 'month') {\r\n            return this._dateAdapter.format(this.calendar.activeDate, this._dateFormats.display.monthYearLabel).toLocaleUpperCase();\r\n        }\r\n        if(this.calendar.currentView == 'year') {\r\n            return this._dateAdapter.getYearName(this.calendar.activeDate);\r\n        }\r\n\r\n        return this._intl.formatYearRangeLabel(...this._formatMultiYearViewLabels());\r\n    }\r\n\r\n    // The aria-label for changing the calendar view\r\n    get periodButtonLabel(): string {\r\n        return this.calendar.currentView == 'month' ? this._intl.switchToMultiYearViewLabel : this._intl.switchToMonthViewLabel;\r\n    }\r\n\r\n    // The label for the previous button\r\n    get prevButtonLabel(): string {\r\n        return {\r\n            'month': this._intl.prevMonthLabel,\r\n            'year': this._intl.prevYearLabel,\r\n            'multi-year': this._intl.prevMultiYearLabel\r\n        }[this.calendar.currentView];\r\n    }\r\n\r\n    // The label for the next button \r\n    get nextButtonLabel(): string {\r\n        return {\r\n            'month': this._intl.nextMonthLabel,\r\n            'year': this._intl.nextYearLabel, \r\n            'multi-year': this._intl.nextMultiYearLabel\r\n        }[this.calendar.currentView];\r\n    }\r\n\r\n    // Method that handles user clicks on the period label\r\n    currentPeriodClicked() {\r\n        this.calendar.currentView = this.calendar.currentView == 'month' ? 'multi-year' : 'month';\r\n    }\r\n\r\n    // Method that handles user clicks on the next button\r\n    nextClicked() {\r\n        let activeDate;\r\n        if (this.calendar.currentView == 'month') {\r\n            activeDate = this._dateAdapter.addCalendarMonths(this.calendar.activeDate, 1);\r\n        } else {\r\n            activeDate = this._dateAdapter.addCalendarYears(this.calendar.activeDate, this.calendar.currentView == 'year' ? 1 : yearsPerPage)\r\n        }\r\n\r\n        this.calendar.activeDate = activeDate;\r\n    }\r\n\r\n    // Handles user clicks on the previous button\r\n    previousClicked() {\r\n        let activeDate;\r\n        if (this.calendar.currentView == 'month') {\r\n            activeDate = this._dateAdapter.addCalendarMonths(this.calendar.activeDate, -1);\r\n        } else {\r\n            activeDate = this._dateAdapter.addCalendarYears(this.calendar.activeDate, this.calendar.currentView == 'year' ? -1 : -yearsPerPage)\r\n        }\r\n\r\n        this.calendar.activeDate = activeDate;\r\n    }\r\n\r\n    // A method that returns a boolean indicating whether the previous button is enabled.\r\n    previousEnabled(): boolean {\r\n        if (!this.calendar.minDate) {\r\n            return true;\r\n        } \r\n        return (!this.calendar.minDate || !this._isInSameView(this.calendar.activeDate, this.calendar.minDate))\r\n    }\r\n\r\n    // A method that returns a boolean indicating whether the next button is enabled\r\n    nextEnabled(): boolean {\r\n        return (!this.calendar.maxDate || !this._isInSameView(this.calendar.activeDate, this.calendar.maxDate))\r\n    }\r\n    \r\n    // Whether two dates represent the same view in the current view mode (month or year)\r\n    private _isInSameView(date1: D, date2: D): boolean {\r\n        if (this.calendar.currentView == 'month') {\r\n            return (this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2) && this._dateAdapter.getMonth(date1) == this._dateAdapter.getMonth(date2));\r\n        }\r\n        if(this.calendar.currentView == 'year') {\r\n            return this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2);\r\n        }\r\n        return isSameMultiYearView(this._dateAdapter, date1, date2, this.calendar.minDate, this.calendar.maxDate);\r\n    }\r\n\r\n    // Function for formatting individual labels for the minimum year and maximum year in the multi-year calendar view. Returns an array of two strings, where the first string is the formatted label for the minimum year and the second string is the formatted label for the maximum year.\r\n    private _formatMultiYearViewLabels() : [minYearLabel: string, maxYearLabel: string] {\r\n        const activeYear = this._dateAdapter.getYear(this.calendar.activeDate);\r\n        const minYearOfPage = activeYear - getActiveOffset(this._dateAdapter, this.calendar.activeDate, this.calendar.minDate, this.calendar.maxDate);\r\n        const maxYearOfPage = minYearOfPage + yearsPerPage - 1;\r\n    \r\n        const minYearLabel = this._dateAdapter.getYearName(this._dateAdapter.createDate(minYearOfPage, 0 , 1));\r\n        const maxYearLabel = this._dateAdapter.getYearName(this._dateAdapter.createDate(maxYearOfPage, 0 , 1));\r\n    \r\n        return [minYearLabel, maxYearLabel];\r\n    }\r\n}\r\n  \r\n\r\n\r\n\r\n\r\n \r\n ","<div class=\"realsoft-calendar-header\">\r\n    <div class=\"realsoft-calendar-controls\">\r\n      <span [id]=\"_periodButtonLabelId\" class=\"cdk-visually-hidden\" aria-live=\"polite\">{{periodButtonDescription}}</span>\r\n      <button type=\"button\" class=\"realsoft-calendar-period-button\"\r\n              (click)=\"currentPeriodClicked()\" [attr.aria-label]=\"periodButtonLabel\"\r\n              [attr.aria-describedby]=\"_periodButtonLabelId\">\r\n        <span aria-hidden=\"true\">{{periodButtonText}}</span>\r\n        <svg class=\"realsoft-calendar-arrow\" [class.realsoft-calendar-invert]=\"calendar.currentView !== 'month'\"\r\n             viewBox=\"0 0 10 5\" focusable=\"false\" aria-hidden=\"true\">\r\n             <polygon points=\"0,0 5,5 10,0\"/>\r\n        </svg>\r\n      </button>\r\n  \r\n      <div class=\"realsoft-calendar-spacer\"></div>\r\n  \r\n      <ng-content></ng-content>\r\n  \r\n      <button type=\"button\" class=\"realsoft-calendar-previous-button calendar-navigation-icon-button\"\r\n              [disabled]=\"!previousEnabled()\" (click)=\"previousClicked()\"\r\n              [attr.aria-label]=\"prevButtonLabel\">\r\n        <svg viewBox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\">\r\n          <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>\r\n         </svg>\r\n      </button>\r\n  \r\n      <button type=\"button\" class=\"realsoft-calendar-next-button calendar-navigation-icon-button\"\r\n              [disabled]=\"!nextEnabled()\" (click)=\"nextClicked()\"\r\n              [attr.aria-label]=\"nextButtonLabel\">\r\n        <svg viewBox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\">\r\n          <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/>\r\n        </svg>\r\n      </button>\r\n    </div>\r\n  </div>","import { CdkPortalOutlet, ComponentPortal, ComponentType, Portal } from '@angular/cdk/portal';\r\nimport { AfterContentInit, AfterViewChecked, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChange, SimpleChanges, ViewChild, ViewEncapsulation, inject } from '@angular/core';\r\nimport {Subject, Subscription} from 'rxjs';\r\nimport { RealsoftDatepickerIntl } from './datepicker-intl';\r\nimport { CdkMonitorFocus } from '@angular/cdk/a11y';\r\nimport { DateRange, REALSOFT_DATE_FORMATS, REALSOFT_SINGLE_DATE_SELECTION_MODEL_PROVIDER, RealsoftCalendarCellClassFunction, RealsoftCalendarUserEvent, RealsoftCalendarView, RealsoftDateFormats } from './models';\r\nimport { RealsoftMonthView } from './datepicker-month-view';\r\nimport { RealsoftYearView } from './datepicker-year-view';\r\nimport { RealsoftMultiYearView } from './datepicker-multi-year-view';\r\nimport { createMissingDateImplementationError } from './shared/datepicker-errors';\r\nimport { RealsoftCalendarHeader } from './calendar-header';\r\nimport { DateAdapter } from './shared/date-adapter';\r\n\r\n// A calendar that is used as part of the datepicker\r\n@Component({\r\n  selector: 'realsoft-calendar',\r\n  templateUrl: 'calendar.html',\r\n  styleUrl: 'calendar.scss',\r\n  standalone: true,\r\n  host: {\r\n    'class': 'realsoft-calendar',\r\n  },\r\n  exportAs: 'realsoftCalendar',\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  providers: [REALSOFT_SINGLE_DATE_SELECTION_MODEL_PROVIDER],\r\n  imports: [CdkPortalOutlet, CdkMonitorFocus, RealsoftMonthView, RealsoftYearView, RealsoftMultiYearView]\r\n})\r\nexport class RealsoftCalendar<D> implements AfterContentInit, AfterViewChecked, OnDestroy, OnChanges{\r\n  // Dependency Injection\r\n  private _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\r\n  private _dateFormats = inject<RealsoftDateFormats>(REALSOFT_DATE_FORMATS, {optional: true})!;\r\n  private _changeDetectorRef = inject(ChangeDetectorRef);\r\n  \r\n  // Class Properties\r\n  _calendarHeaderPortal: Portal<any>; // A portal containing the header component type for this calendar.\r\n  private _intlChanges: Subscription; // For internationalization\r\n  private _moveFocusOnNextClick = false; // For moving focus on the next active cell.\r\n  private _startAt: D | null; // A date representing the period (month or year) for the calendar to start in. \r\n  private _selected: DateRange<D> | D | null; // The currently selected date.\r\n  private _minDate: D | null; // The minimum selectable date\r\n  private _maxDate: D | null; // The maximum selectable date\r\n  private _currentView: RealsoftCalendarView; // The current view\r\n  protected _activeDrag: RealsoftCalendarUserEvent<D> | null = null; // Origin of the active drag, or null when dragging is not active\r\n  private _activeDate: D;\r\n  readonly stateChanges = new Subject<void>(); // Emits whenever there's a state change that the header may need to respond to.\r\n\r\n\r\n  // Constructor and LifeCycle Hooks Implementation \r\n  constructor() {\r\n    if (!this._dateAdapter) {\r\n      throw createMissingDateImplementationError('DateAdapter');\r\n    }\r\n\r\n    if (!this._dateFormats) {\r\n      throw createMissingDateImplementationError('REALSOFT_DATE_FORMATS');\r\n    }\r\n\r\n    this._intlChanges = inject(RealsoftDatepickerIntl).changes.subscribe(() => {\r\n      this._changeDetectorRef.markForCheck();\r\n      this.stateChanges.next();\r\n    });\r\n\r\n  }\r\n\r\n   \r\n  ngAfterContentInit() {\r\n    this._calendarHeaderPortal = new ComponentPortal(this.headerComponent || RealsoftCalendarHeader);\r\n    this.activeDate = this.startAt || this._dateAdapter.today();\r\n\r\n    // Assign to the private property since we don't want to move focus on init.\r\n    this._currentView = this.startView;\r\n  }\r\n\r\n  ngAfterViewChecked() {\r\n    if (this._moveFocusOnNextClick) {\r\n      this._moveFocusOnNextClick = false;\r\n      this.focusActiveCell();\r\n    }  \r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._intlChanges.unsubscribe();\r\n    this.stateChanges.complete();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    const minDateChange: SimpleChange | undefined =\r\n      changes['minDate'] &&\r\n      !this._dateAdapter.sameDate(changes['minDate'].previousValue, changes['minDate'].currentValue)\r\n        ? changes['minDate']\r\n        : undefined;\r\n    const maxDateChange: SimpleChange | undefined =\r\n      changes['maxDate'] &&\r\n      !this._dateAdapter.sameDate(changes['maxDate'].previousValue, changes['maxDate'].currentValue)\r\n        ? changes['maxDate']\r\n        : undefined;\r\n\r\n    const changeRequiringRerender = minDateChange || maxDateChange || changes['dateFilter'];\r\n\r\n    if (changeRequiringRerender && !changeRequiringRerender.firstChange) {\r\n      const view = this._getCurrentViewComponentInstance();\r\n\r\n      if (view) {\r\n        this._moveFocusOnNextClick = true;\r\n\r\n        this._changeDetectorRef.detectChanges();\r\n        view._initializeDate();\r\n      }\r\n    }\r\n\r\n    this.stateChanges.next();\r\n  }\r\n\r\n\r\n  // Input Bindings\r\n\r\n  // An input indicating the type of the header component, if set.\r\n  @Input() headerComponent: ComponentType<any>;\r\n\r\n  // A date input representing the period (month or year) to start the calendar in.\r\n  @Input()\r\n  get startAt(): D | null {\r\n    return this._startAt;\r\n  }\r\n  set startAt(value: D | null) {\r\n    this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n\r\n  // An input indicating whether the calendar should be started in month or year view.\r\n  @Input() startView: RealsoftCalendarView = 'month';\r\n\r\n  // An input indicating the currently selected date.\r\n  @Input()\r\n  get selected(): DateRange<D> | D | null {\r\n    return this._selected;\r\n  }\r\n  set selected(value: DateRange<D> | D | null) {\r\n    if (value instanceof DateRange) {\r\n      this._selected = value;\r\n    } else {\r\n      this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n    }\r\n  }\r\n\r\n  // An input indicating the minimum selectable date\r\n  @Input()\r\n  get minDate(): D | null {\r\n    return this._minDate;\r\n  }\r\n  set minDate(value: D | null) {\r\n    this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n\r\n  // An input indicating the maximum selectable date\r\n  @Input()\r\n  get maxDate(): D | null {\r\n    return this._maxDate;\r\n  }\r\n  set maxDate(value: D | null) {\r\n    this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n\r\n  // Filter Input Function used to filter which dates are selectable\r\n  @Input() dateFilter: (date: D) => boolean;\r\n\r\n  // Function that can be used to add custom CSS classes to dates \r\n  @Input() dateClass: RealsoftCalendarCellClassFunction<D>;\r\n\r\n  // Input indicating the start of the comparison range\r\n  @Input() comparisonStart: D | null;\r\n\r\n  // Input indicating the end of the comparison range\r\n  @Input() comparisonEnd: D | null;\r\n\r\n  // ARIA Accessible name of the <input realsoftStartDate/>\r\n  @Input() startDateAccessibleName: string | null;\r\n\r\n  // ARIA Accessible name of the <input realsoftEndDate/>\r\n  @Input() endDateAccessibleName: string | null;\r\n\r\n  // Output Emitters\r\n  \r\n  // An output emitter that emits when the currently selected date changes\r\n  @Output() readonly selectedChange: EventEmitter<D | null> = new EventEmitter<D | null>();\r\n\r\n  // An output emitter that emits the year chosen in the multiyear view. \r\n  @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D | null>();\r\n\r\n  // An output emitter that emits the month chosen in year view.\r\n  @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\r\n\r\n  // An output emitter that emits when the current view changes\r\n  @Output() readonly viewChanged: EventEmitter<RealsoftCalendarView> = new EventEmitter<RealsoftCalendarView>(true);\r\n\r\n  // An output emitter that emits when any date is selected\r\n  @Output() readonly _userSelection: EventEmitter<RealsoftCalendarUserEvent<D | null>> = new EventEmitter<RealsoftCalendarUserEvent<D | null>>();\r\n\r\n  // An output emitter that emits a new date range value when the user completes a drag drop operation.\r\n  @Output() readonly _userDragDrop = new EventEmitter<RealsoftCalendarUserEvent<DateRange<D>>>();\r\n\r\n  // References\r\n\r\n  // Reference to the current month view component\r\n  @ViewChild(RealsoftMonthView) monthView: RealsoftMonthView<D>;\r\n\r\n  // Reference to the current year view component\r\n  @ViewChild(RealsoftYearView) yearView: RealsoftYearView<D>;\r\n\r\n  // Reference to the current multi-year view component\r\n  @ViewChild(RealsoftMultiYearView) multiYearView: RealsoftMultiYearView<D>;\r\n\r\n  // Calendar Logic\r\n\r\n  // Returns the current active date\r\n  get activeDate(): D {\r\n    return this._activeDate;\r\n  }\r\n  set activeDate(value: D) {\r\n    this._activeDate = this._dateAdapter.clampDate(value, this.minDate, this.maxDate);\r\n    this.stateChanges.next();\r\n    this._changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  // The current view of the calnedar\r\n  get currentView(): RealsoftCalendarView {\r\n    return this._currentView;\r\n  }\r\n  set currentView(value: RealsoftCalendarView) {\r\n    const newView = this._currentView !== value ? value : null;\r\n    this._currentView = value;\r\n    this._moveFocusOnNextClick = true;\r\n    this._changeDetectorRef.markForCheck();\r\n    if(newView) {\r\n      this.viewChanged.emit(newView);\r\n    }\r\n  }\r\n\r\n  // Function for focusing the active date\r\n  focusActiveCell() {\r\n    this._getCurrentViewComponentInstance()._focusActiveCell(false);\r\n  }\r\n\r\n  // Function for updating the today's date after updating the active date\r\n  updateTodaysDate() {\r\n    this._getCurrentViewComponentInstance()._initializeDate();\r\n  }\r\n\r\n  // Date Selection Logic\r\n\r\n  // Date Selection in the month view\r\n  _dateSelected(event: RealsoftCalendarUserEvent<D | null>): void {\r\n    if (this.selected instanceof DateRange || (event.value && !this._dateAdapter.sameDate(event.value, this.selected)))  {\r\n      this.selectedChange.emit(event.value);this._userSelection.emit(event);\r\n    }\r\n  }\r\n\r\n  // Month Selection in the year view\r\n  _monthSelected(month: D) {\r\n    this.monthSelected.emit(month);\r\n  }\r\n\r\n  // Year Selection in the multiyear view\r\n  _yearSelected(year: D) {\r\n    this.yearSelected.emit(year);\r\n  }\r\n\r\n  // Handles the selection in the year and multi-year views -> Reflecting the active date/ selected date in those views\r\n  _dateSelectionInView(date: D, view: RealsoftCalendarView) {\r\n    this.activeDate = date;\r\n    this.currentView = view;\r\n  }\r\n\r\n  // Called when the user starts dragging to change a date range\r\n  _dragStarted(event: RealsoftCalendarUserEvent<D>) {\r\n    this._activeDrag = event;\r\n  }\r\n\r\n  _dragEnded(event: RealsoftCalendarUserEvent<DateRange<D>>) {\r\n    if (!this._activeDrag) return;\r\n\r\n    if(event.value) {\r\n      this._userDragDrop.emit(event as RealsoftCalendarUserEvent<DateRange<D>>);\r\n    }\r\n\r\n    this._activeDrag = null\r\n  }\r\n\r\n  // Function that returns the component instance that corresponds to the current calendar view\r\n  private _getCurrentViewComponentInstance(): RealsoftMonthView<D> | RealsoftYearView<D> | RealsoftMultiYearView<D> {\r\n    return this.monthView || this.yearView || this.multiYearView;\r\n  }\r\n}\r\n","<ng-template [cdkPortalOutlet]=\"_calendarHeaderPortal\"></ng-template>\r\n\r\n<div class=\"realsoft-calendar-content\" cdkMonitorSubtreeFocus tabindex=\"-1\">\r\n  @switch (currentView) {\r\n    @case ('month') {\r\n        <realsoft-month-view\r\n            [(activeDate)]=\"activeDate\"\r\n            [selectedDate]=\"selected\"\r\n            [dateFilter]=\"dateFilter\"\r\n            [maxDate]=\"maxDate\"\r\n            [minDate]=\"minDate\"\r\n            [dateClass]=\"dateClass\"\r\n            [comparisonStart]=\"comparisonStart\"\r\n            [comparisonEnd]=\"comparisonEnd\"\r\n            [startDateAccessibleName]=\"startDateAccessibleName\"\r\n            [endDateAccessibleName]=\"endDateAccessibleName\"\r\n            (userSelection)=\"_dateSelected($event)\"\r\n            (dragStarted)=\"_dragStarted($event)\"\r\n            (dragEnded)=\"_dragEnded($event)\"\r\n            [activeDrag]=\"_activeDrag\"></realsoft-month-view>\r\n    }\r\n\r\n    @case ('year') {\r\n        <realsoft-year-view\r\n            [(activeDate)]=\"activeDate\"\r\n            [selectedDate]=\"selected\"\r\n            [dateFilter]=\"dateFilter\"\r\n            [maxDate]=\"maxDate\"\r\n            [minDate]=\"minDate\"\r\n            [dateClass]=\"dateClass\"\r\n            (monthSelected)=\"_monthSelected($event)\"\r\n            (selectedChange)=\"_dateSelectionInView($event, 'month')\"></realsoft-year-view>\r\n    }\r\n\r\n    @case ('multi-year') {\r\n        <realsoft-multi-year-view\r\n            [(activeDate)]=\"activeDate\"\r\n            [selectedDate]=\"selected\"\r\n            [dateFilter]=\"dateFilter\"\r\n            [maxDate]=\"maxDate\"\r\n            [minDate]=\"minDate\"\r\n            [dateClass]=\"dateClass\"\r\n            (yearSelected)=\"_yearSelected($event)\"\r\n            (selectedChange)=\"_dateSelectionInView($event, 'year')\"></realsoft-multi-year-view>\r\n    }\r\n  }\r\n</div>","import { CdkPortalOutlet, TemplatePortal } from \"@angular/cdk/portal\";\r\nimport { AfterViewInit, ANIMATION_MODULE_TYPE, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, inject, NgZone, OnDestroy, Renderer2, ViewChild, ViewEncapsulation } from \"@angular/core\";\r\nimport { RealsoftCalendar } from \"./calendar\";\r\nimport { CdkTrapFocus } from \"@angular/cdk/a11y\";\r\nimport { DateRange, ExtractDateTypeFromSelection, RealsoftCalendarUserEvent, RealsoftDateSelectionModel } from \"./models\";\r\nimport { DateAdapter } from \"./shared/date-adapter\";\r\nimport { REALSOFT_DATE_RANGE_SELECTION_STRATEGY, RealsoftDateRangeSelectionStrategy } from \"./services/default-range-selection-strategy\";\r\nimport { Subject, Subscription } from \"rxjs\";\r\nimport { RealsoftDatepickerBase } from \"./base\";\r\nimport { RealsoftDatepickerIntl } from \"./datepicker-intl\";\r\n\r\n\r\n@Component({\r\n  selector: 'realsoft-datepicker-content',\r\n  templateUrl: 'datepicker-content.html',\r\n  styleUrl: 'datepicker.scss',\r\n  exportAs: 'realsoftDatepickerContent',\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  host: {\r\n    'class': 'realsoft-datepicker-content',\r\n    '[class.realsoft-datepicker-content-touch]': 'datepicker.touchUi',\r\n    '[class.realsoft-datepicker-content-animations-enabled]': '!_animationsDisabled',\r\n  },\r\n  standalone: true,\r\n  imports: [CdkTrapFocus, RealsoftCalendar, CdkPortalOutlet],\r\n})\r\nexport class RealsoftDatepickerContent<S, D = ExtractDateTypeFromSelection<S>> implements AfterViewInit, OnDestroy {\r\n  protected _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n  \r\n  // For animation\r\n  protected _animationsModule = inject(ANIMATION_MODULE_TYPE, {optional: true});\r\n  protected _animationsDisabled = this._animationsModule === 'NoopAnimations';\r\n\r\n  // For manual change detection \r\n  private _changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n  private _mainModel = inject<RealsoftDateSelectionModel<S, D>>(RealsoftDateSelectionModel);\r\n\r\n  // Date Adapter Injection\r\n  private _dateAdapter = inject<DateAdapter<D>>(DateAdapter)!;\r\n\r\n  // For running events outside the Angular Zone\r\n  private _ngZone = inject(NgZone);\r\n\r\n  // Determine the range selection strategy\r\n  private _rangeSelectionStrategy = inject<RealsoftDateRangeSelectionStrategy<D>>(\r\n    REALSOFT_DATE_RANGE_SELECTION_STRATEGY,\r\n    {optional: true},\r\n  );\r\n\r\n  // Subscription to changes\r\n  private _stateChanges: Subscription | undefined;\r\n\r\n  // The Selection model\r\n  private _model: RealsoftDateSelectionModel<S,D>;\r\n\r\n  // Clean Up Event Listeners\r\n  private _eventCleanups: (() => void)[] | undefined;\r\n\r\n  private _animationFallback: ReturnType<typeof setTimeout> | undefined;\r\n  \r\n  // Store a reference of the internal calendar component.\r\n  @ViewChild(RealsoftCalendar) calendar: RealsoftCalendar<D>;\r\n  \r\n  // Store a reference to the datepicker that generated the current overlay\r\n  datepicker: RealsoftDatepickerBase<any, S, D>;\r\n  \r\n  // ARIA Accessible name of the <input realsoftStartDate /> element\r\n  startDateAccessibleName: string | null;\r\n  \r\n  // ARIA Accessible name of the <input realsoftEndDate /> element\r\n  endDateAccessibleName: string | null;\r\n\r\n  // Start of the comparison range \r\n  comparisonStart: D | null;\r\n\r\n  // End of the comparison range\r\n  comparisonEnd: D | null;\r\n\r\n  // Whether the datepicker is above or below the input \r\n  _isAbove: boolean;\r\n\r\n  // Whether there is an in-progress animation\r\n  _isAnimating: boolean = false;\r\n\r\n  // Text for the close button \r\n  _closeButtonText: string = inject(RealsoftDatepickerIntl).closeCalendarLabel;;\r\n\r\n  // Whether the close button currently has focus.\r\n  _closeButtonFocused: boolean;\r\n  \r\n  // Portal with projected action buttons. */\r\n  _actionsPortal: TemplatePortal | null = null;\r\n  \r\n  // Id of the label for the `role=\"dialog\"` element. */\r\n  _dialogLabelId: string | null;\r\n\r\n  _renderer = inject(Renderer2);\r\n\r\n  // Emits when an animation has finished. \r\n  readonly _animationDone = new Subject<void>();\r\n\r\n  constructor(...args: unknown[]);\r\n  \r\n  constructor() {\r\n    if (!this._animationsDisabled) {\r\n      const element = this._elementRef.nativeElement;\r\n  \r\n      this._eventCleanups = this._ngZone.runOutsideAngular(() => [\r\n        this._renderer.listen(element, 'animationstart', this.handleAnimationEvent),\r\n        this._renderer.listen(element, 'animationend', this.handleAnimationEvent),\r\n        this._renderer.listen(element, 'animationcancel', this.handleAnimationEvent),\r\n      ]);\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this._stateChanges = this.datepicker.stateChanges.subscribe(() => {\r\n      this._changeDetectorRef.markForCheck();\r\n    });\r\n    this.calendar.focusActiveCell();\r\n  }\r\n  \r\n  ngOnDestroy() {\r\n    clearTimeout(this._animationFallback);\r\n    this._eventCleanups?.forEach(cleanup => cleanup());\r\n    this._stateChanges?.unsubscribe();\r\n    this._animationDone.complete();\r\n  }\r\n\r\n  handleUserSelection(event: RealsoftCalendarUserEvent<D | null>) {\r\n    const selection = this._model.selection;\r\n    const value = event.value;\r\n    const isRangeSelection = selection instanceof DateRange;\r\n\r\n    if (isRangeSelection && this._rangeSelectionStrategy) {\r\n      const newSelection = this._rangeSelectionStrategy.selectionFinished(value,selection as unknown as DateRange<D>,event.event);\r\n      this._model.updateSelection(newSelection as unknown as S, this);\r\n    } else if (value && (isRangeSelection || !this._dateAdapter.sameDate(value, selection as unknown as D))) {\r\n      this._model.add(value);\r\n    }\r\n  \r\n    // Delegate closing the overlay to the actions.\r\n    if ((!this._model || this._model.isComplete()) && !this._actionsPortal) {\r\n      this.datepicker.close();\r\n    }\r\n  }\r\n\r\n  handleUserDragDrop(event: RealsoftCalendarUserEvent<DateRange<D>>) {\r\n    this._model.updateSelection(event.value as unknown as S, this);\r\n  }\r\n  \r\n  startExitAnimation() {\r\n    this._elementRef.nativeElement.classList.add('realsoft-datepicker-content-exit');\r\n  \r\n    if (this._animationsDisabled) {\r\n      this._animationDone.next();\r\n    } else {\r\n        clearTimeout(this._animationFallback);\r\n        this._animationFallback = setTimeout(() => {\r\n          if (!this._isAnimating) {\r\n            this._animationDone.next();\r\n          }\r\n        }, 200);\r\n    }\r\n  }\r\n  \r\n  private handleAnimationEvent = (event: AnimationEvent) => {\r\n    const element = this._elementRef.nativeElement;\r\n  \r\n    if (event.target !== element || !event.animationName.startsWith('_realsoft-datepicker-content')) {return;}\r\n  \r\n      clearTimeout(this._animationFallback);\r\n      this._isAnimating = event.type === 'animationstart';\r\n      element.classList.toggle('realsoft-datepicker-content-animating', this._isAnimating);\r\n  \r\n      if (!this._isAnimating) {\r\n        this._animationDone.next();\r\n      }\r\n  };\r\n\r\n  getSelected() {\r\n    return this._model.selection as unknown as D | DateRange<D> | null;\r\n  }\r\n\r\n  // Applies the current pending selection to the main model.\r\n  applyPendingSelection() {\r\n    if (this._model !== this._mainModel) {\r\n      this._mainModel.updateSelection(this._model.selection, this);\r\n    }\r\n  }\r\n\r\n  // Assigns a new portal containing the datepicker actions\r\n  _assignActions(portal: TemplatePortal<any> | null, forceRerender: boolean) {\r\n    this._model = portal ? this._mainModel.clone() : this._mainModel;\r\n    this._actionsPortal = portal;\r\n  \r\n    if (forceRerender) {\r\n      this._changeDetectorRef.detectChanges();\r\n    }\r\n  }\r\n}","<div\r\n  cdkTrapFocus\r\n  role=\"dialog\"\r\n  [attr.aria-modal]=\"true\"\r\n  [attr.aria-labelledby]=\"_dialogLabelId ?? undefined\"\r\n  class=\"realsoft-datepicker-content-container\"\r\n  [class.realsoft-datepicker-content-container-with-custom-header]=\"datepicker.calendarHeaderComponent\"\r\n  [class.realsoft-datepicker-content-container-with-actions]=\"_actionsPortal\">\r\n  <realsoft-calendar\r\n    [id]=\"datepicker.id\"\r\n    [class]=\"datepicker.panelClass\"\r\n    [startAt]=\"datepicker.startAt\"\r\n    [startView]=\"datepicker.startView\"\r\n    [minDate]=\"datepicker.getMinDate()\"\r\n    [maxDate]=\"datepicker.getMaxDate()\"\r\n    [dateFilter]=\"datepicker.getDateFilter()\"\r\n    [headerComponent]=\"datepicker.calendarHeaderComponent\"\r\n    [selected]=\"getSelected()\"\r\n    [dateClass]=\"datepicker.dateClass\"\r\n    [comparisonStart]=\"comparisonStart\"\r\n    [comparisonEnd]=\"comparisonEnd\"\r\n    [startDateAccessibleName]=\"startDateAccessibleName\"\r\n    [endDateAccessibleName]=\"endDateAccessibleName\"\r\n    (yearSelected)=\"datepicker.selectYear($event)\"\r\n    (monthSelected)=\"datepicker.selectMonth($event)\"\r\n    (viewChanged)=\"datepicker.viewChanges($event)\"\r\n    (_userSelection)=\"handleUserSelection($event)\"\r\n    (_userDragDrop)=\"handleUserDragDrop($event)\"></realsoft-calendar>\r\n\r\n  <ng-template [cdkPortalOutlet]=\"_actionsPortal\"></ng-template>\r\n\r\n  <!-- Invisible close button for screen reader users. -->\r\n  <button\r\n    type=\"button\"\r\n    class=\"realsoft-datepicker-close-button\"\r\n    [class.cdk-visually-hidden]=\"!_closeButtonFocused\"\r\n    (focus)=\"_closeButtonFocused = true\"\r\n    (blur)=\"_closeButtonFocused = false\"\r\n    (click)=\"datepicker.close()\">{{ _closeButtonText }}</button>\r\n</div>","import { Directionality } from '@angular/cdk/bidi';\r\nimport { coerceStringArray } from '@angular/cdk/coercion';\r\nimport { DOWN_ARROW, ESCAPE, hasModifierKey, LEFT_ARROW, ModifierKey, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\r\nimport { FlexibleConnectedPositionStrategy, Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\r\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\r\nimport { ComponentPortal, ComponentType, TemplatePortal } from '@angular/cdk/portal';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { afterNextRender, ANIMATION_MODULE_TYPE, booleanAttribute, ChangeDetectorRef, ComponentRef, Directive, EventEmitter, inject, Injector, Input, OnChanges,OnDestroy, Output, SimpleChanges, ViewContainerRef } from '@angular/core';\r\nimport { merge, Subject, Subscription } from 'rxjs';\r\nimport { filter, take } from 'rxjs/operators';\r\nimport { DateFilterFn, ExtractDateTypeFromSelection, REALSOFT_DATEPICKER_SCROLL_STRATEGY, RealsoftCalendarCellClassFunction, RealsoftCalendarView, RealsoftDatepickerControl, RealsoftDatepickerDropdownPositionX, RealsoftDatepickerDropdownPositionY, RealsoftDatepickerPanel, RealsoftDateSelectionModel } from './models';\r\nimport { UniqueIdGeneratorService } from '../id-generator';\r\nimport { RealsoftDatepickerContent } from './datepicker-content';\r\nimport { DateAdapter } from './shared/date-adapter';\r\nimport { createMissingDateImplementationError } from './shared/datepicker-errors';\r\n\r\n// Datepicker Base Class\r\n@Directive({\r\n  standalone: true\r\n})\r\nexport abstract class RealsoftDatepickerBase<C extends RealsoftDatepickerControl<D>, S, D = ExtractDateTypeFromSelection<S>> implements RealsoftDatepickerPanel<C, S, D>, OnDestroy, OnChanges, OnChanges {\r\n\r\n  // Storing a reference to the overlay\r\n  private _overlay = inject(Overlay);\r\n\r\n  // Determining whether animations are disabled\r\n  private _animationsModule = inject(ANIMATION_MODULE_TYPE, {optional: true});\r\n\r\n  // Whether animations are disabled\r\n  private _animationsDisabled = this._animationsModule === 'NoopAnimations';\r\n\r\n  // DateAdapter Injection\r\n  private _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\r\n\r\n  //The selection model injection \r\n  private _model = inject<RealsoftDateSelectionModel<S, D>>(RealsoftDateSelectionModel);\r\n\r\n  // Directionality Secrvice Injection\r\n  private _dir = inject(Directionality, {optional: true});\r\n\r\n  // For adding view dynamically\r\n  private _viewContainerRef = inject(ViewContainerRef);\r\n\r\n  // Input Change Subscription\r\n  private _inputStateChanges = new Subscription();\r\n\r\n  // For accessing the document\r\n  private _document = inject(DOCUMENT);\r\n\r\n  // Datepicker Properties \r\n  private _startAt: D | null;\r\n\r\n  datepickerInput: C; //The datepicker input element that the calendar is associated with\r\n\r\n  private _disabled: boolean;\r\n\r\n  // Emits when the datepicker's state changes\r\n  readonly stateChanges = new Subject<void>();\r\n\r\n  // The open state of the datepicker panel\r\n  private _opened = false;\r\n  \r\n  // The set of classes to be passed to the datepicker panel\r\n  private _panelClass : string[];\r\n\r\n  // The id for the datepicker calendar\r\n  id: string = inject(UniqueIdGeneratorService).generateID('realsoft-datepicker-');\r\n\r\n  // Reference to the overlay into which the calendar will be rendered\r\n  private _overlayRef: OverlayRef | null;\r\n\r\n  // Reference to the component instance rendered in the overlay\r\n  private _componentRef: ComponentRef<RealsoftDatepickerContent<S,D>> | null;\r\n\r\n  // The element that was focused before the datepicker was opened.\r\n  private _previouslyFocusedElement: HTMLElement | null = null;\r\n\r\n  // Currently registeredactions portal \r\n  private _actionsPortal: TemplatePortal | null;\r\n\r\n  private _injector = inject(Injector);\r\n\r\n  // For Manual Change Detection\r\n  private readonly _changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n  private _scrollStrategy = inject(REALSOFT_DATEPICKER_SCROLL_STRATEGY);\r\n\r\n\r\n  // Handling Input Bindings\r\n\r\n  // The date that the calendar will open to initially\r\n  @Input() \r\n  get startAt(): D | null {\r\n    return this._startAt || (this.datepickerInput ? this.datepickerInput.getStartValue() : null); // If startAt is explicitly set, then use its value, otherwise use the start value of the datepicker input\r\n  }\r\n  set startAt(value: D | null) {\r\n    this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n  }\r\n\r\n  // The view that the calendar should start in\r\n  @Input() startView: 'month' | 'year' | 'multi-year' = 'month';\r\n\r\n  // An input indicating the type of the custom header component for the calendar, if set.\r\n  @Input() calendarHeaderComponent: ComponentType<any>;\r\n\r\n  // Whether the calendar UI is in touch mode.\r\n  @Input({transform: booleanAttribute}) touchUi: boolean = false;\r\n\r\n  // Whether the datepicker pop-up should be disabled\r\n  @Input({transform: booleanAttribute}) \r\n  get disabled(): boolean {\r\n    return this._disabled === undefined && this.datepickerInput ? this.datepickerInput.disabled : !!this._disabled;\r\n  }\r\n  set disabled(value: boolean) {\r\n    if (value !== this._disabled) {\r\n      this._disabled = value;\r\n      this.stateChanges.next(undefined);\r\n    }\r\n  }\r\n\r\n  // The preferred position of the datepicker in the X axis\r\n  @Input() xPosition: RealsoftDatepickerDropdownPositionX = 'start';\r\n\r\n  // The preferred position of the datepicker in the Y axis \r\n  @Input() yPosition: RealsoftDatepickerDropdownPositionY = 'below';\r\n\r\n  // Whether to restore focus to the previously-focused element when the calendar is closed\r\n  @Input({transform: booleanAttribute}) restoreFocus: boolean = true;\r\n\r\n  // An event emitter for the selected year in the multiyear view, which doesn't imply a change on the selected date\r\n  @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\r\n\r\n  // An event emitter for the selected month in the year view, which doesn't imply a change on the selected date\r\n  @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\r\n\r\n  // An event emitter for when the current view changes\r\n  @Output() readonly viewChanged: EventEmitter<RealsoftCalendarView> = new EventEmitter<RealsoftCalendarView>(true);\r\n\r\n  // A function that can be used to add custom CSS classes to dates\r\n  @Input() dateClass: RealsoftCalendarCellClassFunction<D>;\r\n\r\n  // An event that emits when the datepicker has been opened\r\n  @Output('opened') readonly openedStream = new EventEmitter<void>();\r\n\r\n  // An event that emits when the datepicker has been closed\r\n  @Output('closed') readonly closedStream = new EventEmitter<void>();\r\n\r\n  // Whether the calendar panel is opened \r\n  @Input({transform: booleanAttribute})\r\n  get opened(): boolean {\r\n    return this._opened;\r\n  }\r\n  set opened(value: boolean) {\r\n    value ? this.open() : this.close();\r\n  }\r\n\r\n  // The classes to be passed to the date picker panel\r\n  @Input()\r\n  get panelClass(): string | string[] {\r\n    return this._panelClass;\r\n  }\r\n  set panelClass(value: string | string[]) {\r\n    this._panelClass = coerceStringArray(value);\r\n  }\r\n\r\n  constructor() {\r\n    if (!this._dateAdapter) {\r\n      throw createMissingDateImplementationError('DateAdapter');\r\n    }\r\n\r\n    this._model.selectionChange.subscribe(() => {\r\n      this._changeDetectorRef.markForCheck();\r\n    });\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    const positionChange = changes['xPosition'] || changes['yPosition'];\r\n\r\n    if (positionChange && !positionChange.firstChange && this._overlayRef) {\r\n      const positionStrategy = this._overlayRef.getConfig().positionStrategy;\r\n\r\n      if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\r\n        this._setConnectedPositions(positionStrategy);\r\n\r\n        if (this.opened) {\r\n          this._overlayRef.updatePosition();\r\n        }\r\n      }\r\n    }\r\n\r\n    this.stateChanges.next(undefined);\r\n  }\r\n\r\n  // Returns the minimum selectable date\r\n  getMinDate(): D | null {\r\n    return this.datepickerInput && this.datepickerInput.min;\r\n  }\r\n\r\n  // Returns the maximum selectable date\r\n  getMaxDate(): D | null {\r\n    return this.datepickerInput && this.datepickerInput.max;\r\n  }\r\n\r\n  // Returns the date filter function\r\n  getDateFilter(): DateFilterFn<D> {\r\n    return this.datepickerInput && this.datepickerInput.dateFilter;\r\n  }\r\n\r\n  // Selects the given date\r\n  select(date: D): void {\r\n    this._model.add(date);\r\n  }\r\n\r\n  // Emits the selected year in multiyear view\r\n  selectYear(selectedYear: D): void {\r\n    this.yearSelected.emit(selectedYear);\r\n  }\r\n\r\n  // Emits the selected month in year view\r\n  selectMonth(selectedMonth: D): void {\r\n    this.monthSelected.emit(selectedMonth);\r\n  }\r\n\r\n  // For emitting the changed view \r\n  viewChanges(view: RealsoftCalendarView): void {\r\n    this.viewChanged.emit(view);\r\n  }\r\n\r\n  // A method that sets the positions of the datepicker in dropdown mode based on the current configuration\r\n  private _setConnectedPositions(strategy: FlexibleConnectedPositionStrategy) {\r\n    const primaryX = this.xPosition === 'end' ? 'end' : 'start';\r\n    const secondaryX = primaryX === 'start' ? 'end' : 'start';\r\n    const primaryY = this.yPosition === 'above' ? 'bottom' : 'top';\r\n    const secondaryY = primaryY === 'top' ? 'bottom' : 'top';\r\n\r\n    return strategy.withPositions([\r\n      {\r\n        originX: primaryX,\r\n        originY: secondaryY,\r\n        overlayX: primaryX,\r\n        overlayY: primaryY,\r\n      },\r\n      {\r\n        originX: primaryX,\r\n        originY: primaryY,\r\n        overlayX: primaryX,\r\n        overlayY: secondaryY,\r\n      },\r\n      {\r\n        originX: secondaryX,\r\n        originY: secondaryY,\r\n        overlayX: secondaryX,\r\n        overlayY: primaryY,\r\n      },\r\n      {\r\n        originX: secondaryX,\r\n        originY: primaryY,\r\n        overlayX: secondaryX,\r\n        overlayY: secondaryY,\r\n      },\r\n    ]);\r\n  }\r\n\r\n  // Registering the input with the datepicker, takes an input and returns the selection model that the input should hook itself up to.\r\n  registerInput(input: C): RealsoftDateSelectionModel<S, D> {\r\n    if (this.datepickerInput) {\r\n      throw Error ('A RealsoftDatepicker can only be associated with a single input');\r\n    }\r\n    this._inputStateChanges.unsubscribe();\r\n    this.datepickerInput = input;\r\n    this._inputStateChanges = input.stateChanges.subscribe(() => this.stateChanges.next(undefined));\r\n    return this._model;\r\n  }\r\n\r\n\r\n  // Registering a portal containing action buttons with the datepicker\r\n  registerActions(portal: TemplatePortal): void {\r\n    if (this._actionsPortal) {\r\n      throw Error('A RealsoftDatepicker can only be associated with a single actions row'); \r\n    }\r\n    this._actionsPortal = portal;\r\n    this._componentRef?.instance._assignActions(portal, true);\r\n  }\r\n\r\n  // Removes a portal containing action buttons from the datepicker\r\n  removeActions(portal: TemplatePortal): void {\r\n    if (portal === this._actionsPortal) {\r\n      this._actionsPortal = null;\r\n      this._componentRef?.instance._assignActions(null, true);\r\n    }\r\n  }\r\n\r\n  // For opening the calendar\r\n  open(): void {\r\n    if(this._opened || this.disabled || this._componentRef?.instance._isAnimating) {\r\n      return; // Earlt exit\r\n    }\r\n\r\n    if(!this.datepickerInput) {\r\n      throw Error('Attempted to open a RealsoftDatepicker with no assoicated input');\r\n    }\r\n\r\n    this._previouslyFocusedElement = _getFocusedElementPierceShadowDom();\r\n\r\n    this._openOverlay();\r\n    this._opened = true;\r\n    this.openedStream.emit();\r\n  }\r\n\r\n  // For openeing the overlay with the calendar\r\n  private _openOverlay(): void {\r\n    this._destroyOverlay();\r\n\r\n    const isDialog = this.touchUi; // Opening the calendar in dialog mode if touchUi is true\r\n    const portal = new ComponentPortal<RealsoftDatepickerContent<S, D>>(\r\n      RealsoftDatepickerContent,\r\n      this._viewContainerRef\r\n    )\r\n\r\n    const overlayRef = (this._overlayRef = this._overlay.create(\r\n      new OverlayConfig({\r\n        positionStrategy: isDialog ? this.getDialogStrategy() : this.getDropdownStrategy(),\r\n        hasBackdrop: true,\r\n        backdropClass: [\r\n          isDialog ? 'cdk-overlay-dark-backdrop' : 'mat-overlay-transparent-backdrop'\r\n        ],\r\n        direction: this._dir || 'ltr',\r\n        scrollStrategy: isDialog ? this._overlay.scrollStrategies.block() : this._scrollStrategy(),\r\n        panelClass: `realsoft-datepicker-${isDialog ? 'dialog' : 'popup'}`,\r\n      })\r\n    ));\r\n\r\n    this.getCloseStream(overlayRef).subscribe(event => {\r\n      if(event) {\r\n        event.preventDefault();\r\n      }\r\n      this.close();\r\n    });\r\n\r\n    overlayRef.keydownEvents().subscribe(event => {\r\n      const keyCode = event.keyCode;\r\n\r\n      if (keyCode === UP_ARROW || keyCode === DOWN_ARROW || keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW || keyCode === PAGE_UP || keyCode === PAGE_DOWN) {\r\n        event.preventDefault();\r\n      }\r\n    })\r\n\r\n    this._componentRef = overlayRef.attach(portal);\r\n    this.forwardContentValues(this._componentRef.instance);\r\n\r\n    // Position of the calendar to be updated when rendered\r\n    if(!isDialog) {\r\n      afterNextRender(\r\n        () => {\r\n          overlayRef.updatePosition();\r\n        },\r\n        {injector: this._injector}\r\n      )\r\n    }    \r\n  }\r\n\r\n  // Gets a position strategy that will open the calendar as a dropdown\r\n  private getDialogStrategy() {\r\n    return this._overlay.position().global().centerHorizontally().centerVertically();\r\n  }\r\n\r\n  // Gets a position strategy that will open the calendar as a dropdown\r\n  private getDropdownStrategy() {\r\n    const strategy = this._overlay.position().flexibleConnectedTo(this.datepickerInput.getConnectedOverlayOrigin())\r\n    .withTransformOriginOn('.realsoft-datepicker-content')\r\n    .withFlexibleDimensions(false)\r\n    .withViewportMargin(8)\r\n    .withLockedPosition();\r\n\r\n    return this._setConnectedPositions(strategy);\r\n  }\r\n\r\n  // Get an observable that will emit when the overlay is supposed to be closed\r\n  private getCloseStream(overlayRef: OverlayRef) {\r\n    const ctrlShiftMetaModifiers: ModifierKey[] = ['ctrlKey', 'shiftKey', 'metaKey'];\r\n    return merge(\r\n      overlayRef.backdropClick(),\r\n      overlayRef.detachments(),\r\n      overlayRef.keydownEvents().pipe(\r\n        filter(event => {\r\n          return (\r\n            (event.keyCode === ESCAPE && !hasModifierKey(event)) ||\r\n            (this.datepickerInput &&\r\n              hasModifierKey(event, 'altKey') &&\r\n              event.keyCode === UP_ARROW &&\r\n              ctrlShiftMetaModifiers.every(\r\n                (modifier: ModifierKey) => !hasModifierKey(event, modifier),\r\n              ))\r\n          );\r\n        }),\r\n      ),\r\n    );\r\n  } \r\n\r\n  // Applies the current pending selection on the overlay to the model\r\n  applyPendingSelection() {\r\n    this._componentRef?.instance?.applyPendingSelection();\r\n  }\r\n\r\n\r\n  // Forwards relevant values from the datepicker to the datepicker content inside the overlay\r\n  protected forwardContentValues(instance: RealsoftDatepickerContent<S, D>) {\r\n    instance.datepicker = this;\r\n    instance._dialogLabelId = this.datepickerInput.getOverlayLabelId();\r\n    instance._assignActions(this._actionsPortal, false);\r\n  }\r\n  \r\n    // Destroys the current overlay.\r\n    private _destroyOverlay() {\r\n      if (this._overlayRef) {\r\n        this._overlayRef.dispose();\r\n        this._overlayRef = this._componentRef = null;\r\n      }\r\n    }\r\n\r\n\r\n  // Close the calendar. \r\n  close(): void {\r\n    if (!this._opened || this._componentRef?.instance._isAnimating) {\r\n      return;\r\n    }\r\n\r\n    const canRestoreFocus =\r\n      this.restoreFocus &&\r\n      this._previouslyFocusedElement &&\r\n      typeof this._previouslyFocusedElement.focus === 'function';\r\n\r\n    const completeClose = () => {\r\n      if (this._opened) {\r\n        this._opened = false;\r\n        this.closedStream.emit();\r\n      }\r\n    };\r\n\r\n    if (this._componentRef) {\r\n      const {instance, location} = this._componentRef;\r\n      instance._animationDone.pipe(take(1)).subscribe(() => {\r\n        const activeElement = this._document.activeElement;\r\n\r\n        if (\r\n          canRestoreFocus &&\r\n          (!activeElement ||\r\n            activeElement === this._document.activeElement ||\r\n            location.nativeElement.contains(activeElement))\r\n        ) {\r\n          this._previouslyFocusedElement!.focus();\r\n        }\r\n\r\n        this._previouslyFocusedElement = null;\r\n        this._destroyOverlay();\r\n      });\r\n      instance.startExitAnimation();\r\n    }\r\n\r\n    if (canRestoreFocus) {\r\n      setTimeout(completeClose);\r\n    } else {\r\n      completeClose();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._destroyOverlay();\r\n    this.close();\r\n    this._inputStateChanges.unsubscribe();\r\n    this.stateChanges.complete();\r\n  }\r\n\r\n}\r\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\r\nimport { DateRange, REALSOFT_RANGE_DATE_SELECTION_MODEL_PROVIDER, RealsoftDatepickerControl } from './models';\r\nimport { RealsoftDatepickerBase } from './base';\r\nimport { RealsoftDatepickerContent } from './datepicker-content';\r\nimport { REALSOFT_CALENDAR_RANGE_STRATEGY_PROVIDER } from './services/default-range-selection-strategy';\r\n\r\n// Input that can be associated with a datepicker range input.\r\nexport interface RealsoftDateRangePickerInput<D> extends RealsoftDatepickerControl<D> {\r\n  comparisonStart: D | null;\r\n  comparisonEnd: D | null;\r\n}\r\n\r\n@Component({\r\n  selector: 'realsoft-date-range-picker',\r\n  template: '',\r\n  exportAs: 'realsoftDateRangePicker',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n  providers: [\r\n    REALSOFT_RANGE_DATE_SELECTION_MODEL_PROVIDER,\r\n    REALSOFT_CALENDAR_RANGE_STRATEGY_PROVIDER,\r\n    {provide: RealsoftDatepickerBase, useExisting: RealsoftDateRangePicker},\r\n  ],\r\n  standalone: true\r\n})\r\nexport class RealsoftDateRangePicker<D> extends RealsoftDatepickerBase<RealsoftDateRangePickerInput<D>, DateRange<D>, D> {\r\n  protected override forwardContentValues(instance: RealsoftDatepickerContent<DateRange<D>, D>) {\r\n    super.forwardContentValues(instance);\r\n\r\n    const input = this.datepickerInput;\r\n\r\n    if (input) {\r\n      instance.comparisonStart = input.comparisonStart;\r\n      instance.comparisonEnd = input.comparisonEnd;\r\n    }\r\n  }\r\n}","import { AfterViewInit, ChangeDetectionStrategy, Component, Directive, OnDestroy, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation, inject } from '@angular/core';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { RealsoftDatepickerBase} from './base';\r\nimport { RealsoftDatepickerControl } from './models';\r\n\r\n// Button for closing the datepicker and assigning the current selection to the data model\r\n@Directive({\r\n  selector: '[realsoftDatepickerApply], [realsoftDateRangePickerApply]',\r\n  host: {\r\n    '(click)': 'applySelection()'\r\n  },\r\n  standalone: true\r\n})\r\nexport class RealsoftDatepickerApply {\r\n  // Datepicker Injection\r\n  private _datepicker = inject<RealsoftDatepickerBase<RealsoftDatepickerControl<any>, unknown>>(RealsoftDatepickerBase);\r\n\r\n  constructor() {}\r\n\r\n  applySelection() {\r\n    this._datepicker.applyPendingSelection();\r\n    this._datepicker.close();\r\n  }\r\n}\r\n\r\n// Button that will close the datepicker and discard the current selection\r\n@Directive({\r\n  selector: '[realsoftDatepickerCancel], [realsoftDateRangePickerCancel]',\r\n  host: {\r\n    '(click)': '_datepicker.close()'\r\n  },\r\n  standalone: true\r\n})\r\nexport class RealsoftDatepickerCancel {\r\n  // Datepicker Injection\r\n  _datepicker = inject<RealsoftDatepickerBase<RealsoftDatepickerControl<any>, unknown>>(RealsoftDatepickerBase);\r\n\r\n  constructor() {}\r\n}\r\n\r\n// Container that can be used to project a row of action buttons to the bottom of a datepicker or date range picker.\r\n@Component({\r\n  selector: 'realsoft-datepicker-actions, realsoft-date-range-picker-actions',\r\n  template: `<ng-template><div class=\"realsoft-datepicker-actions\"><ng-content></ng-content></div></ng-template>`,\r\n  styleUrl:  'datepicker.scss',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n  standalone: true\r\n})\r\nexport class RealsoftDatepickerActions implements AfterViewInit, OnDestroy {\r\n  // Datepicker Injection\r\n  private _datepicker = inject<RealsoftDatepickerBase<RealsoftDatepickerControl<any>, unknown>>(RealsoftDatepickerBase);\r\n\r\n  private _viewContainerRef = inject(ViewContainerRef);\r\n\r\n  @ViewChild(TemplateRef) _template: TemplateRef<unknown>;\r\n\r\n  private _portal: TemplatePortal;\r\n\r\n  constructor() {}\r\n\r\n  ngAfterViewInit() {\r\n    this._portal = new TemplatePortal(this._template, this._viewContainerRef);\r\n    this._datepicker.registerActions(this._portal);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._datepicker.removeActions(this._portal);\r\n\r\n    if  (this._portal && this._portal.isAttached) {\r\n      this._portal?.detach();\r\n    }\r\n\r\n  }\r\n}\r\n\r\n\r\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\r\nimport { RealsoftDatepickerBase } from './base';\r\nimport { REALSOFT_SINGLE_DATE_SELECTION_MODEL_PROVIDER, RealsoftDatepickerControl } from './models';\r\n\r\n@Component({\r\n  selector: 'realsoft-datepicker',\r\n  template: '',\r\n  exportAs: 'realsoftDatepicker',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n  standalone: true,\r\n  providers: [\r\n    REALSOFT_SINGLE_DATE_SELECTION_MODEL_PROVIDER,\r\n    {provide: RealsoftDatepickerBase, useExisting: RealsoftDatepicker},\r\n  ],\r\n})\r\nexport class RealsoftDatepicker<D> extends RealsoftDatepickerBase<RealsoftDatepickerControl<D>, D | null, D> {}","import { DOWN_ARROW, hasModifierKey, ModifierKey } from '@angular/cdk/keycodes';\nimport { Directive, ElementRef, EventEmitter, Input, OnDestroy, Output, AfterViewInit, OnChanges, SimpleChanges, booleanAttribute, inject, signal, forwardRef } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, ValidatorFn, Validators } from '@angular/forms';\nimport { Subscription, Subject } from 'rxjs';\nimport { REALSOFT_INPUT_VALUE_ACCESSOR } from '../input/helpers';\nimport { DateFilterFn, ExtractDateTypeFromSelection, REALSOFT_DATE_FORMATS, RealsoftDateFormats, RealsoftDatepickerControl, RealsoftDatepickerInputEvent, RealsoftDatepickerPanel, RealsoftDateSelectionModel, RealsoftDateSelectionModelChange } from './models';\nimport { RealsoftFormField } from '../form-field/form-field';\nimport { REALSOFT_FORM_FIELD } from '../form-field/models';\nimport { createMissingDateImplementationError } from './shared/datepicker-errors';\nimport { DateAdapter } from './shared/date-adapter';\n\nexport const REALSOFT_DATEPICKER_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => RealsoftDatepickerInput),\n  multi: true,\n};\n\nexport const REALSOFT_DATEPICKER_VALIDATORS: any = {\n  provide: NG_VALIDATORS,\n  useExisting: forwardRef(() => RealsoftDatepickerInput),\n  multi: true,\n};\n\n// Base Class for the datepicker inputs \n@Directive({\n  standalone: true\n})\nexport abstract class RealsoftDatepickerInputBase<S, D = ExtractDateTypeFromSelection<S>> implements ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy, Validator {\n  // Reference to the native input element associated with the datepicker input\n  protected _elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n  // Date Adapter Injection\n  _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\n\n  private _dateFormats = inject<RealsoftDateFormats>(REALSOFT_DATE_FORMATS, {optional: true})!;\n\n  // Whether the component has been initialized\n  private _isInitialized: boolean;\n\n  // The selection model associated with the input\n  protected _model: RealsoftDateSelectionModel<S, D> | undefined;\n\n  // Whether the input is disabled\n  private _disabled: boolean;\n\n  // Emits when the internal state has changed \n  readonly stateChanges = new Subject<void>();\n\n  // For Control Value Accessor Implemenation\n  _onTouched =() => {};\n  _validatorOnChange = () => {};\n  protected _validator: ValidatorFn | null;\n\n  private _onChange: (value: any) => void= () => {};\n  private _valueChangeSubscription = new Subscription();\n  private _localeSubscription = new Subscription();\n\n  constructor(...args: unknown[]);\n\n  constructor() {\n    if (!this._dateAdapter) {\n      throw createMissingDateImplementationError('DateAdapter');\n    }\n    if (!this._dateFormats) {\n      throw createMissingDateImplementationError('REALSOFT_DATE_FORMATS');\n    }\n\n    // Update the displayed date when the locale changes.\n    this._localeSubscription = this._dateAdapter.localeChanges.subscribe(() => {\n      this.assignValueProgrammatically(this.value);\n    });\n  }\n\n  ngAfterViewInit() {\n    this._isInitialized = true;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (dateInputsHaveChanged(changes, this._dateAdapter)) {\n      this.stateChanges.next(undefined);\n    }\n  }\n\n  ngOnDestroy() {\n    this._valueChangeSubscription.unsubscribe();\n    this._localeSubscription.unsubscribe();\n    this.stateChanges.complete();\n  }\n\n\n\n  // Since the value is kept on the model which is assigned in an Input,\n  // we might get a value before we have a model. This property keeps track\n  // of the value until we have somewhere to assign it.\n  private _pendingValue: D | null;\n\n  // Input Bindings\n\n  // The value of the input \n  @Input() \n  get value(): D | null {\n    return this._model ? this.getValueFromModel(this._model.selection) : this._pendingValue;\n  }\n  set value(value: D | null) {\n    this.assignValueProgrammatically(value)\n  }\n\n  // Whether the datepicker input is disabled\n  @Input({transform: booleanAttribute})\n  get disabled(): boolean {\n    return !!this._disabled || this.parentDisabled();\n  }\n  set disabled(value: boolean) {\n    const newValue = value;\n    if (this._disabled !== newValue) {\n      this._disabled = newValue;\n      this.stateChanges.next(undefined)\n    }\n\n    if(newValue && this._isInitialized && this._elementRef.nativeElement.blur) {\n      this._elementRef.nativeElement.blur();\n    }\n        \n  }\n\n  // An event emitter that emits when a change event is fired on the input\n  @Output() readonly dateChange: EventEmitter<RealsoftDatepickerInputEvent<D, S>> = new EventEmitter<RealsoftDatepickerInputEvent<D, S>>();\n\n  // An event emitter that emits when an input event is fired on this input\n  @Output() readonly dateInput: EventEmitter<RealsoftDatepickerInputEvent<D, S>> = new EventEmitter<RealsoftDatepickerInputEvent<D, S>>();\n\n  // A function that opens the popup associated with the input\n  protected abstract openPopup(): void;\n\n  // Assigns a value to the input's model\n  protected abstract assignValueToModel(model: D | null): void;\n\n  // Converts a value from the model into a native value for the input\n  protected abstract getValueFromModel(modelValue: S): D | null;\n\n  // Combined form control validator for this input\n  protected abstract validator: ValidatorFn | null;\n\n  // Whether the input should handle a particular change event\n  protected abstract shouldHandleChangeEvent(event: RealsoftDateSelectionModelChange<S>): boolean;\n\n  // Whether the last value set on the input was valid\n  protected _lastValueValid = false;\n\n  // A function that formats a value and sets is on the input element\n  protected formatValue(value: D | null) {\n    this._elementRef.nativeElement.value = value != null ? this._dateAdapter.format(value, this._dateFormats.display.dateInput) : '';\n  }\n\n  // Assigns a value to the model\n  private assignValue(value: D | null) {\n    if(this._model) {\n      this.assignValueToModel(value);\n      this._pendingValue = null;\n    } else {\n      this._pendingValue = value;\n    }\n  } \n\n  // Whether a value is considered valid\n  private isValidValue(value: D | null): boolean {\n    return !value || this._dateAdapter.isValid(value);\n  }\n\n  // Checks whether a parent control is disabled\n  protected parentDisabled() {\n    return false;\n  }\n\n  //Programmatically assigns a value to the input\n  protected assignValueProgrammatically(value: D | null) {\n    value = this._dateAdapter.deserialize(value);\n    this._lastValueValid = this.isValidValue(value);\n    value = this._dateAdapter.getValidDateOrNull(value);\n    this.assignValue(value);\n    this.formatValue(value);\n  }\n\n  // A functions that checks whether a value matches the current date filter or not\n  dateMatchesFilter(value: D | null): boolean {\n    const filter = this.getDateFilter();\n    return !filter || filter(value);\n  }\n\n  // Parsing validator\n  private _parseValidator: ValidatorFn = (): ValidationErrors | null => {\n    return this._lastValueValid ? null : {'realsoftDatepickerParse': {'text': this._elementRef.nativeElement.value}};\n  }\n\n  // Validator for the date filter\n  private _filterValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n    return !controlValue || this.dateMatchesFilter(controlValue) ? null : {'realsoftDatepickerFilter': true};\n  }\n\n  // Minimum date validator\n  private _minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n    const min = this.getMinDate();\n    return !min || !controlValue || this._dateAdapter.compareDate(min, controlValue) <= 0 ? null : {'realsoftDatepickerMin': {'min': min, 'actual': controlValue}};\n  }\n\n  // Maximum date validator\n  private _maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n    const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n    const max = this.getMaxDate();\n    return !max || !controlValue || this._dateAdapter.compareDate(max, controlValue) >= 0 ? null : {'realsoftDatepickerMax': {'max': max, 'actual': controlValue}};\n  }\n\n  // Base Validator Function\n  protected getValidators(): ValidatorFn[] {\n    return [this._parseValidator, this._filterValidator, this._minValidator, this._maxValidator];\n  }\n\n  // Gets the minimum date for the input. Used for validation\n  abstract getMinDate(): D | null;\n    \n  // Gets the maximum date for the input. Used for validation\n  abstract getMaxDate(): D | null;\n\n  // Gets the date filter function. Used for validation.\n  protected abstract getDateFilter(): DateFilterFn<D> | undefined;\n\n  // Registering the date selection model with the input\n  registerModel(model: RealsoftDateSelectionModel<S, D>): void {\n    this._model = model;\n    this._valueChangeSubscription.unsubscribe();\n\n    if (this._pendingValue) this.assignValue(this._pendingValue);\n\n    this._valueChangeSubscription = this._model.selectionChange.subscribe(event => {\n      if(this.shouldHandleChangeEvent(event)) {\n        const value = this.getValueFromModel(event.selection);\n        this._lastValueValid = this.isValidValue(value);\n        this._onChange(value);\n        this._onTouched();\n        this.formatValue(value);\n        this.dateInput.emit(new RealsoftDatepickerInputEvent(this, this._elementRef.nativeElement));\n        this.dateChange.emit(new RealsoftDatepickerInputEvent(this, this._elementRef.nativeElement));\n      }\n    })\n  }\n\n  // Control Value Accessor Implementation\n  registerOnValidatorChange(fn: () => void): void {\n    this._validatorOnChange = fn;\n  }\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this._validator ? this._validator(c) : null;\n  }\n\n  writeValue(value: D): void {\n    this.assignValueProgrammatically(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  // Input Event Handler\n  onInput(event: Event) {\n    const value = (event.target as HTMLInputElement).value;\n    const wasLastValueValid = this._lastValueValid;\n\n    // Update the date and parse, then update the last value valid boolean flag based on the new date value\n    let date = this._dateAdapter.parse(value, this._dateFormats.parse.dateInput);\n    this._lastValueValid = this.isValidValue(date);\n\n    date = this._dateAdapter.getValidDateOrNull(date);\n    const didDateChange = !this._dateAdapter.sameDate(date, this.value);\n\n    if (!date || didDateChange) {\n      this._onChange(date);\n    } else {\n      if (value && !this.value) {\n        this._onChange(date);\n      }\n      if (this._lastValueValid !== wasLastValueValid) {\n        this._validatorOnChange();\n      }\n    }\n    if (didDateChange) {\n      this.assignValue(date);\n      this.dateInput.emit(new RealsoftDatepickerInputEvent(this, this._elementRef.nativeElement));\n    }\n  }\n\n  onChange() {\n    this.dateChange.emit(new RealsoftDatepickerInputEvent(this, this._elementRef.nativeElement));\n  }\n\n  // Function that handles blur events on the input\n  onBlur() {\n    if (this.value) {\n      this.formatValue(this.value);\n    }\n    this._onTouched();\n  }\n\n  // Function that handles keydown events on the input\n  onKeyDown(event: KeyboardEvent) {\n    const modifierKeys: ModifierKey[] = ['ctrlKey', 'shiftKey', 'metaKey'];\n    const isAltDownArrow = hasModifierKey(event, 'altKey') && event.keyCode === DOWN_ARROW && modifierKeys.every((modifier: ModifierKey) => !hasModifierKey(event, modifier));\n\n    if (isAltDownArrow && !this._elementRef.nativeElement.readOnly) {\n      this.openPopup();\n      event.preventDefault();\n    }\n  }\n\n}\n\n\nexport function dateInputsHaveChanged(\n  changes: SimpleChanges,\n  adapter: DateAdapter<unknown>,\n): boolean {\n  const keys = Object.keys(changes);\n\n  for (let key of keys) {\n    const {previousValue, currentValue} = changes[key];\n\n    if (adapter.isDateInstance(previousValue) && adapter.isDateInstance(currentValue)) {\n      if (!adapter.sameDate(previousValue, currentValue)) {\n        return true;\n      }\n    } else {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n\n// Directive used to connect an input to a RealsoftDatepicker\n@Directive({\n  selector: 'input[realsoftDatepicker]',\n  providers: [\n    REALSOFT_DATEPICKER_VALUE_ACCESSOR,\n    REALSOFT_DATEPICKER_VALIDATORS, \n    {provide: REALSOFT_INPUT_VALUE_ACCESSOR, useExisting: RealsoftDatepickerInput}\n  ],\n  exportAs: 'realsoftDatepickerInput',\n  standalone: true,\n  host : {\n    'class': 'realsoft-datepicker-input',\n    '[attr.aria-haspopup]': '_datepicker ? \"dialog\" : null',\n    '[attr.aria-owns]': '_ariaOwns()',\n    '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',\n    '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',\n    '[disabled]': 'disabled',\n    '(input)': 'onInput($event)',\n    '(change)': 'onChange()',\n    '(blur)': 'onBlur()',\n    '(keydown)': 'onKeyDown($event)',\n  }\n})\nexport class RealsoftDatepickerInput<D> extends RealsoftDatepickerInputBase<D | null, D> implements RealsoftDatepickerControl<D | null>, OnDestroy {\n  // Dependency Injection\n  private _formField = inject<RealsoftFormField>(REALSOFT_FORM_FIELD, {optional: true});\n  private _closedSubscription = new Subscription();\n  private _openedSubscription = new Subscription();\n\n  // Class Properties\n  _datepicker: RealsoftDatepickerPanel<RealsoftDatepickerControl<D>, D | null, D>;\n  protected _ariaOwns = signal<string | null>(null); // The id of the panel owned by this input\n  private _min: D | null; // The minimum date that can be selected\n  private _max: D | null; // The maximum valid date that can be selected\n  private _dateFilter: DateFilterFn<D | null>;\n  protected validator:  ValidatorFn | null; // The combined form control validator for this input\n\n  // The datepicker that this input is associated with \n  @Input()\n  set realsoftDatepicker(datepicker: RealsoftDatepickerPanel<RealsoftDatepickerControl<D>, D | null, D>) {\n    if (datepicker) {\n      this._datepicker = datepicker;\n      this._ariaOwns.set(datepicker.opened ? datepicker.id : null);\n      this._closedSubscription = datepicker.closedStream.subscribe(() => {\n        this._onTouched();\n        this._ariaOwns.set(null);\n      });\n      this._openedSubscription = datepicker.openedStream.subscribe(() => {\n        this._ariaOwns.set(datepicker.id);\n      });\n      this.registerModel(datepicker.registerInput(this));\n    }\n  }\n\n  // The minimum valid date\n  @Input()\n  get min(): D | null {\n    return this._min;\n  }\n  set min(value: D | null) {\n    const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n\n    if (!this._dateAdapter.sameDate(validValue, this._min)) {\n      this._min = validValue;\n      this._validatorOnChange();\n    }\n  }\n  \n  // The maximum valid date\n  @Input()\n  get max(): D | null {\n    return this._max;\n  }\n  set max(value: D | null) {\n    const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n\n    if (!this._dateAdapter.sameDate(validValue, this._max)) {\n      this._max = validValue;\n      this._validatorOnChange();\n    }\n  }\n\n  // Function that can be used to filter out dates within the datepicker\n  @Input('realsoftDatepickerFilter')\n  get dateFilter() {\n    return this._dateFilter;\n  }\n  set dateFilter(value: DateFilterFn<D | null>) {\n    const matchesFilter = this.dateMatchesFilter(this.value);\n    this._dateFilter = value;\n\n    if (this.dateMatchesFilter(this.value) !== matchesFilter) {\n      this._validatorOnChange();\n    }\n  }\n\n  constructor(...args: unknown[]);\n\n  constructor() {\n    super();\n    this.validator = Validators.compose(super.getValidators());\n  }\n\n  // Function that gets the element that the datepicker pop up should be connected to\n  getConnectedOverlayOrigin(): ElementRef {\n    if (this._formField) {\n      return this._formField.getConnectedOverlayOrigin();\n    } else {\n      return this._elementRef;\n    }\n  }\n\n  // Function that gets the ID of an element that should be used as a description for the calendar overlay \n  getOverlayLabelId(): string | null {\n    if (this._formField) {\n      return this._formField.getLabelId();\n    }\n    return this._formField ? this._formField.getLabelId() : this._elementRef.nativeElement.getAttribute('aria-labelledby');\n  }\n\n  // Function that gets the value at which the calendar should start\n  getStartValue(): D | null {\n    return this.value;\n  }\n\n  // Function that opens the associated datepicker\n  protected openPopup(): void {\n    if (this._datepicker) {\n      this._datepicker.open();\n    }\n  }\n\n  // Function that gets the model value\n  protected getValueFromModel(modelValue: D | null): D | null {\n    return modelValue;\n  }\n\n  // Function used for assigning the value to the model\n  protected assignValueToModel(modelValue: D | null): void {\n    if (this._model) {\n      this._model.updateSelection(modelValue, this);\n    }\n  }\n\n  // Function that gets the input's minimum date\n  getMinDate(): D | null {\n    return this._min;\n  }\n\n  // Function that gets the input's maximum date\n  getMaxDate(): D | null {\n    return this._max;\n  }\n\n  // Function that gets the input's date filtering function\n  protected getDateFilter() {\n    return this._dateFilter;\n  }\n\n  // Function that detemines whether a change event has occured and update is needed or not\n  protected shouldHandleChangeEvent(event: RealsoftDateSelectionModelChange<D>): boolean {\n    return event.source !== this;\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n    this._closedSubscription.unsubscribe();\n    this._openedSubscription.unsubscribe();\n  }\n}\n","import { CdkMonitorFocus, FocusOrigin } from '@angular/cdk/a11y';\r\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Input, OnChanges, OnDestroy, SimpleChanges, ViewEncapsulation, booleanAttribute, signal, inject } from '@angular/core';\r\nimport { ControlContainer, NgControl, Validators } from '@angular/forms';\r\nimport { Subject, Subscription, merge } from 'rxjs';\r\nimport { RealsoftDateRangePickerInput } from './date-range-picker';\r\nimport { RealsoftFormFieldControl } from '../form-field/directives/form-field-control';\r\nimport { DateFilterFn, DateRange, RealsoftDatepickerControl, RealsoftDatepickerPanel, RealsoftDateSelectionModel } from './models';\r\nimport { RealsoftFormField } from '../form-field/form-field';\r\nimport { REALSOFT_FORM_FIELD } from '../form-field/models';\r\nimport { RealsoftStartDate } from './datepicker-start-date';\r\nimport { UniqueIdGeneratorService } from '../id-generator';\r\nimport { createMissingDateImplementationError } from './shared/datepicker-errors';\r\nimport { DateAdapter } from './shared/date-adapter';\r\nimport { dateInputsHaveChanged } from './datepicker-input';\r\nimport { RealsoftEndDate } from './datepicker-end-date';\r\n\r\n@Component({\r\n  selector: 'realsoft-date-range-input',\r\n  templateUrl: 'datepicker-range-input.html',\r\n  styleUrl: 'datepicker.scss',\r\n  exportAs: 'realsoftDateRangeInput',\r\n  standalone: true,\r\n  host: {\r\n    'class': 'realsoft-date-range-input',\r\n    '[class.realsoft-date-range-input-hide-placeholders]': 'shouldHidePlaceholders()',\r\n    '[class.realsoft-date-range-input-required]': 'required',\r\n    '[attr.id]': 'id',\r\n    'role': 'group',\r\n    '[attr.aria-labelledby]': 'getARIALabelledby()',\r\n    '[attr.aria-describedby]': 'ariaDescribedBy',\r\n    '[attr.data-realsoft-calendar]': '_rangePicker ? _rangePicker.id : null',\r\n  },\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None,\r\n  providers: [{provide: RealsoftFormFieldControl, useExisting: RealsoftDateRangeInput}],\r\n  imports: [CdkMonitorFocus],\r\n})\r\nexport class RealsoftDateRangeInput<D> implements RealsoftFormFieldControl<DateRange<D>>, RealsoftDatepickerControl<D>, RealsoftDateRangePickerInput<D>, AfterContentInit, OnChanges, OnDestroy {\r\n  // Depencency Injection\r\n\r\n  // For manual Change Detection\r\n  private _changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n  // For targeting the native input element\r\n  private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n  // The date adapter \r\n  private _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\r\n\r\n  // Form Field Injector\r\n  private _formField = inject<RealsoftFormField>(REALSOFT_FORM_FIELD, {optional: true});\r\n\r\n  // Subscriptions\r\n  private _closedSubscription = new Subscription();\r\n  private _openedSubscription = new Subscription();\r\n\r\n  _startInput: RealsoftStartDate<D>;\r\n  _endInput: RealsoftEndDate<D>;\r\n\r\n  id: string = inject(UniqueIdGeneratorService).generateID('realsoft-date-range-input-'); // Unique ID for the group\r\n\r\n  focused: boolean = false; // Whether the control is focused\r\n\r\n  controlType = 'realsoft-date-range-input'; // Name of the form control\r\n\r\n  // The range picker that this input is associated with\r\n  private _rangePicker: RealsoftDatepickerPanel<RealsoftDatepickerControl<D>, DateRange<D>, D>;\r\n\r\n  _ariaOwns = signal<string | null>(null); // The id of the panel owned by this input\r\n\r\n  private _required: boolean | undefined; // Whether the input is required\r\n\r\n  private _dateFilter: DateFilterFn<D>; //Function that can be used to filter out dates within the date range picker.\r\n\r\n  private _min: D | null; // The minimum valid date\r\n\r\n  private _max: D | null; // The maximum valid date\r\n\r\n  _disabled = false; // Whether the input is disabled\r\n\r\n  _ariaDescribedBy: string | null = null; // The value for the aria-describedby attribute of the inputs\r\n\r\n  private _model: RealsoftDateSelectionModel<DateRange<D>> | undefined; // The DateSelectionModel currently registered with this input\r\n\r\n  ngControl: NgControl | null; // Implemented ad part of RealsoftFormFieldControl\r\n\r\n  readonly stateChanges = new Subject<void>(); // Emits when the input's state has changed\r\n\r\n  readonly disableAutomaticLabeling = true;\r\n\r\n\r\n  // Getters \r\n  \r\n  // Function that gets the current value of the range input\r\n  get value() {\r\n    return this._model ? this._model.selection :  null;\r\n  }\r\n\r\n  // Function that determines whether the label should float or not\r\n  get shouldLabelFloat(): boolean {\r\n    return this.focused || !this.empty;\r\n  }\r\n\r\n  // Function that sets the placeholder attribute on realsoftStartDate and realsoftEndDate. Implemented as part of RealsoftFormFieldControl.\r\n  get placeholder() {\r\n    const start = this._startInput?._getPlaceholder() || '';\r\n    const end = this._endInput?._getPlaceholder() || '';\r\n    return start || end ? `${start} ${this.seperator} ${end}` : '';\r\n  }\r\n\r\n  // Function used to determine if the input is in an error state\r\n  get errorState(): boolean {\r\n    if (this._startInput && this._endInput) {\r\n        return this._startInput.errorState || this._endInput.errorState;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  // Function that determines whether the datepicker input is empty -> Considered empty when both start and end inputs are empty\r\n  get empty(): boolean {\r\n    const startEmpty = this._startInput ? this._startInput.isEmpty() : false;\r\n    const endEmpty = this._endInput ? this._endInput.isEmpty() : false;\r\n    return startEmpty && endEmpty;\r\n  }\r\n\r\n  // Function that returns the described by Ids -> Implemented as part of RealsoftFormFieldControl\r\n  get describedByIds(): string[] {\r\n    const element = this._elementRef.nativeElement;\r\n    const existingDescribedBy = this._elementRef.nativeElement.getAttribute('aria-describedby');\r\n\r\n    return existingDescribedBy?.split(' ') || []; \r\n  }\r\n\r\n\r\n  // Input Bindings\r\n\r\n  // The range picker that this input is associated with\r\n  @Input()\r\n  get rangePicker() {\r\n    return this._rangePicker;\r\n  }\r\n  set rangePicker(rangePicker: RealsoftDatepickerPanel<RealsoftDatepickerControl<D>, DateRange<D>, D>) {\r\n    if (rangePicker) {\r\n      this.rangepickerSetUp(rangePicker);\r\n      this.closeSubscription(rangePicker);\r\n      this.openSubscription(rangePicker);\r\n      this.registerModel(this._model!);\r\n    }\r\n  }\r\n\r\n  // Function that sets the needed elements of the range datepicke\r\n  rangepickerSetUp(rangePicker: RealsoftDatepickerPanel<RealsoftDatepickerControl<D>, DateRange<D>, D>) {\r\n    this._model = rangePicker.registerInput(this);\r\n    this._rangePicker = rangePicker;\r\n\r\n    // To avoid memory leaks -> Unsubscribe from previous subscriptions\r\n    this._closedSubscription.unsubscribe();\r\n    this._openedSubscription.unsubscribe();\r\n    this._ariaOwns.set(this.rangePicker.opened ? rangePicker.id : null);\r\n\r\n  }\r\n\r\n  closeSubscription(rangePicker: RealsoftDatepickerPanel<RealsoftDatepickerControl<D>, DateRange<D>, D>) {\r\n    this._closedSubscription = rangePicker.closedStream.subscribe(() => {\r\n        this._startInput._onTouched();\r\n        this._endInput._onTouched();\r\n        this._ariaOwns.set(null);\r\n    });\r\n  }\r\n\r\n  openSubscription(rangePicker: RealsoftDatepickerPanel<RealsoftDatepickerControl<D>, DateRange<D>, D>) {\r\n    this._openedSubscription = rangePicker.openedStream.subscribe(() => this._ariaOwns.set(rangePicker.id));\r\n  }\r\n\r\n  // An input determining whether the input is required\r\n  @Input({transform: booleanAttribute}) \r\n  get required(): boolean {\r\n    return (this._required ?? (this._isTargetRequired(this) || this._isTargetRequired(this._startInput) || this._isTargetRequired(this._endInput)) ?? false);\r\n  }\r\n  set required(value: boolean) {\r\n    this._required = value;\r\n  }\r\n\r\n  // Input function that can be used to filter out dates within the date range picker\r\n  @Input()\r\n  get dateFilter() {\r\n    return this._dateFilter;\r\n  }\r\n  set dateFilter(value: DateFilterFn<D>) {\r\n    const start = this._startInput;\r\n    const end = this._endInput;\r\n    const matchingStart = start && start.dateMatchesFilter(start.value);\r\n    const matchingEnd = end &&  end.dateMatchesFilter(start.value);\r\n\r\n    this._dateFilter = value;\r\n\r\n    if (start && start.dateMatchesFilter(start.value) !== matchingStart) start._validatorOnChange();\r\n\r\n    if (end && end.dateMatchesFilter(end.value)  !== matchingEnd) end._validatorOnChange();\r\n  }\r\n\r\n  // The minimum valid date\r\n  @Input()\r\n  get min(): D | null {\r\n    return this._min;\r\n  }  \r\n  set min(value: D | null) {\r\n    const date = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n\r\n    if (!this._dateAdapter.sameDate(date, this._min)) {\r\n      this._min = date;\r\n      this._revalidate();\r\n    }\r\n  }\r\n\r\n  // The maximum valid date\r\n  @Input() \r\n  get max(): D | null {\r\n    return this._max;\r\n  }\r\n  set max(value: D | null) {\r\n    const date = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\r\n\r\n    if (!this._dateAdapter.sameDate(date, this._max)) {\r\n      this._max = date; \r\n      this._revalidate();\r\n    }\r\n  }\r\n\r\n  // An input indicating whether the input is disabled\r\n  @Input({transform: booleanAttribute}) \r\n  get disabled(): boolean {\r\n    if (this._startInput && this._endInput) {\r\n      return this._startInput.disabled && this._endInput.disabled\r\n    } else {\r\n      return this._disabled;\r\n    }\r\n  }\r\n  set disabled(value: boolean) {\r\n    if (value !== this._disabled) {\r\n      this._disabled = value;\r\n      this.stateChanges.next(undefined)\r\n    }\r\n  }\r\n\r\n  // Seperator Input text to be shown between the inputs\r\n  @Input() seperator = '-';\r\n\r\n  // Start of the comparison range that should be shown in the calendar\r\n  @Input() comparisonStart: D | null = null;\r\n\r\n  // End of the comparison range that should be shown in the calendar\r\n  @Input() comparisonEnd: D | null = null;\r\n\r\n  constructor(...args: unknown[]);\r\n\r\n  constructor() {\r\n    if (!this._dateAdapter) {\r\n      throw createMissingDateImplementationError('DateAdapter');\r\n    } \r\n    if (this._formField?._elementRef.nativeElement.classList.contains('realsoft-form-field')) {\r\n      this._elementRef.nativeElement.classList.add(\r\n        'realsoft-input-element',\r\n        'realsoft-form-field-input-control',\r\n        'realsoft-text-field__input'\r\n      )\r\n    }\r\n\r\n    this.ngControl = inject(ControlContainer, {optional: true, self: true}) as any;\r\n  }\r\n\r\n  // Implemented as part of RealsoftFormFieldControl\r\n  setDescribedByIds(ids: string[]): void {\r\n    this._ariaDescribedBy = ids.length ?  ids.join(' ') : null;\r\n  }\r\n\r\n  // Implemented as part of RealsoftFormFieldControl\r\n  onContainerClick(): void {\r\n    if (!this.focused && !this.disabled) {\r\n      if (!this._model || !this._model.selection?.start) {\r\n        this._startInput.focus();\r\n      } else {\r\n        this._endInput.focus();\r\n      }\r\n    }\r\n  }\r\n\r\n  ngAfterContentInit() {\r\n    if (!this._startInput) {\r\n      throw Error ('realsoft-date-range-input must contain a realsoftStartDate input');\r\n    } \r\n\r\n    if (!this._endInput) {\r\n      throw Error ('realsoft-date-range-input must contain a realsoftEndDate input');\r\n    } \r\n\r\n    if (this._model) {\r\n      this.registerModel(this._model);\r\n    }\r\n\r\n    merge(this._startInput.stateChanges, this._endInput.stateChanges).subscribe(() => this.stateChanges.next(undefined));\r\n  }\r\n\r\n  \r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (dateInputsHaveChanged(changes, this._dateAdapter)) {\r\n      this.stateChanges.next(undefined);\r\n    }\r\n  }\r\n  // Reusable Functions\r\n\r\n  // Function that gets the date at which the calendar should start \r\n  getStartValue(): D | null {\r\n    return this.value ? this.value.start : null;\r\n  }\r\n\r\n  // Function that gets the element to which the calendar overlay should be attached.\r\n  getConnectedOverlayOrigin(): ElementRef {\r\n    if (this._formField) {\r\n      return this._formField.getConnectedOverlayOrigin();\r\n    } else {\r\n      return this._elementRef;\r\n    }\r\n  }\r\n\r\n  // Function that gets the ID of an element that should be used as a description for the calendar overlay.\r\n  getOverlayLabelId(): string | null {\r\n    if (this._formField) {\r\n      return this._formField.getLabelId();\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  // Function that gets the value that is used to mirror the state input\r\n  getInputMirrorValue(part: 'start' | 'end') {\r\n    const input = part === 'start' ? this._startInput : this._endInput;\r\n    return input ? input.getMirrorValue() : '';\r\n  }\r\n\r\n  // Function that determines whether the input placeholders should be hidden\r\n  shouldHidePlaceholders(): boolean {\r\n    if (this._startInput) {\r\n      return !this._startInput.isEmpty();\r\n    } else {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  // Function that handles the value change in one of the child inputs\r\n  handleChildValueChange() {\r\n    this.stateChanges.next(undefined);\r\n    this._changeDetectorRef.markForCheck();\r\n  } \r\n\r\n  // Function that opens the date range picker associated with the input\r\n  openDatepicker() {\r\n    if (this._rangePicker) {\r\n      this._rangePicker.open();\r\n    }\r\n  }\r\n\r\n\r\n  // Function that determines whether seperator text should be hidden \r\n  shouldHideSeperator() {\r\n    return (!this._formField || (this._formField.getLabelId() && this._formField._shouldLabelFloat()) && this.empty);\r\n  }\r\n\r\n  // Function that gets the value for the aria-labelledby attribute of the inputs\r\n  getARIALabelledby() {\r\n    if (this._formField && this._formField._hasFloatingLabel()) {\r\n      return this._formField._labelId\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  // Function that updates the focused state of the range input\r\n  updateFocus(origin: FocusOrigin) {\r\n    this.focused = origin !== null;\r\n    this.stateChanges.next();\r\n  }\r\n\r\n  // Function that re-runs the validators on the start/end inputs\r\n  private _revalidate() {\r\n    if (this._startInput) {\r\n      this._startInput._validatorOnChange();\r\n    }\r\n    if (this._endInput) {\r\n      this._endInput._validatorOnChange();\r\n    }\r\n  }\r\n\r\n  // Function that registers the current date selection model with the start/end inputs.\r\n  private registerModel(model: RealsoftDateSelectionModel<DateRange<D>>) {\r\n    if (this._startInput) {\r\n      this._startInput.registerModel(model);\r\n    }\r\n    if (this._endInput) {\r\n      this._endInput.registerModel(model);\r\n    }\r\n  }\r\n\r\n  // Function that checks whether a specific range input directive is required\r\n  private _isTargetRequired(target: {ngControl: NgControl | null} | null): boolean | undefined {\r\n    return target?.ngControl?.control?.hasValidator(Validators.required);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._closedSubscription.unsubscribe();\r\n    this._openedSubscription.unsubscribe();\r\n    this.stateChanges.complete();\r\n  }\r\n}","<div\r\n  class=\"realsoft-date-range-input-container\"\r\n  cdkMonitorSubtreeFocus\r\n  (cdkFocusChange)=\"updateFocus($event)\">\r\n  <div class=\"realsoft-date-range-input-wrapper\">\r\n    <ng-content select=\"input[realsoftStartDate]\"></ng-content>\r\n    <span\r\n      class=\"realsoft-date-range-input-mirror\"\r\n      aria-hidden=\"true\">{{getInputMirrorValue('start')}}</span>\r\n  </div>\r\n\r\n  <span\r\n    class=\"realsoft-date-range-input-separator\"\r\n    [class.realsoft-date-range-input-separator-hidden]=\"shouldHideSeperator()\">{{seperator}}</span>\r\n\r\n  <div class=\"realsoft-date-range-input-wrapper realsoft-date-range-input-end-wrapper\">\r\n    <ng-content select=\"input[realsoftEndDate]\"></ng-content>\r\n    <span\r\n      class=\"realsoft-date-range-input-mirror\"\r\n      aria-hidden=\"true\">{{getInputMirrorValue('end')}}</span>\r\n  </div>\r\n</div>","import { AfterContentInit, Directive, DoCheck, ElementRef, inject, Injector, Input, OnInit } from \"@angular/core\";\r\nimport { DateRange, RealsoftDateSelectionModelChange } from \"./models\";\r\nimport { RealsoftDatepickerInputBase } from \"./datepicker-input\";\r\nimport { ErrorState, ErrorStateMatcher } from \"../error-state-matcher\";\r\nimport { FormGroupDirective, NgControl, NgForm, ValidatorFn, Validators } from \"@angular/forms\";\r\nimport { Directionality } from \"@angular/cdk/bidi\";\r\nimport { RealsoftDateRangeInput } from \"./datepicker-range-input\";\r\n\r\n// Base Class for the individual inputs that can be projected inside a realsoft-date-range-input.\r\n@Directive({\r\n  standalone: true\r\n})\r\nexport abstract class RealsoftDateRangeInputPartBase<D> extends RealsoftDatepickerInputBase<DateRange<D>> implements OnInit, AfterContentInit, DoCheck {\r\n  // Dependency Injection\r\n  _rangeInput = inject<RealsoftDateRangeInput<D>>(RealsoftDateRangeInput);\r\n  override _elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\r\n  _defaultErrorStateMatcher = inject(ErrorStateMatcher);\r\n  private _injector = inject(Injector);\r\n  _parentForm = inject(NgForm, {optional: true});\r\n  _parentFormGroup = inject(FormGroupDirective, {optional: true});\r\n\r\n\r\n  ngControl: NgControl; // The form control bound to this input part.\r\n\r\n  protected abstract override validator: ValidatorFn | null;\r\n  protected abstract override assignValueToModel(value: D | null): void;\r\n  protected abstract override getValueFromModel(modelValue: DateRange<D>): D | null;\r\n  protected abstract _register(): void;\r\n  protected readonly _dir = inject(Directionality, {optional: true});\r\n  private _errorStateTracker: ErrorState;\r\n\r\n  // An object input used to control when error messages are shown\r\n  @Input()\r\n  get errorStateMatcher() {\r\n    return this._errorStateTracker.matcher;\r\n  }\r\n  set errorStateMatcher(value: ErrorStateMatcher) {\r\n    this._errorStateTracker.matcher = value;\r\n  }\r\n\r\n  // Whether the input is in an error state\r\n  get errorState() {\r\n    return this._errorStateTracker.errorState;\r\n  }\r\n  set errorState(value: boolean) {\r\n    this._errorStateTracker.errorState = value;\r\n  }\r\n\r\n  constructor(...args: unknown[]);\r\n\r\n  constructor() {\r\n    super();\r\n\r\n    this._errorStateTracker = new ErrorState(\r\n      this._defaultErrorStateMatcher,\r\n      null,\r\n      this._parentFormGroup,\r\n      this._parentForm,\r\n      this.stateChanges,\r\n    );\r\n  }\r\n\r\n  ngOnInit() {\r\n    const ngControl = this._injector.get(NgControl, null, {optional: true, self: true});\r\n\r\n    if (ngControl) {\r\n      this.ngControl = ngControl;\r\n      this._errorStateTracker.ngControl = ngControl;\r\n    }\r\n  }\r\n\r\n  ngAfterContentInit(): void {\r\n    this._register();\r\n  }\r\n\r\n  ngDoCheck() {\r\n    if (this.ngControl) {\r\n      this.updateErrorState();\r\n    }\r\n  }\r\n\r\n  // Gets whether the input is empty.\r\n  isEmpty(): boolean {\r\n    return this._elementRef.nativeElement.value.length === 0;\r\n  }\r\n\r\n  // Gets the placeholder of the input\r\n  _getPlaceholder() {\r\n    return this._elementRef.nativeElement.placeholder;\r\n  }\r\n\r\n  // Focuses the input\r\n  focus(): void {\r\n    this._elementRef.nativeElement.focus();\r\n  }\r\n\r\n  // Gets the value that should be used when mirroring the input's size. \r\n  getMirrorValue(): string {\r\n    const element = this._elementRef.nativeElement;\r\n    const value = element.value;\r\n    return value.length > 0 ? value : element.placeholder;\r\n  }\r\n\r\n  // Refreshes the error state of the input.\r\n  updateErrorState() {\r\n    this._errorStateTracker.updateErrorState();\r\n  }\r\n\r\n  // Handles `input` events on the input element. \r\n  override onInput(event: Event) {\r\n    super.onInput(event);\r\n    this._rangeInput.handleChildValueChange();\r\n  }\r\n\r\n  // Opens the datepicker associated with the input. \r\n  protected openPopup(): void {\r\n    this._rangeInput.openDatepicker();\r\n  }\r\n\r\n  // Gets the minimum date from the range input.\r\n  getMinDate() {\r\n    return this._rangeInput.min;\r\n  }\r\n\r\n  // Gets the maximum date from the range input.\r\n  getMaxDate() {\r\n    return this._rangeInput.max;\r\n  }\r\n\r\n  // Gets the date filter function from the range input.\r\n  protected getDateFilter() {\r\n    return this._rangeInput.dateFilter;\r\n  }\r\n\r\n  protected override parentDisabled() {\r\n    return this._rangeInput._disabled;\r\n  }\r\n\r\n  protected shouldHandleChangeEvent({source}: RealsoftDateSelectionModelChange<DateRange<D>>): boolean {\r\n    return source !== this._rangeInput._startInput && source !== this._rangeInput._endInput;\r\n  }\r\n\r\n  protected override assignValueProgrammatically(value: D | null) {\r\n    super.assignValueProgrammatically(value);\r\n    const opposite = (\r\n      this === (this._rangeInput._startInput as RealsoftDateRangeInputPartBase<D>)\r\n        ? this._rangeInput._endInput\r\n        : this._rangeInput._startInput\r\n    ) as RealsoftDateRangeInputPartBase<D> | undefined;\r\n    opposite?._validatorOnChange();\r\n  }\r\n\r\n  protected override formatValue(value: D | null) {\r\n    super.formatValue(value);\r\n    // Any time the input value is reformatted we need to tell the parent.\r\n    this._rangeInput.handleChildValueChange();\r\n  }\r\n\r\n}\r\n","import { BACKSPACE, LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\r\nimport { Directive } from '@angular/core';\r\nimport { AbstractControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\r\nimport { RealsoftDateRangeInputPartBase } from './datepicker-range-input-base';\r\nimport { DateFilterFn, DateRange, RealsoftDateSelectionModelChange } from './models';\r\n\r\n\r\n// Input for entering the end date in a realsoft-date-range-input\r\n@Directive({\r\n  selector: 'input[realsoftEndDate]',\r\n  providers: [\r\n    {provide: NG_VALUE_ACCESSOR, useExisting: RealsoftEndDate, multi: true},\r\n    {provide: NG_VALIDATORS, useExisting: RealsoftEndDate, multi: true},\r\n  ],\r\n  outputs: ['dateChange', 'dateInput'],\r\n  standalone: true,\r\n  host: {\r\n    'class': 'realsoft-end-date realsoft-date-range-input-inner',\r\n    '[disabled]': 'disabled',\r\n    '(input)': 'onInput($event)',\r\n    '(change)': 'onChange()',\r\n    '(keydown)': 'onKeyDown($event)',\r\n    '[attr.aria-haspopup]': '_rangeInput.rangePicker ? \"dialog\" : null',\r\n    '[attr.aria-owns]': '_rangeInput._ariaOwns() || null',\r\n    '[attr.min]': 'getMinDate() ? _dateAdapter.toIso8601(getMinDate()!) : null',\r\n    '[attr.max]': 'getMaxDate() ? _dateAdapter.toIso8601(getMaxDate()!) : null',\r\n    '(blur)': 'onBlur()',\r\n    'type': 'text',\r\n  },\r\n})\r\nexport class RealsoftEndDate<D> extends RealsoftDateRangeInputPartBase<D> {\r\n\r\n  // Validator Function that checks whether the end date isn't before the start date\r\n  private _endValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null =>  {\r\n    const end = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\r\n    const start = this._model ? this._model.selection.start : null;\r\n    if (!end || !start || this._dateAdapter.compareDate(end, start) >= 0) {\r\n      return null\r\n    } else {\r\n      return {'realsoftEndDateInvalid': {'start': start, 'actual': end}};\r\n    }\r\n  } \r\n\r\n  protected validator = Validators.compose([...super.getValidators(), this._endValidator]);\r\n\r\n  // Function that registes the input with the range input\r\n  protected override _register(): void {\r\n    this._rangeInput._endInput = this;\r\n  }\r\n\r\n  // Function that returns the end date value\r\n  protected getValueFromModel(modelValue: DateRange<D>) {\r\n    return modelValue.end;\r\n  }\r\n\r\n  // Function that determines whether a change event should be handles or not\r\n  protected override shouldHandleChangeEvent(change: RealsoftDateSelectionModelChange<DateRange<D>>): boolean {\r\n    if (!super.shouldHandleChangeEvent(change)) return false;\r\n    \r\n    // If there's no previous selection end date\r\n    if (!change.previousSelection?.end) {\r\n      return !!change.selection.end;\r\n    }\r\n    \r\n    // If there's no current selection end date\r\n    if (!change.selection.end) {\r\n      return true;\r\n    }\r\n    \r\n    // Both dates exist, safe to compare\r\n    return this._dateAdapter.compareDate(change.previousSelection.end, change.selection.end) !== 0;\r\n  }\r\n\r\n  // Function that assigns the value to the selection model\r\n  protected assignValueToModel(value: D | null) {\r\n    if (this._model) {\r\n      const rangeDate = new DateRange(this._model.selection?.start, value);\r\n      this._model.updateSelection(rangeDate, this);\r\n    }\r\n  }\r\n\r\n  private _moveCaretToEndOfStartInput() {\r\n    const startInput = this._rangeInput._startInput._elementRef.nativeElement;\r\n    const value = startInput.value;\r\n\r\n    if (value.length > 0) {\r\n      startInput.setSelectionRange(value.length, value.length);\r\n    }\r\n\r\n    startInput.focus();\r\n  }\r\n\r\n  override onKeyDown(event: KeyboardEvent) {\r\n    const element = this._elementRef.nativeElement;\r\n    const isLtr = this._dir?.value !== 'rtl';\r\n\r\n    if (event.keyCode === BACKSPACE && !element.value) {\r\n      this._moveCaretToEndOfStartInput();\r\n    }\r\n    else if (\r\n      ((event.keyCode === LEFT_ARROW && isLtr) || (event.keyCode === RIGHT_ARROW && !isLtr)) &&\r\n      element.selectionStart === 0 &&\r\n      element.selectionEnd === 0\r\n    ) {\r\n      event.preventDefault();\r\n      this._moveCaretToEndOfStartInput();\r\n    } else {\r\n      super.onKeyDown(event);\r\n    }\r\n  }\r\n}","import { Directive } from \"@angular/core\";\r\nimport { AbstractControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, ValidatorFn, Validators } from \"@angular/forms\";\r\nimport { RealsoftDateRangeInputPartBase } from \"./datepicker-range-input-base\";\r\nimport { DateFilterFn, DateRange, RealsoftDateSelectionModelChange } from \"./models\";\r\nimport { LEFT_ARROW, RIGHT_ARROW } from \"@angular/cdk/keycodes\";\r\n\r\n// Input for entering the start date in a realsoft-date-range-input\r\n@Directive({\r\n  selector: 'input[realsoftStartDate]',\r\n  providers: [\r\n    {provide: NG_VALUE_ACCESSOR, useExisting: RealsoftStartDate, multi: true},\r\n    {provide: NG_VALIDATORS, useExisting: RealsoftStartDate, multi: true},\r\n  ],\r\n  outputs: ['dateChange', 'dateInput'],\r\n  standalone: true,\r\n  host: {\r\n    'class': 'realsoft-start-date realsoft-date-range-input-inner',\r\n    '[disabled]': 'disabled',\r\n    '(input)': 'onInput($event)',\r\n    '(change)': 'onChange()',\r\n    '(keydown)': 'onKeyDown($event)',\r\n    '[attr.aria-haspopup]': '_rangeInput.rangePicker ? \"dialog\" : null',\r\n    '[attr.aria-owns]': '_rangeInput._ariaOwns() || null',\r\n    '[attr.min]': 'getMinDate() ? _dateAdapter.toIso8601(getMinDate()!) : null',\r\n    '[attr.max]': 'getMaxDate() ? _dateAdapter.toIso8601(getMaxDate()!) : null',\r\n    '(blur)': 'onBlur()',\r\n    'type': 'text',\r\n  },\r\n})\r\nexport class RealsoftStartDate<D> extends RealsoftDateRangeInputPartBase<D> {\r\n  // Validator for checking that the start date isn't after the end date\r\n  private _startValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\r\n    const start = this._dateAdapter.getValidDateOrNull(\r\n      this._dateAdapter.deserialize(control.value),\r\n    );\r\n    const end = this._model ? this._model.selection.end : null;\r\n    return !start || !end || this._dateAdapter.compareDate(start, end) <= 0\r\n      ? null\r\n      : {'realsoftStartDateInvalid': {'end': end, 'actual': start}};\r\n  };\r\n\r\n  protected validator = Validators.compose([...super.getValidators(), this._startValidator]);\r\n\r\n  protected override _register(): void {\r\n    this._rangeInput._startInput = this;\r\n  }\r\n\r\n  protected getValueFromModel(modelValue: DateRange<D>) {\r\n    return modelValue?.start;\r\n  }\r\n\r\n  protected override shouldHandleChangeEvent(\r\n    change: RealsoftDateSelectionModelChange<DateRange<D>>,\r\n  ): boolean {\r\n    if (!super.shouldHandleChangeEvent(change)) {\r\n      return false;\r\n    } else {\r\n      return !change.previousSelection?.start\r\n        ? !!change.selection.start\r\n        : !change.selection.start ||\r\n            !!this._dateAdapter.compareDate(change.previousSelection.start, change.selection.start);\r\n    }\r\n  }\r\n\r\n  protected assignValueToModel(value: D | null) {\r\n    if (this._model) {\r\n      const range = new DateRange(value, this._model.selection?.end);\r\n      this._model.updateSelection(range, this);\r\n      this._rangeInput.handleChildValueChange();\r\n    }\r\n  }\r\n\r\n  override onKeyDown(event: KeyboardEvent) {\r\n    const endInput = this._rangeInput._endInput;\r\n    const element = this._elementRef.nativeElement;\r\n    const isLtr = this._dir?.value !== 'rtl';\r\n\r\n    // If the user hits RIGHT (LTR) when at the end of the input (and no\r\n    // selection), move the cursor to the start of the end input.\r\n    if (\r\n      ((event.keyCode === RIGHT_ARROW && isLtr) || (event.keyCode === LEFT_ARROW && !isLtr)) &&\r\n      element.selectionStart === element.value.length &&\r\n      element.selectionEnd === element.value.length\r\n    ) {\r\n      event.preventDefault();\r\n      endInput._elementRef.nativeElement.setSelectionRange(0, 0);\r\n      endInput.focus();\r\n    } else {\r\n      super.onKeyDown(event);\r\n    }\r\n  }\r\n}","import { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, Directive, Input, OnChanges, OnDestroy, SimpleChanges, ViewEncapsulation, ViewChild, booleanAttribute, inject, HostAttributeToken } from '@angular/core';\r\nimport { merge, Observable, of as observableOf, Subscription } from 'rxjs';\r\nimport { RealsoftDatepickerIntl } from './datepicker-intl';\r\nimport { RealsoftDatepickerControl, RealsoftDatepickerPanel } from './models';\r\n\r\n\r\n// A directive that can be used to override the icon of a `realsoftDatepickerToggle`\r\n@Directive({\r\n    selector: '[realsoftDatepickerToggleIcon]',\r\n    standalone: true\r\n})\r\nexport class RealsoftDatepickerToggleIcon { }\r\n\r\n@Component({\r\n    selector: 'realsoft-datepicker-toggle',\r\n    templateUrl: 'datepicker-toggle.html',\r\n    styleUrl: 'datepicker.scss',\r\n    standalone: true,\r\n    exportAs: 'realsoftDatepickerToggle',\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    host: {\r\n      'class': 'realsoft-datepicker-toggle',\r\n      '[attr.tabindex]': 'null',\r\n      '[class.realsoft-datepicker-toggle-active]': 'datepicker && datepicker.opened',\r\n      '(click)': 'open($event)',\r\n    }\r\n})\r\nexport class RealsoftDatepickerToggle<D> implements OnChanges, AfterContentInit, OnDestroy {\r\n    // Internationalization Service Injection\r\n    _intl = inject(RealsoftDatepickerIntl);\r\n\r\n    // For manual change detection\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n    // Subscription to the state changes\r\n    private _stateChanges = new Subscription();\r\n\r\n    private _disabled: boolean;\r\n\r\n    // Input Bindings\r\n\r\n    // Datepicker instance that the button will toggle\r\n    @Input('for') datepicker: RealsoftDatepickerPanel<RealsoftDatepickerControl<any>, D>;\r\n\r\n    // Tabindex for the toggle\r\n    @Input() tabIndex: number | null;\r\n\r\n    // Screen reader label for the button\r\n    @Input('aria-label') ariaLabel: string;\r\n\r\n    // Whether the toggle button is disabled\r\n    @Input({transform: booleanAttribute}) \r\n    get disabled(): boolean {\r\n        if(this._disabled === undefined && this.datepicker) {\r\n            return this.datepicker.disabled;\r\n        }\r\n        return !!this._disabled;\r\n    }\r\n    set disabled(value: boolean) {\r\n        this._disabled = value;\r\n    }\r\n\r\n    // Custom icon that can be set by the consumer\r\n    @ContentChild(RealsoftDatepickerToggleIcon) _customIcon: RealsoftDatepickerToggleIcon;\r\n\r\n    // The underlying button element\r\n    @ViewChild('button') _button: HTMLButtonElement;\r\n\r\n    constructor() {\r\n        const defaultTabIndex = inject(new HostAttributeToken('tabindex'), {optional: true});\r\n        const parsedTabIndex = Number(defaultTabIndex);\r\n        this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges){\r\n        if(changes['datepicker']) {\r\n            this._observeStateChanges();\r\n        }\r\n    } \r\n\r\n    ngAfterContentInit() {\r\n        this._observeStateChanges();\r\n    }\r\n\r\n\r\n    ngOnDestroy() {\r\n        this._stateChanges.unsubscribe();\r\n    }\r\n\r\n    open(event: Event): void {\r\n        if(this.datepicker && !this.disabled) {\r\n            this.datepicker.open();\r\n            event.stopPropagation();\r\n        }\r\n    }\r\n\r\n    private _observeStateChanges() {\r\n        const inputStateChanged = this.datepicker && this.datepicker.datepickerInput ? this.datepicker.datepickerInput.stateChanges : observableOf();\r\n        const datepickerStateChanged = this.datepicker ? this.datepicker.stateChanges : observableOf();\r\n        const datepickerToggled = this.datepicker ? merge(this.datepicker.openedStream, this.datepicker.closedStream) : observableOf();\r\n\r\n        this._stateChanges.unsubscribe();\r\n\r\n        this._stateChanges = merge(\r\n            this._intl.changes,\r\n            inputStateChanged,\r\n            datepickerStateChanged as Observable<void>,\r\n            datepickerToggled\r\n        ).subscribe(() => this._changeDetectorRef.markForCheck());\r\n    }\r\n}\r\n  ","<button\r\n  #button\r\n  class=\"realsoft-datepicker-toggle-button\"\r\n  type=\"button\"\r\n  [attr.aria-haspopup]=\"datepicker ? 'dialog' : null\"\r\n  [attr.aria-label]=\"ariaLabel || _intl.openCalendarLabel\"\r\n  [tabIndex]=\"disabled ? -1 : tabIndex\"\r\n  [attr.aria-expanded]=\"datepicker ? datepicker.opened : null\"\r\n  [disabled]=\"disabled\">\r\n\r\n  @if (!_customIcon) {\r\n    <svg\r\n      class=\"realsoft-datepicker-toggle-default-icon\"\r\n      viewBox=\"0 0 24 24\"\r\n      width=\"24px\"\r\n      height=\"24px\"\r\n      fill=\"currentColor\"\r\n      focusable=\"false\"\r\n      aria-hidden=\"true\">\r\n      <path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\"/>\r\n    </svg>\r\n  }\r\n\r\n  <ng-content select=\"[realsoftDatepickerToggleIcon]\"></ng-content>\r\n</button>","import { InjectionToken } from \"@angular/core\";\r\nimport { DateAdapter } from \"../datepicker/shared/date-adapter\";\r\nimport { RealsoftDateFormats } from \"../datepicker/models\";\r\n\r\n// Object that can be used to configure the default options for the timepicker component\r\nexport interface RealsoftTimepickerConfig {\r\n    interval: string | number; // Default interval for all time pickers\r\n}\r\n\r\n// Injection token that can be used to configure the default options for the timepicker component\r\nexport const REALSOFT_TIMEPICKER_CONFIG = new InjectionToken<RealsoftTimepickerConfig>('REALSOFT_TIMEPICKER_CONFIG');\r\n\r\n\r\n// Time-selection option that can be displayed withina realsoft-timepicker\r\nexport interface RealsoftTimepickerOption<D =unknown> {\r\n    value: D; // Date Value of the option\r\n    label: string; // Label to show the user\r\n}\r\n\r\nexport function validateAdapter(\r\n  adapter: DateAdapter<unknown> | null,\r\n  formats: RealsoftDateFormats | null,\r\n) {\r\n  function missingAdapterError(provider: string) {\r\n    return Error(\r\n      `RealsofTimepicker: No provider found for ${provider}. You must add one of the following ` +\r\n        `to your app config: provideNativeDateAdapter, provideDateFnsAdapter, ` +\r\n        `provideLuxonDateAdapter, provideMomentDateAdapter, or provide a custom implementation.`,\r\n    );\r\n  }\r\n\r\n  // Check if DateAdapter is missing\r\n  if (!adapter) {\r\n    throw missingAdapterError('DateAdapter');\r\n  }\r\n\r\n  // Check if REALSOFT_DATE_FORMATS is missing\r\n  if (!formats) {\r\n    throw missingAdapterError('REALSOFT_DATE_FORMATS');\r\n  }\r\n\r\n  // Check if required format fields are provided\r\n  if (\r\n    formats.display.timeInput === undefined ||\r\n    formats.display.timeOptionLabel === undefined ||\r\n    formats.parse.timeInput === undefined\r\n  ) {\r\n    throw new Error(\r\n      'RealsofTimepicker: Incomplete `REALSOFT_DATE_FORMATS` has been provided. ' +\r\n        '`REALSOFT_DATE_FORMATS` must provide `display.timeInput`, `display.timeOptionLabel` ' +\r\n        'and `parse.timeInput` formats in order to be compatible with RealsoftTimepicker.',\r\n    );\r\n  }\r\n}","import {\r\n  afterNextRender,\r\n  AfterRenderRef,\r\n  ANIMATION_MODULE_TYPE,\r\n  booleanAttribute,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  computed,\r\n  effect,\r\n  ElementRef,\r\n  inject,\r\n  InjectionToken,\r\n  Injector,\r\n  input,\r\n  InputSignal,\r\n  InputSignalWithTransform,\r\n  OnDestroy,\r\n  output,\r\n  OutputEmitterRef,\r\n  Signal,\r\n  signal,\r\n  TemplateRef,\r\n  untracked,\r\n  viewChild,\r\n  viewChildren,\r\n  ViewContainerRef,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport {Directionality} from '@angular/cdk/bidi';\r\nimport {Overlay, OverlayRef, ScrollStrategy} from '@angular/cdk/overlay';\r\nimport {TemplatePortal} from '@angular/cdk/portal';\r\nimport {_getEventTarget} from '@angular/cdk/platform';\r\nimport {ENTER, ESCAPE, hasModifierKey, P, TAB} from '@angular/cdk/keycodes';\r\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\r\nimport {Subscription} from 'rxjs';\r\nimport { REALSOFT_TIMEPICKER_CONFIG, RealsoftTimepickerOption, validateAdapter } from './helpers';\r\nimport { RealsoftTimepickerInput } from './timepicker-input';\r\nimport { REALSOFT_DATE_FORMATS, RealsoftDateFormats } from '../datepicker/models';\r\nimport { UniqueIdGeneratorService } from '../id-generator';\r\nimport { DateAdapter } from '../datepicker/shared/date-adapter';\r\nimport { RealsoftOption } from '../option/option';\r\n\r\n// Event emitted when a value is selected in the timepicker\r\nexport interface RealsoftTimepickerSelected<D> {\r\n    source: RealsoftTimepicker<D>;\r\n    value: D;\r\n}\r\n\r\n// Injection token used to configure the behavior of the timpeicker dropdown while scrolling\r\nexport const REALSOFT_TIMEPICKER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\r\n    'REALSOFT_TIMEPICKER_SCROLL_STRATEGY',\r\n    {\r\n        providedIn: 'root',\r\n        factory: () => {\r\n            const overlay = inject(Overlay);\r\n            return () => overlay.scrollStrategies.reposition();\r\n        }\r\n    }\r\n)\r\n\r\n// Component that renders out a listbox that can be used to select a time of the day. Intended to be used with a RealsoftTimepickerInput\r\n@Component({\r\n    selector: 'realsoft-timepicker',\r\n    exportAs: 'realsoftTimepicker',\r\n    templateUrl: 'timepicker.html',\r\n    styleUrl: './timepicker.scss',\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    encapsulation: ViewEncapsulation.None,\r\n    standalone: true,\r\n    imports: [RealsoftOption]\r\n})\r\nexport class RealsoftTimepicker<D> implements OnDestroy{\r\n    // Class Properties\r\n\r\n    // Injected dependencies\r\n\r\n    // The overlay that will contain the time options\r\n    private _overlay = inject(Overlay); \r\n\r\n    // For layout direction purposes\r\n    private _dir = inject(Directionality, {optional: true});\r\n\r\n    // Dynamically appending views\r\n    private _viewContainerRef = inject(ViewContainerRef);\r\n\r\n    // Default Configuration \r\n    private _defaultConfig = inject(REALSOFT_TIMEPICKER_CONFIG, {optional: true});\r\n\r\n    // Date Adapter\r\n    private _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\r\n\r\n    // Date Formats\r\n    private _dateFormats = inject(REALSOFT_DATE_FORMATS, {optional: true})!;\r\n\r\n    // Whether animations are disabled or not\r\n    protected _animationsDisabled = inject(ANIMATION_MODULE_TYPE, {optional: true}) === 'NoopAnimations';\r\n\r\n    // Scroll Strategy\r\n    private _scrollStrategyFactory = inject(REALSOFT_TIMEPICKER_SCROLL_STRATEGY, {optional: true});\r\n\r\n    // Whether the timepicker is open\r\n    private _isOpen = signal(false);\r\n\r\n    // Id of the active descendant option\r\n    private _activeDescendant = signal<string | null>(null);\r\n\r\n    private _injector = inject(Injector);\r\n\r\n    private _input = signal<RealsoftTimepickerInput<D> | null>(null);\r\n\r\n    protected _panelTemplate = viewChild.required<TemplateRef<unknown>>('panelTemplate');\r\n    protected _timeOptions: readonly RealsoftTimepickerOption<D>[] = [];\r\n    protected _options = viewChildren(RealsoftOption);\r\n\r\n    private _overlayRef: OverlayRef | null = null;\r\n    private _portal: TemplatePortal<unknown> | null = null;\r\n    private _optionsCacheKey: string | null = null;\r\n    private _localeChanges: Subscription;\r\n    private _onOpenRender: AfterRenderRef | null = null;\r\n\r\n\r\n    // Unique ID of the timepicker's panel \r\n    readonly panelId: string = inject(UniqueIdGeneratorService).generateID('realsoft-timepicker-panel-');\r\n\r\n    // Array of pre-defined options that the user can select from, as an alternative to using the interval input. An error will be thrown if both options and interval are specified.\r\n    readonly options: InputSignal<readonly RealsoftTimepickerOption<D>[] | null> = input<readonly RealsoftTimepickerOption<D>[] | null>(null);\r\n\r\n    // Interval between each option in the timepicker. The value can either be an amount of seconds, or a number with a unit (45m). Supported units are s for seconds, , for minutes or h for hours.\r\n    readonly interval: InputSignalWithTransform<number | null, number | string | null> = input(this.parseInterval(this._defaultConfig?.interval || null), {transform: this.parseInterval});\r\n\r\n    // Whether the timepicker is open \r\n    readonly isOpen: Signal<boolean> = this._isOpen.asReadonly();\r\n\r\n    // ID of the active descendant option\r\n    readonly activeDescendant: Signal<string | null> = this._activeDescendant.asReadonly();\r\n\r\n    // ARIA Label for the timepicker panel\r\n    readonly ariaLabel: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-label'});\r\n\r\n    // ID of the label element for the timepicke panel\r\n    readonly ariaLabelledby: InputSignal<string | null> = input<string | null>(null, {alias: 'aria-labelledby'});\r\n\r\n    // Whether the timepicker is currently disabled\r\n    readonly disabled: Signal<boolean> = computed(() => !!this._input()?.disabled());\r\n\r\n    private _keyManager = new ActiveDescendantKeyManager(this._options, this._injector)\r\n    .withHomeAndEnd(true)\r\n    .withPageUpDown(true)\r\n    .withVerticalOrientation(true);\r\n\r\n    // Emits when the user selects a time. \r\n    readonly selected: OutputEmitterRef<RealsoftTimepickerSelected<D>> = output();\r\n\r\n    // Emits when the timepicker is opened.\r\n    readonly opened: OutputEmitterRef<void> = output();\r\n\r\n    // Emits when the timepicker is closed.\r\n    readonly closed: OutputEmitterRef<void> = output();\r\n\r\n    constructor() {\r\n        validateAdapter(this._dateAdapter, this._dateFormats); // check that the DateAdapter and date Formats are configured correctly\r\n        effect(() => {\r\n            // Validate input bindings\r\n            const options = this.options();\r\n            const interval = this.interval();\r\n\r\n            if (options !== null && interval !== null) {\r\n                // Both options and interval are provided → which is logically ambiguous (should generate or use fixed list, not both).\r\n                throw new Error('Cannot specify both the `options` and `interval` inputs at the same time');\r\n            } else if (options !== null && options.length === 0) {\r\n                throw new Error('Value of `options` input cannot be an empty array'); // options is an empty array → which would render a useless UI.\r\n            }\r\n        });\r\n\r\n        // This avoids using @HostBinding, since the value is static and only set once.\r\n        const element = inject<ElementRef<HTMLElement>>(ElementRef);\r\n        element.nativeElement.setAttribute('realsoft-timepicker-panel-id', this.panelId);\r\n\r\n        // Initialize Reactive Behaviors\r\n        this._handleLocaleChanges();\r\n        this._handleInputStateChanges();\r\n        // Subscribes to changes in the ActiveDescendantKeyManager, which handles keyboard navigation of options.\r\n        this._keyManager.change.subscribe(() =>\r\n            this._activeDescendant.set(this._keyManager.activeItem?.id || null), // Updates the aria-activedescendant value (through a signal: _activeDescendant) to reflect which item is currently active/focused.\r\n        );\r\n\r\n    }\r\n\r\n  // Generic function that can be used to convert a time interval expressed as a number or string into a number of seconds\r\n  parseInterval(value: string | number | null): number | null {\r\n    let result: number;\r\n    // If no value is provided then return null\r\n    if (value === null) {\r\n      return null;\r\n    }\r\n\r\n    // Handle number directly -> If it’s already a number (e.g., 120), use it as-is. It represents seconds.\r\n    else if (typeof value === 'number') {\r\n      result = value;\r\n    }\r\n\r\n    // Handle string case -> If the string is empty or whitespace → treat as no value → return null.\r\n\r\n    else {\r\n      if (value.trim().length === 0) {\r\n        return null;\r\n      }\r\n\r\n      // Use a regular expression -> to extract amount: numeric portion and unit -> Time unit\r\n      const parsed = value.match(/^(\\d*\\.?\\d+)\\s*(h|hour|hours|m|min|minute|minutes|s|second|seconds)?$/i);\r\n      const amount = parsed ? parseFloat(parsed[1]) : null;\r\n      const unit = parsed?.[2]?.toLowerCase() || null;\r\n\r\n      // Validate parsed parts \r\n      if (!parsed || amount === null || isNaN(amount)) {\r\n        return null; // If parsing failed or the number is not valid → return null.\r\n      }\r\n\r\n      // Conversion Logic to Seconds\r\n      if (unit === 'h' || unit === 'hours' || unit === 'hour') {\r\n        result = amount * 3600;\r\n      } else if (unit === 'm' || unit === 'min' || unit === 'minute' || unit === 'minutes') {\r\n        result = amount * 60;\r\n      } else {\r\n        result = amount;\r\n      }\r\n    }\r\n\r\n    return result;\r\n  } \r\n\r\n  // Generic Function for generating a list of time options.\r\n  generateOptions<D>(adapter: DateAdapter<D>, formats: RealsoftDateFormats, min: D, max: D, interval: number): RealsoftTimepickerOption<D>[] {\r\n    // Initialize an empty array to store time options\r\n    const options: RealsoftTimepickerOption<D>[] = [];\r\n\r\n    // Determine a valid starting point, if min is earlier than or equal to max, use min otherwise which should rarely happen, start from max.\r\n    let time = adapter.compareTime(min,max) < 1 ? min : max;\r\n\r\n    // Add the time to the options list as long as current is on the same date as min, current is less than or equal to max, current is valid date/time.\r\n    // This loop ensures that time options won't go past max + you stay on the same date + only valid values are included.\r\n\r\n    while(adapter.sameDate(time, min) && adapter.compareTime(time, max) < 1 && adapter.isValid(time)) {\r\n        // Add the current time to the options list\r\n        options.push({\r\n            value: time,\r\n            label: adapter.format(time, formats.display.timeOptionLabel)\r\n        });\r\n\r\n        // Increment the current time by the given interval, then loop continues to add the next time slot\r\n        time = adapter.addSeconds(time,interval);\r\n    }\r\n\r\n    // Return the full list of generated time options\r\n    return options;\r\n  }\r\n\r\n  // Function to generate and cache a list of time options on a given interval, minimum time and maximum time. The function ensures avoiding recomputing options if nothing has changed\r\n  private _generateOptions(): void {\r\n    // Configure the time interval \r\n    const interval = this.interval() ?? 30 * 60; // Default to 30 minutes if this.interval() is null\r\n    const options = this.options(); \r\n\r\n    // Check if predefined options exist, and use them directly and skip the rest (no need to auto generate anything)\r\n    if (options !== null) {\r\n        this._timeOptions = options;\r\n    } else { // No predefined options exist\r\n        // Prepare the needed data for auto generation\r\n        const input = this._input(); // Get the input time picker\r\n        const adapter = this._dateAdapter; \r\n        const timeFormat = this._dateFormats.display.timeInput; // Get the time format used for displaying time\r\n\r\n        // Determine the minimum and maximum selectable times, If the input provides a min() and max(), use those. Otherwise, fallback to 00:00 (midnight) and 23:59 of today.\r\n        const min = input?.min() || adapter.setTime(adapter.today(), 0, 0, 0);\r\n        const max = input?.max() || adapter.setTime(adapter.today(), 23, 59, 0);\r\n\r\n        // Create a cache key based on the current interval, formatted min time, formatted max time which ensures time options are only regenerated if these values change\r\n        const cacheKey = interval + '/' + adapter.format(min, timeFormat) + '/' + adapter.format(max, timeFormat);\r\n\r\n        // Check if the cache key has changed\r\n        if (cacheKey !== this._optionsCacheKey) {\r\n            this._optionsCacheKey = cacheKey; // Store the new cache key\r\n            // Recalculate the time options using the generateOptions() function.\r\n            this._timeOptions = this.generateOptions(adapter, this._dateFormats, min, max, interval);\r\n        }\r\n    }\r\n  }\r\n\r\n  // Function for creating and returning an Angular CDK Overlay for the time picker panel.\r\n  private _createOverlay(): OverlayRef {\r\n    // Guard Clause -> Avoid creating multiple overlays for the same component\r\n    if (this._overlayRef) {\r\n        return this._overlayRef;\r\n    }\r\n\r\n    // create a position strategy \r\n    const positionStrategy = this._overlay.position()\r\n    .flexibleConnectedTo(this._input()!.getOverlayOrigin())\r\n    .withFlexibleDimensions(false)\r\n    .withPush(false)\r\n    .withTransformOriginOn('realsoft-timepicker-panel')\r\n    .withPositions([\r\n        {\r\n          originX: 'start',\r\n          originY: 'bottom',\r\n          overlayX: 'start',\r\n          overlayY: 'top',\r\n        },\r\n        {\r\n          originX: 'start',\r\n          originY: 'top',\r\n          overlayX: 'start',\r\n          overlayY: 'bottom',\r\n          panelClass: 'realsoft-timepicker-above',\r\n        },\r\n    ]);\r\n\r\n    // Creating the overlay \r\n    this._overlayRef = this._overlay.create({\r\n        positionStrategy,\r\n        scrollStrategy: this._scrollStrategyFactory(),\r\n        direction: this._dir || 'ltr',\r\n        hasBackdrop: false\r\n    });\r\n\r\n    // Attach subscriptions\r\n\r\n    this._overlayRef.detachments().subscribe(() => this.close()); // close an overlay detach\r\n    this._overlayRef.keydownEvents().subscribe(event => this._handleKeydown(event)); // Handle keyboard interactions\r\n    // Handle click outside the overlay\r\n    this._overlayRef.outsidePointerEvents().subscribe(event => {\r\n        const target = _getEventTarget(event) as HTMLElement;\r\n        const origin = this._input()?.getOverlayOrigin().nativeElement;\r\n\r\n        // If the click target is not the input or inside it, close the overlay.\r\n        if (target && origin && target !== origin && !origin.contains(target)) {\r\n            this.close();\r\n        }\r\n    });\r\n\r\n    // Return the newly created overlay reference\r\n    return this._overlayRef;\r\n  }\r\n\r\n  // Function for closing the timepicker overlay\r\n  close(): void {\r\n    // Only run the logic when the panel is opeend\r\n    if (this._isOpen()) {\r\n        this._isOpen.set(false);\r\n        this.closed.emit();\r\n\r\n        // If animations are disabled, detach the overlay immediately so the panel disappears from the DOM right away.\r\n        if(this._animationsDisabled) {\r\n            this._overlayRef?.detach();\r\n        }\r\n    }\r\n  }\r\n\r\n  // Method that handles what happens when a time option is selected -> When the user clicks or presses enter on a time in the time picker panel.\r\n  _selectTimeOption(selectedOption: RealsoftOption<D>) {\r\n    // Close the timepicker panel\r\n    this.close(); \r\n\r\n    // Update keyboard focus using Angular's CDK ActiveDescendantKeyManager -> This ensures that the newly selected option becomes the \"active\" item (highlighted for keyboard navigation).\r\n    this._keyManager.setActiveItem(selectedOption);\r\n    // Iterate through all available options -> Deselect each option except the one just got selected\r\n    this._options().forEach(option => {\r\n        if (selectedOption !== option) {\r\n            option.deselect(false); \r\n        }\r\n    });\r\n\r\n    // Emit a selected event with the selected value and a reference to the current component instance\r\n    this.selected.emit({value: selectedOption.value, source: this});\r\n    this._input()?.focus(); // Return focus to the input field\r\n  }\r\n\r\n  // Input Registeration\r\n  registerInput(input: RealsoftTimepickerInput<D>): void {\r\n    const currentInput = this._input();\r\n\r\n    if(currentInput && input !== currentInput) {\r\n        throw new Error('RealsoftTimepicker can only be registered with one input at a time');\r\n    }\r\n    this._input.set(input);\r\n  }\r\n\r\n  // Function that enables keyboard navigation inside the timepicker\r\n  private _handleKeydown(event: KeyboardEvent): void {\r\n    // Extract the key code of the pressed key\r\n    const keyCode = event.keyCode;\r\n\r\n    // Handle the pressed key cases\r\n    if (keyCode === TAB) {\r\n        this.close(); // Close the timepicker when the user presses on tab to allow natural tabbing through form fields\r\n    } else if (keyCode === ESCAPE && !hasModifierKey(event)) {\r\n        event.preventDefault();\r\n        this.close(); // If the usere presses Escape, and no modifier keys (Ctrl, Alt, Shift) are pressed then prevent default behavior and close the time picker panel.\r\n    } else if (keyCode === ENTER) {\r\n        // Enter Key -> Select the active item \r\n        event.preventDefault(); // Prevent default behavior like submitting a form\r\n\r\n        if (this._keyManager.activeItem) {\r\n            this._selectTimeOption(this._keyManager.activeItem); // If an option is highlighted (keyboard focused via arrow keys, it's selected)\r\n        } else {\r\n            this.close(); // Just close the panel if no option is highlighted\r\n        }\r\n    } else {\r\n        // Arrow keys Navigation\r\n        const perviouslyActiveOption = this._keyManager.activeItem; // Store the previously focused option\r\n        this._keyManager.onKeydown(event); // Pass the key event to Angular CDK's ActiveDescendantKeyManager which handles arrow key nevigation\r\n        const currentActiveOption = this._keyManager.activeItem; // Get the new active item after navigation.\r\n        // If the active item has changes -> Scroll it into view (so the user can see what is currently focused).\r\n        if (currentActiveOption && currentActiveOption !== perviouslyActiveOption ) {\r\n            scrollOptionIntoView(currentActiveOption, 'nearest'); // Uses scrollOptionIntoView(currentActiveOption, 'nearest') to smartly scroll the newly focused item into view (similar to element.scrollIntoView() but with scroll behavior).\r\n        }\r\n    }\r\n  }\r\n\r\n  // Function that ensures the correct option is marked as selected in the time picker panel when a value is set or updated. \r\n  private _syncSelectionState(value: D | null, options: readonly RealsoftOption[], fallback: RealsoftOption | null) {\r\n    // A property that tracks whether a selected option was found or not\r\n    let isOptionSelected = false; // Used to determine whether any option matched the value\r\n\r\n    for (const option of options) {\r\n        if(value && this._dateAdapter.sameTime(option.value, value)) {\r\n            option.select(false);\r\n            scrollOptionIntoView(option, 'center'); // Scroll that option into view (centered).\r\n            untracked(() => this._keyManager.setActiveItem(option)); // I used untracked here to prevent reactive side effects / change detection triggering during this update.\r\n            isOptionSelected = true; // Indicates that an option has now been selected\r\n        } else {\r\n            option.deselect(false); // Option doesn't match, deselect it.\r\n        }\r\n    }\r\n\r\n    // Fallback -> No Selected item was found\r\n    if(!isOptionSelected) {\r\n        // Guard Clause -> A backup option to activate if no match is found. Useful when you want something focused even if no time is currently selected.\r\n        if (fallback) {\r\n            untracked(() => this._keyManager.setActiveItem(fallback)); // Make the fallback the active item.\r\n            scrollOptionIntoView(fallback, 'center'); // Scroll it into view\r\n        } else {\r\n            untracked(() => this._keyManager.setActiveItem(-1)); // Clear active state with setActiveItem(-1) (no active item).\r\n        }\r\n    }\r\n     \r\n  }\r\n\r\n  // Function for opening the timepicker panel, rendering it in an overlay, preparing its options, syncing its options, syncing the selection state, and triggering change detection after the DOM is rendered\r\n  open(): void {\r\n    // Get the associated input \r\n    const input = this._input();\r\n\r\n    // Guard clause -> If no input found, exit early\r\n    if(!input) {\r\n        return;\r\n    }\r\n\r\n    // Focus the input, for accessibility and UX + focus it explicitly in case the input has been opened programmatically.\r\n    if(this.isOpen()) {\r\n        return; // Avoid reopening or re-attaching the overlay if it's already open\r\n    }\r\n\r\n    // Mark the timepicker panel as open and generate the options\r\n    this._isOpen.set(true);\r\n    this._generateOptions();\r\n\r\n    // Overlay Configuration\r\n    const overlayRef = this._createOverlay();\r\n    overlayRef.updateSize({width: input.getOverlayOrigin().nativeElement.offsetWidth}); // Sets the overlay's width to match the input element’s width (so the panel aligns perfectly).\r\n\r\n    // Prepare and attach the panel template\r\n    this._portal ??= new TemplatePortal(this._panelTemplate(), this._viewContainerRef); // Create a Template portal (if not already created) to render the time picker into the overlay\r\n\r\n    if(!overlayRef.hasAttached()) {\r\n        // Attaches the portal if it hasn’t already been attached.\r\n        overlayRef.attach(this._portal);\r\n    }\r\n\r\n    // Sync State after next render \r\n    this._onOpenRender?.destroy(); // Cancel any previous afterNextRender work \r\n    // Only run this logic after Angular has rendered the panel \r\n    this._onOpenRender = afterNextRender(() => {\r\n        const options = this._options();\r\n        this._syncSelectionState(input.value(), options, options[0]); // Select the correct option, focus it in the keyboard manager and scroll it iinto view\r\n        this._onOpenRender = null;\r\n    }, \r\n    {injector: this._injector}); \r\n\r\n    this.opened.emit();\r\n  } \r\n\r\n  // Function to react to locale changes -> Changing the app language.\r\n  private _onLocaleChanges(): void {\r\n    this._localeChanges = this._dateAdapter.localeChanges.subscribe(() => {\r\n        this._optionsCacheKey = null;\r\n        if (this.isOpen()) {\r\n            this._generateOptions();\r\n        }\r\n    })\r\n  }\r\n  private _handleLocaleChanges(): void {\r\n    // Re-generate the options list if the locale changes.\r\n    // Subscribes to a localeChanges observable from DateAdapter.\r\n    this._localeChanges = this._dateAdapter.localeChanges.subscribe(() => {\r\n      this._optionsCacheKey = null; // Clears the internal cache key used by _generateOptions() to force regeneration of time options.\r\n\r\n      if (this.isOpen()) {\r\n        this._generateOptions(); // If the time picker is open, regenerate the time options list so the new locale format is reflected immediately.\r\n      }\r\n    });\r\n  }\r\n\r\n  // Function tha keeps the timepicker synchronized with changes in the connected input element\r\n  private _handleInputStateChanges(): void {\r\n    // Since using signals -> We use effect here to watch for all reactive dependencies\r\n    effect(() => {\r\n        const input = this._input();\r\n        const options = this._options();\r\n\r\n        if (this.isOpen() && input) {\r\n            this._syncSelectionState(input.value(), options, null)\r\n        }\r\n    })\r\n  }\r\n\r\n  protected _getAriaLabelledby(): string | null {\r\n    if (this.ariaLabel()) {\r\n      return null;\r\n    }\r\n    return this.ariaLabelledby() || this._input()?._getLabelId() || null;\r\n  }\r\n\r\n  // Handles animation events coming from the panel\r\n  protected _handleAnimationEnd(event: AnimationEvent) {\r\n    if (event.animationName === '_realsoft-timepicker-exit') {\r\n      this._overlayRef?.detach();\r\n    }\r\n  }\r\n\r\n  \r\n  ngOnDestroy(): void {\r\n    this._keyManager.destroy();\r\n    this._localeChanges.unsubscribe();\r\n    this._onOpenRender?.destroy();\r\n    this._overlayRef?.dispose();\r\n  }\r\n\r\n}\r\n\r\nfunction scrollOptionIntoView(option: RealsoftOption, position: ScrollLogicalPosition) {\r\n  option.getHostElement().scrollIntoView({block: position, inline: position});\r\n}\r\n\r\n","<ng-template #panelTemplate>\r\n  <div\r\n    role=\"listbox\"\r\n    class=\"realsoft-timepicker-panel\"\r\n    [class.realsoft-timepicker-panel-animations-enabled]=\"!_animationsDisabled\"\r\n    [class.realsoft-timepicker-panel-exit]=\"!isOpen()\"\r\n    [attr.aria-label]=\"ariaLabel() || null\"\r\n    [attr.aria-labelledby]=\"_getAriaLabelledby()\"\r\n    [id]=\"panelId\"\r\n    (animationend)=\"_handleAnimationEnd($event)\">\r\n    @for (option of _timeOptions; track option.value) {\r\n      <realsoft-option\r\n        [value]=\"option.value\"\r\n        (onSelectionChange)=\"_selectTimeOption($event.source)\">{{option.label}}</realsoft-option>\r\n    }\r\n  </div>\r\n</ng-template>","import { booleanAttribute, computed, Directive, effect, ElementRef, inject, input, InputSignal, InputSignalWithTransform, model, ModelSignal, OnDestroy, OutputRefSubscription, Renderer2, Signal, signal} from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, ValidatorFn, Validators } from '@angular/forms';\r\nimport { RealsoftTimepicker } from './timepicker';\r\nimport { Subscription } from 'rxjs';\r\nimport { DOWN_ARROW, ESCAPE, hasModifierKey, UP_ARROW } from '@angular/cdk/keycodes';\r\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\r\nimport { REALSOFT_INPUT_VALUE_ACCESSOR } from '../input/helpers';\r\nimport { validateAdapter } from './helpers';\r\nimport { DateAdapter } from '../datepicker/shared/date-adapter';\r\nimport { REALSOFT_DATE_FORMATS } from '../datepicker/models';\r\nimport { REALSOFT_FORM_FIELD } from '../form-field/models';\r\n// Input that can be used to enter time and connect to a realsoft-timepicker\r\n@Directive({\r\n  selector: 'input[realsoftTimepicker]',\r\n  exportAs: 'realsoftTimepickerInput',\r\n  standalone: true,\r\n  host: {\r\n    '[attr.aria-activedescendant]': '_activeAriaDescendant()',\r\n    '[attr.aria-expanded]': '_ariaExpanded()',\r\n    '[attr.aria-controls]': '_ariaControls()',\r\n    '[attr.realsoft-timepicker-id]': 'timepicker()?.panelId',\r\n    '[disabled]': 'disabled()',\r\n    '(blur)': '_handleBlur()',\r\n    '(input)': '_handleInput($event.target.value)',\r\n    '(keydown)': '_handleKeydown($event)', \r\n    'class': 'realsoft-timepicker-input',\r\n    'role': 'combobox',\r\n    'type': 'text',\r\n    'aria-haspopup': 'listbox',  \r\n  },\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: RealsoftTimepickerInput,\r\n      multi: true,\r\n    },\r\n    {\r\n      provide: NG_VALIDATORS,\r\n      useExisting: RealsoftTimepickerInput,\r\n      multi: true,\r\n    },\r\n    {\r\n      provide: REALSOFT_INPUT_VALUE_ACCESSOR,\r\n      useExisting: RealsoftTimepickerInput,\r\n    },\r\n  ],\r\n})\r\nexport class RealsoftTimepickerInput<D> implements ControlValueAccessor, Validator, OnDestroy {\r\n  // Reference to the input DOM element, allowing direct manipulation, event listening\r\n  private _elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\r\n\r\n  // Injects a dateadapter used to convert between string and Date.\r\n  private _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\r\n\r\n  // Injects a token that provides date formatting strings used for parsing and displaying dates/times\r\n  private _dateFormats = inject(REALSOFT_DATE_FORMATS, {optional: true})!;\r\n\r\n  // Injects a reference to the surrounding form field context.\r\n  private _formField = inject(REALSOFT_FORM_FIELD, {optional: true});\r\n\r\n  private _renderer = inject(Renderer2);\r\n\r\n  // Register callbacks from ControlValueAccessor to inform the parent form when the value changes or the input is touched\r\n  private _onChange: ((value: any) => void) | undefined;\r\n  private _onTouched: (() => void) | undefined;\r\n\r\n  // Validation Trigger\r\n  private _validatorOnChange: (() => void) | undefined;\r\n\r\n  // Reference to custom validation\r\n  private _validator: ValidatorFn;\r\n\r\n  // Clean up Event Listeners\r\n  private _cleanupClick: () => void;\r\n\r\n  // A signal indicating whether the control is disabled\r\n  private _disabled = signal(false);\r\n\r\n  // Subscribe to output events from the timepicker component -> Selected Time, open/close state\r\n  private _timepickerSubscriptions: OutputRefSubscription | undefined;\r\n\r\n  // Subscribe to locale changes\r\n  private _localeSubscription: Subscription;\r\n\r\n  // Track whether the last user-entered value was valid and stores the last parsed date/time\r\n  private _lastValueValid = true;\r\n  private _lastValidDate: D | null = null;\r\n\r\n  // Timepicker that the input is associated with\r\n  readonly timepicker: InputSignal<RealsoftTimepicker<D>> = input.required<RealsoftTimepicker<D>>({alias: 'realsoftTimepicker'});\r\n\r\n  // Minimum time that can be selected or typed in. Can be either a date object (only time will be used) or a valid time string\r\n  readonly min: InputSignalWithTransform<D | null, unknown> = input(null, {\r\n    alias: 'realsoftTimepickerMin',\r\n    transform: (value: unknown) => this._convertDateInput<D>(value)\r\n  });\r\n\r\n  // Maximum time that can be selected or typed in. Can be either a date object (only time will be used) or a valid time string\r\n  readonly max: InputSignalWithTransform<D | null, unknown> = input(null, {\r\n    alias: 'realsoftTimepickerMax',\r\n    transform: (value: unknown) => this._convertDateInput<D>(value)\r\n  });\r\n\r\n  // Whether the input is disabled\r\n  readonly disabled: Signal<boolean> = computed(() => this.inputDisabledTemplate() || this._disabled());\r\n\r\n\r\n  // Whether the input shouldbe disabled through the template\r\n  readonly inputDisabledTemplate: InputSignalWithTransform<boolean, unknown> = input(false, {\r\n    transform: booleanAttribute,\r\n    alias: 'disabled'\r\n  });\r\n\r\n  // Current value of the input\r\n  readonly value: ModelSignal<D | null> = model<D | null>(null);\r\n\r\n  // Value of the aria-activedescendant attribute -> Returns the id of the currently active option in the timepicker panel\r\n  private readonly _activeAriaDescendant = computed(() => {\r\n    if(this.timepicker().isOpen && this.timepicker().activeDescendant()) {\r\n      return this.timepicker().activeDescendant();\r\n    } else {\r\n      return null;\r\n    }\r\n  });\r\n\r\n  // Value of the aria-expanded attribute -> To signal dropdown visibility.\r\n  private readonly _ariaExpanded = computed(() => this.timepicker().isOpen() + '');\r\n\r\n  // Value of the aria-controls attribute -> To point to the timepicker panel when it's open.\r\n  private readonly _ariaControls = computed(() => {\r\n    if (this.timepicker().isOpen()) {\r\n      return this.timepicker().panelId;\r\n    } else {\r\n      return null;\r\n    }\r\n  });\r\n\r\n  constructor() {\r\n    // Date Validation\r\n    validateAdapter(this._dateAdapter, this._dateFormats);\r\n\r\n    this._validator = this._getValidator();\r\n    this._watchForChanges();\r\n    this._handleMinMaxChanges();\r\n    this._registerTimepicker();\r\n\r\n    // Subscriptions\r\n    this._localeSubscription = this._dateAdapter.localeChanges.subscribe(() => {\r\n      if (!this._inputCurrentlyFocused()) {\r\n        this._formatInputValue(this.value());\r\n      }\r\n    });\r\n\r\n    this._cleanupClick = this._renderer.listen(this.getOverlayOrigin().nativeElement, 'click', this._handleClick)\r\n  }\r\n\r\n  // Function thatg converts any unknown input value into a valid date/time object.\r\n  private _convertDateInput<D>(value: unknown): D | null {\r\n    // Input Type Check \r\n    let date;\r\n    if(typeof value === 'string') {\r\n      date = this._dateAdapter.parseTime(value, this._dateFormats.parse.timeInput);\r\n    } else {\r\n      date = this._dateAdapter.deserialize(value);\r\n    }\r\n    return date && this._dateAdapter.isValid(date) ? (date as unknown as D) : null;\r\n  }\r\n\r\n  // Function that checks whether a value is valid\r\n  private _isValid(value: D | null): boolean {\r\n    return !value || this._dateAdapter.isValid(value)\r\n  }\r\n\r\n  // Function that gets the ID of the input's label\r\n  _getLabelId(): string | null {\r\n    return this._formField?.getLabelId() || null;\r\n  }\r\n\r\n  // Function that gets the element to which the timepicker popup should be attached\r\n  getOverlayOrigin(): ElementRef<HTMLElement> {\r\n    return this._formField?.getConnectedOverlayOrigin() || this._elementRef;\r\n  }\r\n\r\n  // Function for programmatically focusing the input\r\n  focus(): void {\r\n    this._elementRef.nativeElement.focus();\r\n  }\r\n\r\n  /** Handles clicks on the input or the containing form field. */\r\n  private _handleClick = (): void => {\r\n    if (!this.disabled()) {\r\n      this.timepicker().open();\r\n    }\r\n  };\r\n\r\n  // Function the input is currently focused or not\r\n  private _inputCurrentlyFocused(): boolean {\r\n    return _getFocusedElementPierceShadowDom() === this._elementRef.nativeElement;\r\n  }\r\n\r\n  // Function that formats the current value and assigns it to the input\r\n  private _formatInputValue(value: D | null): void {\r\n    value = this._dateAdapter.getValidDateOrNull(value);\r\n    if (value == null) {\r\n      this._elementRef.nativeElement.value = '';\r\n    } else {\r\n      this._elementRef.nativeElement.value = this._dateAdapter.format(value, this._dateFormats.display.timeInput);\r\n    }\r\n  }\r\n\r\n  // Function that builds and returns a composite ValidatorFn -> Used by Angular Forms to validate input\r\n  private _getValidator(): ValidatorFn {\r\n    // Create a composed validator built from multiple rules, where each rule is a function that returns null if valid, an error object if invalid\r\n    const validation = Validators.compose([\r\n      // Parser Validation\r\n      () => this._lastValueValid ? null : {'realsoftTimepickerParse': {'text': this._elementRef.nativeElement.value}},\r\n      // Minimum Time Validation\r\n      control => {\r\n        const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\r\n        if (!this.min() || !controlValue || this._dateAdapter.compareTime(this.min(), controlValue) <= 0) {\r\n          return null;\r\n        } else {\r\n          return {'realsoftTimepickerMin': {'min': this.min(), 'actual': controlValue}};\r\n        }\r\n      },\r\n      // Maximum time validation\r\n      control => {\r\n        const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\r\n        if(!this.max() || !controlValue || this._dateAdapter.compareTime(this.max(), controlValue) >= 0) {\r\n          return null;\r\n        } else {\r\n          return {'realsoftTimepickerMax': {'max': this.max(), 'actual': controlValue}}\r\n        }\r\n      }\r\n    ]);\r\n    return validation;\r\n  }\r\n\r\n  // Function that ensures that if the minimum or maximum time boundaries change, the input is re-validated by triggering the form validator to run again\r\n  private _handleMinMaxChanges(): void {\r\n    effect(() => {\r\n      this.min();\r\n      this.max();\r\n      this._validatorOnChange?.(); // Re-validates the input via Angular's ControlValueAccessor validator hook.\r\n    })\r\n  }\r\n\r\n  // Function that handles user-selected time values and updates the input model\r\n  private _handleUserSelection(selection: D | null, notifyAccessor: boolean) {\r\n    // If the selection is null or invalid, directly set it in the model\r\n    if(selection == null || !this._isValid(selection)) {\r\n      this.value.set(selection);\r\n    } else {\r\n      const adapter = this._dateAdapter;\r\n      const target = adapter.getValidDateOrNull(this._lastValidDate || this.value()); \r\n\r\n      // Extracting the time part from the new user selection\r\n      const hours = adapter.getHours(selection);\r\n      const minutes = adapter.getMinutes(selection);\r\n      const seconds = adapter.getSeconds(selection);\r\n      if(target) {\r\n        this.value.set(adapter.setTime(target, hours, minutes, seconds))\r\n      } else {\r\n        this.value.set(selection);\r\n      }\r\n    }\r\n\r\n    if (notifyAccessor) {\r\n      this._onChange?.(this.value());\r\n    }\r\n  }\r\n\r\n  // Function for handling the (input) event on the input -> For processing the user input in the timepicker input.\r\n  private _handleInput(value: any) {\r\n    // Get the initial value\r\n    const initialValue = this.value();\r\n\r\n    // Input Parsing\r\n    const parsedTime = this._dateAdapter.parseTime(value, this._dateFormats.parse.timeInput);\r\n\r\n    // Check if the parsed time is different from the current time\r\n    const timeChanged = !this._dateAdapter.sameTime(parsedTime, initialValue);\r\n\r\n    if (!parsedTime || timeChanged || !!(value && !initialValue)) {\r\n      // Update Model\r\n      this._handleUserSelection(parsedTime, true);\r\n    } else {\r\n      // Revalidate\r\n      this._validatorOnChange?.();\r\n    }\r\n  }\r\n\r\n  // Handle the blur event on the input\r\n  private _handleBlur() {\r\n    const value = this.value();\r\n\r\n    // Reformat\r\n    if (value && this._isValid(value)) {\r\n      this._formatInputValue(value);\r\n    }\r\n\r\n    if(!this.timepicker().isOpen()) {\r\n      this._onTouched?.();\r\n    }\r\n  }\r\n\r\n  // Handle the keydown Event \r\n  private _handleKeydown(event: KeyboardEvent) {\r\n    // Early Exit Guard -> If the input is disabled, or the timepicker is open then return, since all keyboard event are handled via the timepicker\r\n    if (this.timepicker().isOpen() || this.disabled()) {\r\n      return;\r\n    }\r\n    if (event.keyCode === ESCAPE && !hasModifierKey(event) && this.value() !== null) {\r\n      // Prevent Default Behavior + Clear entered value\r\n      event.preventDefault();\r\n      this.value.set(null);\r\n      this._formatInputValue(null);\r\n    } else if (event.keyCode === DOWN_ARROW || event.keyCode === UP_ARROW) {\r\n      event.preventDefault();\r\n      this.timepicker().open(); // Open the timepicker\r\n    }\r\n  }\r\n\r\n  // Register the input with the timepicker -> Reactively update the input value when the user picks a time from the panel\r\n  private _registerTimepicker(): void {\r\n    effect(() => {\r\n      // Register the current input instance (this) with the timepicker component\r\n      this.timepicker().registerInput(this);\r\n\r\n      // When the timepicker panel is closed, mark the input as touched (for Angular forms).\r\n      this.timepicker().closed.subscribe(() => this._onTouched?.());\r\n\r\n      // When the user picks a time in the panel\r\n      this.timepicker().selected.subscribe(({value}) => {\r\n        if (!this._dateAdapter.sameTime(value, this.value())) {\r\n          this._handleUserSelection(value, true); // Update the model \r\n          this._formatInputValue(value); // Format the value for display in the input \r\n        }\r\n      })\r\n    }, { allowSignalWrites: true });\r\n  }\r\n\r\n  // Function that acts as a manual change detector and watches for changes in the input's model value and reacts accordingly\r\n  private _watchForChanges(): void {\r\n    effect(() => {\r\n      const value = this._dateAdapter.deserialize(this.value());\r\n      const isPreviouslyValid = this._lastValueValid; // Cache the previous validity\r\n      this._lastValueValid = this._isValid(value);\r\n\r\n      // If the user didn't interact with the input and the value has changed then reformat\r\n      if(!this._inputCurrentlyFocused()) {\r\n        this._formatInputValue(value);\r\n      }\r\n\r\n      // If the new value is valid, store it as the “last known good” value.\r\n      if(value && this._lastValueValid) {\r\n        this._lastValidDate = value;\r\n      }\r\n\r\n      // If validity has changed (e.g., from valid to invalid or vice versa) -> Notify Angular Forms\r\n      if (isPreviouslyValid !== this._lastValueValid) {\r\n        this._validatorOnChange?.();\r\n      }\r\n    })\r\n  }\r\n\r\n  // Control Value Accessor Implementation\r\n  writeValue(value: any): void {\r\n    const deserializedInput = this._dateAdapter.deserialize(value);\r\n    this.value.set(this._dateAdapter.getValidDateOrNull(deserializedInput));\r\n  }\r\n\r\n  // Inform Angular Forms API about the change\r\n  registerOnChange(fn: (value: any) => void): void {\r\n    this._onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: () => void): void {\r\n    this._onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this._disabled.set(isDisabled);\r\n  }\r\n\r\n\r\n  // Validator Interface Implementation\r\n  validate(control: AbstractControl): ValidationErrors | null {\r\n    return this._validator(control);\r\n  }\r\n\r\n  registerOnValidatorChange(fn: () => void): void {\r\n    this._validatorOnChange = fn;\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._cleanupClick();\r\n    this._timepickerSubscriptions?.unsubscribe();\r\n    this._localeSubscription.unsubscribe();\r\n  }\r\n\r\n\r\n\r\n}\r\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, HostAttributeToken, inject, input, InputSignal, InputSignalWithTransform, ViewEncapsulation } from '@angular/core';\r\nimport { REALSOFT_TIMEPICKER_CONFIG } from './helpers';\r\nimport { RealsoftTimepicker } from './timepicker';\r\n\r\n\r\n// Button that can be used to open a realsoft-timepicker\r\n@Component({\r\n    selector: 'realsoft-timepicker-toggle',\r\n    templateUrl: 'timepicker-toggle.html',\r\n    exportAs: 'realsoftTimepickerToggle',\r\n    encapsulation: ViewEncapsulation.None,\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    standalone: true,\r\n    host: {\r\n        'class': 'realsoft-timepicker-toggle',\r\n        '[attr.tabindex]': 'null',\r\n        '(click)': 'openTimepicker($event)'\r\n    }\r\n})\r\nexport class RealsoftTimepickerToggle<D> {\r\n    // Class Properties and bindings\r\n\r\n    // Immediately invoked function expression\r\n    private _defaultTabIndex = (() => {\r\n        const value = inject(new HostAttributeToken('tabindex'), { optional: true });\r\n        const parsed = Number(value);\r\n        return isNaN(parsed) ? null : parsed;\r\n    })();\r\n\r\n    // Screen reader label for the button\r\n    readonly ariaLabel = input<string | undefined>(undefined, {alias: 'aria-label'});\r\n\r\n    // Screen reader labelledb by id for the button\r\n    readonly ariaLabelledby = input<string | undefined>(undefined, {alias: 'aria-labelledby'});\r\n\r\n    // Whether the toggle button is disabled\r\n    readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, {\r\n        transform: booleanAttribute,\r\n        alias: 'disabled'\r\n    });\r\n\r\n    // Timepicker instance that the button will toggle\r\n    readonly timepicker: InputSignal<RealsoftTimepicker<D>> = input.required<RealsoftTimepicker<D>>({\r\n        alias: 'for'\r\n    });\r\n\r\n    // Default aria-label for the toggle if none is provided\r\n    private readonly _defaultAriaLabel = 'Open timepicker options';\r\n\r\n    // Tabindex for the toggle\r\n    readonly tabIndex: InputSignal<number | null> = input(this._defaultTabIndex);\r\n\r\n    private _defaultConfig = inject(REALSOFT_TIMEPICKER_CONFIG, {optional: true});\r\n\r\n    protected isDisabled = computed(() => {\r\n        return this.disabled() || this.timepicker().disabled();\r\n    });\r\n\r\n    // Open the timepicker \r\n    protected openTimepicker(event: Event): void {\r\n        if (this.timepicker() && !this.isDisabled()) {\r\n            this.timepicker().open();\r\n            event.stopPropagation();\r\n        }\r\n    }\r\n\r\n    // Method that checks for ariaLabelledby and if empty uses custom aria-label or defaultAriaLabel if neither is provided\r\n    getAriaLabel(): string | null {\r\n        return this.ariaLabelledby() ? this.ariaLabelledby()  : this.ariaLabel() || this._defaultAriaLabel;\r\n    }\r\n}\r\n\r\n\r\n","<button\r\n  type=\"button\"\r\n  aria-haspopup=\"listbox\"\r\n  [attr.aria-label]=\"getAriaLabel()\"\r\n  [attr.aria-labelledby]=\"ariaLabelledby()\"\r\n  [attr.aria-expanded]=\"timepicker().isOpen()\"\r\n  [tabIndex]=\"isDisabled() ? -1 : tabIndex()\"\r\n  [disabled]=\"isDisabled()\"\r\n  class=\"realsoft-timepicker-toggle-button\"\r\n  >\r\n\r\n  <ng-content select=\"[realsoftTimepickerToggleIcon]\">\r\n    <svg\r\n      class=\"realsoft-timepicker-toggle-default-icon\"\r\n      height=\"24px\"\r\n      width=\"24px\"\r\n      viewBox=\"0 -960 960 960\"\r\n      fill=\"currentColor\"\r\n      focusable=\"false\"\r\n      aria-hidden=\"true\">\r\n      <path d=\"m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 320q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Z\"/>\r\n    </svg>\r\n  </ng-content>\r\n</button>","import { Directive, ElementRef, inject } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: 'realsoft-breadcrumb-item',\r\n  standalone: true,\r\n})\r\nexport class RealsoftBreadCrumbItem {\r\n  el = inject(ElementRef);\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n  Component,\r\n  contentChildren,\r\n  inject,\r\n  input,\r\n  output,\r\n} from '@angular/core';\r\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\r\n\r\nimport { RealsoftMenu } from '../menu/menu';\r\nimport { RealsoftMenuContent } from '../menu/menu-content';\r\nimport { RealsoftMenuItem } from '../menu/menu-item';\r\nimport { RealsoftMenuTrigger } from '../menu/menu-trigger';\r\nimport { RealsoftBreadCrumbItem } from './breadcrumb-item.directive';\r\nimport { RealsoftBreadcrumbSelected } from './breadcrumb.interface';\r\n\r\n@Component({\r\n  selector: 'realsoft-breadcrumb',\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule,\r\n    RouterModule,\r\n    RealsoftMenuContent,\r\n    RealsoftMenu,\r\n    RealsoftMenuTrigger,\r\n    RealsoftMenuItem,\r\n  ],\r\n  templateUrl: './breadcrumb.component.html',\r\n  styleUrl: './breadcrumb.component.scss',\r\n})\r\nexport class RealsoftBreadCrumbComponent {\r\n  activatedRoute = inject(ActivatedRoute);\r\n  router = inject(Router);\r\n  items = contentChildren(RealsoftBreadCrumbItem, { descendants: true });\r\n\r\n  maxItems = input(4);\r\n  ellipsis = input(false);\r\n\r\n  breadcrumbSelected = output<RealsoftBreadcrumbSelected>();\r\n\r\n  onItemClick(text: string, index: number) {\r\n    this.breadcrumbSelected.emit({ text, index });\r\n  }\r\n}\r\n","<nav class=\"breadcrumb\">\r\n  <div class=\"breadcrumb__section\">\r\n    @if (items().length > maxItems() && ellipsis()) {\r\n    <!-- Ellipsis mode: show first, second-to-last, and last items -->\r\n    @for (item of items(); track item; let index = $index; let first =\r\n    $first;let last = $last) { @if (first || index === items().length - 2 ||\r\n    last) {\r\n    <span\r\n      (click)=\"onItemClick(item.el.nativeElement.textContent, index)\"\r\n      class=\"breadcrumb__item\"\r\n      [class.breadcrumb__item--disabled]=\"last\"\r\n    >\r\n      {{ item.el.nativeElement.innerText }}\r\n    </span>\r\n    @if (!last) {\r\n    <span class=\"breadcrumb__separator\">›</span>\r\n    } } @else if (index === 1) {\r\n    <!-- Show ellipsis after first item -->\r\n    <span\r\n      class=\"breadcrumb__ellipsis\"\r\n      [realsoftMenuTriggerFor]=\"ellipsisMenu\"\r\n      [realsoftMenuTriggerData]=\"{\r\n        crumbs: items() | slice : 1 : items().length - 2\r\n      }\"\r\n    >\r\n      …\r\n    </span>\r\n    <span class=\"breadcrumb__separator\">›</span>\r\n    } } } @else {\r\n    <!-- Normal mode: show all items -->\r\n    @for (item of items(); track item; let last = $last) {\r\n    <span class=\"breadcrumb__item\" [class.breadcrumb__item--disabled]=\"last\">\r\n      {{ item.el.nativeElement.textContent }}\r\n    </span>\r\n    @if (!last) {\r\n    <span class=\"breadcrumb__separator\">›</span>\r\n    } } }\r\n  </div>\r\n</nav>\r\n<realsoft-menu #ellipsisMenu>\r\n  <ng-template realsoftMenuContent let-crumbs=\"crumbs\">\r\n    @for (crumb of crumbs || []; track crumb; let index = $index) {\r\n    <p\r\n      realsoft-menu-item\r\n      (click)=\"onItemClick(crumb.el.nativeElement.textContent, index + 1)\"\r\n    >\r\n      {{ crumb.el.nativeElement.textContent }}\r\n    </p>\r\n    }\r\n  </ng-template>\r\n</realsoft-menu>\r\n","//Form Field Exports\r\nexport * from './form-field/directives/error';\r\nexport * from './form-field/directives/floating-label';\r\nexport * from './form-field/directives/form-field-control';\r\nexport * from './form-field/directives/hint';\r\nexport * from './form-field/directives/label';\r\nexport * from './form-field/directives/line-ripple';\r\nexport * from './form-field/directives/notched-outline';\r\nexport * from './form-field/directives/prefix';\r\nexport * from './form-field/directives/suffix';\r\nexport * from './form-field/form-field';\r\nexport * from './form-field/form-field-animations';\r\nexport * from './form-field/form-field-errors';\r\nexport * from './form-field/models';\r\n\r\n//Option Exports\r\nexport * from './option/models';\r\nexport * from './option/option';\r\n\r\n//Option Group Exports\r\nexport * from './option-group/option-group';\r\n\r\n//Pseudo Checkbox Exports\r\nexport * from './pseudo-checkbox/pseudo-checkbox';\r\n\r\n//Select Exports\r\nexport * from './select/error-state-matcher';\r\nexport * from './select/models';\r\nexport * from './select/select';\r\nexport * from './select/select-animation';\r\n\r\n//Paginator\r\nexport * from './paginator/paginator';\r\nexport * from './paginator/paginator-config';\r\nexport * from './paginator/paginator-intl';\r\n\r\n//Button Toggle\r\nexport * from './button-toggle/button-toggle';\r\nexport * from './button-toggle/button-toggle-group';\r\nexport * from './button-toggle/config';\r\nexport * from './button-toggle/errors';\r\n\r\n//Input\r\nexport * from './input/helpers';\r\nexport * from './input/input';\r\n\r\n//slide Toggle\r\nexport * from './slide-toggle/config';\r\nexport * from './slide-toggle/slide-toggle';\r\n\r\n//Radio Button\r\nexport * from './radio/radio-button';\r\nexport * from './radio/radio-group';\r\n\r\n//Sort\r\nexport * from './sort/alphabetical-sort.directive';\r\nexport * from './sort/date-sort';\r\nexport * from './sort/errors';\r\nexport * from './sort/models';\r\nexport * from './sort/numeric-sort.directive';\r\nexport * from './sort/sort';\r\nexport * from './sort/sort-header';\r\n\r\n// Table imports\r\nexport * from './table/cell';\r\nexport * from './table/cell-def';\r\nexport * from './table/row';\r\nexport * from './table/row-def';\r\nexport * from './table/table';\r\nexport * from './table/table-data-source';\r\n\r\n// Menu Imports\r\nexport * from './menu/errors';\r\nexport * from './menu/menu';\r\nexport * from './menu/menu-content';\r\nexport * from './menu/menu-item';\r\nexport * from './menu/menu-trigger';\r\nexport * from './menu/models';\r\n\r\n// Tabs Imports\r\nexport * from './tabs/ink-bar';\r\nexport * from './tabs/tab';\r\nexport * from './tabs/tab-body';\r\nexport * from './tabs/tab-config';\r\nexport * from './tabs/tab-content';\r\nexport * from './tabs/tab-group';\r\nexport * from './tabs/tab-header';\r\nexport * from './tabs/tab-label';\r\nexport * from './tabs/tab-label-wrapper';\r\n\r\n// Slider Imports\r\nexport * from './slider/models';\r\nexport * from './slider/slider';\r\nexport * from './slider/slider-input';\r\nexport * from './slider/slider-thumb';\r\n\r\n// Chips Exports\r\nexport * from './chips/chip';\r\nexport * from './chips/chip-avatar';\r\nexport * from './chips/chip-edit-input';\r\nexport * from './chips/chip-grid';\r\nexport * from './chips/chip-input';\r\nexport * from './chips/chip-listbox';\r\nexport * from './chips/chip-option';\r\nexport * from './chips/chip-row';\r\nexport * from './chips/chip-set';\r\nexport * from './chips/models';\r\n\r\n// Datepicker Exports\r\nexport * from './datepicker/base';\r\nexport * from './datepicker/calendar';\r\nexport * from './datepicker/calendar-body';\r\nexport * from './datepicker/calendar-header';\r\nexport * from './datepicker/date-range-picker';\r\nexport * from './datepicker/datepicker-actions';\r\nexport * from './datepicker/datepicker-base';\r\nexport * from './datepicker/datepicker-content';\r\nexport * from './datepicker/datepicker-end-date';\r\nexport * from './datepicker/datepicker-input';\r\nexport * from './datepicker/datepicker-intl';\r\nexport * from './datepicker/datepicker-month-view';\r\nexport * from './datepicker/datepicker-multi-year-view';\r\nexport * from './datepicker/datepicker-range-input';\r\nexport * from './datepicker/datepicker-range-input-base';\r\nexport * from './datepicker/datepicker-start-date';\r\nexport * from './datepicker/datepicker-toggle';\r\nexport * from './datepicker/datepicker-year-view';\r\nexport * from './datepicker/models';\r\nexport * from './datepicker/services/default-range-selection-strategy';\r\nexport * from './datepicker/shared/date-adapter';\r\nexport * from './datepicker/shared/datepicker-errors';\r\nexport * from './datepicker/shared/moment-date-adapter';\r\nexport * from './datepicker/shared/native-date-adapter';\r\n\r\n// Timepicker Exports\r\nexport * from './timepicker/helpers';\r\nexport * from './timepicker/timepicker';\r\nexport * from './timepicker/timepicker-input';\r\nexport * from './timepicker/timepicker-toggle';\r\n\r\n// Breadcrumb Exports\r\nexport * from './breadcrumb/breadcrumb-item.directive';\r\nexport * from './breadcrumb/breadcrumb.component';\r\nexport * from './breadcrumb/breadcrumb.interface';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["REALSOFT_OPTION_CONFIG","ErrorStateMatcher","ErrorState","observableOf","startWith","switchMap","takeUntil","_rollupMoment","_moment","range","DateAdapter","uniqueIdCounter","i1.DateAdapter"],"mappings":"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"}