{"version":3,"file":"igniteui-angular-directives.mjs","sources":["../../../projects/igniteui-angular/directives/src/directives/button/button-base.ts","../../../projects/igniteui-angular/directives/src/directives/button/button.directive.ts","../../../projects/igniteui-angular/directives/src/directives/checkbox/checkbox-base.directive.ts","../../../projects/igniteui-angular/directives/src/directives/divider/divider.directive.ts","../../../projects/igniteui-angular/directives/src/directives/drag-drop/drag-drop.strategy.ts","../../../projects/igniteui-angular/directives/src/directives/drag-drop/drag-drop.directive.ts","../../../projects/igniteui-angular/directives/src/directives/drag-drop/public_api.ts","../../../projects/igniteui-angular/directives/src/directives/filter/filter.directive.ts","../../../projects/igniteui-angular/directives/src/directives/focus/focus.directive.ts","../../../projects/igniteui-angular/directives/src/directives/focus-trap/focus-trap.directive.ts","../../../projects/igniteui-angular/directives/src/directives/scroll-inertia/scroll_inertia.directive.ts","../../../projects/igniteui-angular/directives/src/directives/for-of/display.container.ts","../../../projects/igniteui-angular/directives/src/directives/for-of/base.helper.component.ts","../../../projects/igniteui-angular/directives/src/directives/for-of/horizontal.virtual.helper.component.ts","../../../projects/igniteui-angular/directives/src/directives/for-of/virtual.helper.component.ts","../../../projects/igniteui-angular/directives/src/directives/for-of/for_of.sync.service.ts","../../../projects/igniteui-angular/directives/src/directives/for-of/for_of.directive.ts","../../../projects/igniteui-angular/directives/src/directives/button/icon-button.directive.ts","../../../projects/igniteui-angular/directives/src/directives/layout/layout.directive.ts","../../../projects/igniteui-angular/directives/src/directives/mask/mask-parsing.service.ts","../../../projects/igniteui-angular/directives/src/directives/mask/mask.directive.ts","../../../projects/igniteui-angular/directives/src/directives/ripple/ripple.directive.ts","../../../projects/igniteui-angular/directives/src/directives/size/ig-size.directive.ts","../../../projects/igniteui-angular/directives/src/directives/text-highlight/text-highlight.service.ts","../../../projects/igniteui-angular/directives/src/directives/text-highlight/text-highlight.directive.ts","../../../projects/igniteui-angular/directives/src/directives/text-selection/text-selection.directive.ts","../../../projects/igniteui-angular/directives/src/directives/template-outlet/template_outlet.directive.ts","../../../projects/igniteui-angular/directives/src/directives/toggle/toggle.directive.ts","../../../projects/igniteui-angular/directives/src/directives/tooltip/tooltip.directive.ts","../../../projects/igniteui-angular/directives/src/directives/tooltip/tooltip.component.ts","../../../projects/igniteui-angular/directives/src/directives/tooltip/tooltip.component.html","../../../projects/igniteui-angular/directives/src/directives/tooltip/tooltip-close-button.component.ts","../../../projects/igniteui-angular/directives/src/directives/tooltip/tooltip.common.ts","../../../projects/igniteui-angular/directives/src/directives/tooltip/tooltip-target.directive.ts","../../../projects/igniteui-angular/directives/src/directives/tooltip/public_api.ts","../../../projects/igniteui-angular/directives/src/directives/date-time-editor/date-time-editor.directive.ts","../../../projects/igniteui-angular/directives/src/directives/form-control/form-control.directive.ts","../../../projects/igniteui-angular/directives/src/directives/notification/notifications.directive.ts","../../../projects/igniteui-angular/directives/src/directives/button/button.module.ts","../../../projects/igniteui-angular/directives/src/directives/date-time-editor/date-time-editor.module.ts","../../../projects/igniteui-angular/directives/src/directives/divider/divider.module.ts","../../../projects/igniteui-angular/directives/src/directives/drag-drop/drag-drop.module.ts","../../../projects/igniteui-angular/directives/src/directives/filter/filter.module.ts","../../../projects/igniteui-angular/directives/src/directives/focus/focus.module.ts","../../../projects/igniteui-angular/directives/src/directives/focus-trap/focus-trap.module.ts","../../../projects/igniteui-angular/directives/src/directives/for-of/for_of.module.ts","../../../projects/igniteui-angular/directives/src/directives/form-control/form-control.module.ts","../../../projects/igniteui-angular/directives/src/directives/layout/layout.module.ts","../../../projects/igniteui-angular/directives/src/directives/mask/mask.module.ts","../../../projects/igniteui-angular/directives/src/directives/ripple/ripple.module.ts","../../../projects/igniteui-angular/directives/src/directives/scroll-inertia/scroll_inertia.module.ts","../../../projects/igniteui-angular/directives/src/directives/text-highlight/text-highlight.module.ts","../../../projects/igniteui-angular/directives/src/directives/text-selection/text-selection.module.ts","../../../projects/igniteui-angular/directives/src/directives/toggle/toggle.module.ts","../../../projects/igniteui-angular/directives/src/directives/tooltip/tooltip.module.ts","../../../projects/igniteui-angular/directives/src/public_api.ts","../../../projects/igniteui-angular/directives/src/igniteui-angular-directives.ts"],"sourcesContent":["import {\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Input,\n    Output,\n    booleanAttribute,\n    inject,\n    AfterViewInit,\n    OnDestroy\n} from '@angular/core';\nimport { PlatformUtil } from 'igniteui-angular/core';\nimport { animationFrameScheduler, Subscription } from 'rxjs';\n\nexport const IgxBaseButtonType = {\n    Flat: 'flat',\n    Contained: 'contained',\n    Outlined: 'outlined'\n} as const;\n\n\n@Directive()\nexport abstract class IgxButtonBaseDirective implements AfterViewInit, OnDestroy {\n    private _platformUtil = inject(PlatformUtil);\n    public element = inject(ElementRef);\n    private _viewInit = false;\n    private _animationScheduler: Subscription;\n\n    /**\n     * Emitted when the button is clicked.\n     */\n    @Output()\n    public buttonClick = new EventEmitter<any>();\n\n    /**\n     * Sets/gets the `role` attribute.\n     *\n     * @example\n     * ```typescript\n     * this.button.role = 'navbutton';\n     * let buttonRole = this.button.role;\n     * ```\n     */\n    @HostBinding('attr.role')\n    public role = 'button';\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('click', ['$event'])\n    public onClick(ev: MouseEvent) {\n        this.buttonClick.emit(ev);\n        this.focused = false;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('blur')\n    protected onBlur() {\n        this.focused = false;\n    }\n\n    /**\n     * Sets/gets whether the button component is on focus.\n     * Default value is `false`.\n     * ```typescript\n     * this.button.focus = true;\n     * ```\n     * ```typescript\n     * let isFocused =  this.button.focused;\n     * ```\n     */\n    @HostBinding('class.igx-button--focused')\n    protected focused = false;\n\n    /**\n      * Enables/disables the button.\n      *\n      * @example\n      * ```html\n      * <button igxButton=\"fab\" disabled></button>\n      * ```\n      */\n    @Input({ transform: booleanAttribute })\n    @HostBinding('class.igx-button--disabled')\n    public disabled = false;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('attr.disabled')\n    public get disabledAttribute() {\n        return this.disabled || null;\n    }\n\n    protected constructor() {\n        // In browser, set via native API for immediate effect (no-op on server).\n        // In SSR there is no paint, so there’s no visual rendering or transitions to suppress.\n        // Fix style flickering https://github.com/IgniteUI/igniteui-angular/issues/14759\n        if (this._platformUtil.isBrowser) {\n            this.element.nativeElement.style.setProperty('--_init-transition', '0s');\n            this.element.nativeElement.style.setProperty('transition', 'none');\n        }\n    }\n\n    public ngAfterViewInit(): void {\n        if (this._platformUtil.isBrowser && !this._viewInit) {\n            this._viewInit = true;\n\n            this._animationScheduler = animationFrameScheduler.schedule(() => {\n                this.element.nativeElement.style.removeProperty('--_init-transition');\n                this.element.nativeElement.style.setProperty('transition', 'var(--_button-transition)');\n            });\n        }\n    }\n\n    public ngOnDestroy(): void {\n        if (this._animationScheduler) {\n            this._animationScheduler.unsubscribe();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('keyup', ['$event'])\n    protected updateOnKeyUp(event: KeyboardEvent) {\n        if (event.key === \"Tab\") {\n            this.focused = true;\n        }\n    }\n\n    /**\n     * Returns the underlying DOM element.\n     */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n}\n","import {\n    Directive,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Input,\n    Output,\n    Renderer2,\n    booleanAttribute,\n    inject\n} from '@angular/core';\nimport { IBaseEventArgs } from 'igniteui-angular/core';\nimport { IgxBaseButtonType, IgxButtonBaseDirective } from './button-base';\n\nconst IgxButtonType = {\n    ...IgxBaseButtonType,\n    FAB: 'fab'\n} as const;\n\n/**\n * Determines the Button type.\n */\nexport type IgxButtonType = typeof IgxButtonType[keyof typeof IgxButtonType];\n\n/**\n * The Button directive provides the Ignite UI Button functionality to every component that's intended to be used as a button.\n *\n * @igxModule IgxButtonModule\n *\n * @igxParent Data Entry & Display\n *\n * @igxTheme igx-button-theme\n *\n * @igxKeywords button, span, div, click\n *\n * @remarks\n * The Ignite UI Button directive is intended to be used by any button, span or div and turn it into a fully functional button.\n *\n * @example\n * ```html\n * <button type=\"button\" igxButton=\"outlined\">A Button</button>\n * ```\n */\n@Directive({\n    selector: '[igxButton]',\n    standalone: true\n})\nexport class IgxButtonDirective extends IgxButtonBaseDirective {\n    private _renderer = inject(Renderer2);\n\n    private static ngAcceptInputType_type: IgxButtonType | '';\n\n    /**\n     * Called when the button is selected.\n     */\n    @Output()\n    public buttonSelected = new EventEmitter<IButtonEventArgs>();\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-button')\n    public _cssClass = 'igx-button';\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _type: IgxButtonType;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _color: string;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _label: string;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _backgroundColor: string;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _selected = false;\n\n    @HostListener('click')\n    protected emitSelected() {\n        this.buttonSelected.emit({\n            button: this\n        });\n    }\n\n    /**\n     * Gets or sets whether the button is selected.\n     * Mainly used in the IgxButtonGroup component and it will have no effect if set separately.\n     *\n     * @example\n     * ```html\n     * <button type=\"button\" igxButton=\"flat\" [selected]=\"button.selected\"></button>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public set selected(value: boolean) {\n        if (this._selected !== value) {\n            this._selected = value;\n            this._renderer.setAttribute(this.nativeElement, 'data-selected', value.toString());\n        }\n    }\n\n    public get selected(): boolean {\n        return this._selected;\n    }\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Sets the type of the button.\n     *\n     * @example\n     * ```html\n     * <button type=\"button\" igxButton=\"outlined\"></button>\n     * ```\n     */\n    @Input('igxButton')\n    public set type(type: IgxButtonType) {\n        const t = type ? type : IgxButtonType.Flat;\n        if (this._type !== t) {\n            this._type = t;\n        }\n    }\n\n    /**\n     * Sets the `aria-label` attribute.\n     *\n     * @example\n     *  ```html\n     * <button type=\"button\" igxButton=\"flat\" igxLabel=\"Label\"></button>\n     * ```\n     */\n    @Input('igxLabel')\n    public set label(value: string) {\n        this._label = value || this._label;\n        this._renderer.setAttribute(this.nativeElement, 'aria-label', this._label);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-button--flat')\n    public get flat(): boolean {\n        return this._type === IgxButtonType.Flat;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-button--contained')\n    public get contained(): boolean {\n        return this._type === IgxButtonType.Contained;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-button--outlined')\n    public get outlined(): boolean {\n        return this._type === IgxButtonType.Outlined;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-button--fab')\n    public get fab(): boolean {\n        return this._type === IgxButtonType.FAB;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public select() {\n        this.selected = true;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public deselect() {\n        this.selected = false;\n        this.focused = false;\n    }\n}\n\nexport interface IButtonEventArgs extends IBaseEventArgs {\n    button: IgxButtonDirective;\n}\n","import { Directive, EventEmitter, HostListener, HostBinding, Input, Output, ViewChild, ElementRef, ChangeDetectorRef, booleanAttribute, inject, DestroyRef, AfterViewInit } from '@angular/core';\nimport { NgControl, Validators } from '@angular/forms';\nimport { IBaseEventArgs, getComponentTheme } from 'igniteui-angular/core';\nimport { noop, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n    IgxTheme,\n    THEME_TOKEN,\n    ThemeToken,\n} from 'igniteui-angular/core';\n\nexport const LabelPosition = {\n    BEFORE: 'before',\n    AFTER: 'after'\n} as const;\nexport type LabelPosition = typeof LabelPosition[keyof typeof LabelPosition];\n\nexport interface IChangeCheckboxEventArgs extends IBaseEventArgs {\n    checked: boolean;\n    value?: any;\n}\n\nlet nextId = 0;\n\n@Directive()\nexport class CheckboxBaseDirective implements AfterViewInit {\n    protected cdr = inject(ChangeDetectorRef);\n    protected themeToken = inject<ThemeToken>(THEME_TOKEN);\n    public ngControl = inject(NgControl, { optional: true, self: true });\n\n    /**\n     * An event that is emitted after the checkbox state is changed.\n     * Provides references to the `IgxCheckboxComponent` and the `checked` property as event arguments.\n     */\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    @Output() public readonly change: EventEmitter<IChangeCheckboxEventArgs> =\n        new EventEmitter<IChangeCheckboxEventArgs>();\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public destroy$ = new Subject<boolean>();\n\n    /**\n     * Returns reference to the native checkbox element.\n     *\n     * @example\n     * ```typescript\n     * let checkboxElement =  this.component.checkboxElement;\n     * ```\n     */\n    @ViewChild('checkbox', { static: true })\n    public nativeInput: ElementRef;\n\n    /**\n     * Returns reference to the native label element.\n     * ```typescript\n     *\n     * @example\n     * let labelElement =  this.component.nativeLabel;\n     * ```\n     */\n    @ViewChild('label', { static: true })\n    public nativeLabel: ElementRef;\n\n    public cssClass: string;\n    public disabled: boolean;\n    public readonly: boolean;\n    public indeterminate: boolean;\n    public focused: boolean;\n    public invalid: boolean;\n\n    @Input({ transform: booleanAttribute })\n    public get checked() {\n        return this._checked;\n    }\n\n    public set checked(value: boolean) {\n        if (this._checked !== value) {\n            this._checked = value;\n            this._onChangeCallback(this._checked);\n        }\n    }\n\n    /**\n     * Returns reference to the `nativeElement` of the igx-checkbox/igx-switch.\n     *\n     * @example\n     * ```typescript\n     * let nativeElement = this.component.nativeElement;\n     * ```\n     */\n    public get nativeElement() {\n        return this.nativeInput.nativeElement;\n    }\n\n    /**\n     * Returns reference to the label placeholder element.\n     * ```typescript\n     *\n     * @example\n     * let labelPlaceholder =  this.component.placeholderLabel;\n     * ```\n     */\n    @ViewChild('placeholderLabel', { static: true })\n    public placeholderLabel: ElementRef;\n\n    /**\n     * Sets/gets the `id` of the checkbox component.\n     * If not set, the `id` of the first checkbox component will be `\"igx-checkbox-0\"`.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox id=\"my-first-checkbox\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let checkboxId =  this.checkbox.id;\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-checkbox-${nextId++}`;\n\n    /**\n     * Sets/gets the id of the `label` element.\n     * If not set, the id of the `label` in the first checkbox component will be `\"igx-checkbox-0-label\"`.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox labelId=\"Label1\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let labelId =  this.component.labelId;\n     * ```\n     */\n    @Input() public labelId = `${this.id}-label`;\n\n    /**\n     * Sets/gets the `value` attribute.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox [value]=\"'CheckboxValue'\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let value =  this.checkbox.value;\n     * ```\n     */\n    @Input() public value: any;\n\n    /**\n     * Sets/gets the `name` attribute.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox name=\"Checkbox1\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let name =  this.checkbox.name;\n     * ```\n     */\n    @Input() public name: string;\n\n    /**\n     * Sets/gets the value of the `tabindex` attribute.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox [tabindex]=\"1\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let tabIndex =  this.checkbox.tabindex;\n     * ```\n     */\n    @Input() public tabindex: number = null;\n\n    /**\n     *  Sets/gets the position of the `label`.\n     *  If not set, the `labelPosition` will have value `\"after\"`.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox labelPosition=\"before\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let labelPosition =  this.checkbox.labelPosition;\n     * ```\n     */\n    @Input()\n    public labelPosition: LabelPosition | string = LabelPosition.AFTER;\n\n    /**\n     * Enables/Disables the ripple effect.\n     * If not set, `disableRipple` will have value `false`.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox [disableRipple]=\"true\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let isRippleDisabled = this.checkbox.desableRipple;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public disableRipple = false;\n\n    /**\n     * Sets/gets the `aria-labelledby` attribute.\n     * If not set, the `aria-labelledby` will be equal to the value of `labelId` attribute.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox aria-labelledby=\"Checkbox1\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let ariaLabelledBy = this.checkbox.ariaLabelledBy;\n     * ```\n     */\n    @Input('aria-labelledby')\n    public ariaLabelledBy = this.labelId;\n\n    /**\n     * Sets/gets the value of the `aria-label` attribute.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox aria-label=\"Checkbox1\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let ariaLabel = this.checkbox.ariaLabel;\n     * ```\n     */\n    @Input('aria-label')\n    public ariaLabel: string | null = null;\n\n    constructor() {\n        if (this.ngControl !== null) {\n            this.ngControl.valueAccessor = this;\n        }\n\n        this.theme = this.themeToken.theme;\n\n        const themeChange = this.themeToken.onChange((theme) => {\n            if (this.theme !== theme) {\n                this.theme = theme;\n                this.cdr.detectChanges();\n            }\n        });\n\n        this.destroyRef.onDestroy(() => themeChange.unsubscribe());\n    }\n\n    /**\n     * Sets/gets whether the checkbox is required.\n     * If not set, `required` will have value `false`.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox required></igx-checkbox>\n     * ```\n     * ```typescript\n     * let isRequired = this.checkbox.required;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get required(): boolean {\n        return this._required || this.nativeElement.hasAttribute('required');\n    }\n    public set required(value: boolean) {\n        if (!value) {\n            this.nativeElement.removeAttribute('required');\n        }\n        this._required = value;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngAfterViewInit() {\n        if (this.ngControl) {\n            this.ngControl.statusChanges\n                .pipe(takeUntil(this.destroy$))\n                .subscribe(this.updateValidityState.bind(this));\n\n            if (\n                this.ngControl.control.validator ||\n                this.ngControl.control.asyncValidator\n            ) {\n                this._required = this.ngControl?.control?.hasValidator(\n                    Validators.required\n                );\n                this.cdr.detectChanges();\n            }\n        }\n\n        this.setComponentTheme();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public inputId = `${this.id}-input`;\n\n    /**\n     * @hidden\n     */\n    protected _onChangeCallback: (_: any) => void = noop;\n\n    /**\n     * @hidden\n     */\n    private _onTouchedCallback: () => void = noop;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected _checked = false;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected theme: IgxTheme;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public _required = false;\n    private elRef = inject(ElementRef);\n    protected destroyRef = inject(DestroyRef);\n\n    private setComponentTheme() {\n        if (!this.themeToken.preferToken) {\n            const theme = getComponentTheme(this.elRef.nativeElement);\n\n            if (theme && theme !== this.theme) {\n                this.theme = theme;\n                this.cdr.markForCheck();\n            }\n        }\n    }\n\n    /** @hidden @internal */\n    @HostListener('keyup', ['$event'])\n    public onKeyUp(event: KeyboardEvent) {\n        event.stopPropagation();\n        this.focused = true;\n    }\n\n    /** @hidden @internal */\n    @HostListener('click', ['$event'])\n    public _onCheckboxClick(event: PointerEvent | MouseEvent) {\n        // Since the original checkbox is hidden and the label\n        // is used for styling and to change the checked state of the checkbox,\n        // we need to prevent the checkbox click event from bubbling up\n        // as it gets triggered on label click\n        // NOTE: The above is no longer valid, as the native checkbox is not labeled\n        // by the SVG anymore.\n        if (this.disabled || this.readonly) {\n            // readonly prevents the component from changing state (see toggle() method).\n            // However, the native checkbox can still be activated through user interaction (focus + space, label click)\n            // Prevent the native change so the input remains in sync\n            event.preventDefault();\n            return;\n        }\n\n        this.nativeElement.focus();\n\n        this.indeterminate = false;\n        this.checked = !this.checked;\n        this.updateValidityState();\n\n        // K.D. March 23, 2021 Emitting on click and not on the setter because otherwise every component\n        // bound on change would have to perform self checks for weather the value has changed because\n        // of the initial set on initialization\n        this.change.emit({\n            checked: this.checked,\n            value: this.value,\n            owner: this,\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get ariaChecked() {\n        if (this.indeterminate) {\n            return 'mixed';\n        } else {\n            return this.checked;\n        }\n    }\n\n    /** @hidden @internal */\n    public _onCheckboxChange(event: Event) {\n        // We have to stop the original checkbox change event\n        // from bubbling up since we emit our own change event\n        event.stopPropagation();\n    }\n\n    /** @hidden @internal */\n    @HostListener('blur')\n    public onBlur() {\n        this.focused = false;\n        this._onTouchedCallback();\n        this.updateValidityState();\n    }\n\n    /** @hidden @internal */\n    public writeValue(value: boolean) {\n        this._checked = value;\n    }\n\n    /** @hidden @internal */\n    public get labelClass(): string {\n        switch (this.labelPosition) {\n            case LabelPosition.BEFORE:\n                return `${this.cssClass}__label--before`;\n            case LabelPosition.AFTER:\n            default:\n                return `${this.cssClass}__label`;\n        }\n    }\n\n    /** @hidden @internal */\n    public registerOnChange(fn: (_: any) => void) {\n        this._onChangeCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public registerOnTouched(fn: () => void) {\n        this._onTouchedCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public setDisabledState(isDisabled: boolean) {\n        this.disabled = isDisabled;\n    }\n\n    /** @hidden @internal */\n    public getEditElement() {\n        return this.nativeInput.nativeElement;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected updateValidityState() {\n        if (this.ngControl) {\n            if (\n                !this.disabled &&\n                !this.readonly &&\n                (this.ngControl.control.touched || this.ngControl.control.dirty)\n            ) {\n                // the control is not disabled and is touched or dirty\n                this.invalid = this.ngControl.invalid;\n            } else {\n                //  if the control is untouched, pristine, or disabled, its state is initial. This is when the user did not interact\n                //  with the checkbox or when the form/control is reset\n                this.invalid = false;\n            }\n        } else {\n            this.checkNativeValidity();\n        }\n    }\n\n    /**\n     * A function to assign a native validity property of a checkbox.\n     * This should be used when there's no ngControl\n     *\n     * @hidden\n     * @internal\n     */\n    private checkNativeValidity() {\n        if (\n            !this.disabled &&\n            this._required &&\n            !this.checked &&\n            !this.readonly\n        ) {\n            this.invalid = true;\n        } else {\n            this.invalid = false;\n        }\n    }\n}\n","import { Directive, HostBinding, Input, booleanAttribute } from '@angular/core';\n\nexport const IgxDividerType = {\n    SOLID: 'solid',\n    DASHED: 'dashed'\n} as const;\nexport type IgxDividerType = (typeof IgxDividerType)[keyof typeof IgxDividerType];\n\nlet NEXT_ID = 0;\n\n@Directive({\n    // eslint-disable-next-line @angular-eslint/directive-selector\n    selector: 'igx-divider',\n    standalone: true\n})\nexport class IgxDividerDirective {\n    /**\n     * Sets/gets the `id` of the divider.\n     * If not set, `id` will have value `\"igx-divider-0\"`;\n     * ```html\n     * <igx-divider id=\"my-divider\"></igx-divider>\n     * ```\n     * ```typescript\n     * let dividerId =  this.divider.id;\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-divider-${NEXT_ID++}`;\n\n    /**\n     * Sets the value of `role` attribute.\n     * If not the default value of `separator` will be used.\n     */\n    @HostBinding('attr.role')\n    @Input()\n    public role = 'separator';\n\n    /**\n     * Sets the type of the divider. The default value\n     * is `default`. The divider can also be `dashed`;\n     * ```html\n     * <igx-divider type=\"dashed\"></igx-divider>\n     * ```\n     */\n    @HostBinding('class.igx-divider')\n    @Input()\n    public type: IgxDividerType | string = IgxDividerType.SOLID;\n\n    @HostBinding('class.igx-divider--dashed')\n    public get isDashed() {\n        return this.type === IgxDividerType.DASHED;\n    }\n\n    /**\n     * If set to `true` and an `inset` value has been provided,\n     * the divider will start shrinking from both ends.\n     * ```html\n     * <igx-divider [middle]=\"true\"></igx-divider>\n     * ```\n     */\n    @HostBinding('class.igx-divider--inset')\n    @Input({ transform: booleanAttribute })\n    public middle = false;\n\n    /**\n     * Sets the divider in vertical orientation.\n     * ```html\n     * <igx-divider [vertical]=\"true\"></igx-divider>\n     * ```\n     */\n    @HostBinding('class.igx-divider--vertical')\n    @Input({ transform: booleanAttribute })\n    public vertical = false;\n\n    /**\n     * Sets the inset of the divider from the side(s).\n     * If the divider attribute `middle` is set to `true`,\n     * it will inset the divider on both sides.\n     * ```typescript\n     * this.divider.inset = '32px';\n     * ```\n     */\n    @HostBinding('style.--inset')\n    @Input()\n    public set inset(value: string) {\n        this._inset = value;\n    }\n\n    /**\n     * Gets the current divider inset in terms of\n     * inset-inline-start representation as applied to the divider.\n     * ```typescript\n     * const inset = this.divider.inset;\n     * ```\n     */\n    public get inset() {\n        return this._inset;\n    }\n\n    /**\n     * Sets the value of the `inset` attribute.\n     * If not provided it will be set to `'0'`.\n     * ```html\n     * <igx-divider inset=\"16px\"></igx-divider>\n     * ```\n     */\n    private _inset = '0';\n\n    /**\n     * A getter that returns `true` if the type of the divider is `default`;\n     * ```typescript\n     * const isDefault = this.divider.isDefault;\n     * ```\n     */\n    public get isSolid() {\n        return this.type === IgxDividerType.SOLID;\n    }\n\n}\n\n\n","import { Renderer2 } from '@angular/core';\nimport { IgxDragDirective, IgxDropDirective } from './drag-drop.directive';\n\n\nexport interface IDropStrategy {\n    dropAction: (drag: IgxDragDirective, drop: IgxDropDirective, atIndex: number) => void;\n}\n\n// @dynamic\nexport class IgxDefaultDropStrategy implements IDropStrategy {\n\n    public dropAction(_drag: IgxDragDirective, _drop: IgxDropDirective, _atIndex: number) { }\n}\n\n// @dynamic\nexport class IgxAppendDropStrategy implements IDropStrategy {\n\n    constructor(private _renderer: Renderer2) { }\n\n    public dropAction(drag: IgxDragDirective, drop: IgxDropDirective, _atIndex: number) {\n        const dragElement = drag.element.nativeElement;\n        const dropAreaElement = drop.element.nativeElement;\n        this._renderer.removeChild(dragElement.parentNode, dragElement);\n        this._renderer.appendChild(dropAreaElement, dragElement);\n    }\n}\n\n// @dynamic\nexport class IgxPrependDropStrategy implements IDropStrategy {\n\n    constructor(private _renderer: Renderer2) { }\n\n    public dropAction(drag: IgxDragDirective, drop: IgxDropDirective, _atIndex: number) {\n        const dragElement = drag.element.nativeElement;\n        const dropAreaElement = drop.element.nativeElement;\n        this._renderer.removeChild(dragElement.parentNode, dragElement);\n        if (dropAreaElement.children.length) {\n            this._renderer.insertBefore(dropAreaElement, dragElement, dropAreaElement.children[0]);\n        } else {\n            this._renderer.appendChild(dropAreaElement, dragElement);\n        }\n    }\n}\n\n// @dynamic\nexport class IgxInsertDropStrategy implements IDropStrategy {\n\n    constructor(private _renderer: Renderer2) { }\n\n    public dropAction(drag: IgxDragDirective, drop: IgxDropDirective, atIndex: number) {\n        if (drag.element.nativeElement.parentElement === drop.element.nativeElement && atIndex === -1) {\n            return;\n        }\n\n        const dragElement = drag.element.nativeElement;\n        const dropAreaElement = drop.element.nativeElement;\n        this._renderer.removeChild(dragElement.parentNode, dragElement);\n        if (atIndex !== -1 && dropAreaElement.children.length > atIndex) {\n            this._renderer.insertBefore(dropAreaElement, dragElement, dropAreaElement.children[atIndex]);\n        } else {\n            this._renderer.appendChild(dropAreaElement, dragElement);\n        }\n    }\n}\n","import {\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Input,\n    NgZone,\n    OnDestroy,\n    OnInit,\n    Output,\n    Renderer2,\n    ChangeDetectorRef,\n    ViewContainerRef,\n    AfterContentInit,\n    TemplateRef,\n    ContentChildren,\n    QueryList,\n    RendererStyleFlags2,\n    booleanAttribute,\n    EmbeddedViewRef,\n    inject,\n    DOCUMENT\n} from '@angular/core';\nimport { animationFrameScheduler, fromEvent, interval, Subject } from 'rxjs';\nimport { takeUntil, throttle } from 'rxjs/operators';\nimport { IBaseEventArgs, PlatformUtil } from 'igniteui-angular/core';\nimport { IDropStrategy, IgxDefaultDropStrategy } from './drag-drop.strategy';\n\nenum DragScrollDirection {\n    UP,\n    DOWN,\n    LEFT,\n    RIGHT\n}\n\nexport enum DragDirection {\n    VERTICAL,\n    HORIZONTAL,\n    BOTH\n}\n\nexport interface IgxDragCustomEventDetails {\n    startX: number;\n    startY: number;\n    pageX: number;\n    pageY: number;\n    owner: IgxDragDirective;\n    originalEvent: any;\n}\n\nexport interface IDropBaseEventArgs extends IBaseEventArgs {\n    /**\n     * Reference to the original event that caused the draggable element to enter the igxDrop element.\n     * Can be PointerEvent, TouchEvent or MouseEvent.\n     */\n    originalEvent: any;\n    /** The owner igxDrop directive that triggered this event. */\n    owner: IgxDropDirective;\n    /** The igxDrag directive instanced on an element that entered the area of the igxDrop element */\n    drag: IgxDragDirective;\n    /** The data contained for the draggable element in igxDrag directive. */\n    dragData: any;\n    /** The initial position of the pointer on X axis when the dragged element began moving */\n    startX: number;\n    /** The initial position of the pointer on Y axis when the dragged element began moving */\n    startY: number;\n    /**\n     * The current position of the pointer on X axis when the event was triggered.\n     * Note: The browser might trigger the event with some delay and pointer would be already inside the igxDrop.\n     */\n    pageX: number;\n    /**\n     * The current position of the pointer on Y axis when the event was triggered.\n     * Note: The browser might trigger the event with some delay and pointer would be already inside the igxDrop.\n     */\n    pageY: number;\n    /**\n     * The current position of the pointer on X axis relative to the container that initializes the igxDrop.\n     * Note: The browser might trigger the event with some delay and pointer would be already inside the igxDrop.\n     */\n    offsetX: number;\n    /**\n     * The current position of the pointer on Y axis relative to the container that initializes the igxDrop.\n     * Note: The browser might trigger the event with some delay and pointer would be already inside the igxDrop.\n     */\n    offsetY: number;\n}\n\nexport interface IDropDroppedEventArgs extends IDropBaseEventArgs {\n    /** Specifies if the default drop logic related to the event should be canceled. */\n    cancel: boolean;\n}\n\nexport interface IDragBaseEventArgs extends IBaseEventArgs {\n    /**\n     * Reference to the original event that caused the interaction with the element.\n     * Can be PointerEvent, TouchEvent or MouseEvent.\n     */\n    originalEvent: PointerEvent | MouseEvent | TouchEvent;\n    /** The owner igxDrag directive that triggered this event. */\n    owner: IgxDragDirective;\n    /** The initial position of the pointer on X axis when the dragged element began moving */\n    startX: number;\n    /** The initial position of the pointer on Y axis when the dragged element began moving */\n    startY: number;\n    /**\n     * The current position of the pointer on X axis when the event was triggered.\n     * Note: The browser might trigger the event with some delay and pointer would be already inside the igxDrop.\n     */\n    pageX: number;\n    /**\n     * The current position of the pointer on Y axis when the event was triggered.\n     * Note: The browser might trigger the event with some delay and pointer would be already inside the igxDrop.\n     */\n    pageY: number;\n}\n\nexport interface IDragStartEventArgs extends IDragBaseEventArgs {\n    /** Set if the the dragging should be canceled. */\n    cancel: boolean;\n}\n\nexport interface IDragMoveEventArgs extends IDragStartEventArgs {\n    /** The new pageX position of the pointer that the igxDrag will use. It can be overridden to limit dragged element X movement. */\n    nextPageX: number;\n    /** The new pageX position of the pointer that the igxDrag will use. It can be overridden to limit dragged element Y movement. */\n    nextPageY: number;\n}\n\n\nexport interface IDragGhostBaseEventArgs extends IBaseEventArgs {\n    /** The owner igxDrag directive that triggered this event. */\n    owner: IgxDragDirective;\n    /** Instance to the ghost element that is created when dragging starts. */\n    ghostElement: any;\n    /** Set if the ghost creation/destruction should be canceled. */\n    cancel: boolean;\n}\n\nexport interface IDragCustomTransitionArgs {\n    duration?: number;\n    timingFunction?: string;\n    delay?: number;\n}\n\nexport class IgxDragLocation {\n    public pageX: number;\n    public pageY: number;\n\n    constructor(private _pageX, private _pageY) {\n        this.pageX = parseFloat(_pageX);\n        this.pageY = parseFloat(_pageY);\n    }\n}\n\n@Directive({\n    selector: '[igxDragHandle]',\n    standalone: true\n})\nexport class IgxDragHandleDirective {\n    public element = inject(ElementRef<any>);\n\n    @HostBinding('class.igx-drag__handle')\n    public baseClass = true;\n\n    /**\n     * @hidden\n     */\n    public parentDragElement: HTMLElement = null;\n}\n\n@Directive({\n    selector: '[igxDragIgnore]',\n    standalone: true\n})\nexport class IgxDragIgnoreDirective {\n    public element = inject(ElementRef<any>);\n\n    @HostBinding('class.igx-drag__ignore')\n    public baseClass = true;\n}\n\n@Directive({\n    exportAs: 'drag',\n    selector: '[igxDrag]',\n    standalone: true\n})\nexport class IgxDragDirective implements AfterContentInit, OnDestroy {\n    /**\n     * - Save data inside the `igxDrag` directive. This can be set when instancing `igxDrag` on an element.\n     * ```html\n     * <div [igxDrag]=\"{ source: myElement }\"></div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input('igxDrag')\n    public set data(value: any) {\n        this._data = value;\n    }\n\n    public get data(): any {\n        return this._data;\n    }\n\n    /**\n     * Sets the tolerance in pixels before drag starts.\n     * By default the drag starts after the draggable element is moved by 5px.\n     * ```html\n     * <div igxDrag [dragTolerance]=\"100\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public dragTolerance = 5;\n\n    /**\n     * Sets the directions that the element can be dragged.\n     * By default it is set to both horizontal and vertical directions.\n     * ```html\n     * <div igxDrag [dragDirection]=\"dragDir\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public dragDir = DragDirection.HORIZONTAL;\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public dragDirection = DragDirection.BOTH;\n\n    /**\n     * A property that provides a way for igxDrag and igxDrop to be linked through channels.\n     * It accepts single value or an array of values and evaluates then using strict equality.\n     * ```html\n     * <div igxDrag [dragChannel]=\"'odd'\">\n     *         <span>95</span>\n     * </div>\n     * <div igxDrop [dropChannel]=\"['odd', 'irrational']\">\n     *         <span>Numbers drop area!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public dragChannel: number | string | number[] | string[];\n\n    /**\n     * Sets whether the base element should be moved, or a ghost element should be rendered that represents it instead.\n     * By default it is set to `true`.\n     * If it is set to `false` when dragging the base element is moved instead and no ghost elements are rendered.\n     * ```html\n     * <div igxDrag [ghost]=\"false\">\n     *      <span>Drag Me!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input({ transform: booleanAttribute })\n    public ghost = true;\n\n    /**\n     * Sets a custom class that will be added to the `ghostElement` element.\n     * ```html\n     * <div igxDrag [ghostClass]=\"'ghostElement'\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public ghostClass = '';\n\n    /**\n     * Set styles that will be added to the `ghostElement` element.\n     * ```html\n     * <div igxDrag [ghostStyle]=\"{'--ig-size': 'var(--ig-size-small)'}\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public ghostStyle = {};\n\n    /**\n     * Specifies a template for the ghost element created when dragging starts and `ghost` is true.\n     * By default a clone of the base element the igxDrag is instanced is created.\n     * ```html\n     * <div igxDrag [ghostTemplate]=\"customGhost\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * <ng-template #customGhost>\n     *      <div class=\"customGhostStyle\">\n     *          <span>I am being dragged!</span>\n     *      </div>\n     * </ng-template>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public ghostTemplate: TemplateRef<any>;\n\n    /**\n     * Sets the element to which the dragged element will be appended.\n     * By default it's set to null and the dragged element is appended to the body.\n     * ```html\n     * <div #hostDiv></div>\n     * <div igxDrag [ghostHost]=\"hostDiv\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public ghostHost;\n\n    /**\n     * Overrides the scroll container of the dragged element. By default its the window.\n     */\n    @Input()\n    public scrollContainer: HTMLElement = null\n\n    /**\n     * Event triggered when the draggable element drag starts.\n     * ```html\n     * <div igxDrag (dragStart)=\"onDragStart()\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public onDragStart(){\n     *      alert(\"The drag has stared!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Output()\n    public dragStart = new EventEmitter<IDragStartEventArgs>();\n\n    /**\n     * Event triggered when the draggable element has been moved.\n     * ```html\n     * <div igxDrag  (dragMove)=\"onDragMove()\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public onDragMove(){\n     *      alert(\"The element has moved!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Output()\n    public dragMove = new EventEmitter<IDragMoveEventArgs>();\n\n    /**\n     * Event triggered when the draggable element is released.\n     * ```html\n     * <div igxDrag (dragEnd)=\"onDragEnd()\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public onDragEnd(){\n     *      alert(\"The drag has ended!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Output()\n    public dragEnd = new EventEmitter<IDragBaseEventArgs>();\n\n    /**\n     * Event triggered when the draggable element is clicked.\n     * ```html\n     * <div igxDrag (dragClick)=\"onDragClick()\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public onDragClick(){\n     *      alert(\"The element has been clicked!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Output()\n    public dragClick = new EventEmitter<IDragBaseEventArgs>();\n\n    /**\n     * Event triggered when the drag ghost element is created.\n     * ```html\n     * <div igxDrag (ghostCreate)=\"ghostCreated()\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public ghostCreated(){\n     *      alert(\"The ghost has been created!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Output()\n    public ghostCreate = new EventEmitter<IDragGhostBaseEventArgs>();\n\n    /**\n     * Event triggered when the drag ghost element is created.\n     * ```html\n     * <div igxDrag (ghostDestroy)=\"ghostDestroyed()\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public ghostDestroyed(){\n     *      alert(\"The ghost has been destroyed!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Output()\n    public ghostDestroy = new EventEmitter<IDragGhostBaseEventArgs>();\n\n    /**\n     * Event triggered after the draggable element is released and after its animation has finished.\n     * ```html\n     * <div igxDrag (transitioned)=\"onMoveEnd()\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public onMoveEnd(){\n     *      alert(\"The move has ended!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Output()\n    public transitioned = new EventEmitter<IDragBaseEventArgs>();\n\n    /**\n     * @hidden\n     */\n    @ContentChildren(IgxDragHandleDirective, { descendants: true })\n    public dragHandles: QueryList<IgxDragHandleDirective>;\n\n    /**\n     * @hidden\n     */\n    @ContentChildren(IgxDragIgnoreDirective, { descendants: true })\n    public dragIgnoredElems: QueryList<IgxDragIgnoreDirective>;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-drag')\n    public baseClass = true;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-drag--select-disabled')\n    public selectDisabled = false;\n\n\n    /**\n     * Gets the current location of the element relative to the page.\n     */\n    public get location(): IgxDragLocation {\n        return new IgxDragLocation(this.pageX, this.pageY);\n    }\n\n    /**\n     * Gets the original location of the element before dragging started.\n     */\n    public get originLocation(): IgxDragLocation {\n        return new IgxDragLocation(this.baseOriginLeft, this.baseOriginTop);\n    }\n\n    /**\n     * @hidden\n     */\n    public get pointerEventsEnabled() {\n        return typeof PointerEvent !== 'undefined';\n    }\n\n    /**\n     * @hidden\n     */\n    public get touchEventsEnabled() {\n        return 'ontouchstart' in window;\n    }\n\n    /**\n     * @hidden\n     */\n    public get pageX() {\n        if (this.ghost && this.ghostElement) {\n            return this.ghostLeft;\n        }\n        return this.baseLeft + this.windowScrollLeft;\n    }\n\n    /**\n     * @hidden\n     */\n    public get pageY() {\n        if (this.ghost && this.ghostElement) {\n            return this.ghostTop;\n        }\n        return this.baseTop + this.windowScrollTop;\n    }\n\n    protected get baseLeft(): number {\n        return this.element.nativeElement.getBoundingClientRect().left;\n    }\n\n    protected get baseTop(): number {\n        return this.element.nativeElement.getBoundingClientRect().top;\n    }\n\n    protected get baseOriginLeft(): number {\n        return this.baseLeft - this.getTransformX(this.element.nativeElement);\n    }\n\n    protected get baseOriginTop(): number {\n        return this.baseTop - this.getTransformY(this.element.nativeElement);\n    }\n\n    protected set ghostLeft(pageX: number) {\n        if (this.ghostElement) {\n            // We need to take into account marginLeft, since top style does not include margin, but pageX includes the margin.\n            const ghostMarginLeft = parseInt(this.document.defaultView.getComputedStyle(this.ghostElement)['margin-left'], 10);\n            // If ghost host is defined it needs to be taken into account.\n            this.ghostElement.style.left = (pageX - ghostMarginLeft - this._ghostHostX) + 'px';\n        }\n    }\n\n    protected get ghostLeft() {\n        if (this.ghostElement) {\n            return parseInt(this.ghostElement.style.left, 10) + this._ghostHostX;\n        }\n    }\n\n    protected set ghostTop(pageY: number) {\n        if (this.ghostElement) {\n            // We need to take into account marginTop, since top style does not include margin, but pageY includes the margin.\n            const ghostMarginTop = parseInt(this.document.defaultView.getComputedStyle(this.ghostElement)['margin-top'], 10);\n            // If ghost host is defined it needs to be taken into account.\n            this.ghostElement.style.top = (pageY - ghostMarginTop - this._ghostHostY) + 'px';\n        }\n    }\n\n    protected get ghostTop() {\n        if (this.ghostElement) {\n            return parseInt(this.ghostElement.style.top, 10) + this._ghostHostY;\n        }\n    }\n\n    protected get windowScrollTop() {\n        return this.document.documentElement.scrollTop || window.scrollY;\n    }\n\n    protected get windowScrollLeft() {\n        return this.document.documentElement.scrollLeft || window.scrollX;\n    }\n\n    protected get windowScrollHeight() {\n        return this.document.documentElement.scrollHeight;\n    }\n\n    protected get windowScrollWidth() {\n        return this.document.documentElement.scrollWidth;\n    }\n\n    /**\n     * @hidden\n     */\n    public defaultReturnDuration = '0.5s';\n\n    /**\n     * @hidden\n     */\n    public ghostElement;\n\n    /**\n     * @hidden\n     */\n    public animInProgress = false;\n\n    protected ghostContext: any = null;\n    protected _startX = 0;\n    protected _startY = 0;\n    protected _lastX = 0;\n    protected _lastY = 0;\n    protected _dragStarted = false;\n\n    /** Drag ghost related properties */\n    protected _defaultOffsetX;\n    protected _defaultOffsetY;\n    protected _offsetX;\n    protected _offsetY;\n    protected _ghostStartX;\n    protected _ghostStartY;\n    protected _ghostHostX = 0;\n    protected _ghostHostY = 0;\n    protected _dynamicGhostRef: EmbeddedViewRef<any>;\n\n    protected _pointerDownId = null;\n    protected _clicked = false;\n    protected _lastDropArea = null;\n\n    protected _destroy = new Subject<boolean>();\n    protected _removeOnDestroy = true;\n    protected _data: any;\n    protected _scrollContainer = null;\n    protected _originalScrollContainerWidth = 0;\n    protected _originalScrollContainerHeight = 0;\n    protected _scrollContainerStep = 5;\n    protected _scrollContainerStepMs = 10;\n    protected _scrollContainerThreshold = 25;\n    protected _containerScrollIntervalId = null;\n    private document = inject(DOCUMENT);\n\n    /**\n     * Sets the offset of the dragged element relative to the mouse in pixels.\n     * By default it's taking the relative position to the mouse when the drag started and keeps it the same.\n     * ```html\n     * <div #hostDiv></div>\n     * <div igxDrag [ghostOffsetX]=\"0\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public set ghostOffsetX(value) {\n        this._offsetX = parseInt(value, 10);\n    }\n\n    public get ghostOffsetX() {\n        return this._offsetX !== undefined ? this._offsetX : this._defaultOffsetX;\n    }\n\n    /**\n     * Sets the offset of the dragged element relative to the mouse in pixels.\n     * By default it's taking the relative position to the mouse when the drag started and keeps it the same.\n     * ```html\n     * <div #hostDiv></div>\n     * <div igxDrag [ghostOffsetY]=\"0\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public set ghostOffsetY(value) {\n        this._offsetY = parseInt(value, 10);\n    }\n\n    public get ghostOffsetY() {\n        return this._offsetY !== undefined ? this._offsetY : this._defaultOffsetY;\n    }\n\n    public cdr = inject(ChangeDetectorRef);\n    public element = inject(ElementRef);\n    public viewContainer = inject(ViewContainerRef);\n    public zone = inject(NgZone);\n    public renderer = inject(Renderer2);\n    protected platformUtil = inject(PlatformUtil);\n\n    constructor() {\n        this.onTransitionEnd = this.onTransitionEnd.bind(this);\n        this.onPointerMove = this.onPointerMove.bind(this);\n        this.onPointerUp = this.onPointerUp.bind(this);\n        this.onPointerLost = this.onPointerLost.bind(this);\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterContentInit() {\n        if (!this.dragHandles || !this.dragHandles.length) {\n            // Set user select none to the whole draggable element if no drag handles are defined.\n            this.selectDisabled = true;\n        }\n\n        // Bind events\n        this.zone.runOutsideAngular(() => {\n            if (!this.platformUtil.isBrowser) {\n                return;\n            }\n            const targetElements = this.dragHandles && this.dragHandles.length\n                ? this.dragHandles\n                    .filter(item => item.parentDragElement === null)\n                    .map(item => {\n                        item.parentDragElement = this.element.nativeElement;\n                        return item.element.nativeElement;\n                    })\n                : [this.element.nativeElement];\n            targetElements.forEach((element) => {\n                if (this.pointerEventsEnabled) {\n                    fromEvent(element, 'pointerdown').pipe(takeUntil(this._destroy))\n                        .subscribe((res) => this.onPointerDown(res));\n\n                    fromEvent(element, 'pointermove').pipe(\n                        throttle(() => interval(0, animationFrameScheduler)),\n                        takeUntil(this._destroy)\n                    ).subscribe((res) => this.onPointerMove(res));\n\n                    fromEvent(element, 'pointerup').pipe(takeUntil(this._destroy))\n                        .subscribe((res) => this.onPointerUp(res));\n\n                    if (!this.ghost) {\n                        // Do not bind `lostpointercapture` to the target, because we will bind it on the ghost later.\n                        fromEvent(element, 'lostpointercapture').pipe(takeUntil(this._destroy))\n                            .subscribe((res) => this.onPointerLost(res));\n                    }\n                } else if (this.touchEventsEnabled) {\n                    fromEvent(element, 'touchstart').pipe(takeUntil(this._destroy))\n                        .subscribe((res) => this.onPointerDown(res));\n                } else {\n                    // We don't have pointer events and touch events. Use then mouse events.\n                    fromEvent(element, 'mousedown').pipe(takeUntil(this._destroy))\n                        .subscribe((res) => this.onPointerDown(res));\n                }\n            });\n\n            // We should bind to document events only once when there are no pointer events.\n            if (!this.pointerEventsEnabled && this.touchEventsEnabled) {\n                fromEvent(this.document.defaultView, 'touchmove').pipe(\n                    throttle(() => interval(0, animationFrameScheduler)),\n                    takeUntil(this._destroy)\n                ).subscribe((res) => this.onPointerMove(res));\n\n                fromEvent(this.document.defaultView, 'touchend').pipe(takeUntil(this._destroy))\n                    .subscribe((res) => this.onPointerUp(res));\n            } else if (!this.pointerEventsEnabled) {\n                fromEvent(this.document.defaultView, 'mousemove').pipe(\n                    throttle(() => interval(0, animationFrameScheduler)),\n                    takeUntil(this._destroy)\n                ).subscribe((res) => this.onPointerMove(res));\n\n                fromEvent(this.document.defaultView, 'mouseup').pipe(takeUntil(this._destroy))\n                    .subscribe((res) => this.onPointerUp(res));\n            }\n            this.element.nativeElement.addEventListener('transitionend', this.onTransitionEnd);\n        });\n\n        // Set transition duration to 0s. This also helps with setting `visibility: hidden` to the base to not lag.\n        this.element.nativeElement.style.transitionDuration = '0.0s';\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this._destroy.next(true);\n        this._destroy.complete();\n\n        if (this.ghostElement) {\n            if (this._removeOnDestroy) {\n                this.clearGhost();\n            } else {\n                this.detachGhost();\n            }\n        }\n\n        this.element.nativeElement.removeEventListener('transitionend', this.onTransitionEnd);\n\n        if (this._containerScrollIntervalId) {\n            clearInterval(this._containerScrollIntervalId);\n            this._containerScrollIntervalId = null;\n        }\n    }\n\n    /**\n     * Sets desired location of the base element or ghost element if rended relative to the document.\n     *\n     * @param newLocation New location that should be applied. It is advised to get new location using getBoundingClientRects() + scroll.\n     */\n    public setLocation(newLocation: IgxDragLocation) {\n        // We do not subtract marginLeft and marginTop here because here we calculate deltas.\n        if (this.ghost && this.ghostElement) {\n            this.ghostLeft = newLocation.pageX + this.windowScrollLeft;\n            this.ghostTop = newLocation.pageY + this.windowScrollTop;\n        } else if (!this.ghost) {\n            const deltaX = newLocation.pageX - this.pageX;\n            const deltaY = newLocation.pageY - this.pageY;\n            const transformX = this.getTransformX(this.element.nativeElement);\n            const transformY = this.getTransformY(this.element.nativeElement);\n            this.setTransformXY(transformX + deltaX, transformY + deltaY);\n        }\n\n        this._startX = this.baseLeft;\n        this._startY = this.baseTop;\n    }\n\n    /**\n     * Animates the base or ghost element depending on the `ghost` input to its initial location.\n     * If `ghost` is true but there is not ghost rendered, it will be created and animated.\n     * If the base element has changed its DOM position its initial location will be changed accordingly.\n     *\n     * @param customAnimArgs Custom transition properties that will be applied when performing the transition.\n     * @param startLocation Start location from where the transition should start.\n     */\n    public transitionToOrigin(customAnimArgs?: IDragCustomTransitionArgs, startLocation?: IgxDragLocation) {\n        if ((!!startLocation && startLocation.pageX === this.baseOriginLeft && startLocation.pageY === this.baseOriginLeft) ||\n            (!startLocation && this.ghost && !this.ghostElement)) {\n            return;\n        }\n\n        if (!!startLocation && startLocation.pageX !== this.pageX && startLocation.pageY !== this.pageY) {\n            if (this.ghost && !this.ghostElement) {\n                this._startX = startLocation.pageX;\n                this._startY = startLocation.pageY;\n                this._ghostStartX = this._startX;\n                this._ghostStartY = this._startY;\n                this.createGhost(this._startX, this._startY);\n            }\n\n            this.setLocation(startLocation);\n        }\n\n        this.animInProgress = true;\n        // Use setTimeout because we need to be sure that the element is positioned first correctly if there is start location.\n        setTimeout(() => {\n            if (this.ghost) {\n                this.ghostElement.style.transitionProperty = 'top, left';\n                this.ghostElement.style.transitionDuration =\n                    customAnimArgs && customAnimArgs.duration ? customAnimArgs.duration + 's' : this.defaultReturnDuration;\n                this.ghostElement.style.transitionTimingFunction =\n                    customAnimArgs && customAnimArgs.timingFunction ? customAnimArgs.timingFunction : '';\n                this.ghostElement.style.transitionDelay = customAnimArgs && customAnimArgs.delay ? customAnimArgs.delay + 's' : '';\n                this.setLocation(new IgxDragLocation(this.baseLeft, this.baseTop));\n            } else if (!this.ghost) {\n                this.element.nativeElement.style.transitionProperty = 'transform';\n                this.element.nativeElement.style.transitionDuration =\n                    customAnimArgs && customAnimArgs.duration ? customAnimArgs.duration + 's' : this.defaultReturnDuration;\n                this.element.nativeElement.style.transitionTimingFunction =\n                    customAnimArgs && customAnimArgs.timingFunction ? customAnimArgs.timingFunction : '';\n                this.element.nativeElement.style.transitionDelay = customAnimArgs && customAnimArgs.delay ? customAnimArgs.delay + 's' : '';\n                this._startX = this.baseLeft;\n                this._startY = this.baseTop;\n                this.setTransformXY(0, 0);\n            }\n        }, 0);\n    }\n\n    /**\n     * Animates the base or ghost element to a specific target location or other element using transition.\n     * If `ghost` is true but there is not ghost rendered, it will be created and animated.\n     * It is recommended to use 'getBoundingClientRects() + pageScroll' when determining desired location.\n     *\n     * @param target Target that the base or ghost will transition to. It can be either location in the page or another HTML element.\n     * @param customAnimArgs Custom transition properties that will be applied when performing the transition.\n     * @param startLocation Start location from where the transition should start.\n     */\n    public transitionTo(target: IgxDragLocation | ElementRef, customAnimArgs?: IDragCustomTransitionArgs, startLocation?: IgxDragLocation) {\n        if (!!startLocation && this.ghost && !this.ghostElement) {\n            this._startX = startLocation.pageX;\n            this._startY = startLocation.pageY;\n            this._ghostStartX = this._startX;\n            this._ghostStartY = this._startY;\n        } else if (!!startLocation && (!this.ghost || this.ghostElement)) {\n            this.setLocation(startLocation);\n        } else if (this.ghost && !this.ghostElement) {\n            this._startX = this.baseLeft;\n            this._startY = this.baseTop;\n            this._ghostStartX = this._startX + this.windowScrollLeft;\n            this._ghostStartY = this._startY + this.windowScrollTop;\n        }\n\n        if (this.ghost && !this.ghostElement) {\n            this.createGhost(this._startX, this._startY);\n        }\n\n        this.animInProgress = true;\n        // Use setTimeout because we need to be sure that the element is positioned first correctly if there is start location.\n        setTimeout(() => {\n            const movedElem = this.ghost ? this.ghostElement : this.element.nativeElement;\n            movedElem.style.transitionProperty = this.ghost && this.ghostElement ? 'left, top' : 'transform';\n            movedElem.style.transitionDuration =\n                customAnimArgs && customAnimArgs.duration ? customAnimArgs.duration + 's' : this.defaultReturnDuration;\n            movedElem.style.transitionTimingFunction =\n                customAnimArgs && customAnimArgs.timingFunction ? customAnimArgs.timingFunction : '';\n            movedElem.style.transitionDelay = customAnimArgs && customAnimArgs.delay ? customAnimArgs.delay + 's' : '';\n\n            if (target instanceof IgxDragLocation) {\n                this.setLocation(new IgxDragLocation(target.pageX, target.pageY));\n            } else {\n                const targetRects = target.nativeElement.getBoundingClientRect();\n                this.setLocation(new IgxDragLocation(\n                    targetRects.left - this.windowScrollLeft,\n                    targetRects.top - this.windowScrollTop\n                ));\n            }\n        }, 0);\n    }\n\n    /**\n     * @hidden\n     * Method bound to the PointerDown event of the base element igxDrag is initialized.\n     * @param event PointerDown event captured\n     */\n    public onPointerDown(event) {\n        const ignoredElement = this.dragIgnoredElems.find(elem => elem.element.nativeElement === event.target);\n        if (ignoredElement) {\n            return;\n        }\n\n        // Set pointer capture so we detect pointermove even if mouse is out of bounds until ghostElement is created.\n        const handleFound = this.dragHandles.find(handle => handle.element.nativeElement === event.target);\n        const targetElement = handleFound ? handleFound.element.nativeElement : event.target || this.element.nativeElement;\n        if (this.pointerEventsEnabled && targetElement.isConnected) {\n            this._pointerDownId = event.pointerId;\n            targetElement.setPointerCapture(this._pointerDownId);\n        } else if (targetElement.isConnected) {\n            targetElement.focus();\n            event.preventDefault();\n        } else {\n            return;\n        }\n\n        this._clicked = true;\n        if (this.pointerEventsEnabled || !this.touchEventsEnabled) {\n            // Check first for pointer events or non touch, because we can have pointer events and touch events at once.\n            this._startX = event.pageX;\n            this._startY = event.pageY;\n        } else if (this.touchEventsEnabled) {\n            this._startX = event.touches[0].pageX;\n            this._startY = event.touches[0].pageY;\n        }\n\n        this._defaultOffsetX = this.baseLeft - this._startX + this.windowScrollLeft;\n        this._defaultOffsetY = this.baseTop - this._startY + this.windowScrollTop;\n        this._ghostStartX = this._startX + this.ghostOffsetX;\n        this._ghostStartY = this._startY + this.ghostOffsetY;\n        this._lastX = this._startX;\n        this._lastY = this._startY;\n    }\n\n    /**\n     * @hidden\n     * Perform drag move logic when dragging and dispatching events if there is igxDrop under the pointer.\n     * This method is bound at first at the base element.\n     * If dragging starts and after the ghostElement is rendered the pointerId is reassigned it. Then this method is bound to it.\n     * @param event PointerMove event captured\n     */\n    public onPointerMove(event) {\n        if (this._clicked) {\n            let pageX; let pageY;\n            if (this.pointerEventsEnabled || !this.touchEventsEnabled) {\n                // Check first for pointer events or non touch, because we can have pointer events and touch events at once.\n                pageX = event.pageX;\n                pageY = event.pageY;\n            } else if (this.touchEventsEnabled) {\n                pageX = event.touches[0].pageX;\n                pageY = event.touches[0].pageY;\n\n                // Prevent scrolling on touch while dragging\n                event.preventDefault();\n            }\n\n            const totalMovedX = pageX - this._startX;\n            const totalMovedY = pageY - this._startY;\n            if (!this._dragStarted &&\n                (Math.abs(totalMovedX) > this.dragTolerance || Math.abs(totalMovedY) > this.dragTolerance)) {\n                const dragStartArgs: IDragStartEventArgs = {\n                    originalEvent: event,\n                    owner: this,\n                    startX: pageX - totalMovedX,\n                    startY: pageY - totalMovedY,\n                    pageX,\n                    pageY,\n                    cancel: false\n                };\n                this.zone.run(() => {\n                    this.dragStart.emit(dragStartArgs);\n                });\n\n                if (!dragStartArgs.cancel) {\n                    this._dragStarted = true;\n                    if (this.ghost) {\n                        // We moved enough so ghostElement can be rendered and actual dragging to start.\n                        // When creating it will take into account any offset set by the user by default.\n                        this.createGhost(pageX, pageY);\n                    } else if (this._offsetX !== undefined || this._offsetY !== undefined) {\n                        // There is no need for ghost, but we will need to position initially the base element to reflect any offset.\n                        const transformX = (this._offsetX !== undefined ? this._offsetX - this._defaultOffsetX : 0) +\n                            this.getTransformX(this.element.nativeElement);\n                        const transformY = (this._offsetY !== undefined ? this._offsetY - this._defaultOffsetY : 0) +\n                            this.getTransformY(this.element.nativeElement);\n                        this.setTransformXY(transformX, transformY);\n                    }\n                } else {\n                    return;\n                }\n            } else if (!this._dragStarted) {\n                return;\n            }\n\n            const moveArgs: IDragMoveEventArgs = {\n                originalEvent: event,\n                owner: this,\n                startX: this._startX,\n                startY: this._startY,\n                pageX: this._lastX,\n                pageY: this._lastY,\n                nextPageX: pageX,\n                nextPageY: pageY,\n                cancel: false\n            };\n            this.dragMove.emit(moveArgs);\n\n            const setPageX = moveArgs.nextPageX;\n            const setPageY = moveArgs.nextPageY;\n            if (!moveArgs.cancel) {\n                // Scroll root container if the user reaches its boundaries.\n                this.onScrollContainer();\n\n                // Move the actual element around\n                if (this.ghost) {\n                    const updatedTotalMovedX = this.dragDirection === DragDirection.VERTICAL ? 0 : setPageX - this._startX;\n                    const updatedTotalMovedY = this.dragDirection === DragDirection.HORIZONTAL ? 0 : setPageY - this._startY;\n                    this.ghostLeft = this._ghostStartX + updatedTotalMovedX;\n                    this.ghostTop = this._ghostStartY + updatedTotalMovedY;\n                } else {\n                    const lastMovedX = this.dragDirection === DragDirection.VERTICAL ? 0 : setPageX - this._lastX;\n                    const lastMovedY = this.dragDirection === DragDirection.HORIZONTAL ? 0 : setPageY - this._lastY;\n                    const translateX = this.getTransformX(this.element.nativeElement) + lastMovedX;\n                    const translateY = this.getTransformY(this.element.nativeElement) + lastMovedY;\n                    this.setTransformXY(translateX, translateY);\n                }\n                this.dispatchDragEvents(pageX, pageY, event);\n            }\n\n            this._lastX = setPageX;\n            this._lastY = setPageY;\n        }\n    }\n\n    /**\n     * @hidden\n     * Perform drag end logic when releasing the ghostElement and dispatching drop event if igxDrop is under the pointer.\n     * This method is bound at first at the base element.\n     * If dragging starts and after the ghostElement is rendered the pointerId is reassigned to it. Then this method is bound to it.\n     * @param event PointerUp event captured\n     */\n    public onPointerUp(event) {\n        if (!this._clicked) {\n            return;\n        }\n\n        let pageX; let pageY;\n        if (this.pointerEventsEnabled || !this.touchEventsEnabled) {\n            // Check first for pointer events or non touch, because we can have pointer events and touch events at once.\n            pageX = event.pageX;\n            pageY = event.pageY;\n        } else if (this.touchEventsEnabled) {\n            pageX = event.touches[0].pageX;\n            pageY = event.touches[0].pageY;\n\n            // Prevent scrolling on touch while dragging\n            event.preventDefault();\n        }\n\n        const eventArgs: IDragBaseEventArgs = {\n            originalEvent: event,\n            owner: this,\n            startX: this._startX,\n            startY: this._startY,\n            pageX,\n            pageY\n        };\n        this._pointerDownId = null;\n        this._clicked = false;\n        if (this._dragStarted) {\n            if (this._lastDropArea && this._lastDropArea !== this.element.nativeElement) {\n                this.dispatchDropEvent(event.pageX, event.pageY, event);\n            }\n\n            this.zone.run(() => {\n                this.dragEnd.emit(eventArgs);\n            });\n\n            if (!this.animInProgress) {\n                this.onTransitionEnd(null);\n            }\n        } else {\n            // Trigger our own click event because when there is no ghost, native click cannot be prevented when dragging.\n            this.zone.run(() => {\n                this.dragClick.emit(eventArgs);\n            });\n        }\n\n        if (this._containerScrollIntervalId) {\n            clearInterval(this._containerScrollIntervalId);\n            this._containerScrollIntervalId = null;\n        }\n    }\n\n    /**\n     * @hidden\n     * Execute this method whe the pointer capture has been lost.\n     * This means that during dragging the user has performed other action like right clicking and then clicking somewhere else.\n     * This method will ensure that the drag state is being reset in this case as if the user released the dragged element.\n     * @param event Event captured\n     */\n    public onPointerLost(event) {\n        if (!this._clicked) {\n            return;\n        }\n\n        // When the base element is moved to previous index, angular reattaches the ghost template as a sibling by default.\n        // This is the defaut place for the EmbededViewRef when recreated.\n        // That's why we need to move it to the proper place and set pointer capture again.\n        if (this._pointerDownId && this.ghostElement && this._dynamicGhostRef && !this._dynamicGhostRef.destroyed) {\n            let ghostReattached = false;\n            if (this.ghostHost && !Array.from(this.ghostHost.children).includes(this.ghostElement)) {\n                ghostReattached = true;\n                this.ghostHost.appendChild(this.ghostElement);\n            } else if (!this.ghostHost && !Array.from(this.document.body.children).includes(this.ghostElement)) {\n                ghostReattached = true;\n                this.document.body.appendChild(this.ghostElement);\n            }\n\n            if (ghostReattached) {\n                this.ghostElement.setPointerCapture(this._pointerDownId);\n                return;\n            }\n        }\n\n        const eventArgs = {\n            originalEvent: event,\n            owner: this,\n            startX: this._startX,\n            startY: this._startY,\n            pageX: event.pageX,\n            pageY: event.pageY\n        };\n        this._pointerDownId = null;\n        this._clicked = false;\n        if (this._dragStarted) {\n            this.zone.run(() => {\n                this.dragEnd.emit(eventArgs);\n            });\n            if (!this.animInProgress) {\n                this.onTransitionEnd(null);\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public onTransitionEnd(event) {\n        if ((!this._dragStarted && !this.animInProgress) || this._clicked) {\n            // Return if no dragging started and there is no animation in progress.\n            return;\n        }\n\n        if (this.ghost && this.ghostElement) {\n            this._ghostStartX = this.baseLeft + this.windowScrollLeft;\n            this._ghostStartY = this.baseTop + this.windowScrollTop;\n\n            const ghostDestroyArgs: IDragGhostBaseEventArgs = {\n                owner: this,\n                ghostElement: this.ghostElement,\n                cancel: false\n            };\n            this.ghostDestroy.emit(ghostDestroyArgs);\n            if (ghostDestroyArgs.cancel) {\n                return;\n            }\n            this.clearGhost();\n        } else if (!this.ghost) {\n            this.element.nativeElement.style.transitionProperty = '';\n            this.element.nativeElement.style.transitionDuration = '0.0s';\n            this.element.nativeElement.style.transitionTimingFunction = '';\n            this.element.nativeElement.style.transitionDelay = '';\n        }\n        this.animInProgress = false;\n        this._dragStarted = false;\n\n        // Execute transitioned after everything is reset so if the user sets new location on the base now it would work as expected.\n        this.zone.run(() => {\n            this.transitioned.emit({\n                originalEvent: event,\n                owner: this,\n                startX: this._startX,\n                startY: this._startY,\n                pageX: this._startX,\n                pageY: this._startY\n            });\n        });\n    }\n\n    protected detachGhost() {\n        this.ghostElement.removeEventListener('pointermove', this.onPointerMove);\n        this.ghostElement.removeEventListener('pointerup', this.onPointerUp);\n        this.ghostElement.removeEventListener('lostpointercapture', this.onPointerLost);\n        this.ghostElement.removeEventListener('transitionend', this.onTransitionEnd);\n    }\n\n    protected clearGhost() {\n        this.detachGhost();\n        this.ghostElement.remove();\n        this.ghostElement = null;\n\n        if (this._dynamicGhostRef) {\n            this._dynamicGhostRef.destroy();\n            this._dynamicGhostRef = null;\n        }\n    }\n\n    /**\n     * @hidden\n     * Create ghost element - if a Node object is provided it creates a clone of that node,\n     * otherwise it clones the host element.\n     * Bind all needed events.\n     * @param pageX Latest pointer position on the X axis relative to the page.\n     * @param pageY Latest pointer position on the Y axis relative to the page.\n     * @param node The Node object to be cloned.\n     */\n    protected createGhost(pageX, pageY, node: any = null) {\n        if (!this.ghost) {\n            return;\n        }\n\n        if (this.ghostTemplate) {\n            this.zone.run(() => {\n                // Create template in zone, so it gets updated by it automatically.\n                this._dynamicGhostRef = this.viewContainer.createEmbeddedView(this.ghostTemplate, this.ghostContext);\n            });\n            if (this._dynamicGhostRef.rootNodes[0].style.display === 'contents') {\n                // Change the display to default since display contents does not position the element absolutely.\n                this._dynamicGhostRef.rootNodes[0].style.display = 'block';\n            }\n            this.ghostElement = this._dynamicGhostRef.rootNodes[0];\n        } else {\n            this.ghostElement = node ? node.cloneNode(true) : this.element.nativeElement.cloneNode(true);\n        }\n\n        const totalMovedX = pageX - this._startX;\n        const totalMovedY = pageY - this._startY;\n        this._ghostHostX = this.getGhostHostBaseOffsetX();\n        this._ghostHostY = this.getGhostHostBaseOffsetY();\n\n        this.ghostElement.style.transitionDuration = '0.0s';\n        this.ghostElement.style.position = 'absolute';\n\n        if (this.ghostClass) {\n            this.ghostElement.classList.add(this.ghostClass);\n        }\n\n        if (this.ghostStyle) {\n            Object.entries(this.ghostStyle).map(([name, value]) => {\n                this.renderer.setStyle(this.ghostElement, name, value, RendererStyleFlags2.DashCase);\n            });\n        }\n\n        const createEventArgs = {\n            owner: this,\n            ghostElement: this.ghostElement,\n            cancel: false\n        };\n        this.ghostCreate.emit(createEventArgs);\n        if (createEventArgs.cancel) {\n            this.ghostElement = null;\n            if (this.ghostTemplate && this._dynamicGhostRef) {\n                this._dynamicGhostRef.destroy();\n            }\n            return;\n        }\n\n        if (this.ghostHost) {\n            this.ghostHost.appendChild(this.ghostElement);\n        } else {\n            this.document.body.appendChild(this.ghostElement);\n        }\n\n        const ghostMarginLeft = parseInt(this.document.defaultView.getComputedStyle(this.ghostElement)['margin-left'], 10);\n        const ghostMarginTop = parseInt(this.document.defaultView.getComputedStyle(this.ghostElement)['margin-top'], 10);\n        this.ghostElement.style.left = (this._ghostStartX - ghostMarginLeft + totalMovedX - this._ghostHostX) + 'px';\n        this.ghostElement.style.top = (this._ghostStartY - ghostMarginTop + totalMovedY - this._ghostHostY) + 'px';\n\n        if (this.pointerEventsEnabled) {\n            // The ghostElement takes control for moving and dragging after it has been rendered.\n            if (this._pointerDownId !== null) {\n                this.ghostElement.setPointerCapture(this._pointerDownId);\n            }\n            this.ghostElement.addEventListener('pointermove', this.onPointerMove);\n            this.ghostElement.addEventListener('pointerup', this.onPointerUp);\n            this.ghostElement.addEventListener('lostpointercapture', this.onPointerLost);\n        }\n\n        // Transition animation when the ghostElement is released and it returns to it's original position.\n        this.ghostElement.addEventListener('transitionend', this.onTransitionEnd);\n\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * @hidden\n     * Dispatch custom igxDragEnter/igxDragLeave events based on current pointer position and if drop area is under.\n     */\n    protected dispatchDragEvents(pageX: number, pageY: number, originalEvent) {\n        let topDropArea;\n        const customEventArgs: IgxDragCustomEventDetails = {\n            startX: this._startX,\n            startY: this._startY,\n            pageX,\n            pageY,\n            owner: this,\n            originalEvent\n        };\n\n        const elementsFromPoint = this.getElementsAtPoint(pageX, pageY);\n        let targetElements = [];\n        // Check for shadowRoot instance and use it if present\n        for (const elFromPoint of elementsFromPoint) {\n            if (elFromPoint?.shadowRoot) {\n                targetElements = targetElements.concat(this.getFromShadowRoot(elFromPoint, pageX, pageY, elementsFromPoint));\n            } else if (targetElements.indexOf(elFromPoint) === -1) {\n                targetElements.push(elFromPoint);\n            }\n        }\n\n        for (const element of targetElements) {\n            if (element.getAttribute('droppable') === 'true' &&\n                element !== this.ghostElement && element !== this.element.nativeElement) {\n                topDropArea = element;\n                break;\n            }\n        }\n\n        if (topDropArea &&\n            (!this._lastDropArea || (this._lastDropArea && this._lastDropArea !== topDropArea))) {\n            if (this._lastDropArea) {\n                this.dispatchEvent(this._lastDropArea, 'igxDragLeave', customEventArgs);\n            }\n\n            this._lastDropArea = topDropArea;\n            this.dispatchEvent(this._lastDropArea, 'igxDragEnter', customEventArgs);\n        } else if (!topDropArea && this._lastDropArea) {\n            this.dispatchEvent(this._lastDropArea, 'igxDragLeave', customEventArgs);\n            this._lastDropArea = null;\n            return;\n        }\n\n        if (topDropArea) {\n            this.dispatchEvent(topDropArea, 'igxDragOver', customEventArgs);\n        }\n    }\n\n    /**\n     * @hidden\n     * Traverse shadow dom in depth.\n     */\n    protected getFromShadowRoot(elem, pageX, pageY, parentDomElems) {\n        const elementsFromPoint = elem.shadowRoot.elementsFromPoint(pageX, pageY);\n        const shadowElements = elementsFromPoint.filter(cur => parentDomElems.indexOf(cur) === -1);\n        let res = [];\n        for (const elFromPoint of shadowElements) {\n            if (!!elFromPoint?.shadowRoot && elFromPoint.shadowRoot !== elem.shadowRoot) {\n                res = res.concat(this.getFromShadowRoot(elFromPoint, pageX, pageY, elementsFromPoint));\n            }\n            res.push(elFromPoint);\n        }\n        return res;\n    }\n\n    /**\n     * @hidden\n     * Dispatch custom igxDrop event based on current pointer position if there is last recorder drop area under the pointer.\n     * Last recorder drop area is updated in @dispatchDragEvents method.\n     */\n    protected dispatchDropEvent(pageX: number, pageY: number, originalEvent) {\n        const eventArgs: IgxDragCustomEventDetails = {\n            startX: this._startX,\n            startY: this._startY,\n            pageX,\n            pageY,\n            owner: this,\n            originalEvent\n        };\n\n        this.dispatchEvent(this._lastDropArea, 'igxDrop', eventArgs);\n        this.dispatchEvent(this._lastDropArea, 'igxDragLeave', eventArgs);\n        this._lastDropArea = null;\n    }\n\n    /**\n     * @hidden\n     */\n    protected getElementsAtPoint(pageX: number, pageY: number) {\n        // correct the coordinates with the current scroll position, because\n        // document.elementsFromPoint consider position within the current viewport\n        // window.pageXOffset == window.scrollX; // always true\n        // using window.pageXOffset for IE9 compatibility\n        const viewPortX = pageX - window.pageXOffset;\n        const viewPortY = pageY - window.pageYOffset;\n        if (this.document['msElementsFromPoint']) {\n            // Edge and IE special snowflakes\n            const elements = this.document['msElementsFromPoint'](viewPortX, viewPortY);\n            return elements === null ? [] : elements;\n        } else {\n            // Other browsers like Chrome, Firefox, Opera\n            return this.document.elementsFromPoint(viewPortX, viewPortY);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected dispatchEvent(target, eventName: string, eventArgs: IgxDragCustomEventDetails) {\n        // This way is IE11 compatible.\n        // const dragLeaveEvent = document.createEvent('CustomEvent');\n        // dragLeaveEvent.initCustomEvent(eventName, false, false, eventArgs);\n        // target.dispatchEvent(dragLeaveEvent);\n        // Otherwise can be used `target.dispatchEvent(new CustomEvent(eventName, eventArgs));`\n        target.dispatchEvent(new CustomEvent(eventName, { detail: eventArgs }));\n    }\n\n    protected getTransformX(elem) {\n        let posX = 0;\n        if (elem.style.transform) {\n            const matrix = elem.style.transform;\n            const values = matrix ? matrix.match(/-?[\\d\\.]+/g) : undefined;\n            posX = values ? Number(values[1]) : 0;\n        }\n\n        return posX;\n    }\n\n    protected getTransformY(elem) {\n        let posY = 0;\n        if (elem.style.transform) {\n            const matrix = elem.style.transform;\n            const values = matrix ? matrix.match(/-?[\\d\\.]+/g) : undefined;\n            posY = values ? Number(values[2]) : 0;\n        }\n\n        return posY;\n    }\n\n    /** Method setting transformation to the base draggable element. */\n    protected setTransformXY(x: number, y: number) {\n        if(x === 0 && y === 0) {\n            this.element.nativeElement.style.transform = '';\n            return;\n        }\n        this.element.nativeElement.style.transform = 'translate3d(' + x + 'px, ' + y + 'px, 0px)';\n    }\n\n    /**\n     * Since we are using absolute position to move the ghost, the ghost host might not have position: relative.\n     * Combined with position static, this means that the absolute position in the browser is relative to the offsetParent.\n     * The offsetParent is pretty much the closes parent that has position: relative, or if no such until it reaches the body.\n     * That's why if this is the case, we need to know how much we should compensate for the ghostHost being offset from\n     * its offsetParent.\n     *\n     * OffsetParent can be null in the case of position: fixed applied to the ghost host or display: none. In that case\n     * just get the clientRects of the ghost host.\n     */\n    protected getGhostHostBaseOffsetX() {\n        if (!this.ghostHost) return 0;\n\n        const ghostPosition = this.document.defaultView.getComputedStyle(this.ghostHost).getPropertyValue('position');\n        if (ghostPosition === 'static' && this.ghostHost.offsetParent && this.ghostHost.offsetParent === this.document.body) {\n            return 0;\n        } else if (ghostPosition === 'static' && this.ghostHost.offsetParent) {\n            return this.ghostHost.offsetParent.getBoundingClientRect().left + this.windowScrollLeft;\n        }\n        return this.ghostHost.getBoundingClientRect().left + this.windowScrollLeft;\n    }\n\n    protected getGhostHostBaseOffsetY() {\n        if (!this.ghostHost) return 0;\n\n        const ghostPosition = this.document.defaultView.getComputedStyle(this.ghostHost).getPropertyValue('position');\n        if (ghostPosition === 'static' && this.ghostHost.offsetParent && this.ghostHost.offsetParent === this.document.body) {\n            return 0;\n        } else if (ghostPosition === 'static' && this.ghostHost.offsetParent) {\n            return this.ghostHost.offsetParent.getBoundingClientRect().top + this.windowScrollTop;\n        }\n        return this.ghostHost.getBoundingClientRect().top + this.windowScrollTop;\n    }\n\n    protected getContainerScrollDirection() {\n        const containerBounds = this.scrollContainer ? this.scrollContainer.getBoundingClientRect() : null;\n        const scrolledX = !this.scrollContainer ? this.windowScrollLeft > 0 : this.scrollContainer.scrollLeft > 0;\n        const scrolledY = !this.scrollContainer ? this.windowScrollTop > 0 : this.scrollContainer.scrollTop > 0;\n        // Take into account window scroll top because we do not use fixed positioning to the window.\n        const topBorder = (!this.scrollContainer ? 0 : containerBounds.top) + this.windowScrollTop + this._scrollContainerThreshold;\n        // Subtract the element height because we position it from top left corner.\n        const elementHeight = this.ghost && this.ghostElement ? this.ghostElement.offsetHeight : this.element.nativeElement.offsetHeight;\n        const bottomBorder = (!this.scrollContainer ? window.innerHeight : containerBounds.bottom) +\n            this.windowScrollTop - this._scrollContainerThreshold - elementHeight;\n        // Same for window scroll left\n        const leftBorder = (!this.scrollContainer ? 0 : containerBounds.left) + this.windowScrollLeft + this._scrollContainerThreshold;\n        // Subtract the element width again because we position it from top left corner.\n        const elementWidth = this.ghost && this.ghostElement ? this.ghostElement.offsetWidth : this.element.nativeElement.offsetWidth;\n        const rightBorder = (!this.scrollContainer ? window.innerWidth : containerBounds.right) +\n            this.windowScrollLeft - this._scrollContainerThreshold - elementWidth\n\n        if (this.pageY <= topBorder && scrolledY) {\n            return DragScrollDirection.UP;\n        } else if (this.pageY > bottomBorder) {\n            return DragScrollDirection.DOWN;\n        } else if (this.pageX < leftBorder && scrolledX) {\n            return DragScrollDirection.LEFT;\n        } else if (this.pageX > rightBorder) {\n            return DragScrollDirection.RIGHT;\n        }\n        return null;\n    }\n\n    protected onScrollContainerStep(scrollDir: DragScrollDirection) {\n        animationFrameScheduler.schedule(() => {\n\n            let xDir = scrollDir == DragScrollDirection.LEFT ? -1 : (scrollDir == DragScrollDirection.RIGHT ? 1 : 0);\n            let yDir = scrollDir == DragScrollDirection.UP ? -1 : (scrollDir == DragScrollDirection.DOWN ? 1 : 0);\n            if (!this.scrollContainer) {\n                // Cap scrolling so we don't scroll past the window max scroll position.\n                const maxScrollX = this._originalScrollContainerWidth - this.document.documentElement.clientWidth;\n                const maxScrollY = this._originalScrollContainerHeight - this.document.documentElement.clientHeight;\n                xDir = (this.windowScrollLeft <= 0 && xDir < 0) || (this.windowScrollLeft >= maxScrollX && xDir > 0) ? 0 : xDir;\n                yDir = (this.windowScrollTop <= 0 && yDir < 0) || (this.windowScrollTop >= maxScrollY && yDir > 0) ? 0 : yDir;\n            } else {\n                // Cap scrolling so we don't scroll past the container max scroll position.\n                const maxScrollX = this._originalScrollContainerWidth - this.scrollContainer.clientWidth;\n                const maxScrollY = this._originalScrollContainerHeight - this.scrollContainer.clientHeight;\n                xDir = (this.scrollContainer.scrollLeft <= 0 && xDir < 0) || (this.scrollContainer.scrollLeft >= maxScrollX && xDir > 0) ? 0 : xDir;\n                yDir = (this.scrollContainer.scrollTop <= 0 && yDir < 0) || (this.scrollContainer.scrollTop >= maxScrollY && yDir > 0) ? 0 : yDir;\n            }\n\n            const scrollByX = xDir * this._scrollContainerStep;\n            const scrollByY = yDir * this._scrollContainerStep;\n\n            // Scroll the corresponding window or container.\n            if (!this.scrollContainer) {\n                window.scrollBy(scrollByX, scrollByY);\n            } else {\n                this.scrollContainer.scrollLeft += scrollByX;\n                this.scrollContainer.scrollTop += scrollByY;\n            }\n\n            if (this.ghost && !this.scrollContainer) {\n                // Scroll the ghost only when there is no container specifies.\n                // If it has container the ghost pretty much stays in the same position while the container is scrolled since e use top/left position.\n                // Otherwise increase the position the same amount we have scrolled the window\n                this.ghostLeft += scrollByX;\n                this.ghostTop += scrollByY;\n            } else if (!this.ghost) {\n                // Move the base element the same amount we moved the window/container because we use transformations.\n                const translateX = this.getTransformX(this.element.nativeElement) + scrollByX;\n                const translateY = this.getTransformY(this.element.nativeElement) + scrollByY;\n                this.setTransformXY(translateX, translateY);\n                if (!this.scrollContainer) {\n                    this._lastX += scrollByX;\n                    this._lastY += scrollByY;\n                }\n            }\n        })\n    }\n\n    protected onScrollContainer() {\n        const scrollDir = this.getContainerScrollDirection();\n        if (scrollDir !== null && scrollDir !== undefined && !this._containerScrollIntervalId) {\n            // Save original container sizes to ensure that we don't increase scroll sizes infinitely when out of bounds.\n            this._originalScrollContainerWidth = this.scrollContainer ? this.scrollContainer.scrollWidth : this.windowScrollWidth;\n            this._originalScrollContainerHeight = this.scrollContainer ? this.scrollContainer.scrollHeight : this.windowScrollHeight;\n\n            this._containerScrollIntervalId = setInterval(() => this.onScrollContainerStep(scrollDir), this._scrollContainerStepMs);\n        } else if ((scrollDir === null || scrollDir === undefined) && this._containerScrollIntervalId) {\n            // We moved out of end bounds and there is interval started\n            clearInterval(this._containerScrollIntervalId);\n            this._containerScrollIntervalId = null;\n        }\n    }\n}\n\n@Directive({\n    exportAs: 'drop',\n    selector: '[igxDrop]',\n    standalone: true\n})\nexport class IgxDropDirective implements OnInit, OnDestroy {\n    /**\n     * - Save data inside the `igxDrop` directive. This can be set when instancing `igxDrop` on an element.\n     * ```html\n     * <div [igxDrop]=\"{ source: myElement }\"></div>\n     * ```\n     *\n     * @memberof IgxDropDirective\n     */\n    @Input('igxDrop')\n    public set data(v: any) {\n        this._data = v;\n    }\n\n    public get data(): any {\n        return this._data;\n    }\n\n    /**\n     * A property that provides a way for igxDrag and igxDrop to be linked through channels.\n     * It accepts single value or an array of values and evaluates then using strict equality.\n     * ```html\n     * <div igxDrag [dragChannel]=\"'odd'\">\n     *         <span>95</span>\n     * </div>\n     * <div igxDrop [dropChannel]=\"['odd', 'irrational']\">\n     *         <span>Numbers drop area!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDropDirective\n     */\n    @Input()\n    public dropChannel: number | string | number[] | string[];\n\n    /**\n     * Sets a drop strategy type that will be executed when an `IgxDrag` element is released inside\n     *  the current drop area. The provided strategies are:\n     *  - IgxDefaultDropStrategy - This is the default base strategy and it doesn't perform any actions.\n     *  - IgxAppendDropStrategy - Appends the dropped element to last position as a direct child to the `igxDrop`.\n     *  - IgxPrependDropStrategy - Prepends the dropped element to first position as a direct child to the `igxDrop`.\n     *  - IgxInsertDropStrategy - If the dropped element is released above a child element of the `igxDrop`, it will be inserted\n     *      at that position. Otherwise the dropped element will be appended if released outside any child of the `igxDrop`.\n     * ```html\n     * <div igxDrag>\n     *      <span>DragMe</span>\n     * </div>\n     * <div igxDrop [dropStrategy]=\"myDropStrategy\">\n     *         <span>Numbers drop area!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * import { IgxAppendDropStrategy } from 'igniteui-angular';\n     *\n     * export class App {\n     *      public myDropStrategy = IgxAppendDropStrategy;\n     * }\n     * ```\n     *\n     * @memberof IgxDropDirective\n     */\n    @Input()\n    public set dropStrategy(classRef: any) {\n        this._dropStrategy = new classRef(this._renderer);\n    }\n\n    public get dropStrategy() {\n        return this._dropStrategy;\n    }\n\n    /**\n     * Event triggered when dragged element enters the area of the element.\n     * ```html\n     * <div class=\"cageArea\" igxDrop (enter)=\"dragEnter()\" (igxDragEnter)=\"onDragCageEnter()\" (igxDragLeave)=\"onDragCageLeave()\">\n     * </div>\n     * ```\n     * ```typescript\n     * public dragEnter(){\n     *     alert(\"A draggable element has entered the chip area!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDropDirective\n     */\n    @Output()\n    public enter = new EventEmitter<IDropBaseEventArgs>();\n\n    /**\n     * Event triggered when dragged element enters the area of the element.\n     * ```html\n     * <div class=\"cageArea\" igxDrop (enter)=\"dragEnter()\" (igxDragEnter)=\"onDragCageEnter()\" (igxDragLeave)=\"onDragCageLeave()\">\n     * </div>\n     * ```\n     * ```typescript\n     * public dragEnter(){\n     *     alert(\"A draggable element has entered the chip area!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDropDirective\n     */\n    @Output()\n    public over = new EventEmitter<IDropBaseEventArgs>();\n\n    /**\n     * Event triggered when dragged element leaves the area of the element.\n     * ```html\n     * <div class=\"cageArea\" igxDrop (leave)=\"dragLeave()\" (igxDragEnter)=\"onDragCageEnter()\" (igxDragLeave)=\"onDragCageLeave()\">\n     * </div>\n     * ```\n     * ```typescript\n     * public dragLeave(){\n     *     alert(\"A draggable element has left the chip area!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDropDirective\n     */\n    @Output()\n    public leave = new EventEmitter<IDropBaseEventArgs>();\n\n    /**\n     * Event triggered when dragged element is dropped in the area of the element.\n     * Since the `igxDrop` has default logic that appends the dropped element as a child, it can be canceled here.\n     * To cancel the default logic the `cancel` property of the event needs to be set to true.\n     * ```html\n     * <div class=\"cageArea\" igxDrop (dropped)=\"dragDrop()\" (igxDragEnter)=\"onDragCageEnter()\" (igxDragLeave)=\"onDragCageLeave()\">\n     * </div>\n     * ```\n     * ```typescript\n     * public dragDrop(){\n     *     alert(\"A draggable element has been dropped in the chip area!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDropDirective\n     */\n    @Output()\n    public dropped = new EventEmitter<IDropDroppedEventArgs>();\n\n    /**\n     * @hidden\n     */\n    @HostBinding('attr.droppable')\n    public droppable = true;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.dragOver')\n    public dragover = false;\n\n    /**\n     * @hidden\n     */\n    protected _destroy = new Subject<boolean>();\n    protected _dropStrategy: IDropStrategy;\n\n    private _data: any;\n\n    public element = inject(ElementRef);\n    protected _renderer = inject(Renderer2);\n    private _zone = inject(NgZone);\n\n    constructor() {\n        this._dropStrategy = new IgxDefaultDropStrategy();\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('igxDrop', ['$event'])\n    public onDragDrop(event) {\n        if (!this.isDragLinked(event.detail.owner)) {\n            return;\n        }\n\n        const elementPosX = this.element.nativeElement.getBoundingClientRect().left + this.getWindowScrollLeft();\n        const elementPosY = this.element.nativeElement.getBoundingClientRect().top + this.getWindowScrollTop();\n        const offsetX = event.detail.pageX - elementPosX;\n        const offsetY = event.detail.pageY - elementPosY;\n        const args: IDropDroppedEventArgs = {\n            owner: this,\n            originalEvent: event.detail.originalEvent,\n            drag: event.detail.owner,\n            dragData: event.detail.owner.data,\n            startX: event.detail.startX,\n            startY: event.detail.startY,\n            pageX: event.detail.pageX,\n            pageY: event.detail.pageY,\n            offsetX,\n            offsetY,\n            cancel: false\n        };\n        this._zone.run(() => {\n            this.dropped.emit(args);\n        });\n\n        if (this._dropStrategy && !args.cancel) {\n            const elementsAtPoint = event.detail.owner.getElementsAtPoint(event.detail.pageX, event.detail.pageY);\n            const insertIndex = this.getInsertIndexAt(event.detail.owner, elementsAtPoint);\n            this._dropStrategy.dropAction(event.detail.owner, this, insertIndex);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit() {\n        this._zone.runOutsideAngular(() => {\n            fromEvent(this.element.nativeElement, 'igxDragEnter').pipe(takeUntil(this._destroy))\n                .subscribe((res) => this.onDragEnter(res as CustomEvent<IgxDragCustomEventDetails>));\n\n            fromEvent(this.element.nativeElement, 'igxDragLeave').pipe(takeUntil(this._destroy)).subscribe((res) => this.onDragLeave(res));\n            fromEvent(this.element.nativeElement, 'igxDragOver').pipe(takeUntil(this._destroy)).subscribe((res) => this.onDragOver(res));\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this._destroy.next(true);\n        this._destroy.complete();\n    }\n\n    /**\n     * @hidden\n     */\n    public onDragOver(event) {\n        const elementPosX = this.element.nativeElement.getBoundingClientRect().left + this.getWindowScrollLeft();\n        const elementPosY = this.element.nativeElement.getBoundingClientRect().top + this.getWindowScrollTop();\n        const offsetX = event.detail.pageX - elementPosX;\n        const offsetY = event.detail.pageY - elementPosY;\n        const eventArgs: IDropBaseEventArgs = {\n            originalEvent: event.detail.originalEvent,\n            owner: this,\n            drag: event.detail.owner,\n            dragData: event.detail.owner.data,\n            startX: event.detail.startX,\n            startY: event.detail.startY,\n            pageX: event.detail.pageX,\n            pageY: event.detail.pageY,\n            offsetX,\n            offsetY\n        };\n\n        this.over.emit(eventArgs);\n    }\n\n    /**\n     * @hidden\n     */\n    public onDragEnter(event: CustomEvent<IgxDragCustomEventDetails>) {\n        if (!this.isDragLinked(event.detail.owner)) {\n            return;\n        }\n\n        this.dragover = true;\n        const elementPosX = this.element.nativeElement.getBoundingClientRect().left + this.getWindowScrollLeft();\n        const elementPosY = this.element.nativeElement.getBoundingClientRect().top + this.getWindowScrollTop();\n        const offsetX = event.detail.pageX - elementPosX;\n        const offsetY = event.detail.pageY - elementPosY;\n        const eventArgs: IDropBaseEventArgs = {\n            originalEvent: event.detail.originalEvent,\n            owner: this,\n            drag: event.detail.owner,\n            dragData: event.detail.owner.data,\n            startX: event.detail.startX,\n            startY: event.detail.startY,\n            pageX: event.detail.pageX,\n            pageY: event.detail.pageY,\n            offsetX,\n            offsetY\n        };\n        this._zone.run(() => {\n            this.enter.emit(eventArgs);\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public onDragLeave(event) {\n        if (!this.isDragLinked(event.detail.owner)) {\n            return;\n        }\n\n        this.dragover = false;\n        const elementPosX = this.element.nativeElement.getBoundingClientRect().left + this.getWindowScrollLeft();\n        const elementPosY = this.element.nativeElement.getBoundingClientRect().top + this.getWindowScrollTop();\n        const offsetX = event.detail.pageX - elementPosX;\n        const offsetY = event.detail.pageY - elementPosY;\n        const eventArgs: IDropBaseEventArgs = {\n            originalEvent: event.detail.originalEvent,\n            owner: this,\n            drag: event.detail.owner,\n            dragData: event.detail.owner.data,\n            startX: event.detail.startX,\n            startY: event.detail.startY,\n            pageX: event.detail.pageX,\n            pageY: event.detail.pageY,\n            offsetX,\n            offsetY\n        };\n        this._zone.run(() => {\n            this.leave.emit(eventArgs);\n        });\n    }\n\n    protected getWindowScrollTop() {\n        return window.scrollY ? window.scrollY : (window.pageYOffset ? window.pageYOffset : 0);\n    }\n\n    protected getWindowScrollLeft() {\n        return window.scrollX ? window.scrollX : (window.pageXOffset ? window.pageXOffset : 0);\n    }\n\n    protected isDragLinked(drag: IgxDragDirective): boolean {\n        const dragLinkArray = drag.dragChannel instanceof Array;\n        const dropLinkArray = this.dropChannel instanceof Array;\n\n        if (!dragLinkArray && !dropLinkArray) {\n            return this.dropChannel === drag.dragChannel;\n        } else if (!dragLinkArray && dropLinkArray) {\n            const dropLinks = this.dropChannel as any[];\n            for (const link of dropLinks) {\n                if (link === drag.dragChannel) {\n                    return true;\n                }\n            }\n        } else if (dragLinkArray && !dropLinkArray) {\n            const dragLinks = drag.dragChannel as any[];\n            for (const link of dragLinks) {\n                if (link === this.dropChannel) {\n                    return true;\n                }\n            }\n        } else {\n            const dragLinks = drag.dragChannel as any[];\n            const dropLinks = this.dropChannel as any[];\n            for (const draglink of dragLinks) {\n                for (const droplink of dropLinks) {\n                    if (draglink === droplink) {\n                        return true;\n                    }\n                }\n            }\n        }\n\n        return false;\n    }\n\n    protected getInsertIndexAt(draggedDir: IgxDragDirective, elementsAtPoint: any[]): number {\n        let insertIndex = -1;\n        const dropChildren = Array.prototype.slice.call(this.element.nativeElement.children);\n        if (!dropChildren.length) {\n            return insertIndex;\n        }\n\n        let i = 0;\n        let childUnder = null;\n        while (!childUnder && i < elementsAtPoint.length) {\n            if (elementsAtPoint[i].parentElement === this.element.nativeElement) {\n                childUnder = elementsAtPoint[i];\n            }\n            i++;\n        }\n\n        const draggedElemIndex = dropChildren.indexOf(draggedDir.element.nativeElement);\n        insertIndex = dropChildren.indexOf(childUnder);\n        if (draggedElemIndex !== -1 && draggedElemIndex < insertIndex) {\n            insertIndex++;\n        }\n\n        return insertIndex;\n    }\n}\n\n","import { IgxDragDirective, IgxDragHandleDirective, IgxDragIgnoreDirective, IgxDropDirective } from './drag-drop.directive';\n\nexport * from './drag-drop.strategy';\nexport * from './drag-drop.directive';\n\n/* NOTE: Drag and drop directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_DRAG_DROP_DIRECTIVES = [\n    IgxDragDirective,\n    IgxDropDirective,\n    IgxDragHandleDirective,\n    IgxDragIgnoreDirective\n] as const;\n","import {\n    Directive,\n    EventEmitter,\n    Input,\n    OnChanges,\n    Output,\n    Pipe,\n    PipeTransform,\n    SimpleChanges\n} from '@angular/core';\n\nexport class IgxFilterOptions {\n    // Input text value that will be used as a filtering pattern (matching condition is based on it)\n    public inputValue = '';\n\n    // Item property, which value should be used for filtering\n    public key: string | string[];\n\n    // Represent items of the list. It should be used to handle declaratively defined widgets\n    public items: any[];\n\n    // Function - get value to be tested from the item\n    // item - single item of the list to be filtered\n    // key - property name of item, which value should be tested\n    // Default behavior - returns \"key\"- named property value of item if key is provided,\n    // otherwise textContent of the item's html element\n    public get_value(item: any, key: string): string {\n        let result = '';\n\n        if (key && item[key]) {\n            result = item[key].toString();\n        } else if (item.element) {\n            if (item.element.nativeElement) {\n                result = item.element.nativeElement.textContent.trim();\n            // Check if element doesn't return the DOM element directly\n            } else if (item.element.textContent) {\n                result = item.element.textContent.trim();\n            }\n        }\n\n        return result;\n    }\n\n    // Function - formats the original text before matching process\n    // Default behavior - returns text to lower case\n    public formatter(valueToTest: string): string {\n        return valueToTest.toLowerCase();\n    }\n\n    // Function - determines whether the item met the condition\n    // valueToTest - text value that should be tested\n    // inputValue - text value from input that condition is based on\n    // Default behavior - \"contains\"\n    public matchFn(valueToTest: string, inputValue: string): boolean {\n        return valueToTest.indexOf(inputValue && inputValue.toLowerCase() || '') > -1;\n    }\n\n    // Function - executed after matching test for every matched item\n    // Default behavior - shows the item\n    public metConditionFn(item: any) {\n        if (item.hasOwnProperty('hidden')) {\n            item.hidden = false;\n        }\n    }\n\n    // Function - executed for every NOT matched item after matching test\n    // Default behavior - hides the item\n    public overdueConditionFn(item: any) {\n        if (item.hasOwnProperty('hidden')) {\n            item.hidden = true;\n        }\n    }\n}\n\n\n@Directive({\n    selector: '[igxFilter]',\n    standalone: true\n})\nexport class IgxFilterDirective implements OnChanges {\n    @Output() public filtering = new EventEmitter(false); // synchronous event emitter\n    @Output() public filtered = new EventEmitter();\n\n    @Input('igxFilter') public filterOptions: IgxFilterOptions;\n\n    constructor() {\n    }\n\n    public ngOnChanges(changes: SimpleChanges) {\n        // Detect only changes of input value\n        if (changes.filterOptions &&\n            changes.filterOptions.currentValue &&\n            changes.filterOptions.currentValue.inputValue !== undefined &&\n            changes.filterOptions.previousValue &&\n            changes.filterOptions.currentValue.inputValue !== changes.filterOptions.previousValue.inputValue) {\n            this.filter();\n        }\n    }\n\n    private filter() {\n        if (!this.filterOptions.items) {\n            return;\n        }\n\n        const args = { cancel: false, items: this.filterOptions.items };\n        this.filtering.emit(args);\n\n        if (args.cancel) {\n            return;\n        }\n\n        const pipe = new IgxFilterPipe();\n\n        const filtered = pipe.transform(this.filterOptions.items, this.filterOptions);\n        this.filtered.emit({ filteredItems: filtered });\n    }\n}\n\n@Pipe({\n    name: 'igxFilter',\n    pure: false,\n    standalone: true\n})\nexport class IgxFilterPipe implements PipeTransform {\n    private findMatchByKey(item: any, options: IgxFilterOptions, key: string) {\n        const match = options.matchFn(options.formatter(options.get_value(item, key)), options.inputValue);\n\n        if (match) {\n            if (options.metConditionFn) {\n                options.metConditionFn(item);\n            }\n        } else {\n            if (options.overdueConditionFn) {\n                options.overdueConditionFn(item);\n            }\n        }\n\n        return match;\n    }\n\n    public transform(items: any[],\n                     // options - initial settings of filter functionality\n                     options: IgxFilterOptions) {\n\n        let result = [];\n\n        if (!items || !items.length || !options) {\n            return;\n        }\n\n        if (options.items) {\n            items = options.items;\n        }\n\n        result = items.filter((item: any) => {\n            if (!Array.isArray(options.key)) {\n                return this.findMatchByKey(item, options, options.key);\n            } else {\n                let isMatch = false;\n                options.key.forEach(key => {\n                    if (this.findMatchByKey(item, options, key)) {\n                        isMatch = true;\n                    }\n                });\n                return isMatch;\n            }\n        });\n\n        return result;\n    }\n}\n","import { Directive, ElementRef, Input, booleanAttribute, inject } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { EditorProvider, EDITOR_PROVIDER } from 'igniteui-angular/core';\n\n@Directive({\n    exportAs: 'igxFocus',\n    selector: '[igxFocus]',\n    standalone: true\n})\nexport class IgxFocusDirective {\n    private element = inject(ElementRef);\n    private comp = inject<any[]>(NG_VALUE_ACCESSOR, { self: true, optional: true });\n    private control = inject(EDITOR_PROVIDER, { self: true, optional: true });\n\n\n    private focusState = true;\n\n    /**\n     * Returns the state of the igxFocus.\n     * ```typescript\n     * @ViewChild('focusContainer', {read: IgxFocusDirective})\n     * public igxFocus: IgxFocusDirective;\n     * let isFocusOn = this.igxFocus.focused;\n     * ```\n     *\n     * @memberof IgxFocusDirective\n     */\n    @Input({ alias: 'igxFocus', transform: booleanAttribute })\n    public get focused(): boolean {\n        return this.focusState;\n    }\n\n    /**\n     * Sets the state of the igxFocus.\n     * ```html\n     * <igx-input-group >\n     *  <input #focusContainer igxInput [igxFocus]=\"true\"/>\n     * </igx-input-group>\n     * ```\n     *\n     * @memberof IgxFocusDirective\n     */\n    public set focused(val: boolean) {\n        this.focusState = val;\n        this.trigger();\n    }\n\n    /**\n     * Gets the native element of the igxFocus.\n     * ```typescript\n     * @ViewChild('focusContainer', {read: IgxFocusDirective})\n     * public igxFocus: IgxFocusDirective;\n     * let igxFocusNativeElement = this.igxFocus.nativeElement;\n     * ```\n     *\n     * @memberof IgxFocusDirective\n     */\n    public get nativeElement() {\n        if (this.comp && this.comp[0] && this.comp[0].getEditElement) {\n            return (this.comp[0] as EditorProvider).getEditElement();\n        }\n\n        if (this.control && this.control[0] && this.control[0].getEditElement) {\n            return this.control[0].getEditElement();\n        }\n\n        return this.element.nativeElement;\n    }\n\n    /**\n     * Triggers the igxFocus state.\n     * ```typescript\n     * @ViewChild('focusContainer', {read: IgxFocusDirective})\n     * public igxFocus: IgxFocusDirective;\n     * this.igxFocus.trigger();\n     * ```\n     *\n     * @memberof IgxFocusDirective\n     */\n    public trigger() {\n        if (this.focusState) {\n            requestAnimationFrame(() => this.nativeElement.focus({ preventScroll: true }));\n        }\n    }\n}\n","import { AfterViewInit, Directive, ElementRef, Input, OnDestroy, booleanAttribute, inject } from '@angular/core';\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { PlatformUtil } from 'igniteui-angular/core';\n\n@Directive({\n    selector: '[igxFocusTrap]',\n    standalone: true\n})\nexport class IgxFocusTrapDirective implements AfterViewInit, OnDestroy {\n    private elementRef = inject(ElementRef);\n    protected platformUtil = inject(PlatformUtil);\n\n    /** @hidden */\n    public get element(): HTMLElement | null {\n        return this.elementRef.nativeElement;\n    }\n\n    private destroy$ = new Subject();\n    private _focusTrap = true;\n\n    /**\n     * Sets whether the Tab key focus is trapped within the element.\n     *\n     * @example\n     * ```html\n     * <div igxFocusTrap=\"true\"></div>\n     * ```\n     */\n    @Input({ alias: 'igxFocusTrap', transform: booleanAttribute })\n    public set focusTrap(focusTrap: boolean) {\n        this._focusTrap = focusTrap;\n    }\n\n    /** @hidden */\n    public get focusTrap(): boolean {\n        return this._focusTrap;\n    }\n\n    /** @hidden */\n    public ngAfterViewInit(): void {\n        fromEvent(this.element, 'keydown')\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((event: KeyboardEvent) => {\n                if (this._focusTrap && event.key === this.platformUtil.KEYMAP.TAB) {\n                    this.handleTab(event);\n                }\n            });\n    }\n\n    /** @hidden */\n    public ngOnDestroy() {\n        this.destroy$.complete();\n    }\n\n    private handleTab(event) {\n        const elements = this.getFocusableElements(this.element);\n        if (elements.length > 0) {\n            const focusedElement = this.getFocusedElement();\n            const focusedElementIndex = elements.findIndex((element) => element as HTMLElement === focusedElement);\n            const direction = event.shiftKey ? -1 : 1;\n            let nextFocusableElementIndex = focusedElementIndex + direction;\n            if (nextFocusableElementIndex < 0) {\n                nextFocusableElementIndex = elements.length - 1;\n            }\n            if (nextFocusableElementIndex >= elements.length) {\n                nextFocusableElementIndex = 0;\n            }\n            (elements[nextFocusableElementIndex] as HTMLElement).focus();\n        } else {\n            this.element.focus();\n        }\n\n        event.preventDefault();\n    }\n\n    private getFocusableElements(element: Element) {\n        return Array.from(element.querySelectorAll(\n            'a[href], button, input, textarea, select, details,[tabindex]:not([tabindex=\"-1\"])'\n        )).filter(el => !el.hasAttribute('disabled') && !el.closest('[aria-hidden=\"true\"]'));\n    }\n\n    private getFocusedElement(): HTMLElement | null {\n        let activeElement =\n            typeof document !== 'undefined' && document\n                ? (document.activeElement as HTMLElement | null)\n                : null;\n\n        while (activeElement && activeElement.shadowRoot) {\n            const newActiveElement = activeElement.shadowRoot.activeElement as HTMLElement | null;\n            if (newActiveElement === activeElement) {\n                break;\n            } else {\n                activeElement = newActiveElement;\n            }\n        }\n\n        return activeElement;\n    }\n}\n","import { Directive, Input, ElementRef, NgZone, OnInit, OnDestroy, inject } from '@angular/core';\n\nconst BASE_DELTA_MULTIPLIER = 1 / 120;\nconst FIREFOX_DELTA_MULTIPLIER = 1 / 30;\nconst SAVED_SPEEDS_CAPACITY = 5;\nconst TOUCH_TIME_THRESHOLD = 100;\nconst SPEED_THRESHOLD = 0.1;\nconst MOVEMENT_THRESHOLD = 2;\nconst INERTIA_CANCEL_THRESHOLD = 6;\nconst INERTIA_BREAKPOINT = 1;\nconst INERTIA_MULTIPLIER = 15;\nconst WHEEL_ANIMATION_STEP = 0.08;\n\n// Inertia falloff formula constants: y = FALLOFF_NUMERATOR / (x + FALLOFF_OFFSET) - FALLOFF_SUBTRACTION\nconst FALLOFF_NUMERATOR = 2;\nconst FALLOFF_OFFSET = 0.55;\nconst FALLOFF_SUBTRACTION = 0.3;\nconst TIME_STEP_INCREMENT = 0.05;\nconst WHEEL_CURVE_COEFFICIENT = -3;\nconst WHEEL_CURVE_MULTIPLIER = 3;\nconst WHEEL_DELTA_MULTIPLIER = 2;\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxScrollInertia]',\n    standalone: true\n})\nexport class IgxScrollInertiaDirective implements OnInit, OnDestroy {\n    private readonly _element = inject(ElementRef);\n    private readonly _zone = inject(NgZone);\n    private _abort?: AbortController;\n\n\n    @Input()\n    public IgxScrollInertiaDirection: string;\n\n    @Input()\n    public IgxScrollInertiaScrollContainer: HTMLElement;\n\n    @Input()\n    public wheelStep = 50;\n\n    @Input()\n    public inertiaStep = 1.5;\n\n    @Input()\n    public smoothingStep = 1.5;\n\n    @Input()\n    public smoothingDuration = 0.5;\n\n    @Input()\n    public swipeToleranceX = 20;\n\n    @Input()\n    public inertiaDeltaY = 3;\n\n    @Input()\n    public inertiaDeltaX = 2;\n\n    @Input()\n    public inertiaDuration = 0.5;\n\n    private _touchInertiaAnimID: ReturnType<typeof requestAnimationFrame>;\n    private _startX: number;\n    private _startY: number;\n    private _touchStartX: number;\n    private _touchStartY: number;\n    private _lastTouchEnd: number;\n    private _lastTouchX: number;\n    private _lastTouchY: number;\n    private _savedSpeedsX: number[] = [];\n    private _savedSpeedsY: number[] = [];\n    private _totalMovedX: number;\n    private _offsetRecorded: boolean;\n    private _offsetDirection: number;\n    private _lastMovedX: number;\n    private _lastMovedY: number;\n    private _nextX: number;\n    private _nextY: number;\n    private _speedsIndexX = 0;\n    private _speedsIndexY = 0;\n    private parentElement: HTMLElement;\n    private _cachedFirstChild: HTMLElement | null = null;\n\n    public ngOnInit(): void {\n        this._zone.runOutsideAngular(() => {\n            this.parentElement = this._element.nativeElement.parentElement || this._element.nativeElement.parentNode;\n\n            if (!this.parentElement) {\n                return;\n            }\n\n            this._abort = new AbortController();\n            for (const each of ['wheel', 'touchstart', 'touchmove', 'touchend']) {\n                this.parentElement.addEventListener(each, this, { passive: false, signal: this._abort.signal });\n            }\n        });\n    }\n\n    /** @hidden */\n    public handleEvent(event: Event): void {\n        switch (event.type) {\n            case 'wheel':\n                this.onWheel(event as WheelEvent);\n                break;\n            case 'touchstart':\n                this.onTouchStart(event as TouchEvent);\n                break;\n            case 'touchmove':\n                this.onTouchMove(event as TouchEvent);\n                break;\n            case 'touchend':\n                this.onTouchEnd(event as TouchEvent);\n                break;\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this._zone.runOutsideAngular(() => {\n            this._abort?.abort();\n        });\n    }\n\n    /**\n     * @hidden\n     * Function that is called when scrolling with the mouse wheel or using touchpad\n     */\n    private getFirstChild(): HTMLElement | null {\n        if (!this._cachedFirstChild && this.IgxScrollInertiaScrollContainer) {\n            this._cachedFirstChild = this.IgxScrollInertiaScrollContainer.children[0] as HTMLElement;\n        }\n        return this._cachedFirstChild;\n    }\n\n    protected onWheel(evt: WheelEvent & { wheelDeltaX?: number; wheelDeltaY?: number }): void {\n        const container = this.IgxScrollInertiaScrollContainer;\n        // if no scrollbar return\n        if (!container) {\n            return;\n        }\n        // if ctrl key is pressed and the user want to zoom in/out the page\n        if (evt.ctrlKey) {\n            return;\n        }\n        let scrollDeltaX: number | undefined;\n        let scrollDeltaY: number | undefined;\n        const scrollStep = this.wheelStep;\n        const minWheelStep = 1 / scrollStep;\n        const smoothing = this.smoothingDuration !== 0;\n\n        this._startX = container.scrollLeft;\n        this._startY = container.scrollTop;\n\n        // Handle wheelDeltaX/Y (Chrome, Safari, Opera)\n        if (evt.wheelDeltaX) {\n            scrollDeltaX = -evt.wheelDeltaX * BASE_DELTA_MULTIPLIER;\n            if (-minWheelStep < scrollDeltaX && scrollDeltaX < minWheelStep) {\n                scrollDeltaX = Math.sign(scrollDeltaX) * minWheelStep;\n            }\n        } else if (evt.deltaX) {\n            const deltaScaledX = evt.deltaX * (evt.deltaMode === 0 ? FIREFOX_DELTA_MULTIPLIER : 1);\n            scrollDeltaX = this.calcAxisCoords(deltaScaledX, -1, 1);\n        }\n\n        if (evt.wheelDeltaY) {\n            scrollDeltaY = -evt.wheelDeltaY * BASE_DELTA_MULTIPLIER;\n            if (-minWheelStep < scrollDeltaY && scrollDeltaY < minWheelStep) {\n                scrollDeltaY = Math.sign(scrollDeltaY) * minWheelStep;\n            }\n        } else if (evt.deltaY) {\n            const deltaScaledY = evt.deltaY * (evt.deltaMode === 0 ? FIREFOX_DELTA_MULTIPLIER : 1);\n            scrollDeltaY = this.calcAxisCoords(deltaScaledY, -1, 1);\n        }\n\n        if (evt.composedPath && this.didChildScroll(evt, scrollDeltaX, scrollDeltaY)) {\n            return;\n        }\n\n        if (scrollDeltaX && this.IgxScrollInertiaDirection === 'horizontal') {\n            const nextLeft = this._startX + scrollDeltaX * scrollStep;\n            if (!smoothing) {\n                this._scrollToX(nextLeft);\n            } else {\n                this._smoothWheelScroll(scrollDeltaX);\n            }\n            const firstChild = this.getFirstChild();\n            if (firstChild) {\n                const maxScrollLeft = parseInt(firstChild.style.width, 10);\n                if (0 < nextLeft && nextLeft < maxScrollLeft) {\n                    // Prevent navigating through pages when scrolling on Mac\n                    evt.preventDefault();\n                }\n            }\n        } else if (evt.shiftKey && scrollDeltaY && this.IgxScrollInertiaDirection === 'horizontal') {\n            if (!smoothing) {\n                const step = this._startX + scrollDeltaY * scrollStep;\n                this._scrollToX(step);\n            } else {\n                this._smoothWheelScroll(scrollDeltaY);\n            }\n        } else if (!evt.shiftKey && scrollDeltaY && this.IgxScrollInertiaDirection === 'vertical') {\n            const nextTop = this._startY + scrollDeltaY * scrollStep;\n            if (!smoothing) {\n                this._scrollToY(nextTop);\n            } else {\n                this._smoothWheelScroll(scrollDeltaY);\n            }\n            this.preventParentScroll(evt, true, nextTop);\n        }\n    }\n\n    /**\n     * @hidden\n     * When there is still room to scroll up/down prevent the parent elements from scrolling too.\n     */\n    protected preventParentScroll(evt: Event, preventDefault: boolean, nextTop = 0): void {\n        const container = this.IgxScrollInertiaScrollContainer;\n        const firstChild = this.getFirstChild();\n        if (!firstChild) {\n            return;\n        }\n        const curScrollTop = nextTop === 0 ? container.scrollTop : nextTop;\n        const maxScrollTop = firstChild.scrollHeight - container.offsetHeight;\n        if (0 < curScrollTop && curScrollTop < maxScrollTop) {\n            if (preventDefault) {\n                evt.preventDefault();\n            }\n            if (evt.stopPropagation) {\n                evt.stopPropagation();\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * Checks if the wheel event would have scrolled an element under the display container\n     * in DOM tree so that it can correctly be ignored until that element can no longer be scrolled.\n     */\n    private canElementScrollVertically(element: Element, delta: number, overflowY: string): boolean {\n        if (overflowY !== 'auto' && overflowY !== 'scroll') {\n            return false;\n        }\n        if (delta > 0) {\n            return element.scrollHeight - Math.abs(Math.round(element.scrollTop)) !== element.clientHeight;\n        }\n        return element.scrollTop !== 0;\n    }\n\n    private canElementScrollHorizontally(element: Element, delta: number, overflowX: string): boolean {\n        if (overflowX !== 'auto' && overflowX !== 'scroll') {\n            return false;\n        }\n        if (delta > 0) {\n            return element.scrollWidth - Math.abs(Math.round(element.scrollLeft)) !== element.clientWidth;\n        }\n        return element.scrollLeft !== 0;\n    }\n\n    protected didChildScroll(evt: Event, scrollDeltaX: number, scrollDeltaY: number): boolean {\n        const path = evt.composedPath() as Element[];\n        const pathLength = path.length;\n\n        for (let i = 0; i < pathLength; i++) {\n            const element = path[i];\n            if (element.localName === 'igx-display-container') {\n                break;\n            }\n\n            const hasVerticalOverflow = element.scrollHeight > element.clientHeight;\n            const hasHorizontalOverflow = element.scrollWidth > element.clientWidth;\n\n            if (!hasVerticalOverflow && !hasHorizontalOverflow) {\n                continue;\n            }\n\n            const styles = window.getComputedStyle(element);\n\n            if (hasVerticalOverflow && scrollDeltaY !== 0) {\n                if (this.canElementScrollVertically(element, scrollDeltaY, styles.overflowY)) {\n                    return true;\n                }\n            }\n\n            if (hasHorizontalOverflow && scrollDeltaX !== 0) {\n                if (this.canElementScrollHorizontally(element, scrollDeltaX, styles.overflowX)) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    /**\n     * @hidden\n     * Function that is called the first moment we start interacting with the content on a touch device\n     */\n    protected onTouchStart(event: TouchEvent): void {\n        const container = this.IgxScrollInertiaScrollContainer;\n        if (!container) {\n            return;\n        }\n\n        // stops any current ongoing inertia\n        cancelAnimationFrame(this._touchInertiaAnimID);\n\n        const touch = event.touches[0];\n        const touchX = touch.pageX;\n        const touchY = touch.pageY;\n\n        this._startX = container.scrollLeft;\n        this._startY = container.scrollTop;\n        this._touchStartX = touchX;\n        this._touchStartY = touchY;\n        this._lastTouchEnd = Date.now();\n        this._lastTouchX = touchX;\n        this._lastTouchY = touchY;\n        this._savedSpeedsX = new Array(SAVED_SPEEDS_CAPACITY);\n        this._savedSpeedsY = new Array(SAVED_SPEEDS_CAPACITY);\n        this._speedsIndexX = 0;\n        this._speedsIndexY = 0;\n\n        // Vars regarding swipe offset\n        this._totalMovedX = 0;\n        this._offsetRecorded = false;\n        this._offsetDirection = 0;\n\n        if (this.IgxScrollInertiaDirection === 'vertical') {\n            this.preventParentScroll(event, false);\n        }\n    }\n\n    /**\n     * @hidden\n     * Function that is called when we need to scroll the content based on touch interactions\n     */\n    protected onTouchMove(event: TouchEvent): void {\n        if (!this.IgxScrollInertiaScrollContainer) {\n            return;\n        }\n\n        const touch = event.touches[0];\n        const touchX = touch.pageX;\n        const touchY = touch.pageY;\n        const inertiaSign = Math.sign(this.inertiaStep);\n        const destX = this._startX + (this._touchStartX - touchX) * inertiaSign;\n        const destY = this._startY + (this._touchStartY - touchY) * inertiaSign;\n\n        /* Handle complex touchmove when swipe stops but the touch doesn't end and then a swipe is initiated again */\n        const currentTime = Date.now();\n        const timeFromLastTouch = currentTime - this._lastTouchEnd;\n\n        if (timeFromLastTouch !== 0 && timeFromLastTouch < TOUCH_TIME_THRESHOLD) {\n            const speedX = (this._lastTouchX - touchX) / timeFromLastTouch;\n            const speedY = (this._lastTouchY - touchY) / timeFromLastTouch;\n\n            // Use circular buffer to save the last speeds - avoids expensive shift() operation\n            this._savedSpeedsX[this._speedsIndexX] = speedX;\n            this._speedsIndexX = (this._speedsIndexX + 1) % SAVED_SPEEDS_CAPACITY;\n\n            this._savedSpeedsY[this._speedsIndexY] = speedY;\n            this._speedsIndexY = (this._speedsIndexY + 1) % SAVED_SPEEDS_CAPACITY;\n        }\n        this._lastTouchEnd = currentTime;\n        this._lastMovedX = this._lastTouchX - touch.pageX;\n        this._lastMovedY = this._lastTouchY - touch.pageY;\n        this._lastTouchX = touch.pageX;\n        this._lastTouchY = touch.pageY;\n\n        this._totalMovedX += this._lastMovedX;\n\n        /*\tDo not scroll using touch until out of the swipeToleranceX bounds */\n        if (Math.abs(this._totalMovedX) < this.swipeToleranceX && !this._offsetRecorded) {\n            this._scrollTo(this._startX, destY);\n        } else {\n            /*\tRecord the direction the first time we are out of the swipeToleranceX bounds.\n            *\tThat way we know which direction we apply the offset so it doesn't hiccup when moving out of the swipeToleranceX bounds */\n            if (!this._offsetRecorded) {\n                this._offsetDirection = Math.sign(destX - this._startX);\n                this._offsetRecorded = true;\n            }\n\n            /*\tScroll with offset amount of swipeToleranceX in the direction we have exited the bounds and\n            don't change it after that ever until touchend and again touchstart */\n            this._scrollTo(destX - this._offsetDirection * this.swipeToleranceX, destY);\n        }\n\n        // On Safari preventing the touchmove would prevent default page scroll behavior even if there is the element doesn't have overflow\n        if (this.IgxScrollInertiaDirection === 'vertical') {\n            this.preventParentScroll(event, true);\n        }\n    }\n\n    protected onTouchEnd(event: TouchEvent): void {\n        let speedX = 0;\n        let speedY = 0;\n        let validCountX = 0;\n        let validCountY = 0;\n\n        // Calculate average speed from circular buffer, ignoring undefined values\n        for (let i = 0; i < SAVED_SPEEDS_CAPACITY; i++) {\n            if (this._savedSpeedsX[i] !== undefined) {\n                speedX += this._savedSpeedsX[i];\n                validCountX++;\n            }\n            if (this._savedSpeedsY[i] !== undefined) {\n                speedY += this._savedSpeedsY[i];\n                validCountY++;\n            }\n        }\n\n        if (validCountX > 0) {\n            speedX /= validCountX;\n        }\n        if (validCountY > 0) {\n            speedY /= validCountY;\n        }\n\n        // Use the lastMovedX and lastMovedY to determine if the swipe stops without lifting the finger so we don't start inertia\n        if ((Math.abs(speedX) > SPEED_THRESHOLD || Math.abs(speedY) > SPEED_THRESHOLD) &&\n            (Math.abs(this._lastMovedX) > MOVEMENT_THRESHOLD || Math.abs(this._lastMovedY) > MOVEMENT_THRESHOLD)) {\n            this._inertiaInit(speedX, speedY);\n        }\n        if (this.IgxScrollInertiaDirection === 'vertical') {\n            this.preventParentScroll(event, false);\n        }\n    }\n\n    protected _smoothWheelScroll(delta: number): void {\n        const container = this.IgxScrollInertiaScrollContainer;\n        this._nextY = container.scrollTop;\n        this._nextX = container.scrollLeft;\n        let timeProgress = -1;\n        let wheelInertialAnimation: number | null = null;\n        const isVertical = this.IgxScrollInertiaDirection === 'vertical';\n        const smoothingStep = this.smoothingStep;\n        const stepIncrement = WHEEL_ANIMATION_STEP / this.smoothingDuration;\n\n        const inertiaWheelStep = (): void => {\n            if (timeProgress > INERTIA_BREAKPOINT) {\n                if (wheelInertialAnimation !== null) {\n                    cancelAnimationFrame(wheelInertialAnimation);\n                }\n                return;\n            }\n            // Ease-out cubic curve: y = (-3x² + 3) * delta * 2\n            const nextScroll = ((WHEEL_CURVE_COEFFICIENT * timeProgress * timeProgress + WHEEL_CURVE_MULTIPLIER) * delta * WHEEL_DELTA_MULTIPLIER) * smoothingStep;\n            if (isVertical) {\n                this._nextY += nextScroll;\n                this._scrollToY(this._nextY);\n            } else {\n                this._nextX += nextScroll;\n                this._scrollToX(this._nextX);\n            }\n            // continue the inertia\n            timeProgress += stepIncrement;\n            wheelInertialAnimation = requestAnimationFrame(inertiaWheelStep);\n        };\n        wheelInertialAnimation = requestAnimationFrame(inertiaWheelStep);\n    }\n\n    protected _inertiaInit(speedX: number, speedY: number): void {\n        const container = this.IgxScrollInertiaScrollContainer;\n        const stepModifier = this.inertiaStep;\n        const inertiaDuration = this.inertiaDuration;\n        const inertiaDeltaX = this.inertiaDeltaX;\n        const inertiaDeltaY = this.inertiaDeltaY;\n        const absSpeedX = Math.abs(speedX);\n        const absSpeedY = Math.abs(speedY);\n        const speedXThreshold = absSpeedX * inertiaDeltaY;\n        const speedYThreshold = absSpeedX * inertiaDeltaX;\n        const stepIncrement = TIME_STEP_INCREMENT / inertiaDuration;\n        let timeProgress = 0;\n\n        this._nextX = container.scrollLeft;\n        this._nextY = container.scrollTop;\n\n        // Sets timeout until executing next movement iteration of the inertia\n        const inertiaStep = (): void => {\n            if (timeProgress > INERTIA_CANCEL_THRESHOLD) {\n                cancelAnimationFrame(this._touchInertiaAnimID);\n                return;\n            }\n\n            timeProgress += stepIncrement;\n\n            if (timeProgress <= INERTIA_BREAKPOINT) {\n                // We use constant equation to determine the offset without speed falloff before timeProgress reaches 1\n                if (absSpeedY <= speedXThreshold) {\n                    this._nextX += speedX * INERTIA_MULTIPLIER * stepModifier;\n                }\n                if (absSpeedY >= speedYThreshold) {\n                    this._nextY += speedY * INERTIA_MULTIPLIER * stepModifier;\n                }\n            } else {\n                // Ease-out formula: y = FALLOFF_NUMERATOR / (x + FALLOFF_OFFSET) - FALLOFF_SUBTRACTION\n                const falloff = Math.abs(FALLOFF_NUMERATOR / (timeProgress + FALLOFF_OFFSET) - FALLOFF_SUBTRACTION);\n                if (absSpeedY <= speedXThreshold) {\n                    this._nextX += falloff * speedX * INERTIA_MULTIPLIER * stepModifier;\n                }\n                if (absSpeedY >= speedYThreshold) {\n                    this._nextY += falloff * speedY * INERTIA_MULTIPLIER * stepModifier;\n                }\n            }\n\n            // If we have mixed environment we use the default behavior. i.e. touchscreen + mouse\n            this._scrollTo(this._nextX, this._nextY);\n\n            this._touchInertiaAnimID = requestAnimationFrame(inertiaStep);\n        };\n\n        // Start inertia and continue it recursively\n        this._touchInertiaAnimID = requestAnimationFrame(inertiaStep);\n    }\n\n    private calcAxisCoords(target: number, min: number, max: number): number {\n        if (target === undefined || target < min) {\n            target = min;\n        } else if (target > max) {\n            target = max;\n        }\n\n        return target;\n    }\n\n    private _scrollTo(destX: number, destY: number): void {\n        // TODO Trigger scrolling event?\n        this._scrollToX(destX);\n        this._scrollToY(destY);\n    }\n\n    private _scrollToX(dest: number): void {\n        this.IgxScrollInertiaScrollContainer.scrollLeft = dest;\n    }\n\n    private _scrollToY(dest: number): void {\n        this.IgxScrollInertiaScrollContainer.scrollTop = dest;\n    }\n}\n","import { ChangeDetectorRef, Component, HostBinding, ViewChild, ViewContainerRef, inject } from '@angular/core';\nimport { IgxScrollInertiaDirective } from '../scroll-inertia/scroll_inertia.directive';\n\n@Component({\n    selector: 'igx-display-container',\n    template: `\n        <ng-template\n            #display_container\n            igxScrollInertia\n            [IgxScrollInertiaScrollContainer]=\"scrollContainer\"\n            [IgxScrollInertiaDirection]=\"scrollDirection\">\n        </ng-template>\n    `,\n    imports: [IgxScrollInertiaDirective]\n})\nexport class DisplayContainerComponent {\n    public cdr = inject(ChangeDetectorRef);\n    public _viewContainer = inject(ViewContainerRef);\n\n    @ViewChild('display_container', { read: ViewContainerRef, static: true })\n    public _vcr;\n\n    @ViewChild('display_container', { read: IgxScrollInertiaDirective, static: true })\n    public _scrollInertia: IgxScrollInertiaDirective;\n\n    @HostBinding('class')\n    public cssClass = 'igx-display-container';\n\n    @HostBinding('class.igx-display-container--inactive')\n    public notVirtual = true;\n\n    public scrollDirection: string;\n\n    public scrollContainer;\n}\n","import {\n    HostListener,\n    ElementRef,\n    ChangeDetectorRef,\n    OnDestroy,\n    Directive,\n    AfterViewInit,\n    NgZone,\n    Renderer2,\n    PLATFORM_ID,\n    inject\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil, throttleTime } from 'rxjs/operators';\nimport { resizeObservable, PlatformUtil } from 'igniteui-angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\n\n@Directive({\n    selector: '[igxVirtualHelperBase]',\n    standalone: true\n})\nexport class VirtualHelperBaseDirective implements OnDestroy, AfterViewInit {\n    public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n    public cdr = inject(ChangeDetectorRef);\n    protected _zone = inject(NgZone);\n    public document = inject(DOCUMENT);\n    protected platformUtil = inject(PlatformUtil);\n\n    public scrollAmount = 0;\n    public _size = 0;\n    public destroyed;\n\n    protected destroy$ = new Subject<any>();\n\n    private _afterViewInit = false;\n    private _scrollNativeSize: number;\n    private _detached = false;\n    protected renderer = inject(Renderer2);\n    protected platformId = inject(PLATFORM_ID);\n    protected ngZone = inject(NgZone);\n\n    constructor() {\n        this._scrollNativeSize = this.calculateScrollNativeSize();\n    }\n\n\n    public ngAfterViewInit() {\n        this._afterViewInit = true;\n        if (!this.platformUtil.isBrowser) {\n            return;\n        }\n        const delayTime = 0;\n        this._zone.runOutsideAngular(() => {\n            resizeObservable(this.nativeElement).pipe(\n                throttleTime(delayTime),\n                takeUntil(this.destroy$)).subscribe((event) => this.handleMutations(event));\n        });\n    }\n\n    public get nativeElement() {\n        return this.elementRef.nativeElement;\n    }\n\n    public ngOnDestroy() {\n        this.destroyed = true;\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    public calculateScrollNativeSize() {\n        const div = this.document.createElement('div');\n        const style = div.style;\n        style.width = '100px';\n        style.height = '100px';\n        style.position = 'absolute';\n        style.top = '-10000px';\n        style.top = '-10000px';\n        style.overflow = 'scroll';\n        this.document.body.appendChild(div);\n        const scrollWidth = div.offsetWidth - div.clientWidth;\n        this.document.body.removeChild(div);\n        return scrollWidth ? scrollWidth + 1 : 1;\n    }\n\n    public set size(value) {\n        if (this.destroyed) {\n            return;\n        }\n        this._size = value;\n        if (this._afterViewInit) {\n            this.cdr.detectChanges();\n        }\n    }\n\n    public get size() {\n        return this._size;\n    }\n\n    public get scrollNativeSize() {\n        return this._scrollNativeSize;\n    }\n\n    protected get isAttachedToDom(): boolean {\n        return this.document.body.contains(this.nativeElement);\n    }\n\n    private toggleClass(element: HTMLElement, className: string, shouldHaveClass: boolean): void {\n        if (shouldHaveClass) {\n            this.renderer.addClass(element, className);\n        } else {\n            this.renderer.removeClass(element, className);\n        }\n    }\n\n    private updateScrollbarClass() {\n        if (!isPlatformBrowser(this.platformId)) {\n            return;\n        }\n\n        this.ngZone.runOutsideAngular(() => {\n            requestAnimationFrame(() => {\n            const el = this.nativeElement;\n            const hasScrollbar = el.scrollHeight > el.clientHeight;\n            const prevSibling = el.previousElementSibling as HTMLElement | null;\n            const scrollbarClass = 'igx-display-container--scrollbar';\n\n            if (prevSibling?.tagName.toLowerCase() === 'igx-display-container') {\n                this.toggleClass(prevSibling, scrollbarClass, hasScrollbar);\n            }\n            });\n        });\n    }\n\n\n    protected handleMutations(event) {\n        const hasSize = !(event[0].contentRect.height === 0 && event[0].contentRect.width === 0);\n        if (!hasSize && !this.isAttachedToDom) {\n            // scroll bar detached from DOM\n            this._detached = true;\n        } else if (this._detached && hasSize && this.isAttachedToDom) {\n            // attached back now.\n            this.restoreScroll();\n        }\n\n        this.updateScrollbarClass();\n    }\n\n    protected restoreScroll() {}\n}\n","import { Component, HostBinding, Input, ViewChild, ViewContainerRef } from '@angular/core';\nimport { VirtualHelperBaseDirective } from './base.helper.component';\n\n/**\n * @hidden\n */\n@Component({\n    selector: 'igx-horizontal-virtual-helper',\n    template: '<div #horizontal_container class=\"igx-vhelper__placeholder-content\" [style.width.px]=\"size\"></div>',\n    standalone: true\n})\nexport class HVirtualHelperComponent extends VirtualHelperBaseDirective {\n    @ViewChild('horizontal_container', { read: ViewContainerRef, static: true }) public _vcr;\n\n    @Input() public width: number;\n\n    @HostBinding('class')\n    public cssClasses = 'igx-vhelper--horizontal';\n\n    protected override restoreScroll() {\n        this.nativeElement.scrollLeft = this.scrollAmount;\n    }\n}\n","import { Component, HostBinding, Input, ViewChild, ViewContainerRef,\n    OnDestroy, OnInit} from '@angular/core';\nimport { VirtualHelperBaseDirective } from './base.helper.component';\n\n@Component({\n    selector: 'igx-virtual-helper',\n    template: '<div #container class=\"igx-vhelper__placeholder-content\" [style.height.px]=\"size\"></div>',\n    standalone: true\n})\nexport class VirtualHelperComponent extends VirtualHelperBaseDirective implements OnInit, OnDestroy  {\n    @HostBinding('scrollTop')\n    public scrollTop;\n\n    public scrollWidth;\n\n    @ViewChild('container', { read: ViewContainerRef, static: true }) public _vcr;\n    @Input() public itemsLength: number;\n\n    @HostBinding('class')\n    public cssClasses = 'igx-vhelper--vertical';\n\n    public ngOnInit() {\n        this.scrollWidth = this.scrollNativeSize;\n        this.document.documentElement.style.setProperty(\n            '--vhelper-scrollbar-size',\n            `${this.scrollNativeSize}px`\n        );\n    }\n\n    protected override restoreScroll() {\n        this.nativeElement.scrollTop = this.scrollAmount;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { IgxGridForOfDirective } from './for_of.directive';\nimport { VirtualHelperBaseDirective } from './base.helper.component';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class IgxForOfSyncService {\n\n    private _master: Map<string, IgxGridForOfDirective<any, any[]>> = new Map<string, IgxGridForOfDirective<any, any[]>>();\n\n    /**\n     * @hidden\n     */\n    public isMaster(directive: IgxGridForOfDirective<any, any[]>): boolean {\n        return this._master.get(directive.igxForScrollOrientation) === directive;\n    }\n\n    /**\n     * @hidden\n     */\n    public setMaster(directive: IgxGridForOfDirective<any, any[]>, forced = false) {\n        const orientation = directive.igxForScrollOrientation;\n        // in case master is not in dom, set a new master\n        const isMasterInDom = this._master.get(orientation)?.dc?.instance?._viewContainer.element.nativeElement.isConnected;\n        if (!isMasterInDom) {\n            forced = true;\n        }\n        if (orientation && (forced || !this._master.has(orientation))) {\n            this._master.set(orientation, directive);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public resetMaster() {\n        this._master.clear();\n    }\n\n    /**\n     * @hidden\n     */\n    public sizesCache(dir: string): number[] {\n        return this._master.get(dir).sizesCache;\n    }\n\n    /**\n     * @hidden\n     */\n    public chunkSize(dir: string): number {\n        return this._master.get(dir).state.chunkSize;\n    }\n}\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class IgxForOfScrollSyncService {\n    private _masterScroll: Map<string, VirtualHelperBaseDirective> = new Map<string, any>();\n    public setScrollMaster(dir: string, scroll: VirtualHelperBaseDirective) {\n        this._masterScroll.set(dir, scroll);\n    }\n\n    public getScrollMaster(dir: string) {\n        return this._masterScroll.get(dir);\n    }\n}\n","import { NgForOfContext } from '@angular/common';\nimport { ChangeDetectorRef, ComponentRef, Directive, EmbeddedViewRef, EventEmitter, Input, IterableChanges, IterableDiffer, IterableDiffers, NgZone, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, TemplateRef, TrackByFunction, ViewContainerRef, booleanAttribute, DOCUMENT, inject, afterNextRender, runInInjectionContext, EnvironmentInjector, AfterViewInit } from '@angular/core';\n\nimport { DisplayContainerComponent } from './display.container';\nimport { HVirtualHelperComponent } from './horizontal.virtual.helper.component';\nimport { VirtualHelperComponent } from './virtual.helper.component';\n\nimport { IgxForOfSyncService, IgxForOfScrollSyncService } from './for_of.sync.service';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter, throttleTime, first } from 'rxjs/operators';\nimport { getResizeObserver } from 'igniteui-angular/core';\nimport { IBaseEventArgs, PlatformUtil } from 'igniteui-angular/core';\nimport { VirtualHelperBaseDirective } from './base.helper.component';\n\nconst MAX_PERF_SCROLL_DIFF = 4;\n\n/**\n *  @publicApi\n */\nexport class IgxForOfContext<T, U extends T[] = T[]> {\n    constructor(\n        public $implicit: T,\n        public igxForOf: U,\n        public index: number,\n        public count: number\n    ) { }\n\n    /**\n     * A function that returns whether the element is the first or not\n     */\n    public get first(): boolean {\n        return this.index === 0;\n    }\n\n    /**\n     * A function that returns whether the element is the last or not\n     */\n    public get last(): boolean {\n        return this.index === this.count - 1;\n    }\n\n    /**\n     * A function that returns whether the element is even or not\n     */\n    public get even(): boolean {\n        return this.index % 2 === 0;\n    }\n\n    /**\n     * A function that returns whether the element is odd or not\n     */\n    public get odd(): boolean {\n        return !this.even;\n    }\n\n}\n\n/** @hidden @internal */\nexport abstract class IgxForOfToken<T, U extends T[] = T[]> {\n    public abstract igxForOf: U & T[] | null;\n    public abstract state: IForOfState;\n    public abstract totalItemCount: number;\n    public abstract scrollPosition: number;\n\n    public abstract chunkLoad: EventEmitter<IForOfState>;\n    public abstract chunkPreload: EventEmitter<IForOfState>;\n    public abstract chunkSizeChange: EventEmitter<number>;\n\n    public abstract scrollTo(index: number): void;\n    public abstract getScrollForIndex(index: number, bottom?: boolean): number;\n    public abstract getScroll(): HTMLElement | undefined;\n\n    // TODO: Re-evaluate use for this internally, better expose through separate API\n    public abstract igxForItemSize: any;\n    public abstract igxForContainerSize: any;\n    /** @hidden */\n    public abstract dc: ComponentRef<any>\n}\n\n@Directive({\n    selector: '[igxFor][igxForOf]',\n    providers: [\n        IgxForOfScrollSyncService,\n        { provide: IgxForOfToken, useExisting: IgxForOfDirective }\n    ],\n    standalone: true\n})\nexport class IgxForOfDirective<T, U extends T[] = T[]> extends IgxForOfToken<T,U> implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n    private _viewContainer = inject(ViewContainerRef);\n    protected _template = inject<TemplateRef<NgForOfContext<T>>>(TemplateRef);\n    protected _differs = inject(IterableDiffers);\n    protected _injector = inject(EnvironmentInjector);\n    public cdr = inject(ChangeDetectorRef);\n    protected _zone = inject(NgZone);\n    protected syncScrollService = inject(IgxForOfScrollSyncService);\n    protected platformUtil = inject(PlatformUtil);\n    protected document = inject(DOCUMENT);\n    private _igxForOf: U & T[] | null = null;\n    protected _embeddedViewSizesCache = new WeakMap<EmbeddedViewRef<any>, number>();\n\n    /**\n     * Sets the data to be rendered.\n     * ```html\n     * <ng-template igxFor let-item [igxForOf]=\"data\" [igxForScrollOrientation]=\"'horizontal'\"></ng-template>\n     * ```\n     */\n    @Input()\n    public get igxForOf(): U & T[] | null {\n        return this._igxForOf;\n    }\n\n    public set igxForOf(value: U & T[] | null) {\n        this._igxForOf = value;\n        if(this._differ) {\n            this.resolveDataDiff();\n        }\n    }\n\n    /**\n     * Sets the property name from which to read the size in the data object.\n     */\n    @Input()\n    public igxForSizePropName;\n\n    /**\n     * Specifies the scroll orientation.\n     * Scroll orientation can be \"vertical\" or \"horizontal\".\n     * ```html\n     * <ng-template igxFor let-item [igxForOf]=\"data\" [igxForScrollOrientation]=\"'horizontal'\"></ng-template>\n     * ```\n     */\n    @Input()\n    public igxForScrollOrientation = 'vertical';\n\n    /**\n     * Optionally pass the parent `igxFor` instance to create a virtual template scrolling both horizontally and vertically.\n     * ```html\n     * <ng-template #scrollContainer igxFor let-rowData [igxForOf]=\"data\"\n     *       [igxForScrollOrientation]=\"'vertical'\"\n     *       [igxForContainerSize]=\"'500px'\"\n     *       [igxForItemSize]=\"'50px'\"\n     *       let-rowIndex=\"index\">\n     *       <div [style.display]=\"'flex'\" [style.height]=\"'50px'\">\n     *           <ng-template #childContainer igxFor let-item [igxForOf]=\"data\"\n     *               [igxForScrollOrientation]=\"'horizontal'\"\n     *               [igxForScrollContainer]=\"parentVirtDir\"\n     *               [igxForContainerSize]=\"'500px'\">\n     *                   <div [style.min-width]=\"'50px'\">{{rowIndex}} : {{item.text}}</div>\n     *           </ng-template>\n     *       </div>\n     * </ng-template>\n     * ```\n     */\n    @Input()\n    public igxForScrollContainer: any;\n\n    /**\n     * Sets the px-affixed size of the container along the axis of scrolling.\n     * For \"horizontal\" orientation this value is the width of the container and for \"vertical\" is the height.\n     * ```html\n     * <ng-template igxFor let-item [igxForOf]=\"data\" [igxForContainerSize]=\"'500px'\"\n     *      [igxForScrollOrientation]=\"'horizontal'\">\n     * </ng-template>\n     * ```\n     */\n    @Input()\n    public igxForContainerSize: any;\n\n    /**\n     * @hidden\n     * @internal\n     * Initial chunk size if no container size is passed. If container size is passed then the igxForOf calculates its chunk size\n     */\n    @Input()\n    public igxForInitialChunkSize: any;\n\n    /**\n     * Sets the px-affixed size of the item along the axis of scrolling.\n     * For \"horizontal\" orientation this value is the width of the column and for \"vertical\" is the height or the row.\n     * ```html\n     * <ng-template igxFor let-item [igxForOf]=\"data\" [igxForScrollOrientation]=\"'horizontal'\" [igxForItemSize]=\"'50px'\"></ng-template>\n     * ```\n     */\n    @Input()\n    public igxForItemSize: any;\n\n    /**\n     * An event that is emitted after a new chunk has been loaded.\n     * ```html\n     * <ng-template igxFor [igxForOf]=\"data\" [igxForScrollOrientation]=\"'horizontal'\" (chunkLoad)=\"loadChunk($event)\"></ng-template>\n     * ```\n     * ```typescript\n     * loadChunk(e){\n     * alert(\"chunk loaded!\");\n     * }\n     * ```\n     */\n    @Output()\n    public chunkLoad = new EventEmitter<IForOfState>();\n\n    /**\n     * @hidden @internal\n     * An event that is emitted when scrollbar visibility has changed.\n     */\n    @Output()\n    public scrollbarVisibilityChanged = new EventEmitter<any>();\n\n    /**\n     * @hidden @internal\n     * An event that is emitted when chunk size is changing. Emits new value.\n     */\n    @Output()\n    public chunkSizeChange = new EventEmitter<number>();\n\n    /**\n     * An event that is emitted after the rendered content size of the igxForOf has been changed.\n     */\n    @Output()\n    public contentSizeChange = new EventEmitter<any>();\n\n    /**\n     * An event that is emitted after data has been changed.\n     * ```html\n     * <ng-template igxFor [igxForOf]=\"data\" [igxForScrollOrientation]=\"'horizontal'\" (dataChanged)=\"dataChanged($event)\"></ng-template>\n     * ```\n     * ```typescript\n     * dataChanged(e){\n     * alert(\"data changed!\");\n     * }\n     * ```\n     */\n    @Output()\n    public dataChanged = new EventEmitter<IForOfDataChangeEventArgs>();\n\n    @Output()\n    public beforeViewDestroyed = new EventEmitter<EmbeddedViewRef<any>>();\n\n    /**\n     * An event that is emitted on chunk loading to emit the current state information - startIndex, endIndex, totalCount.\n     * Can be used for implementing remote load on demand for the igxFor data.\n     * ```html\n     * <ng-template igxFor [igxForOf]=\"data\" [igxForScrollOrientation]=\"'horizontal'\" (chunkPreload)=\"chunkPreload($event)\"></ng-template>\n     * ```\n     * ```typescript\n     * chunkPreload(e){\n     * alert(\"chunk is loading!\");\n     * }\n     * ```\n     */\n    @Output()\n    public chunkPreload = new EventEmitter<IForOfState>();\n\n    /**\n     * @hidden\n     */\n    public dc: ComponentRef<DisplayContainerComponent>;\n\n    /**\n     * The current state of the directive. It contains `startIndex` and `chunkSize`.\n     * state.startIndex - The index of the item at which the current visible chunk begins.\n     * state.chunkSize - The number of items the current visible chunk holds.\n     * These options can be used when implementing remote virtualization as they provide the necessary state information.\n     * ```typescript\n     * const gridState = this.parentVirtDir.state;\n     * ```\n     */\n    public state: IForOfState = {\n        startIndex: 0,\n        chunkSize: 0\n    };\n\n    protected func;\n    protected _sizesCache: number[] = [];\n    protected scrollComponent: VirtualHelperBaseDirective;\n    protected _differ: IterableDiffer<T> | null = null;\n    protected _trackByFn: TrackByFunction<T>;\n    protected individualSizeCache: number[] = [];\n    /** Internal track for scroll top that is being virtualized */\n    protected _virtScrollPosition = 0;\n    /** If the next onScroll event is triggered due to internal setting of scrollTop */\n    protected _bScrollInternal = false;\n    // End properties related to virtual height handling\n    protected _embeddedViews: Array<EmbeddedViewRef<any>> = [];\n    protected contentResizeNotify = new Subject<void>();\n    protected contentObserver: ResizeObserver;\n    protected viewObserver: ResizeObserver;\n    protected viewResizeNotify = new Subject<ResizeObserverEntry[]>();\n    /** Size that is being virtualized. */\n    protected _virtSize = 0;\n    /**\n     * @hidden\n     */\n    protected destroy$ = new Subject<any>();\n\n    private _totalItemCount: number = null;\n    private _adjustToIndex;\n    // Start properties related to virtual size handling due to browser limitation\n    /** Maximum size for an element of the browser. */\n    private _maxSize;\n    /**\n     * Ratio for height that's being virtualizaed and the one visible\n     * If _virtHeightRatio = 1, the visible height and the virtualized are the same, also _maxSize > _virtHeight.\n     */\n    private _virtRatio = 1;\n\n    /**\n     * The total count of the virtual data items, when using remote service.\n     * Similar to the property totalItemCount, but this will allow setting the data count into the template.\n     * ```html\n     * <ng-template igxFor let-item [igxForOf]=\"data | async\" [igxForTotalItemCount]=\"count | async\"\n     *  [igxForContainerSize]=\"'500px'\" [igxForItemSize]=\"'50px'\"></ng-template>\n     * ```\n     */\n    @Input()\n    public get igxForTotalItemCount(): number {\n        return this.totalItemCount;\n    }\n    public set igxForTotalItemCount(value: number) {\n        this.totalItemCount = value;\n    }\n\n    /**\n     * The total count of the virtual data items, when using remote service.\n     * ```typescript\n     * this.parentVirtDir.totalItemCount = data.Count;\n     * ```\n     */\n    public get totalItemCount() {\n        return this._totalItemCount;\n    }\n\n    public set totalItemCount(val) {\n        if (this._totalItemCount !== val) {\n            this._totalItemCount = val;\n            // update sizes in case total count changes.\n            const newSize = this.initSizesCache(this.igxForOf);\n            const sizeDiff = this.scrollComponent.size - newSize;\n            this.scrollComponent.size = newSize;\n            const lastChunkExceeded = this.state.startIndex + this.state.chunkSize > val;\n            if (lastChunkExceeded) {\n                this.state.startIndex = val - this.state.chunkSize;\n            }\n            this._adjustScrollPositionAfterSizeChange(sizeDiff);\n        }\n    }\n\n    public get displayContainer(): HTMLElement | undefined {\n        return this.dc?.instance?._viewContainer?.element?.nativeElement;\n    }\n\n    public get virtualHelper() {\n        return this.scrollComponent.nativeElement;\n    }\n\n    /**\n     * @hidden\n     */\n    public get isRemote(): boolean {\n        return this.totalItemCount !== null;\n    }\n\n    /**\n     *\n     * Gets/Sets the scroll position.\n     * ```typescript\n     * const position = directive.scrollPosition;\n     * directive.scrollPosition = value;\n     * ```\n     */\n    public get scrollPosition(): number {\n        return this.scrollComponent.scrollAmount;\n    }\n    public set scrollPosition(val: number) {\n        if (val === this.scrollComponent.scrollAmount) {\n            return;\n        }\n        if (this.igxForScrollOrientation === 'horizontal' && this.scrollComponent) {\n            this.scrollComponent.nativeElement.scrollLeft = this.isRTL ? -val : val;\n        } else if (this.scrollComponent) {\n            this.scrollComponent.nativeElement.scrollTop = val;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected get isRTL() {\n        const dir = window.getComputedStyle(this.dc.instance._viewContainer.element.nativeElement).getPropertyValue('direction');\n        return dir === 'rtl';\n    }\n\n    protected get sizesCache(): number[] {\n        return this._sizesCache;\n    }\n    protected set sizesCache(value: number[]) {\n        this._sizesCache = value;\n    }\n\n    private get _isScrolledToBottom() {\n        if (!this.getScroll()) {\n            return true;\n        }\n        const scrollHeight = this.scrollComponent.size;\n        // Use === and not >= because `scrollTop + container size` can't be bigger than `scrollHeight`, unless something isn't updated.\n        // Also use Math.round because Chrome has some inconsistencies and `scrollTop + container` can be float when zooming the page.\n        return Math.round(this.scrollComponent.scrollAmount + this.igxForContainerSize) === scrollHeight;\n    }\n\n    private get _isAtBottomIndex() {\n        return this.igxForOf && this.state.startIndex + this.state.chunkSize > this.igxForOf.length;\n    }\n\n    public verticalScrollHandler(event) {\n        this.onScroll(event);\n    }\n\n    public isScrollable() {\n        return this.scrollComponent.size > parseFloat(this.igxForContainerSize);\n    }\n\n    protected get embeddedViewNodes() {\n        const result = new Array(this._embeddedViews.length);\n        for (let i = 0; i < this._embeddedViews.length; i++) {\n            const view = this._embeddedViews[i];\n            for (const node of view.rootNodes) {\n                if (node.nodeType === Node.ELEMENT_NODE) {\n                    result[i] = node;\n                    break;\n                } else {\n                    const nextElem = node.nextElementSibling;\n                    if (nextElem) {\n                        result[i] = nextElem;\n                    }\n                }\n            }\n        }\n        return result;\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit(): void {\n        const vc = this.igxForScrollContainer ? this.igxForScrollContainer._viewContainer : this._viewContainer;\n        this.igxForSizePropName = this.igxForSizePropName || 'width';\n        this.dc = this._viewContainer.createComponent(DisplayContainerComponent, { index: 0 });\n        this.dc.instance.scrollDirection = this.igxForScrollOrientation;\n        if (this.igxForOf && this.igxForOf.length) {\n            this.scrollComponent = this.syncScrollService.getScrollMaster(this.igxForScrollOrientation);\n            this.state.chunkSize = this._calculateChunkSize();\n            this.dc.instance.notVirtual = !(this.igxForContainerSize && this.state.chunkSize < this.igxForOf.length);\n            if (this.scrollComponent && !this.scrollComponent.destroyed) {\n                this.state.startIndex = Math.min(this.getIndexAt(this.scrollPosition, this.sizesCache),\n                    this.igxForOf.length - this.state.chunkSize);\n            }\n            for (let i = this.state.startIndex; i < this.state.startIndex + this.state.chunkSize &&\n                this.igxForOf[i] !== undefined; i++) {\n                const input = this.igxForOf[i];\n                const embeddedView = this.dc.instance._vcr.createEmbeddedView(\n                    this._template,\n                    new IgxForOfContext<T, U>(input, this.igxForOf, this.getContextIndex(input), this.igxForOf.length)\n                );\n                this._embeddedViews.push(embeddedView);\n            }\n        }\n        this._maxSize = this._calcMaxBrowserSize();\n        if (this.igxForScrollOrientation === 'vertical') {\n            this.dc.instance._viewContainer.element.nativeElement.style.transform = `translateY(0px)`;\n            this.scrollComponent = this.syncScrollService.getScrollMaster(this.igxForScrollOrientation);\n            if (!this.scrollComponent || this.scrollComponent.destroyed) {\n                this.scrollComponent = vc.createComponent(VirtualHelperComponent).instance;\n            }\n\n            this.scrollComponent.size = this.igxForOf ? this._calcSize() : 0;\n            this.syncScrollService.setScrollMaster(this.igxForScrollOrientation, this.scrollComponent);\n            this._zone.runOutsideAngular(() => {\n                this.verticalScrollHandler = this.verticalScrollHandler.bind(this);\n                this.scrollComponent.nativeElement.addEventListener('scroll', this.verticalScrollHandler);\n                this.dc.instance.scrollContainer = this.scrollComponent.nativeElement;\n            });\n            const destructor = takeUntil<any>(this.destroy$);\n            this.contentResizeNotify.pipe(\n                filter(() => this.igxForContainerSize && this.igxForOf && this.igxForOf.length > 0),\n                throttleTime(40, undefined, { leading: false, trailing: true }),\n                destructor\n            ).subscribe(() => this._zone.runTask(() => this.updateSizes()));\n        }\n\n        if (this.igxForScrollOrientation === 'horizontal') {\n            this.func = (evt) => this.onHScroll(evt);\n            this.scrollComponent = this.syncScrollService.getScrollMaster(this.igxForScrollOrientation);\n            if (!this.scrollComponent) {\n                this.scrollComponent = vc.createComponent(HVirtualHelperComponent).instance;\n                this.scrollComponent.size = this.igxForOf ? this._calcSize() : 0;\n                this.syncScrollService.setScrollMaster(this.igxForScrollOrientation, this.scrollComponent);\n                this._zone.runOutsideAngular(() => {\n                    this.scrollComponent.nativeElement.addEventListener('scroll', this.func);\n                    this.dc.instance.scrollContainer = this.scrollComponent.nativeElement;\n                });\n            } else {\n                this._zone.runOutsideAngular(() => {\n                    this.scrollComponent.nativeElement.addEventListener('scroll', this.func);\n                    this.dc.instance.scrollContainer = this.scrollComponent.nativeElement;\n                });\n            }\n            this._updateScrollOffset();\n        }\n        this._differ = this._differs.find(this.igxForOf || []).create(this.igxForTrackBy);\n        this.resolveDataDiff();\n    }\n\n    public ngAfterViewInit(): void {\n        if (this.igxForScrollOrientation === 'vertical') {\n            this._zone.runOutsideAngular(() => {\n                if (this.platformUtil.isBrowser) {\n                    this.contentObserver = new (getResizeObserver())(() => this.contentResizeNotify.next());\n                    this.contentObserver.observe(this.dc.instance._viewContainer.element.nativeElement);\n                }\n            });\n        }\n    }\n\n    protected subscribeToViewObserver(target: Element) {\n        if (this.igxForScrollOrientation === 'vertical' && this.viewObserver) {\n            this._zone.runOutsideAngular(() => {\n                if (this.platformUtil.isBrowser) {\n                    this.viewObserver.observe(target);\n                }\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this.removeScrollEventListeners();\n        this.destroy$.next(true);\n        this.destroy$.complete();\n        if (this.contentObserver) {\n            this.contentObserver.disconnect();\n        }\n\n        if (this.viewObserver) {\n            this.viewObserver.disconnect();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     * Asserts the correct type of the context for the template that `igxForOf` will render.\n     *\n     * The presence of this method is a signal to the Ivy template type-check compiler that the\n     * `IgxForOf` structural directive renders its template with a specific context type.\n     */\n    public static ngTemplateContextGuard<T, U extends T[]>(dir: IgxForOfDirective<T, U>, ctx: any):\n        ctx is IgxForOfContext<T, U> {\n        return true;\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnChanges(changes: SimpleChanges): void {\n        const forOf = 'igxForOf';\n        if (forOf in changes) {\n            const value = changes[forOf].currentValue;\n            if (!this._differ && value) {\n                try {\n                    this._differ = this._differs.find(value).create(this.igxForTrackBy);\n                } catch (e) {\n                    throw new Error(\n                        `Cannot find a differ supporting object \"${value}\" of type \"${getTypeNameForDebugging(value)}\".\n                     NgFor only supports binding to Iterables such as Arrays.`);\n                }\n            }\n        }\n        const defaultItemSize = 'igxForItemSize';\n        if (defaultItemSize in changes && !changes[defaultItemSize].firstChange && this.igxForOf) {\n            // handle default item size changed.\n            this.initSizesCache(this.igxForOf);\n            this._applyChanges();\n        }\n        const containerSize = 'igxForContainerSize';\n        if (containerSize in changes && !changes[containerSize].firstChange && this.igxForOf) {\n            const prevSize = parseFloat(changes[containerSize].previousValue);\n            const newSize = parseFloat(changes[containerSize].currentValue);\n            this._recalcOnContainerChange({prevSize, newSize});\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public resolveDataDiff(): void {\n        if (this._differ) {\n            const changes = this._differ.diff(this.igxForOf);\n            if (changes) {\n                //  re-init cache.\n                if (!this.igxForOf) {\n                    this.igxForOf = [] as U;\n                }\n                this._updateSizeCache();\n                this._zone.run(() => {\n                    this._applyChanges();\n                    this.cdr.markForCheck();\n                    this._updateScrollOffset();\n                    const args: IForOfDataChangingEventArgs = {\n                        containerSize: this.igxForContainerSize,\n                        state: this.state\n                    };\n                    this.dataChanged.emit(args);\n                });\n            }\n        }\n    }\n\n\n    /**\n     * Shifts the scroll thumb position.\n     * ```typescript\n     * this.parentVirtDir.addScroll(5);\n     * ```\n     *\n     * @param addTop negative value to scroll up and positive to scroll down;\n     */\n    public addScrollTop(add: number): boolean {\n        return this.addScroll(add);\n    }\n\n    /**\n     * Shifts the scroll thumb position.\n     * ```typescript\n     * this.parentVirtDir.addScroll(5);\n     * ```\n     *\n     * @param add negative value to scroll previous and positive to scroll next;\n     */\n    public addScroll(add: number): boolean {\n        if (add === 0) {\n            return false;\n        }\n        const originalVirtScrollTop = this._virtScrollPosition;\n        const containerSize = parseFloat(this.igxForContainerSize);\n        const maxVirtScrollTop = this._virtSize - containerSize;\n\n        this._bScrollInternal = true;\n        this._virtScrollPosition += add;\n        this._virtScrollPosition = this._virtScrollPosition > 0 ?\n            (this._virtScrollPosition < maxVirtScrollTop ? this._virtScrollPosition : maxVirtScrollTop) :\n            0;\n\n        this.scrollPosition += add / this._virtRatio;\n        if (Math.abs(add / this._virtRatio) < 1) {\n            // Actual scroll delta that was added is smaller than 1 and onScroll handler doesn't trigger when scrolling < 1px\n            const scrollOffset = this.fixedUpdateAllElements(this._virtScrollPosition);\n            // scrollOffset = scrollOffset !== parseInt(this.igxForItemSize, 10) ? scrollOffset : 0;\n            runInInjectionContext(this._injector, () => {\n                afterNextRender({\n                    write: () => {\n                        this.dc.instance._viewContainer.element.nativeElement.style.transform = `translateY(${-scrollOffset}px)`;\n                    }\n                  });\n              });\n        }\n\n        const maxRealScrollTop = this.scrollComponent.nativeElement.scrollHeight - containerSize;\n        if ((this._virtScrollPosition > 0 && this.scrollPosition === 0) ||\n            (this._virtScrollPosition < maxVirtScrollTop && this.scrollPosition === maxRealScrollTop)) {\n            // Actual scroll position is at the top or bottom, but virtual one is not at the top or bottom (there's more to scroll)\n            // Recalculate actual scroll position based on the virtual scroll.\n            this.scrollPosition = this._virtScrollPosition / this._virtRatio;\n        } else if (this._virtScrollPosition === 0 && this.scrollPosition > 0) {\n            // Actual scroll position is not at the top, but virtual scroll is. Just update the actual scroll\n            this.scrollPosition = 0;\n        } else if (this._virtScrollPosition === maxVirtScrollTop && this.scrollPosition < maxRealScrollTop) {\n            // Actual scroll position is not at the bottom, but virtual scroll is. Just update the acual scroll\n            this.scrollPosition = maxRealScrollTop;\n        }\n        return this._virtScrollPosition !== originalVirtScrollTop;\n    }\n\n    /**\n     * Scrolls to the specified index.\n     * ```typescript\n     * this.parentVirtDir.scrollTo(5);\n     * ```\n     *\n     * @param index\n     */\n    public scrollTo(index: number) {\n        if (index < 0 || index > (this.isRemote ? this.totalItemCount : this.igxForOf.length) - 1) {\n            return;\n        }\n        const containerSize = parseFloat(this.igxForContainerSize);\n        const isPrevItem = index < this.state.startIndex || this.scrollPosition > this.sizesCache[index];\n        let nextScroll = isPrevItem ? this.sizesCache[index] : this.sizesCache[index + 1] - containerSize;\n        if (nextScroll < 0) {\n            return;\n        }\n        const maxVirtScrollTop = this._virtSize - containerSize;\n        if (nextScroll > maxVirtScrollTop) {\n            nextScroll = maxVirtScrollTop;\n        }\n        this._bScrollInternal = true;\n        this._virtScrollPosition = nextScroll;\n        this.scrollPosition = this._virtScrollPosition / this._virtRatio;\n        this._adjustToIndex = !isPrevItem ? index : null;\n    }\n\n    /**\n     * Scrolls by one item into the appropriate next direction.\n     * For \"horizontal\" orientation that will be the right column and for \"vertical\" that is the lower row.\n     * ```typescript\n     * this.parentVirtDir.scrollNext();\n     * ```\n     */\n    public scrollNext() {\n        const scr = Math.abs(Math.ceil(this.scrollPosition));\n        const endIndex = this.getIndexAt(scr + parseFloat(this.igxForContainerSize), this.sizesCache);\n        this.scrollTo(endIndex);\n    }\n\n    /**\n     * Scrolls by one item into the appropriate previous direction.\n     * For \"horizontal\" orientation that will be the left column and for \"vertical\" that is the upper row.\n     * ```typescript\n     * this.parentVirtDir.scrollPrev();\n     * ```\n     */\n    public scrollPrev() {\n        this.scrollTo(this.state.startIndex - 1);\n    }\n\n    /**\n     * Scrolls by one page into the appropriate next direction.\n     * For \"horizontal\" orientation that will be one view to the right and for \"vertical\" that is one view to the bottom.\n     * ```typescript\n     * this.parentVirtDir.scrollNextPage();\n     * ```\n     */\n    public scrollNextPage() {\n        this.addScroll(parseFloat(this.igxForContainerSize));\n    }\n\n    /**\n     * Scrolls by one page into the appropriate previous direction.\n     * For \"horizontal\" orientation that will be one view to the left and for \"vertical\" that is one view to the top.\n     * ```typescript\n     * this.parentVirtDir.scrollPrevPage();\n     * ```\n     */\n    public scrollPrevPage() {\n        const containerSize = (parseFloat(this.igxForContainerSize));\n        this.addScroll(-containerSize);\n    }\n\n    /**\n     * @hidden\n     */\n    public getColumnScrollLeft(colIndex) {\n        return this.sizesCache[colIndex];\n    }\n\n    /**\n     * Returns the total number of items that are fully visible.\n     * ```typescript\n     * this.parentVirtDir.getItemCountInView();\n     * ```\n     */\n    public getItemCountInView() {\n        let startIndex = this.getIndexAt(this.scrollPosition, this.sizesCache);\n        if (this.scrollPosition - this.sizesCache[startIndex] > 0) {\n            // fisrt item is not fully in view\n            startIndex++;\n        }\n        const endIndex = this.getIndexAt(this.scrollPosition + parseFloat(this.igxForContainerSize), this.sizesCache);\n        return endIndex - startIndex;\n    }\n\n    /**\n     * Returns a reference to the scrollbar DOM element.\n     * This is either a vertical or horizontal scrollbar depending on the specified igxForScrollOrientation.\n     * ```typescript\n     * dir.getScroll();\n     * ```\n     */\n    public getScroll() {\n        return this.scrollComponent?.nativeElement;\n    }\n    /**\n     * Returns the size of the element at the specified index.\n     * ```typescript\n     * this.parentVirtDir.getSizeAt(1);\n     * ```\n     */\n    public getSizeAt(index: number) {\n        return this.sizesCache[index + 1] - this.sizesCache[index];\n    }\n\n    /**\n     * @hidden\n     * Function that is called to get the native scrollbar size that the browsers renders.\n     */\n    public getScrollNativeSize() {\n        return this.scrollComponent ? this.scrollComponent.scrollNativeSize : 0;\n    }\n\n    /**\n     * Returns the scroll offset of the element at the specified index.\n     * ```typescript\n     * this.parentVirtDir.getScrollForIndex(1);\n     * ```\n     */\n    public getScrollForIndex(index: number, bottom?: boolean) {\n        const containerSize = parseFloat(this.igxForContainerSize);\n        const scroll = bottom ? Math.max(0, this.sizesCache[index + 1] - containerSize) : this.sizesCache[index];\n        return scroll;\n    }\n\n    /**\n     * Returns the index of the element at the specified offset.\n     * ```typescript\n     * this.parentVirtDir.getIndexAtScroll(100);\n     * ```\n     */\n    public getIndexAtScroll(scrollOffset: number) {\n        return this.getIndexAt(scrollOffset, this.sizesCache);\n    }\n    /**\n     * Returns whether the target index is outside the view.\n     * ```typescript\n     * this.parentVirtDir.isIndexOutsideView(10);\n     * ```\n     */\n    public isIndexOutsideView(index: number) {\n        const targetNode = index >= this.state.startIndex && index <= this.state.startIndex + this.state.chunkSize ?\n            this.embeddedViewNodes[index - this.state.startIndex] : null;\n        const rowHeight = this.getSizeAt(index);\n        const containerSize = parseFloat(this.igxForContainerSize);\n        const containerOffset = -(this.scrollPosition - this.sizesCache[this.state.startIndex]);\n        const endTopOffset = targetNode ? targetNode.offsetTop + rowHeight + containerOffset : containerSize + rowHeight;\n        return !targetNode || targetNode.offsetTop < Math.abs(containerOffset)\n            || containerSize && endTopOffset - containerSize > 5;\n    }\n\n    protected getNodeSize(rNode: Element, _index: number): number {\n        const dimension = this.igxForScrollOrientation === 'horizontal' ?\n        this.igxForSizePropName : 'height';\n        const nodeSize = dimension === 'height' ?\n            rNode.clientHeight + this.getMargin(rNode, dimension):\n            rNode.clientWidth + this.getMargin(rNode, dimension);\n        return nodeSize;\n    }\n\n\n    /**\n     * @hidden\n     * Function that recalculates and updates cache sizes.\n     */\n    public recalcUpdateSizes(prevState?: IForOfState) {\n        if (prevState && prevState.startIndex === this.state.startIndex && prevState.chunkSize === this.state.chunkSize) {\n            // nothing changed\n            return;\n        }\n\n        const diffs = [];\n        let totalDiff = 0;\n        const nodes = this.embeddedViewNodes;\n        for (let index = 0; index < this._embeddedViews.length; index++) {\n            const targetIndex = this.state.startIndex + index;\n            const nodeSize = this.getNodeSize(nodes[index], index);\n            const oldVal = this.individualSizeCache[targetIndex];\n            const currDiff = nodeSize - oldVal;\n            diffs.push(currDiff);\n            totalDiff += currDiff;\n            this.individualSizeCache[targetIndex] = nodeSize;\n            this.sizesCache[targetIndex + 1] = (this.sizesCache[targetIndex] || 0) + nodeSize;\n        }\n        // update cache\n        if (Math.abs(totalDiff) > 0) {\n            for (let j = this.state.startIndex + this.state.chunkSize + 1; j < this.sizesCache.length; j++) {\n                this.sizesCache[j] = (this.sizesCache[j] || 0) + totalDiff;\n            }\n\n            // update scrBar heights/widths\n            const reducer = (acc, val) => acc + val;\n\n            this._virtSize += totalDiff;\n            if (this._virtSize > this._maxSize) {\n                this._virtRatio = this._virtSize / this._maxSize;\n            }\n            this.scrollComponent.size = Math.min(this.scrollComponent.size + totalDiff, this._maxSize);\n\n            if (!this.scrollComponent.destroyed) {\n                this.scrollComponent.cdr.detectChanges();\n            }\n            const scrToBottom = this._isScrolledToBottom && !this.dc.instance.notVirtual;\n            if (scrToBottom && !this._isAtBottomIndex) {\n                const containerSize = parseFloat(this.igxForContainerSize);\n                const maxVirtScrollTop = this._virtSize - containerSize;\n                this._bScrollInternal = true;\n                this._virtScrollPosition = maxVirtScrollTop;\n                this.scrollPosition = maxVirtScrollTop;\n                return;\n            }\n            if (this._adjustToIndex) {\n                // in case scrolled to specific index where after scroll heights are changed\n                // need to adjust the offsets so that item is last in view.\n                const updatesToIndex = this._adjustToIndex - this.state.startIndex + 1;\n                const sumDiffs = diffs.slice(0, updatesToIndex).reduce(reducer);\n                if (sumDiffs !== 0) {\n                    this.addScroll(sumDiffs);\n                }\n                this._adjustToIndex = null;\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * Reset scroll position.\n     * Needed in case scrollbar is hidden/detached but we still need to reset it.\n     */\n    public resetScrollPosition() {\n        this.scrollPosition = 0;\n        this.scrollComponent.scrollAmount = 0;\n    }\n\n    /**\n     * @hidden\n     */\n    protected removeScrollEventListeners() {\n        if (this.igxForScrollOrientation === 'horizontal') {\n            this._zone.runOutsideAngular(() => this.scrollComponent?.nativeElement?.removeEventListener('scroll', this.func));\n        } else {\n            this._zone.runOutsideAngular(() =>\n                this.scrollComponent?.nativeElement?.removeEventListener('scroll', this.verticalScrollHandler)\n            );\n        }\n    }\n\n    /**\n     * @hidden\n     * Function that is called when scrolling vertically\n     */\n    protected onScroll(event) {\n        /* in certain situations this may be called when no scrollbar is visible */\n        if (!parseFloat(this.scrollComponent.nativeElement.style.height)) {\n            return;\n        }\n        this.scrollComponent.scrollAmount = event.target.scrollTop;\n        if (!this._bScrollInternal) {\n            this._calcVirtualScrollPosition(this.scrollComponent.scrollAmount);\n        } else {\n            this._bScrollInternal = false;\n        }\n        const prevStartIndex = this.state.startIndex;\n        const scrollOffset = this.fixedUpdateAllElements(this._virtScrollPosition);\n\n        runInInjectionContext(this._injector, () => {\n            afterNextRender({\n                write: () => {\n                    this.dc.instance._viewContainer.element.nativeElement.style.transform = `translateY(${-scrollOffset}px)`;\n                }\n              });\n          });\n\n        this._zone.onStable.pipe(first()).subscribe(this.recalcUpdateSizes.bind(this));\n\n        this.dc.changeDetectorRef.detectChanges();\n        if (prevStartIndex !== this.state.startIndex) {\n            this.chunkLoad.emit(this.state);\n        }\n    }\n\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public updateScroll(): void {\n        if (this.igxForScrollOrientation === \"horizontal\") {\n            const scrollAmount = this.scrollComponent.nativeElement[\"scrollLeft\"];\n            this.scrollComponent.scrollAmount = scrollAmount;\n            this._updateScrollOffset();\n        }\n    }\n\n    protected updateSizes() {\n        if (!this.scrollComponent.nativeElement.isConnected) return;\n        const scrollable = this.isScrollable();\n        this.recalcUpdateSizes();\n        this._applyChanges();\n        this._updateScrollOffset();\n        if (scrollable !== this.isScrollable()) {\n            this.scrollbarVisibilityChanged.emit();\n        } else {\n            this.contentSizeChange.emit();\n        }\n    }\n\n    protected updateViewSizes(entries:ResizeObserverEntry[] ) {\n        for (const entry of entries) {\n            const index = parseInt(entry.target.getAttribute('data-index'), 10);\n            const height = entry.contentRect.height;\n            const embView = this._embeddedViews[index - this.state.startIndex];\n            if (embView) {\n                this._embeddedViewSizesCache.set(embView, height);\n            }\n        }\n        this.recalcUpdateSizes();\n    }\n\n    /**\n     * @hidden\n     */\n    protected fixedUpdateAllElements(inScrollTop: number): number {\n        const count = this.isRemote ? this.totalItemCount : this.igxForOf.length;\n        let newStart = this.getIndexAt(inScrollTop, this.sizesCache);\n\n        if (newStart + this.state.chunkSize > count) {\n            newStart = count - this.state.chunkSize;\n        }\n\n        const prevStart = this.state.startIndex;\n        const diff = newStart - this.state.startIndex;\n        this.state.startIndex = newStart;\n\n        if (diff) {\n            this.chunkPreload.emit(this.state);\n            if (!this.isRemote) {\n\n                // recalculate and apply page size.\n                if (diff && Math.abs(diff) <= MAX_PERF_SCROLL_DIFF) {\n                    if (diff > 0) {\n                        this.moveApplyScrollNext(prevStart);\n                    } else {\n                        this.moveApplyScrollPrev(prevStart);\n                    }\n                } else {\n                    this.fixedApplyScroll();\n                }\n            }\n        }\n\n        return inScrollTop - this.sizesCache[this.state.startIndex];\n    }\n\n    /**\n     * @hidden\n     * The function applies an optimized state change for scrolling down/right employing context change with view rearrangement\n     */\n    protected moveApplyScrollNext(prevIndex: number): void {\n        const start = prevIndex + this.state.chunkSize;\n        const end = start + this.state.startIndex - prevIndex;\n        const container = this.dc.instance._vcr as ViewContainerRef;\n\n        for (let i = start; i < end && this.igxForOf[i] !== undefined; i++) {\n            const embView = this._embeddedViews.shift();\n            if (!embView.destroyed) {\n                this.scrollFocus(embView.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE)\n                    || embView.rootNodes[0].nextElementSibling);\n                const view = container.detach(0);\n\n                this.updateTemplateContext(embView.context, i);\n                container.insert(view);\n                this._embeddedViews.push(embView);\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * The function applies an optimized state change for scrolling up/left employing context change with view rearrangement\n     */\n    protected moveApplyScrollPrev(prevIndex: number): void {\n        const container = this.dc.instance._vcr as ViewContainerRef;\n        for (let i = prevIndex - 1; i >= this.state.startIndex && this.igxForOf[i] !== undefined; i--) {\n            const embView = this._embeddedViews.pop();\n            if (!embView.destroyed) {\n                this.scrollFocus(embView.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE)\n                    || embView.rootNodes[0].nextElementSibling);\n                const view = container.detach(container.length - 1);\n\n                this.updateTemplateContext(embView.context, i);\n                container.insert(view, 0);\n                this._embeddedViews.unshift(embView);\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected getContextIndex(input) {\n        return this.isRemote ? this.state.startIndex + this.igxForOf.indexOf(input) : this.igxForOf.indexOf(input);\n    }\n\n    /**\n     * @hidden\n     * Function which updates the passed context of an embedded view with the provided index\n     * from the view container.\n     * Often, called while handling a scroll event.\n     */\n    protected updateTemplateContext(context: any, index = 0): void {\n        context.$implicit = this.igxForOf[index];\n        context.index = this.getContextIndex(this.igxForOf[index]);\n        context.count = this.igxForOf.length;\n    }\n\n    /**\n     * @hidden\n     * The function applies an optimized state change through context change for each view\n     */\n    protected fixedApplyScroll(): void {\n        let j = 0;\n        const endIndex = this.state.startIndex + this.state.chunkSize;\n        for (let i = this.state.startIndex; i < endIndex && this.igxForOf[i] !== undefined; i++) {\n            const embView = this._embeddedViews[j++];\n            this.updateTemplateContext(embView.context, i);\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     *\n     * Clears focus inside the virtualized container on small scroll swaps.\n     */\n    protected scrollFocus(node?: HTMLElement): void {\n        if (!node) {\n            return;\n        }\n        const document = node.getRootNode() as Document | ShadowRoot;\n        const activeElement = document.activeElement as HTMLElement;\n\n        // Remove focus in case the the active element is inside the view container.\n        // Otherwise we hit an exception while doing the 'small' scrolls swapping.\n        // For more information:\n        //\n        // https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild\n        // https://bugs.chromium.org/p/chromium/issues/detail?id=432392\n        if (node && node.contains(activeElement)) {\n            activeElement.blur();\n        }\n    }\n\n    /**\n     * @hidden\n     * Function that is called when scrolling horizontally\n     */\n    protected onHScroll(event) {\n        /* in certain situations this may be called when no scrollbar is visible */\n        const firstScrollChild = this.scrollComponent.nativeElement.children.item(0) as HTMLElement;\n        if (!parseFloat(firstScrollChild.style.width)) {\n            return;\n        }\n        this.scrollComponent.scrollAmount = event.target.scrollLeft;\n        if (!this._bScrollInternal) {\n            this._calcVirtualScrollPosition(this.scrollComponent.scrollAmount);\n        } else {\n            this._bScrollInternal = false;\n        }\n        const prevStartIndex = this.state.startIndex;\n        const scrLeft = this.scrollComponent.scrollAmount;\n        // Updating horizontal chunks\n        const scrollOffset = this.fixedUpdateAllElements(Math.abs(this._virtScrollPosition));\n        if (scrLeft < 0) {\n            // RTL\n            this.dc.instance._viewContainer.element.nativeElement.style.left = scrollOffset + 'px';\n        } else {\n            this.dc.instance._viewContainer.element.nativeElement.style.left = -scrollOffset + 'px';\n        }\n        this._zone.onStable.pipe(first()).subscribe(this.recalcUpdateSizes.bind(this));\n\n        this.dc.changeDetectorRef.detectChanges();\n        if (prevStartIndex !== this.state.startIndex) {\n            this.chunkLoad.emit(this.state);\n        }\n    }\n\n    /**\n     * Gets the function used to track changes in the items collection.\n     * By default the object references are compared. However this can be optimized if you have unique identifier\n     * value that can be used for the comparison instead of the object ref or if you have some other property values\n     * in the item object that should be tracked for changes.\n     * This option is similar to ngForTrackBy.\n     * ```typescript\n     * const trackFunc = this.parentVirtDir.igxForTrackBy;\n     * ```\n     */\n    @Input()\n    public get igxForTrackBy(): TrackByFunction<T> {\n        return this._trackByFn;\n    }\n\n    /**\n     * Sets the function used to track changes in the items collection.\n     * This function can be set in scenarios where you want to optimize or\n     * customize the tracking of changes for the items in the collection.\n     * The igxForTrackBy function takes the index and the current item as arguments and needs to return the unique identifier for this item.\n     * ```typescript\n     * this.parentVirtDir.igxForTrackBy = (index, item) => {\n     *      return item.id + item.width;\n     * };\n     * ```\n     */\n    public set igxForTrackBy(fn: TrackByFunction<T>) {\n        this._trackByFn = fn;\n    }\n\n    /**\n     * @hidden\n     */\n    protected _applyChanges() {\n        const prevChunkSize = this.state.chunkSize;\n        this.applyChunkSizeChange();\n        this._recalcScrollBarSize();\n        if (this.igxForOf && this.igxForOf.length && this.dc) {\n            const embeddedViewCopy = Object.assign([], this._embeddedViews);\n            let startIndex = this.state.startIndex;\n            let endIndex = this.state.chunkSize + this.state.startIndex;\n            if (this.isRemote) {\n                startIndex = 0;\n                endIndex = this.igxForOf.length;\n            }\n            for (let i = startIndex; i < endIndex && this.igxForOf[i] !== undefined; i++) {\n                const embView = embeddedViewCopy.shift();\n                this.updateTemplateContext(embView.context, i);\n            }\n            if (prevChunkSize !== this.state.chunkSize) {\n                this.chunkLoad.emit(this.state);\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected _calcMaxBrowserSize(): number {\n        if (!this.platformUtil.isBrowser) {\n            return 0;\n        }\n        const div = this.document.createElement('div');\n        const style = div.style;\n        style.position = 'absolute';\n        const dir = this.igxForScrollOrientation === 'horizontal' ? 'left' : 'top';\n        style[dir] = '9999999999999999px';\n        this.document.body.appendChild(div);\n        const size = Math.abs(div.getBoundingClientRect()[dir]);\n        this.document.body.removeChild(div);\n        return size;\n    }\n\n    /**\n     * @hidden\n     * Recalculates the chunkSize based on current startIndex and returns the new size.\n     * This should be called after this.state.startIndex is updated, not before.\n     */\n    protected _calculateChunkSize(): number {\n        let chunkSize = 0;\n        if (this.igxForContainerSize !== null && this.igxForContainerSize !== undefined) {\n            if (!this.sizesCache || this.sizesCache.length === 0) {\n                this.initSizesCache(this.igxForOf);\n            }\n            chunkSize = this._calcMaxChunkSize();\n            if (this.igxForOf && chunkSize > this.igxForOf.length) {\n                chunkSize = this.igxForOf.length;\n            }\n        } else {\n            if (this.igxForOf) {\n                chunkSize = Math.min(this.igxForInitialChunkSize || this.igxForOf.length, this.igxForOf.length);\n            }\n        }\n        return chunkSize;\n    }\n\n    /**\n     * @hidden\n     */\n    protected getElement(viewref, nodeName) {\n        const elem = viewref.element.nativeElement.parentNode.getElementsByTagName(nodeName);\n        return elem.length > 0 ? elem[0] : null;\n    }\n\n    /**\n     * @hidden\n     */\n    protected initSizesCache(items: U): number {\n        let totalSize = 0;\n        let size = 0;\n        const dimension = this.igxForSizePropName || 'height';\n        let i = 0;\n        const count = this.isRemote ? this.totalItemCount : items.length;\n        this.sizesCache = new Array(count + 1);\n        this.sizesCache[0] = 0;\n        this.individualSizeCache = new Array(count);\n        for (i; i < count; i++) {\n            size = this._getItemSize(items[i], dimension);\n            this.individualSizeCache[i] = size;\n            totalSize += size;\n            this.sizesCache[i + 1] = totalSize;\n        }\n        return totalSize;\n    }\n\n    protected _updateSizeCache() {\n        if (this.igxForScrollOrientation === 'horizontal') {\n            this.initSizesCache(this.igxForOf);\n            return;\n        }\n        const oldHeight = this.individualSizeCache.length > 0 ? this.individualSizeCache.reduce((acc, val) => acc + val) : 0;\n        const newHeight = this.initSizesCache(this.igxForOf);\n\n        const diff = oldHeight - newHeight;\n        this._adjustScrollPositionAfterSizeChange(diff);\n    }\n\n    /**\n     * @hidden\n     */\n    protected _calcMaxChunkSize(): number {\n        let i = 0;\n        let length = 0;\n        let maxLength = 0;\n        const arr = [];\n        let sum = 0;\n        const availableSize = parseFloat(this.igxForContainerSize);\n        if (!availableSize) {\n            return 0;\n        }\n        const dimension = this.igxForScrollOrientation === 'horizontal' ?\n            this.igxForSizePropName : 'height';\n        const reducer = (accumulator, currentItem) => accumulator + this._getItemSize(currentItem, dimension);\n        for (i; i < this.igxForOf.length; i++) {\n            let item: T | { value: T, height: number } = this.igxForOf[i];\n            if (dimension === 'height') {\n                item = { value: this.igxForOf[i], height: this.individualSizeCache[i] };\n            }\n            const size = dimension === 'height' ?\n                this.individualSizeCache[i] :\n                this._getItemSize(item, dimension);\n            sum = arr.reduce(reducer, size);\n            if (sum < availableSize) {\n                arr.push(item);\n                length = arr.length;\n                if (i === this.igxForOf.length - 1) {\n                    // reached end without exceeding\n                    // include prev items until size is filled or first item is reached.\n                    let curItem = dimension === 'height' ? arr[0].value : arr[0];\n                    let prevIndex = this.igxForOf.indexOf(curItem) - 1;\n                    while (prevIndex >= 0 && sum <= availableSize) {\n                        curItem = dimension === 'height' ? arr[0].value : arr[0];\n                        prevIndex = this.igxForOf.indexOf(curItem) - 1;\n                        const prevItem = this.igxForOf[prevIndex];\n                        const prevSize = dimension === 'height' ?\n                            this.individualSizeCache[prevIndex] :\n                            parseFloat(prevItem[dimension]);\n                        sum = arr.reduce(reducer, prevSize);\n                        arr.unshift(prevItem);\n                        length = arr.length;\n                    }\n                }\n            } else {\n                arr.push(item);\n                length = arr.length + 1;\n                arr.shift();\n            }\n            if (length > maxLength) {\n                maxLength = length;\n            }\n        }\n        return maxLength;\n    }\n\n    /**\n     * @hidden\n     */\n    protected getIndexAt(left, set) {\n        let start = 0;\n        let end = set.length - 1;\n        if (left === 0) {\n            return 0;\n        }\n        while (start <= end) {\n            const midIdx = Math.floor((start + end) / 2);\n            const midLeft = set[midIdx];\n            const cmp = left - midLeft;\n            if (cmp > 0) {\n                start = midIdx + 1;\n            } else if (cmp < 0) {\n                end = midIdx - 1;\n            } else {\n                return midIdx;\n            }\n        }\n        return end;\n    }\n\n    protected _recalcScrollBarSize(containerSizeInfo = null) {\n        const count = this.isRemote ? this.totalItemCount : (this.igxForOf ? this.igxForOf.length : 0);\n        this.dc.instance.notVirtual = !(this.igxForContainerSize && this.dc && this.state.chunkSize < count);\n        const scrollable = containerSizeInfo ? this.scrollComponent.size > containerSizeInfo.prevSize : this.isScrollable();\n        if (this.igxForScrollOrientation === 'horizontal') {\n            const totalWidth = parseFloat(this.igxForContainerSize) > 0 ? this._calcSize() : 0;\n            if (totalWidth <= parseFloat(this.igxForContainerSize)) {\n                this.resetScrollPosition();\n            }\n            this.scrollComponent.nativeElement.style.width = this.igxForContainerSize + 'px';\n            this.scrollComponent.size = totalWidth;\n        }\n        if (this.igxForScrollOrientation === 'vertical') {\n            const totalHeight = this._calcSize();\n            if (totalHeight <= parseFloat(this.igxForContainerSize)) {\n                this.resetScrollPosition();\n            }\n            this.scrollComponent.nativeElement.style.height = parseFloat(this.igxForContainerSize) + 'px';\n            this.scrollComponent.size = totalHeight;\n        }\n        if (scrollable !== this.isScrollable()) {\n            // scrollbar visibility has changed\n            this.scrollbarVisibilityChanged.emit();\n        }\n    }\n\n    protected _calcSize(): number {\n        let size;\n        if (this.individualSizeCache && this.individualSizeCache.length > 0) {\n            size = this.individualSizeCache.reduce((acc, val) => acc + val, 0);\n        } else {\n            size = this.initSizesCache(this.igxForOf);\n        }\n        this._virtSize = size;\n        if (size > this._maxSize) {\n            this._virtRatio = size / this._maxSize;\n            size = this._maxSize;\n        }\n        return size;\n    }\n\n    protected _recalcOnContainerChange(containerSizeInfo = null) {\n        const prevChunkSize = this.state.chunkSize;\n        this.applyChunkSizeChange();\n        this._recalcScrollBarSize(containerSizeInfo);\n        if (prevChunkSize !== this.state.chunkSize) {\n            this.chunkLoad.emit(this.state);\n        }\n    }\n\n    /**\n     * @hidden\n     * Removes an element from the embedded views and updates chunkSize.\n     */\n    protected removeLastElem() {\n        const oldElem = this._embeddedViews.pop();\n        this.beforeViewDestroyed.emit(oldElem);\n        this.viewObserver?.unobserve(oldElem.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE) || oldElem.rootNodes[0].nextElementSibling);\n        // also detach from ViewContainerRef to make absolutely sure this is removed from the view container.\n        this.dc.instance._vcr.detach(this.dc.instance._vcr.length - 1);\n        oldElem.destroy();\n        this._embeddedViewSizesCache.delete(oldElem);\n\n        this.state.chunkSize--;\n    }\n\n    /**\n     * @hidden\n     * If there exists an element that we can create embedded view for creates it, appends it and updates chunkSize\n     */\n    protected addLastElem() {\n        let elemIndex = this.state.startIndex + this.state.chunkSize;\n        if (!this.isRemote && !this.igxForOf) {\n            return;\n        }\n\n        if (elemIndex >= this.igxForOf.length) {\n            elemIndex = this.igxForOf.length - this.state.chunkSize;\n        }\n        const input = this.igxForOf[elemIndex];\n        const embeddedView = this.dc.instance._vcr.createEmbeddedView(\n            this._template,\n            new IgxForOfContext<T, U>(input, this.igxForOf, this.getContextIndex(input), this.igxForOf.length)\n        );\n\n        this._embeddedViews.push(embeddedView);\n        this.state.chunkSize++;\n\n        this._zone.run(() => this.cdr.markForCheck());\n    }\n\n    /**\n     * Recalculates chunkSize and adds/removes elements if need due to the change.\n     * this.state.chunkSize is updated in @addLastElem() or @removeLastElem()\n     */\n    protected applyChunkSizeChange() {\n        const chunkSize = this.isRemote ? (this.igxForOf ? this.igxForOf.length : 0) : this._calculateChunkSize();\n        if (chunkSize !== this.state.chunkSize) {\n            this.chunkSizeChange.emit(chunkSize);\n        }\n        if (chunkSize > this.state.chunkSize) {\n            const diff = chunkSize - this.state.chunkSize;\n            for (let i = 0; i < diff; i++) {\n                this.addLastElem();\n            }\n        } else if (chunkSize < this.state.chunkSize) {\n            const diff = this.state.chunkSize - chunkSize;\n            for (let i = 0; i < diff; i++) {\n                this.removeLastElem();\n            }\n        }\n    }\n\n    protected _calcVirtualScrollPosition(scrollPosition: number) {\n        const containerSize = parseFloat(this.igxForContainerSize);\n        const maxRealScrollPosition = this.scrollComponent.size - containerSize;\n        const realPercentScrolled = maxRealScrollPosition !== 0 ? scrollPosition / maxRealScrollPosition : 0;\n        const maxVirtScroll = this._virtSize - containerSize;\n        this._virtScrollPosition = realPercentScrolled * maxVirtScroll;\n    }\n\n    protected _getItemSize(item, dimension: string): number {\n        const dim = item ? item[dimension] : null;\n        return typeof dim === 'number' ? dim : parseFloat(this.igxForItemSize) || 0;\n    }\n\n    protected _updateScrollOffset() {\n        let scrollOffset = 0;\n        let currentScroll = this.scrollPosition;\n        if (this._virtRatio !== 1) {\n            this._calcVirtualScrollPosition(this.scrollPosition);\n            currentScroll = this._virtScrollPosition;\n        }\n        const scroll = this.scrollComponent.nativeElement;\n        scrollOffset = scroll && this.scrollComponent.size ?\n        currentScroll - this.sizesCache[this.state.startIndex] : 0;\n        const dir = this.igxForScrollOrientation === 'horizontal' ? 'left' : 'transform';\n        this.dc.instance._viewContainer.element.nativeElement.style[dir] = this.igxForScrollOrientation === 'horizontal' ?\n         -(scrollOffset) + 'px' :\n         `translateY(${-scrollOffset}px)`;\n    }\n\n    protected _adjustScrollPositionAfterSizeChange(sizeDiff) {\n        // if data has been changed while container is scrolled\n        // should update scroll top/left according to change so that same startIndex is in view\n        if (Math.abs(sizeDiff) > 0 && this.scrollPosition > 0) {\n            const offset = this.igxForScrollOrientation === 'horizontal' ?\n                parseFloat(this.dc.instance._viewContainer.element.nativeElement.style.left) :\n                Number(this.dc.instance._viewContainer.element.nativeElement.style.transform?.match(/translateY\\((-?\\d+\\.?\\d*)px\\)/)?.[1]);\n            const newSize = this.sizesCache[this.state.startIndex] - offset;\n            this.scrollPosition = newSize;\n            if (this.scrollPosition !== newSize) {\n                this.scrollComponent.scrollAmount = newSize;\n            }\n        }\n    }\n\n    protected getMargin(node, dimension: string): number {\n        const styles = window.getComputedStyle(node);\n        if (dimension === 'height') {\n            return parseFloat(styles['marginTop']) +\n                parseFloat(styles['marginBottom']) || 0;\n        }\n        return parseFloat(styles['marginLeft']) +\n            parseFloat(styles['marginRight']) || 0;\n    }\n}\n\nexport const getTypeNameForDebugging = (type: any): string => type.name || typeof type;\n\nexport interface IForOfState extends IBaseEventArgs {\n    startIndex?: number;\n    chunkSize?: number;\n}\n\n/**\n * @deprecated in 19.2.7. Use `IForOfDataChangeEventArgs` instead.\n */\nexport interface IForOfDataChangingEventArgs extends IBaseEventArgs {\n    containerSize: number;\n    state: IForOfState;\n}\n\nexport interface IForOfDataChangeEventArgs extends IForOfDataChangingEventArgs {}\n\nexport class IgxGridForOfContext<T, U extends T[] = T[]> extends IgxForOfContext<T, U> {\n    constructor(\n        $implicit: T,\n        public igxGridForOf: U,\n        index: number,\n        count: number\n    ) {\n        super($implicit, igxGridForOf, index, count);\n    }\n}\n\n@Directive({\n    selector: '[igxGridFor][igxGridForOf]',\n    standalone: true\n})\nexport class IgxGridForOfDirective<T, U extends T[] = T[]> extends IgxForOfDirective<T, U> implements OnInit, OnChanges {\n    protected syncService = inject(IgxForOfSyncService);\n\n    @Input()\n    public set igxGridForOf(value: U & T[] | null) {\n        this.igxForOf = value;\n    }\n\n    public get igxGridForOf() {\n        return this.igxForOf;\n    }\n\n    @Input({ transform: booleanAttribute })\n    public igxGridForOfUniqueSizeCache = false;\n\n    @Input({ transform: booleanAttribute })\n    public igxGridForOfVariableSizes = true;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override get sizesCache(): number[] {\n        if (this.igxForScrollOrientation === 'horizontal') {\n            if (this.igxGridForOfUniqueSizeCache || this.syncService.isMaster(this)) {\n                return this._sizesCache;\n            }\n            return this.syncService.sizesCache(this.igxForScrollOrientation);\n        } else {\n            return this._sizesCache;\n        }\n    }\n    /**\n     * @hidden\n     * @internal\n     */\n    public override set sizesCache(value: number[]) {\n        this._sizesCache = value;\n    }\n\n    protected get itemsDimension() {\n        return this.igxForSizePropName || 'height';\n    }\n\n    public override recalcUpdateSizes(prevState?: IForOfState) {\n        if (this.igxGridForOfVariableSizes && this.igxForScrollOrientation === 'vertical') {\n            super.recalcUpdateSizes(prevState);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     * An event that is emitted after data has been changed but before the view is refreshed\n     */\n    @Output()\n    public dataChanging = new EventEmitter<IForOfDataChangeEventArgs>();\n\n    /**\n     * @hidden @internal\n     * Asserts the correct type of the context for the template that `IgxGridForOfDirective` will render.\n     *\n     * The presence of this method is a signal to the Ivy template type-check compiler that the\n     * `IgxGridForOfDirective` structural directive renders its template with a specific context type.\n     */\n    public static override ngTemplateContextGuard<T, U extends T[]>(dir: IgxGridForOfDirective<T, U>, ctx: any):\n        ctx is IgxGridForOfContext<T, U> {\n        return true;\n    }\n\n    public override ngOnInit() {\n        this.syncService.setMaster(this);\n        super.ngOnInit();\n        this.removeScrollEventListeners();\n        const destructor = takeUntil<any>(this.destroy$);\n        this.viewObserver = new (getResizeObserver())((entries: ResizeObserverEntry[]) => this.viewResizeNotify.next(entries));\n        this.viewResizeNotify.pipe(\n            filter(() => this.igxForContainerSize && this.igxForOf && this.igxForOf.length > 0),\n            destructor\n        ).subscribe((entries: ResizeObserverEntry[]) => this._zone.runTask(() => this.updateViewSizes(entries)));\n    }\n\n    public override ngOnChanges(changes: SimpleChanges) {\n        const forOf = 'igxGridForOf';\n        this.syncService.setMaster(this);\n        if (forOf in changes) {\n            const value = changes[forOf].currentValue;\n            if (!this._differ && value) {\n                try {\n                    this._differ = this._differs.find(value).create(this.igxForTrackBy);\n                } catch (e) {\n                    throw new Error(\n                        `Cannot find a differ supporting object \"${value}\" of type \"${getTypeNameForDebugging(value)}\".\n                     NgFor only supports binding to Iterables such as Arrays.`);\n                }\n            }\n            if (this.igxForScrollOrientation === 'horizontal') {\n                // in case collection has changes, reset sync service\n                this.syncService.setMaster(this, this.igxGridForOfUniqueSizeCache);\n            }\n        }\n        const defaultItemSize = 'igxForItemSize';\n        if (defaultItemSize in changes && !changes[defaultItemSize].firstChange &&\n            this.igxForScrollOrientation === 'vertical' && this.igxForOf) {\n            // handle default item size changed.\n            this.initSizesCache(this.igxForOf);\n        }\n        const containerSize = 'igxForContainerSize';\n        if (containerSize in changes && !changes[containerSize].firstChange && this.igxForOf) {\n            const prevSize = parseFloat(changes[containerSize].previousValue);\n            const newSize = parseFloat(changes[containerSize].currentValue);\n            this._recalcOnContainerChange({prevSize, newSize});\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public assumeMaster(): void {\n        this._sizesCache = this.syncService.sizesCache(this.igxForScrollOrientation);\n        this.syncService.setMaster(this, true);\n    }\n\n    public override resolveDataDiff() {\n        if (this._differ) {\n            const changes = this._differ.diff(this.igxForOf);\n            if (changes) {\n                const args: IForOfDataChangingEventArgs = {\n                    containerSize: this.igxForContainerSize,\n                    state: this.state\n                };\n                this.dataChanging.emit(args);\n                //  re-init cache.\n                if (!this.igxForOf) {\n                    this.igxForOf = [] as U;\n                }\n                /* we need to reset the master dir if all rows are removed\n                (e.g. because of filtering); if all columns are hidden, rows are\n                still rendered empty, so we should not reset master */\n                if (!this.igxForOf.length &&\n                    this.igxForScrollOrientation === 'vertical') {\n                    this.syncService.resetMaster();\n                }\n                this.syncService.setMaster(this);\n                this.igxForContainerSize = args.containerSize;\n                const sizeDiff = this._updateSizeCache(changes);\n                this._applyChanges();\n                if (sizeDiff) {\n                    this._adjustScrollPositionAfterSizeChange(sizeDiff);\n                }\n                this._updateScrollOffset();\n                this.dataChanged.emit(args);\n            }\n        }\n    }\n\n    public override onScroll(event) {\n        this.scrollComponent.scrollAmount = event.target.scrollTop;\n        if (!this.scrollComponent.size) {\n            return;\n        }\n        if (!this._bScrollInternal) {\n            this._calcVirtualScrollPosition(this.scrollComponent.scrollAmount);\n        } else {\n            this._bScrollInternal = false;\n        }\n        const prevState = Object.assign({}, this.state);\n        const scrollOffset = this.fixedUpdateAllElements(this._virtScrollPosition);\n        runInInjectionContext(this._injector, () => {\n            afterNextRender({\n                write: () => {\n                    this.dc.instance._viewContainer.element.nativeElement.style.transform = `translateY(${-scrollOffset}px)`;\n                    this._zone.onStable.pipe(first()).subscribe(this.recalcUpdateSizes.bind(this, prevState));\n                }\n              });\n          });\n\n        this.cdr.markForCheck();\n    }\n\n    public override onHScroll(scrollAmount) {\n        /* in certain situations this may be called when no scrollbar is visible */\n        const firstScrollChild = this.scrollComponent.nativeElement.children.item(0) as HTMLElement;\n        if (!this.scrollComponent || !parseFloat(firstScrollChild.style.width)) {\n            return;\n        }\n        this.scrollComponent.scrollAmount = scrollAmount;\n        // Updating horizontal chunks\n        const scrollOffset = this.fixedUpdateAllElements(Math.abs(scrollAmount));\n        if (scrollAmount < 0) {\n            // RTL\n            this.dc.instance._viewContainer.element.nativeElement.style.left = scrollOffset + 'px';\n        } else {\n            // LTR\n            this.dc.instance._viewContainer.element.nativeElement.style.left = -scrollOffset + 'px';\n        }\n    }\n\n    protected getItemSize(item) {\n        let size = 0;\n        const dimension = this.igxForSizePropName || 'height';\n        if (this.igxForScrollOrientation === 'vertical') {\n            size = this._getItemSize(item, dimension);\n            if (item && item.summaries) {\n                size = item.max;\n            } else if (item && item.groups && item.height) {\n                size = item.height;\n            }\n        } else {\n            size = parseFloat(item[dimension]) || 0;\n        }\n        return size;\n    }\n\n    protected override initSizesCache(items: U): number {\n        if (!this.syncService.isMaster(this) && this.igxForScrollOrientation === 'horizontal') {\n            const masterSizesCache = this.syncService.sizesCache(this.igxForScrollOrientation);\n            return masterSizesCache[masterSizesCache.length - 1];\n        }\n        let totalSize = 0;\n        let size = 0;\n        let i = 0;\n        const count = this.isRemote ? this.totalItemCount : items.length;\n        this.sizesCache = new Array(count + 1);\n        this.sizesCache[0] = 0;\n        this.individualSizeCache = new Array(count);\n        for (i; i < count; i++) {\n            size = this.getItemSize(items[i]);\n            this.individualSizeCache[i] = size;\n            totalSize += size;\n            this.sizesCache[ i + 1] = totalSize;\n        }\n        return totalSize;\n    }\n\n    protected override getNodeSize(rNode: Element, index?: number): number {\n        if (this.igxForScrollOrientation === 'vertical') {\n            const view = this._embeddedViews[index];\n            return this._embeddedViewSizesCache.get(view) || parseFloat(this.igxForItemSize);\n        } else {\n            return super.getNodeSize(rNode, index);\n        }\n    }\n\n    protected override _updateSizeCache(changes: IterableChanges<T> = null) {\n        const oldSize = this.individualSizeCache.length > 0 ? this.individualSizeCache.reduce((acc, val) => acc + val) : 0;\n        let newSize = oldSize;\n        if (changes && !this.isRemote) {\n            newSize = this.handleCacheChanges(changes);\n        } else {\n            return;\n        }\n\n        const diff = oldSize - newSize;\n        return diff;\n    }\n\n    protected handleCacheChanges(changes: IterableChanges<T>) {\n        const identityChanges = [];\n        const newHeightCache = [];\n        const newSizesCache = [];\n        newSizesCache.push(0);\n        let newHeight = 0;\n\n        // When there are more than one removed items the changes are not reliable so those with identity change should be default size.\n        let numRemovedItems = 0;\n        changes.forEachRemovedItem(() => numRemovedItems++);\n\n        // Get the identity changes to determine later if those that have changed their indexes should be assigned default item size.\n        changes.forEachIdentityChange((item) => {\n            if (item.currentIndex !== item.previousIndex) {\n                // Filter out ones that have not changed their index.\n                identityChanges[item.currentIndex] = item;\n            }\n        });\n\n        // Processing each item that is passed to the igxForOf so far seem to be most reliable. We parse the updated list of items.\n        changes.forEachItem((item) => {\n            if (item.previousIndex !== null &&\n                (numRemovedItems < 2 || !identityChanges.length || identityChanges[item.currentIndex])\n                && this.igxForScrollOrientation !== \"horizontal\" && this.individualSizeCache.length > 0) {\n                // Reuse cache on those who have previousIndex.\n                // When there are more than one removed items currently the changes are not readable so ones with identity change\n                // should be racalculated.\n                newHeightCache[item.currentIndex] = this.individualSizeCache[item.previousIndex];\n            } else {\n                // Assign default item size.\n                newHeightCache[item.currentIndex] = this.getItemSize(item.item);\n            }\n            newSizesCache[item.currentIndex + 1] = newSizesCache[item.currentIndex] + newHeightCache[item.currentIndex];\n            newHeight += newHeightCache[item.currentIndex];\n        });\n        this.individualSizeCache = newHeightCache;\n        this.sizesCache = newSizesCache;\n        return newHeight;\n    }\n\n    protected override addLastElem() {\n        let elemIndex = this.state.startIndex + this.state.chunkSize;\n        if (!this.isRemote && !this.igxForOf) {\n            return;\n        }\n\n        if (elemIndex >= this.igxForOf.length) {\n            elemIndex = this.igxForOf.length - this.state.chunkSize;\n        }\n        const input = this.igxForOf[elemIndex];\n        const embeddedView = this.dc.instance._vcr.createEmbeddedView(\n            this._template,\n            new IgxGridForOfContext<T, U>(input, this.igxForOf, this.getContextIndex(input), this.igxForOf.length)\n        );\n\n        this._embeddedViews.push(embeddedView);\n        this.subscribeToViewObserver(embeddedView.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE) || embeddedView.rootNodes[0].nextElementSibling);\n        this.state.chunkSize++;\n    }\n\n    protected _updateViews(prevChunkSize) {\n        if (this.igxForOf && this.igxForOf.length && this.dc) {\n            const embeddedViewCopy = Object.assign([], this._embeddedViews);\n            let startIndex;\n            let endIndex;\n            if (this.isRemote) {\n                startIndex = 0;\n                endIndex = this.igxForOf.length;\n            } else {\n                startIndex = this.getIndexAt(this.scrollPosition, this.sizesCache);\n                if (startIndex + this.state.chunkSize > this.igxForOf.length) {\n                    startIndex = this.igxForOf.length - this.state.chunkSize;\n                }\n                this.state.startIndex = startIndex;\n                endIndex = this.state.chunkSize + this.state.startIndex;\n            }\n\n            for (let i = startIndex; i < endIndex && this.igxForOf[i] !== undefined; i++) {\n                const embView = embeddedViewCopy.shift();\n                this.updateTemplateContext(embView.context, i);\n            }\n            if (prevChunkSize !== this.state.chunkSize) {\n                this.chunkLoad.emit(this.state);\n            }\n        }\n    }\n    protected override _applyChanges() {\n        const prevChunkSize = this.state.chunkSize;\n        this.applyChunkSizeChange();\n        this._recalcScrollBarSize();\n        this._updateViews(prevChunkSize);\n    }\n\n    /**\n     * @hidden\n     */\n    protected override _calcMaxChunkSize(): number {\n        if (this.igxForScrollOrientation === 'horizontal') {\n            if (this.syncService.isMaster(this)) {\n                return super._calcMaxChunkSize();\n            }\n            return this.syncService.chunkSize(this.igxForScrollOrientation);\n        } else {\n            return super._calcMaxChunkSize();\n        }\n\n    }\n}\n","import {Directive, HostBinding, Input} from '@angular/core';\nimport { IgxBaseButtonType, IgxButtonBaseDirective } from './button-base';\n\n/**\n * Determines the Icon Button type.\n */\nexport type IgxIconButtonType = typeof IgxBaseButtonType[keyof typeof IgxBaseButtonType];\n\n/**\n * The IgxIconButtonDirective provides a way to use an icon as a fully functional button.\n *\n * @example\n * ```html\n * <button type=\"button\" igxIconButton=\"outlined\">\n *      <igx-icon>home</igx-icon>\n * </button>\n * ```\n */\n@Directive({\n    selector: '[igxIconButton]',\n    standalone: true\n})\nexport class IgxIconButtonDirective extends IgxButtonBaseDirective {\n    private static ngAcceptInputType_type: IgxIconButtonType | '';\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-icon-button')\n    protected _cssClass = 'igx-icon-button';\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _type: IgxIconButtonType;\n\n    /**\n     * Sets the type of the icon button.\n     *\n     * @example\n     * ```html\n     * <button type=\"button\" igxIconButton=\"flat\"></button>\n     * ```\n     */\n    @Input('igxIconButton')\n    public set type(type: IgxIconButtonType) {\n        const t = type ? type : IgxBaseButtonType.Contained;\n        if (this._type !== t) {\n            this._type = t;\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-icon-button--flat')\n    public get flat(): boolean {\n        return this._type === IgxBaseButtonType.Flat;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-icon-button--contained')\n    public get contained(): boolean {\n        return this._type === IgxBaseButtonType.Contained;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-icon-button--outlined')\n    public get outlined(): boolean {\n        return this._type === IgxBaseButtonType.Outlined;\n    }\n}\n","import { Directive, HostBinding, Input, booleanAttribute } from '@angular/core';\n\n@Directive({\n    selector: '[igxLayout]',\n    standalone: true\n})\nexport class IgxLayoutDirective {\n    /**\n     * Sets the default flow direction of the container's children.\n     *\n     * Defaults to `rows`.\n     *\n     * ```html\n     *  <div\n     *   igxLayout\n     *   igxLayoutDir=\"row\">\n     *    <div igxFlex>1</div>\n     *    <div igxFlex>2</div>\n     *    <div igxFlex>3</div>\n     *  </div>\n     * ```\n     */\n    @Input('igxLayoutDir') public dir = 'row';\n\n    /**\n     * Defines the direction flex children are placed in the flex container.\n     *\n     * When set to `true`, the `rows` direction goes right to left and `columns` goes bottom to top.\n     *\n     * ```html\n     * <div\n     *   igxLayout\n     *   igxLayoutReverse=\"true\">\n     *    <div igxFlex>1</div>\n     *    <div igxFlex>2</div>\n     *    <div igxFlex>3</div>\n     * </div>\n     * ```\n     */\n    @Input({ alias: 'igxLayoutReverse', transform: booleanAttribute }) public reverse = false;\n\n    /**\n     * By default the immediate children will all try to fit onto one line.\n     *\n     * The default value `nowrap` sets this behavior.\n     *\n     * Other accepted values are `wrap` and `wrap-reverse`.\n     *\n     * ```html\n     * <div\n     *   igxLayout\n     *   igxLayoutDir=\"row\"\n     *   igxLayoutWrap=\"wrap\">\n     *    <div igxFlex igxFlexGrow=\"0\">1</div>\n     *    <div igxFlex igxFlexGrow=\"0\">2</div>\n     *    <div igxFlex igxFlexGrow=\"0\">3</div>\n     * </div>\n     * ```\n     */\n    @Input('igxLayoutWrap') public wrap = 'nowrap';\n\n    /**\n     * Defines the alignment along the main axis.\n     *\n     * Defaults to `flex-start` which packs the children toward the start line.\n     *\n     * Other possible values are `flex-end`, `center`, `space-between`, `space-around`.\n     *\n     * ```html\n     * <div\n     *   igxLayout\n     *   igxLayoutDir=\"column\"\n     *   igxLayoutJustify=\"space-between\">\n     *    <div>1</div>\n     *    <div>2</div>\n     *    <div>3</div>\n     * </div>\n     * ```\n     */\n    @Input('igxLayoutJustify') public justify = 'flex-start';\n\n    /**\n     * Defines the default behavior for how children are laid out along the corss axis of the current line.\n     *\n     * Defaults to `flex-start`.\n     *\n     * Other possible values are `flex-end`, `center`, `baseline`, and `stretch`.\n     *\n     * ```html\n     * <div\n     *   igxLayout\n     *   igxLayoutDir=\"column\"\n     *   igxLayoutItemAlign=\"start\">\n     *    <div igxFlex igxFlexGrow=\"0\">1</div>\n     *    <div igxFlex igxFlexGrow=\"0\">2</div>\n     *    <div igxFlex igxFlexGrow=\"0\">3</div>\n     * </div>\n     * ```\n     */\n    @Input('igxLayoutItemAlign') public itemAlign = 'stretch';\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.display') public display = 'flex';\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.flex-wrap')\n    public get flexwrap() {\n        return this.wrap;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.justify-content')\n    public get justifycontent() {\n        return this.justify;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.align-items')\n    public get align() {\n        return this.itemAlign;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.flex-direction')\n    public get direction() {\n        if (this.reverse) {\n            return (this.dir === 'row') ? 'row-reverse' : 'column-reverse';\n        }\n        return (this.dir === 'row') ? 'row' : 'column';\n    }\n}\n\n@Directive({\n    selector: '[igxFlex]',\n    standalone: true\n})\nexport class IgxFlexDirective {\n\n    /**\n     * Applies the `grow` attribute to an element that uses the directive.\n     *\n     * Default value is `1`.\n     *\n     * ```html\n     * <div>\n     *    <div igxFlex igxFlexGrow=\"0\">Content1</div>\n     *    <div igxFlex igxFlexGrow=\"1\">Content2</div>\n     *    <div igxFlex igxFlexGrow=\"0\">Content3</div>\n     * </div>\n     * ```\n     */\n    @Input('igxFlexGrow') public grow = 1;\n\n    /**\n     * Applies the `shrink` attribute to an element that uses the directive.\n     *\n     * Default value is `1`.\n     *\n     * ```html\n     * <div>\n     *    <div igxFlex igxFlexShrink=\"1\">Content1</div>\n     *    <div igxFlex igxFlexShrink=\"0\">Content2</div>\n     *    <div igxFlex igxFlexShrink=\"1\">Content3</div>\n     * </div>\n     * ```\n     */\n    @Input('igxFlexShrink') public shrink = 1;\n\n    /**\n     * Applies the directive to an element.\n     *\n     * Possible values include `igxFlexGrow`, `igxFlexShrink`, `igxFlexOrder`, `igxFlexBasis`.\n     *\n     * ```html\n     * <div igxFlex>Content</div>\n     * ```\n     */\n    @Input('igxFlex') public flex = '';\n\n    /**\n     * Applies the `order` attribute to an element that uses the directive.\n     *\n     * Default value is `0`.\n     *\n     * ```html\n     * <div>\n     *    <div igxFlex igxFlexOrder=\"1\">Content1</div>\n     *    <div igxFlex igxFlexOrder=\"0\">Content2</div>\n     *    <div igxFlex igxFlexOrder=\"2\">Content3</div>\n     * </div>\n     * ```\n     */\n    @Input('igxFlexOrder') public order = 0;\n\n    /**\n     * Applies the `flex-basis` attribute to an element that uses the directive.\n     *\n     * Default value is `auto`.\n     *\n     * Other possible values include `content`, `max-content`, `min-content`, `fit-content`.\n     *\n     * ```html\n     * <div igxFlex igxFlexBasis=\"fit-content\">Content</div>\n     * ```\n     */\n    @Input('igxFlexBasis') public basis = 'auto';\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.flex')\n    public get style() {\n        if (this.flex) {\n            return `${this.flex}`;\n        }\n        return `${this.grow} ${this.shrink} ${this.basis}`;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.order')\n    public get itemorder() {\n        return this.order || 0;\n    }\n}\n","import { Injectable } from '@angular/core';\n\n\nconst FLAGS = new Set('aACL09#&?');\nconst REGEX = new Map([\n    ['C', /(?!^$)/u], // Non-empty\n    ['&', /[^\\p{Separator}]/u], // Non-whitespace\n    ['a', /[\\p{Letter}\\d\\p{Separator}]/u], // Alphanumeric & whitespace\n    ['A', /[\\p{Letter}\\d]/u], // Alphanumeric\n    ['?', /[\\p{Letter}\\p{Separator}]/u], // Alpha & whitespace\n    ['L', /\\p{Letter}/u], // Alpha\n    ['0', /\\d/], // Numeric\n    ['9', /[\\d\\p{Separator}]/u], // Numeric & whitespace\n    ['#', /[\\d\\-+]/], // Numeric and sign\n]);\n\n/** @hidden */\nexport interface MaskOptions {\n    format: string;\n    promptChar: string;\n}\n\n/** @hidden */\nexport interface Replaced {\n    value: string;\n    end: number;\n}\n\ninterface ParsedMask {\n    literals: Map<number, string>,\n    mask: string\n}\n\nconst replaceCharAt = (string: string, idx: number, char: string) =>\n    `${string.substring(0, idx)}${char}${string.substring(idx + 1)}`;\n\n\nexport function parseMask(format: string): ParsedMask {\n    const literals = new Map<number, string>();\n    let mask = format;\n\n    for (let i = 0, j = 0; i < format.length; i++, j++) {\n        const [current, next] = [format.charAt(i), format.charAt(i + 1)];\n\n        if (current === '\\\\' && FLAGS.has(next)) {\n            mask = replaceCharAt(mask, j, '');\n            literals.set(j, next);\n            i++;\n        } else {\n            if (!FLAGS.has(current)) {\n                literals.set(j, current);\n            }\n        }\n    }\n\n    return { literals, mask };\n}\n\n/** @hidden */\n@Injectable({\n    providedIn: 'root'\n})\nexport class MaskParsingService {\n\n    public applyMask(inputVal: string, maskOptions: MaskOptions, pos = 0): string {\n        let outputVal = '';\n        let value = '';\n        const { literals, mask } = parseMask(maskOptions.format);\n        const literalKeys: number[] = Array.from(literals.keys());\n        const nonLiteralIndices: number[] = this.getNonLiteralIndices(mask, literalKeys);\n        const literalValues: string[] = Array.from(literals.values());\n\n        if (inputVal != null) {\n            value = inputVal.toString();\n        }\n\n        for (const _maskSym of mask) {\n            outputVal += maskOptions.promptChar;\n        }\n\n        literals.forEach((val: string, key: number) => {\n            outputVal = replaceCharAt(outputVal, key, val);\n        });\n\n        if (!value) {\n            return outputVal;\n        }\n\n        const nonLiteralValues: string[] = this.getNonLiteralValues(value, literalValues);\n\n        for (let i = 0; i < nonLiteralValues.length; i++) {\n            const char = nonLiteralValues[i];\n            const isCharValid = this.validateCharOnPosition(char, nonLiteralIndices[i], mask);\n\n            if (!isCharValid && char !== maskOptions.promptChar) {\n                nonLiteralValues[i] = maskOptions.promptChar;\n            }\n        }\n\n        if (nonLiteralValues.length > nonLiteralIndices.length) {\n            nonLiteralValues.splice(nonLiteralIndices.length);\n        }\n\n        for (const nonLiteralValue of nonLiteralValues) {\n            const char = nonLiteralValue;\n            outputVal = replaceCharAt(outputVal, nonLiteralIndices[pos++], char);\n        }\n\n        return outputVal;\n    }\n\n    public parseValueFromMask(maskedValue: string, maskOptions: MaskOptions): string {\n        let outputVal = '';\n        const literalValues: string[] = Array.from(parseMask(maskOptions.format).literals.values());\n\n        for (const val of maskedValue) {\n            if (literalValues.indexOf(val) === -1) {\n                if (val !== maskOptions.promptChar) {\n                    outputVal += val;\n                }\n            }\n        }\n\n        return outputVal;\n    }\n\n    public replaceInMask(maskedValue: string, value: string, maskOptions: MaskOptions, start: number, end: number): Replaced {\n        const { literals, mask } = parseMask(maskOptions.format);\n        const literalsPositions = Array.from(literals.keys());\n        value = this.replaceIMENumbers(value);\n        const chars = Array.from(value);\n        let cursor = start;\n        end = Math.min(end, maskedValue.length);\n\n        for (let i = start; i < end || (chars.length && i < maskedValue.length); i++) {\n            if (literalsPositions.indexOf(i) !== -1) {\n                if (chars[0] === maskedValue[i] || value.length < 1) {\n                    cursor = i + 1;\n                    chars.shift();\n                }\n                continue;\n            }\n            if (chars[0]\n                && !this.validateCharOnPosition(chars[0], i, mask)\n                && chars[0] !== maskOptions.promptChar) {\n                break;\n            }\n\n            let char = maskOptions.promptChar;\n            if (chars.length) {\n                cursor = i + 1;\n                char = chars.shift();\n            }\n            if (value.length < 1) {\n                // on `delete` the cursor should move forward\n                cursor++;\n            }\n            maskedValue = replaceCharAt(maskedValue, i, char);\n        }\n\n        return { value: maskedValue, end: cursor };\n    }\n\n    /** Validates only non literal positions. */\n    private validateCharOnPosition(inputChar: string, position: number, mask: string): boolean {\n        const regex = REGEX.get(mask.charAt(position));\n        return regex ? regex.test(inputChar) : false;\n    }\n\n    private getNonLiteralIndices(mask: string, literalKeys: number[]): number[] {\n        const nonLiteralsIndices: number[] = [];\n\n        for (let i = 0; i < mask.length; i++) {\n            if (literalKeys.indexOf(i) === -1) {\n                nonLiteralsIndices.push(i);\n            }\n        }\n\n        return nonLiteralsIndices;\n    }\n    private getNonLiteralValues(value: string, literalValues: string[]): string[] {\n        const nonLiteralValues: string[] = [];\n\n        for (const val of value) {\n            if (literalValues.indexOf(val) === -1) {\n                nonLiteralValues.push(val);\n            }\n        }\n\n        return nonLiteralValues;\n    }\n\n    private replaceIMENumbers(value: string): string {\n        return value.replace(/[０１２３４５６７８９]/g, (num) => ({\n            '１': '1', '２': '2', '３': '3', '４': '4', '５': '5',\n            '６': '6', '７': '7', '８': '8', '９': '9', '０': '0'\n        }[num]));\n    }\n}\n","import { Directive, ElementRef, EventEmitter, HostListener, Output, PipeTransform, Renderer2, Input, OnInit, AfterViewChecked, booleanAttribute, inject } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MaskParsingService, MaskOptions, parseMask } from './mask-parsing.service';\nimport { IBaseEventArgs, PlatformUtil } from 'igniteui-angular/core';\nimport { noop } from 'rxjs';\n\n@Directive({\n    providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: IgxMaskDirective, multi: true }],\n    selector: '[igxMask]',\n    exportAs: 'igxMask',\n    standalone: true\n})\nexport class IgxMaskDirective implements OnInit, AfterViewChecked, ControlValueAccessor {\n    protected elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n    protected maskParser = inject(MaskParsingService);\n    protected renderer = inject(Renderer2);\n    protected platform = inject(PlatformUtil);\n\n    /**\n     * Sets the input mask.\n     * ```html\n     * <input [igxMask] = \"'00/00/0000'\">\n     * ```\n     */\n    @Input('igxMask')\n    public get mask(): string {\n        return this._mask || this.defaultMask;\n    }\n\n    public set mask(val: string) {\n        // B.P. 9th June 2021 #7490\n        if (val !== this._mask) {\n            const cleanInputValue = this.maskParser.parseValueFromMask(this.inputValue, this.maskOptions);\n            this.setPlaceholder(val);\n            this._mask = val;\n            this.updateInputValue(cleanInputValue);\n        }\n    }\n\n    /**\n     * Sets the character representing a fillable spot in the input mask.\n     * Default value is \"'_'\".\n     * ```html\n     * <input [promptChar] = \"'/'\">\n     * ```\n     */\n    @Input()\n    public promptChar = '_';\n\n    /**\n     * Specifies if the bound value includes the formatting symbols.\n     * ```html\n     * <input [includeLiterals] = \"true\">\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public includeLiterals: boolean;\n\n    /**\n     * Specifies a pipe to be used on blur.\n     * ```html\n     * <input [displayValuePipe] = \"displayFormatPipe\">\n     * ```\n     */\n    @Input()\n    public displayValuePipe: PipeTransform;\n\n    /**\n     * Specifies a pipe to be used on focus.\n     * ```html\n     * <input [focusedValuePipe] = \"inputFormatPipe\">\n     * ```\n     */\n    @Input()\n    public focusedValuePipe: PipeTransform;\n\n    /**\n     * Emits an event each time the value changes.\n     * Provides `rawValue: string` and `formattedValue: string` as event arguments.\n     * ```html\n     * <input (valueChanged) = \"valueChanged(rawValue: string, formattedValue: string)\">\n     * ```\n     */\n    @Output()\n    public valueChanged = new EventEmitter<IMaskEventArgs>();\n\n    /** @hidden */\n    public get nativeElement(): HTMLInputElement {\n        return this.elementRef.nativeElement;\n    }\n\n    /** @hidden @internal; */\n    protected get inputValue(): string {\n        return this.nativeElement.value;\n    }\n\n    /** @hidden @internal */\n    protected set inputValue(val: string) {\n        this.nativeElement.value = val;\n    }\n\n    /** @hidden */\n    protected get maskOptions(): MaskOptions {\n        const format = this.mask || this.defaultMask;\n        const promptChar = this.promptChar && this.promptChar.substring(0, 1);\n        return { format, promptChar };\n    }\n\n    /** @hidden */\n    protected get selectionStart(): number {\n        // Edge(classic) and FF don't select text on drop\n        return this.nativeElement.selectionStart === this.nativeElement.selectionEnd && this._hasDropAction ?\n            this.nativeElement.selectionEnd - this._droppedData.length :\n            this.nativeElement.selectionStart;\n    }\n\n    /** @hidden */\n    protected get selectionEnd(): number {\n        return this.nativeElement.selectionEnd;\n    }\n\n    /** @hidden */\n    protected get start(): number {\n        return this._start;\n    }\n\n    /** @hidden */\n    protected get end(): number {\n        return this._end;\n    }\n\n    protected _composing: boolean;\n    protected _compositionStartIndex: number;\n    protected _focused = false;\n    private _compositionValue: string;\n    private _end = 0;\n    private _start = 0;\n    private _key: string;\n    private _mask: string;\n    private _oldText = '';\n    private _dataValue = '';\n    private _droppedData: string;\n    private _hasDropAction: boolean;\n\n    private readonly defaultMask = 'CCCCCCCCCC';\n\n    protected _onTouchedCallback: () => void = noop;\n    protected _onChangeCallback: (_: any) => void = noop;\n\n    /** @hidden */\n    @HostListener('keydown', ['$event'])\n    public onKeyDown(event: KeyboardEvent): void {\n        const key = event.key;\n        if (!key) {\n            return;\n        }\n\n        if ((event.ctrlKey && (key === this.platform.KEYMAP.Z || key === this.platform.KEYMAP.Y))) {\n            event.preventDefault();\n        }\n\n        this._key = key;\n        this._start = this.selectionStart;\n        this._end = this.selectionEnd;\n    }\n\n    /** @hidden @internal */\n    @HostListener('compositionstart')\n    public onCompositionStart(): void {\n        if (!this._composing) {\n            this._compositionStartIndex = this._start;\n            this._composing = true;\n        }\n    }\n\n    /** @hidden @internal */\n    @HostListener('compositionend')\n    public onCompositionEnd(): void {\n        this._start = this._compositionStartIndex;\n        const end = this.selectionEnd;\n        const valueToParse = this.inputValue.substring(this._start, end);\n        this.updateInput(valueToParse);\n        this._end = this.selectionEnd;\n        this._compositionValue = this.inputValue;\n    }\n\n    /** @hidden @internal */\n    @HostListener('input', ['$event'])\n    public onInputChanged(event): void {\n        /**\n         * '!this._focused' is a fix for #8165\n         * On page load IE triggers input events before focus events and\n         * it does so for every single input on the page.\n         * The mask needs to be prevented from doing anything while this is happening because\n         * the end user will be unable to blur the input.\n         * https://stackoverflow.com/questions/21406138/input-event-triggered-on-internet-explorer-when-placeholder-changed\n         */\n\n        if (this._composing) {\n            if (this.inputValue.length < this._oldText.length) {\n                // software keyboard input delete\n                this._key = this.platform.KEYMAP.BACKSPACE;\n            }\n            return;\n        }\n\n        // After the compositionend event Chromium triggers input events of type 'deleteContentBackward' and\n        // we need to adjust the start and end indexes to include mask literals\n        if (event.inputType === 'deleteContentBackward' && this._key !== this.platform.KEYMAP.BACKSPACE) {\n            const isInputComplete = this._compositionStartIndex === 0 && this._end === this.mask.length;\n            let numberOfMaskLiterals = 0;\n            const literalPos = parseMask(this.maskOptions.format).literals.keys();\n            for (const index of literalPos) {\n                if (index >= this._compositionStartIndex && index <= this._end) {\n                    numberOfMaskLiterals++;\n                }\n            }\n            this.inputValue = isInputComplete ?\n                this.inputValue.substring(0, this.selectionEnd - numberOfMaskLiterals) + this.inputValue.substring(this.selectionEnd)\n                : this._compositionValue?.substring(0, this._compositionStartIndex) || this.inputValue;\n\n            if (this._compositionValue) {\n                this._start = this.selectionStart;\n                this._end = this.selectionEnd;\n                this.nativeElement.selectionStart = isInputComplete ? this._start - numberOfMaskLiterals : this._compositionStartIndex;\n                this.nativeElement.selectionEnd = this._end - numberOfMaskLiterals;\n                this.nativeElement.selectionEnd = this._end;\n                this._start = this.selectionStart;\n                this._end = this.selectionEnd;\n            }\n        }\n\n        if (this._hasDropAction) {\n            this._start = this.selectionStart;\n        }\n\n        let valueToParse = '';\n        switch (this._key) {\n            case this.platform.KEYMAP.DELETE:\n                this._end = this._start === this._end ? ++this._end : this._end;\n                break;\n            case this.platform.KEYMAP.BACKSPACE:\n                this._start = this.selectionStart;\n                break;\n            default:\n                valueToParse = this.inputValue.substring(this._start, this.selectionEnd);\n                break;\n        }\n\n        this.updateInput(valueToParse);\n    }\n\n    /** @hidden */\n    @HostListener('paste')\n    public onPaste(): void {\n        this._oldText = this.inputValue;\n        this._start = this.selectionStart;\n    }\n\n    /** @hidden */\n    @HostListener('focus')\n    public onFocus(): void {\n        if (this.nativeElement.readOnly) {\n            return;\n        }\n        this._focused = true;\n        this.showMask(this.inputValue);\n    }\n\n    /** @hidden */\n    @HostListener('blur', ['$event'])\n    public onBlur(event: FocusEvent): void {\n        const value = event.target['value'];\n        this._focused = false;\n        this.showDisplayValue(value);\n        this._onTouchedCallback();\n    }\n\n    /** @hidden */\n    @HostListener('dragenter')\n    public onDragEnter(): void {\n        if (!this._focused && !this._dataValue) {\n            this.showMask(this._dataValue);\n        }\n    }\n\n    /** @hidden */\n    @HostListener('dragleave')\n    public onDragLeave(): void {\n        if (!this._focused) {\n            this.showDisplayValue(this.inputValue);\n        }\n    }\n\n    /** @hidden */\n    @HostListener('drop', ['$event'])\n    public onDrop(event: DragEvent): void {\n        this._hasDropAction = true;\n        this._droppedData = event.dataTransfer.getData('text');\n    }\n\n    /** @hidden */\n    public ngOnInit(): void {\n        this.setPlaceholder(this.maskOptions.format);\n    }\n\n    /**\n     * TODO: Remove after date/time picker integration refactor\n     *\n     * @hidden\n     */\n    public ngAfterViewChecked(): void {\n        if (this._composing) {\n            return;\n        }\n        this._oldText = this.inputValue;\n    }\n\n    /** @hidden */\n    public writeValue(value: string): void {\n        if (this.promptChar && this.promptChar.length > 1) {\n            this.maskOptions.promptChar = this.promptChar.substring(0, 1);\n        }\n\n        this.inputValue = value ? this.maskParser.applyMask(value, this.maskOptions) : '';\n        if (this.displayValuePipe) {\n            this.inputValue = this.displayValuePipe.transform(this.inputValue);\n        }\n\n        this._dataValue = this.includeLiterals ? this.inputValue : value;\n\n        this.valueChanged.emit({ rawValue: value, formattedValue: this.inputValue });\n    }\n\n    /** @hidden */\n    public registerOnChange(fn: (_: any) => void): void {\n        this._onChangeCallback = fn;\n    }\n\n    /** @hidden */\n    public registerOnTouched(fn: () => void): void {\n        this._onTouchedCallback = fn;\n    }\n\n    /** @hidden */\n    protected showMask(value: string): void {\n        if (this.focusedValuePipe) {\n            // TODO(D.P.): focusedValuePipe should be deprecated or force-checked to match mask format\n            this.inputValue = this.focusedValuePipe.transform(value);\n        } else {\n            this.inputValue = this.maskParser.applyMask(value, this.maskOptions);\n        }\n\n        this._oldText = this.inputValue;\n    }\n\n    /** @hidden */\n    protected setSelectionRange(start: number, end: number = start): void {\n        this.nativeElement.setSelectionRange(start, end);\n    }\n\n    /** @hidden */\n    protected afterInput(): void {\n        this._oldText = this.inputValue;\n        this._hasDropAction = false;\n        this._start = 0;\n        this._end = 0;\n        this._key = null;\n        this._composing = false;\n    }\n\n    /** @hidden */\n    protected setPlaceholder(value: string): void {\n        const placeholder = this.nativeElement.placeholder;\n        if (!placeholder || placeholder === this.mask) {\n            this.renderer.setAttribute(this.nativeElement, 'placeholder', parseMask(value ?? '').mask || this.defaultMask);\n        }\n    }\n\n    private updateInputValue(value: string) {\n        if (this._focused) {\n            this.showMask(value);\n        } else if (!this.displayValuePipe) {\n            this.inputValue = this.inputValue ? this.maskParser.applyMask(value, this.maskOptions) : '';\n        }\n    }\n\n    private updateInput(valueToParse: string) {\n        const replacedData = this.maskParser.replaceInMask(this._oldText, valueToParse, this.maskOptions, this._start, this._end);\n        this.inputValue = replacedData.value;\n        if (this._key === this.platform.KEYMAP.BACKSPACE) {\n            replacedData.end = this._start;\n        }\n\n        this.setSelectionRange(replacedData.end);\n\n        const rawVal = this.maskParser.parseValueFromMask(this.inputValue, this.maskOptions);\n        this._dataValue = this.includeLiterals ? this.inputValue : rawVal;\n        this._onChangeCallback(this._dataValue);\n\n        this.valueChanged.emit({ rawValue: rawVal, formattedValue: this.inputValue });\n        this.afterInput();\n    }\n\n    private showDisplayValue(value: string) {\n        if (this.displayValuePipe) {\n            this.inputValue = this.displayValuePipe.transform(value);\n        } else if (value === this.maskParser.applyMask(null, this.maskOptions)) {\n            this.inputValue = '';\n        }\n    }\n}\n\n/**\n * The IgxMaskModule provides the {@link IgxMaskDirective} inside your application.\n */\nexport interface IMaskEventArgs extends IBaseEventArgs {\n    rawValue: string;\n    formattedValue: string;\n}\n\n","import {\n    Directive,\n    ElementRef,\n    HostListener,\n    Input,\n    NgZone,\n    Renderer2,\n    booleanAttribute,\n    inject\n} from '@angular/core';\n\n@Directive({\n    selector: '[igxRipple]',\n    standalone: true\n})\nexport class IgxRippleDirective {\n    protected elementRef = inject(ElementRef);\n    protected renderer = inject(Renderer2);\n    private zone = inject(NgZone);\n\n    /**\n     * Sets/gets the ripple target.\n     * ```html\n     * <div  #rippleContainer class=\"div-1\" igxRipple [igxRippleTarget] = \"'.div-1'\"></div>\n     * ```\n     * ```typescript\n     * @ViewChild('rippleContainer', {read: IgxRippleDirective})\n     * public ripple: IgxRippleDirective;\n     * let rippleTarget = this.ripple.rippleTarget;\n     * ```\n     * Can set the ripple to activate on a child element inside the parent where igxRipple is defined.\n     * ```html\n     * <div #rippleContainer [igxRippleTarget]=\"'#child\"'>\n     *   <button type=\"button\" igxButton id=\"child\">Click</button>\n     * </div>\n     * ```\n     *\n     * @memberof IgxRippleDirective\n     */\n    @Input('igxRippleTarget')\n    public rippleTarget = '';\n    /**\n     * Sets/gets the ripple color.\n     * ```html\n     * <button type=\"button\" #rippleContainer igxButton [igxRipple]=\"'red'\"></button>\n     * ```\n     * ```typescript\n     * @ViewChild('rippleContainer', {read: IgxRippleDirective})\n     * public ripple: IgxRippleDirective;\n     * let rippleColor = this.ripple.rippleColor;\n     * ```\n     *\n     * @memberof IgxRippleDirective\n     */\n    @Input('igxRipple')\n    public rippleColor: string;\n    /**\n     * Sets/gets the ripple duration(in milliseconds).\n     * Default value is `600`.\n     * ```html\n     * <button type=\"button\" #rippleContainer igxButton igxRipple [igxRippleDuration]=\"800\"></button>\n     * ```\n     * ```typescript\n     * @ViewChild('rippleContainer', {read: IgxRippleDirective})\n     * public ripple: IgxRippleDirective;\n     * let rippleDuration = this.ripple.rippleDuration;\n     * ```\n     *\n     * @memberof IgxRippleDirective\n     */\n    @Input('igxRippleDuration')\n    public rippleDuration = 600;\n    /**\n     * Enables/disables the ripple to be centered.\n     * ```html\n     * <button type=\"button\" #rippleContainer igxButton igxRipple [igxRippleCentered]=\"true\"></button>\n     * ```\n     *\n     * @memberof IgxRippleDirective\n     */\n    @Input({ alias: 'igxRippleCentered', transform: booleanAttribute })\n    public set centered(value: boolean) {\n        this._centered = value || this.centered;\n    }\n    /**\n     * Sets/gets whether the ripple is disabled.\n     * Default value is `false`.\n     * ```html\n     * <button type=\"button\" #rippleContainer igxRipple [igxRippleDisabled]=\"true\"></button>\n     * ```\n     * ```typescript\n     * @ViewChild('rippleContainer', {read: IgxRippleDirective})\n     * public ripple: IgxRippleDirective;\n     * let isRippleDisabled = this.ripple.rippleDisabled;\n     * ```\n     *\n     * @memberof IgxRippleDirective\n     */\n    @Input({ alias: 'igxRippleDisabled', transform: booleanAttribute })\n    public rippleDisabled = false;\n\n    protected get nativeElement(): HTMLElement {\n        return this.elementRef.nativeElement;\n    }\n\n    private rippleElementClass = 'igx-ripple__inner';\n    private rippleHostClass = 'igx-ripple';\n    private _centered = false;\n    private animationQueue = [];\n    /**\n     * @hidden\n     */\n    @HostListener('mousedown', ['$event'])\n    public onMouseDown(event: MouseEvent) {\n        this.zone.runOutsideAngular(() => this._ripple(event));\n    }\n\n    private setStyles(rippleElement: HTMLElement, styleParams: any) {\n        this.renderer.addClass(rippleElement, this.rippleElementClass);\n        // Set position absolute inline to ensure layout stability even when ripple CSS is excluded\n        this.renderer.setStyle(rippleElement, 'position', 'absolute');\n        this.renderer.setStyle(rippleElement, 'width', `${styleParams.radius}px`);\n        this.renderer.setStyle(rippleElement, 'height', `${styleParams.radius}px`);\n        this.renderer.setStyle(rippleElement, 'top', `${styleParams.top}px`);\n        this.renderer.setStyle(rippleElement, 'left', `${styleParams.left}px`);\n        if (this.rippleColor) {\n            this.renderer.setStyle(rippleElement, 'background', this.rippleColor);\n        }\n    }\n\n    private _ripple(event: MouseEvent) {\n        if (this.rippleDisabled) {\n            return;\n        }\n\n        const target = (this.rippleTarget ? this.nativeElement.querySelector(this.rippleTarget) || this.nativeElement : this.nativeElement);\n\n        const rectBounds = target.getBoundingClientRect();\n        const radius = Math.max(rectBounds.width, rectBounds.height);\n        let left = Math.round(event.clientX - rectBounds.left - radius / 2);\n        let top = Math.round(event.clientY - rectBounds.top - radius / 2);\n\n        if (this._centered) {\n            left = top = 0;\n        }\n\n        const dimensions = {\n            radius,\n            top,\n            left\n        };\n\n        const rippleElement = this.renderer.createElement('span');\n\n        this.setStyles(rippleElement, dimensions);\n        this.renderer.addClass(target, this.rippleHostClass);\n        this.renderer.appendChild(target, rippleElement);\n\n        const animation = rippleElement.animate(\n            [\n                { opacity: 0.5, transform: 'scale(.3)' },\n                { opacity: 0, transform: 'scale(2)' }\n            ],\n            {\n                duration: this.rippleDuration,\n                easing: 'ease-out'\n            }\n        );\n\n        this.animationQueue.push(animation);\n\n        animation.onfinish = () => {\n            this.animationQueue.splice(this.animationQueue.indexOf(animation), 1);\n            target.removeChild(rippleElement);\n            if (this.animationQueue.length < 1) {\n                this.renderer.removeClass(target, this.rippleHostClass);\n            }\n        };\n    }\n}\n","import { Directive, HostBinding, Input } from '@angular/core';\n\n@Directive({\n    selector: '[igSize]',\n})\nexport class IgSizeDirective {\n    private _size: string;\n\n    @Input()\n    @HostBinding('style.--ig-size')\n    public get igSize(): string {\n        return this._size;\n    }\n\n    public set igSize(value: 'small' | 'medium' | 'large') {\n        this._size = `var(--ig-size-${value})`;\n    }\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { IActiveHighlightInfo } from './text-highlight.directive';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class IgxTextHighlightService {\n    public highlightGroupsMap = new Map<string, IActiveHighlightInfo>();\n    public onActiveElementChanged = new EventEmitter<string>();\n\n    constructor() { }\n\n    /**\n     * Activates the highlight at a given index.\n     * (if such index exists)\n     */\n    public setActiveHighlight(groupName: string, highlight: IActiveHighlightInfo) {\n        this.highlightGroupsMap.set(groupName, highlight);\n        this.onActiveElementChanged.emit(groupName);\n    }\n\n    /**\n     * Clears any existing highlight.\n     */\n    public clearActiveHighlight(groupName) {\n        this.highlightGroupsMap.set(groupName, {\n            index: -1\n        });\n        this.onActiveElementChanged.emit(groupName);\n    }\n\n    /**\n     * Destroys a highlight group.\n     */\n    public destroyGroup(groupName: string) {\n        this.highlightGroupsMap.delete(groupName);\n    }\n}\n","import { AfterViewInit, Directive, ElementRef, Input, OnChanges, OnDestroy, Renderer2, SimpleChanges, AfterViewChecked, inject } from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { compareMaps } from 'igniteui-angular/core';\nimport { IgxTextHighlightService } from './text-highlight.service';\n\nexport interface IBaseSearchInfo {\n    searchText: string;\n    caseSensitive: boolean;\n    exactMatch: boolean;\n    matchCount: number;\n    content: string;\n}\n\n/**\n * An interface describing information for the active highlight.\n */\nexport interface IActiveHighlightInfo {\n    /**\n     * The row of the highlight.\n     */\n    row?: any;\n    /**\n     * The column of the highlight.\n     */\n    column?: any;\n    /**\n     * The index of the highlight.\n     */\n    index: number;\n    /**\n     * Additional, custom checks to perform prior an element highlighting.\n     */\n    metadata?: Map<string, any>;\n}\n\n@Directive({\n    selector: '[igxTextHighlight]',\n    standalone: true\n})\nexport class IgxTextHighlightDirective implements AfterViewInit, AfterViewChecked, OnDestroy, OnChanges {\n    private element = inject(ElementRef);\n    private service = inject(IgxTextHighlightService);\n    private renderer = inject(Renderer2);\n\n    /**\n     * Determines the `CSS` class of the highlight elements.\n     * This allows the developer to provide custom `CSS` to customize the highlight.\n     *\n     * ```html\n     * <div\n     *   igxTextHighlight\n     *   [cssClass]=\"myClass\">\n     * </div>\n     * ```\n     */\n    @Input()\n    public cssClass: string;\n\n    /**\n     * Determines the `CSS` class of the active highlight element.\n     * This allows the developer to provide custom `CSS` to customize the highlight.\n     *\n     * ```html\n     * <div\n     *   igxTextHighlight\n     *   [activeCssClass]=\"activeHighlightClass\">\n     * </div>\n     * ```\n     */\n    @Input()\n    public activeCssClass: string;\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public containerClass: string;\n\n    /**\n     * Identifies the highlight within a unique group.\n     * This allows it to have several different highlight groups,\n     * with each of them having their own active highlight.\n     *\n     * ```html\n     * <div\n     *   igxTextHighlight\n     *   [groupName]=\"myGroupName\">\n     * </div>\n     * ```\n     */\n    @Input()\n    public groupName = '';\n\n    /**\n     * The underlying value of the element that will be highlighted.\n     *\n     * ```typescript\n     * // get\n     * const elementValue = this.textHighlight.value;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <div\n     *   igxTextHighlight\n     *   [value]=\"newValue\">\n     * </div>\n     * ```\n     */\n    @Input('value')\n    public get value(): any {\n        return this._value;\n    }\n    public set value(value: any) {\n        if (value === undefined || value === null) {\n            this._value = '';\n        } else {\n            this._value = value;\n        }\n    }\n\n    /**\n     * The identifier of the row on which the directive is currently on.\n     *\n     * ```html\n     * <div\n     *   igxTextHighlight\n     *   [row]=\"0\">\n     * </div>\n     * ```\n     */\n    @Input()\n    public row: any;\n\n    /**\n     * The identifier of the column on which the directive is currently on.\n     *\n     * ```html\n     * <div\n     *   igxTextHighlight\n     *   [column]=\"0\">\n     * </div>\n     * ```\n     */\n    @Input()\n    public column: any;\n\n    /**\n     * A map that contains all additional conditions, that you need to activate a highlighted\n     * element. To activate the condition, you will have to add a new metadata key to\n     * the `metadata` property of the IActiveHighlightInfo interface.\n     *\n     * @example\n     * ```typescript\n     *  // Set a property, which would disable the highlight for a given element on a certain condition\n     *  const metadata = new Map<string, any>();\n     *  metadata.set('highlightElement', false);\n     * ```\n     * ```html\n     * <div\n     *   igxTextHighlight\n     *   [metadata]=\"metadata\">\n     * </div>\n     * ```\n     */\n    @Input()\n    public metadata: Map<string, any>;\n\n    /**\n     * @hidden\n     */\n    public get lastSearchInfo(): IBaseSearchInfo {\n        return this._lastSearchInfo;\n    }\n\n    /**\n     * @hidden\n     */\n    public parentElement: any;\n\n    private _container: any;\n\n    private destroy$ = new Subject<boolean>();\n    private _value = '';\n    private _lastSearchInfo: IBaseSearchInfo;\n    private _div = null;\n    private _observer: MutationObserver = null;\n    private _nodeWasRemoved = false;\n    private _forceEvaluation = false;\n    private _activeElementIndex = -1;\n    private _valueChanged: boolean;\n    private _defaultCssClass = 'igx-highlight';\n    private _defaultActiveCssClass = 'igx-highlight--active';\n\n    constructor() {\n        this.service.onActiveElementChanged.pipe(takeUntil(this.destroy$)).subscribe((groupName) => {\n            if (this.groupName === groupName) {\n                if (this._activeElementIndex !== -1) {\n                    this.deactivate();\n                }\n                this.activateIfNecessary();\n            }\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this.clearHighlight();\n\n        if (this._observer !== null) {\n            this._observer.disconnect();\n        }\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnChanges(changes: SimpleChanges) {\n        if (changes.value && !changes.value.firstChange) {\n            this._valueChanged = true;\n        } else if ((changes.row !== undefined && !changes.row.firstChange) ||\n            (changes.column !== undefined && !changes.column.firstChange) ||\n            (changes.page !== undefined && !changes.page.firstChange)) {\n            if (this._activeElementIndex !== -1) {\n                this.deactivate();\n            }\n            this.activateIfNecessary();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterViewInit() {\n        this.parentElement = this.renderer.parentNode(this.element.nativeElement);\n\n        if (this.service.highlightGroupsMap.has(this.groupName) === false) {\n            this.service.highlightGroupsMap.set(this.groupName, {\n                index: -1\n            });\n        }\n\n        this._lastSearchInfo = {\n            searchText: '',\n            content: this.value,\n            matchCount: 0,\n            caseSensitive: false,\n            exactMatch: false\n        };\n\n        this._container = this.parentElement.firstElementChild;\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterViewChecked() {\n        if (this._valueChanged) {\n            this.highlight(this._lastSearchInfo.searchText, this._lastSearchInfo.caseSensitive, this._lastSearchInfo.exactMatch);\n            this.activateIfNecessary();\n            this._valueChanged = false;\n        }\n    }\n\n    /**\n     * Clears the existing highlight and highlights the searched text.\n     * Returns how many times the element contains the searched text.\n     */\n    public highlight(text: string, caseSensitive?: boolean, exactMatch?: boolean): number {\n        const caseSensitiveResolved = caseSensitive ? true : false;\n        const exactMatchResolved = exactMatch ? true : false;\n\n        if (this.searchNeedsEvaluation(text, caseSensitiveResolved, exactMatchResolved)) {\n            this._lastSearchInfo.searchText = text;\n            this._lastSearchInfo.caseSensitive = caseSensitiveResolved;\n            this._lastSearchInfo.exactMatch = exactMatchResolved;\n            this._lastSearchInfo.content = this.value;\n\n            if (text === '' || text === undefined || text === null) {\n                this.clearHighlight();\n            } else {\n                this.clearChildElements(true);\n                this._lastSearchInfo.matchCount = this.getHighlightedText(text, caseSensitive, exactMatch);\n            }\n        } else if (this._nodeWasRemoved) {\n            this._lastSearchInfo.searchText = text;\n            this._lastSearchInfo.caseSensitive = caseSensitiveResolved;\n            this._lastSearchInfo.exactMatch = exactMatchResolved;\n        }\n\n        return this._lastSearchInfo.matchCount;\n    }\n\n    /**\n     * Clears any existing highlight.\n     */\n    public clearHighlight(): void {\n        this.clearChildElements(false);\n\n        if (this._lastSearchInfo) {\n            this._lastSearchInfo.searchText = '';\n            this._lastSearchInfo.matchCount = 0;\n        }\n    }\n\n    /**\n     * Activates the highlight if it is on the currently active row and column.\n     */\n    public activateIfNecessary(): void {\n        const group = this.service.highlightGroupsMap.get(this.groupName);\n\n        if (group && group.index >= 0 && group.column === this.column && group.row === this.row && compareMaps(this.metadata, group.metadata)) {\n            this.activate(group.index);\n        }\n    }\n\n    /**\n     * Attaches a MutationObserver to the parentElement and watches for when the container element is removed/readded to the DOM.\n     * Should be used only when necessary as using many observers may lead to performance degradation.\n     */\n    public observe(): void {\n        if (this._observer === null) {\n            const callback = (mutationList) => {\n                mutationList.forEach((mutation) => {\n                    const removedNodes = Array.from(mutation.removedNodes);\n                    removedNodes.forEach((n) => {\n                        if (n === this._container) {\n                            this._nodeWasRemoved = true;\n                            this.clearChildElements(false);\n                        }\n                    });\n\n                    const addedNodes = Array.from(mutation.addedNodes);\n                    addedNodes.forEach((n) => {\n                        if (n === this.parentElement.firstElementChild && this._nodeWasRemoved) {\n                            this._container = this.parentElement.firstElementChild;\n                            this._nodeWasRemoved = false;\n\n                            this._forceEvaluation = true;\n                            this.highlight(this._lastSearchInfo.searchText,\n                                this._lastSearchInfo.caseSensitive,\n                                this._lastSearchInfo.exactMatch);\n                            this._forceEvaluation = false;\n\n                            this.activateIfNecessary();\n                            this._observer.disconnect();\n                            this._observer = null;\n                        }\n                    });\n                });\n            };\n\n            this._observer = new MutationObserver(callback);\n            this._observer.observe(this.parentElement, {childList: true});\n        }\n    }\n\n    private activate(index: number) {\n        this.deactivate();\n\n        if (this._div !== null) {\n            const spans = this._div.querySelectorAll('span');\n            this._activeElementIndex = index;\n\n            if (spans.length <= index) {\n                return;\n            }\n\n            const elementToActivate = spans[index];\n            this.renderer.addClass(elementToActivate, this._defaultActiveCssClass);\n            this.renderer.addClass(elementToActivate, this.activeCssClass);\n        }\n    }\n\n    private deactivate() {\n        if (this._activeElementIndex === -1) {\n            return;\n        }\n\n        const spans = this._div.querySelectorAll('span');\n\n        if (spans.length <= this._activeElementIndex) {\n            this._activeElementIndex = -1;\n            return;\n        }\n\n        const elementToDeactivate = spans[this._activeElementIndex];\n        this.renderer.removeClass(elementToDeactivate, this._defaultActiveCssClass);\n        this.renderer.removeClass(elementToDeactivate, this.activeCssClass);\n        this._activeElementIndex = -1;\n    }\n\n    private clearChildElements(originalContentHidden: boolean): void {\n        this.renderer.setProperty(this.element.nativeElement, 'hidden', originalContentHidden);\n\n        if (this._div !== null) {\n            this.renderer.removeChild(this.parentElement, this._div);\n\n            this._div = null;\n            this._activeElementIndex = -1;\n        }\n    }\n\n    private getHighlightedText(searchText: string, caseSensitive: boolean, exactMatch: boolean) {\n        this.appendDiv();\n\n        const stringValue = String(this.value);\n        const contentStringResolved = !caseSensitive ? stringValue.toLowerCase() : stringValue;\n        const searchTextResolved = !caseSensitive ? searchText.toLowerCase() : searchText;\n\n        let matchCount = 0;\n\n        if (exactMatch) {\n            if (contentStringResolved === searchTextResolved) {\n                this.appendSpan(`<span class=\"${this._defaultCssClass} ${this.cssClass ? this.cssClass : ''}\">${stringValue}</span>`);\n                matchCount++;\n            } else {\n                this.appendText(stringValue);\n            }\n        } else {\n            let foundIndex = contentStringResolved.indexOf(searchTextResolved, 0);\n            let previousMatchEnd = 0;\n\n            while (foundIndex !== -1) {\n                const start = foundIndex;\n                const end = foundIndex + searchTextResolved.length;\n\n                this.appendText(stringValue.substring(previousMatchEnd, start));\n                this.appendSpan(`<span class=\"${this._defaultCssClass} ${this.cssClass ? this.cssClass : ''}\">${stringValue.substring(start, end)}</span>`);\n\n                previousMatchEnd = end;\n                matchCount++;\n\n                foundIndex = contentStringResolved.indexOf(searchTextResolved, end);\n            }\n\n            this.appendText(stringValue.substring(previousMatchEnd, stringValue.length));\n        }\n\n        return matchCount;\n    }\n\n    private appendText(text: string) {\n        const textElement = this.renderer.createText(text);\n        this.renderer.appendChild(this._div, textElement);\n    }\n\n    private appendSpan(outerHTML: string) {\n        const span = this.renderer.createElement('span');\n        this.renderer.appendChild(this._div, span);\n        this.renderer.setProperty(span, 'outerHTML', outerHTML);\n    }\n\n    private appendDiv() {\n        this._div = this.renderer.createElement('div');\n        if ( this.containerClass) {\n            this.renderer.addClass(this._div, this.containerClass);\n        }\n        this.renderer.appendChild(this.parentElement, this._div);\n    }\n\n    private searchNeedsEvaluation(text: string, caseSensitive: boolean, exactMatch: boolean): boolean {\n        const searchedText = this._lastSearchInfo.searchText;\n\n        return !this._nodeWasRemoved &&\n            (searchedText === null ||\n                searchedText !== text ||\n                this._lastSearchInfo.content !== this.value ||\n                this._lastSearchInfo.caseSensitive !== caseSensitive ||\n                this._lastSearchInfo.exactMatch !== exactMatch ||\n                this._forceEvaluation);\n    }\n}\n","import { Directive, ElementRef, HostListener, Input, booleanAttribute, inject } from '@angular/core';\n\n@Directive({\n    exportAs: 'igxTextSelection',\n    selector: '[igxTextSelection]',\n    standalone: true\n})\nexport class IgxTextSelectionDirective {\n    private element = inject(ElementRef);\n\n    /**\n     *  Determines whether the input element could be selected through the directive.\n     *\n     * ```html\n     * <!--set-->\n     * <input\n     *   type=\"text\"\n     *   id=\"firstName\"\n     *   [igxTextSelection]=\"true\">\n     * </input>\n     *\n     * <input\n     *   type=\"text\"\n     *   id=\"lastName\"\n     *   igxTextSelection\n     *   [selected]=\"true\">\n     * </input>\n     * ```\n     */\n    @Input({ alias: 'igxTextSelection', transform: booleanAttribute })\n    public selected = true;\n\n    /**\n     * Returns the nativeElement of the element where the directive was applied.\n     *\n     * ```html\n     * <input\n     *   type=\"text\"\n     *   id=\"firstName\"\n     *   igxTextSelection>\n     * </input>\n     * ```\n     *\n     * ```typescript\n     * @ViewChild('firstName',\n     *  {read: IgxTextSelectionDirective})\n     * public inputElement: IgxTextSelectionDirective;\n     *\n     * public getNativeElement() {\n     *  return this.inputElement.nativeElement;\n     * }\n     * ```\n     */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('focus')\n    public onFocus() {\n        this.trigger();\n    }\n\n    /**\n     * Triggers the selection of the element if it is marked as selectable.\n     *\n     * ```html\n     * <input\n     *   type=\"text\"\n     *   id=\"firstName\"\n     *   igxTextSelection>\n     * </input>\n     * ```\n     *\n     * ```typescript\n     * @ViewChild('firstName',\n     *  {read: IgxTextSelectionDirective})\n     * public inputElement: IgxTextSelectionDirective;\n     *\n     * public triggerElementSelection() {\n     *  this.inputElement.trigger();\n     * }\n     * ```\n     */\n\n    public trigger() {\n        if (this.selected && this.nativeElement.value.length) {\n            // delay the select call to avoid race conditions in case the directive is applied\n            // to an element with its own focus handler\n            requestAnimationFrame(() => this.nativeElement.select());\n        }\n    }\n}\n\n/**\n * @hidden\n */\n\n","import {\n    Directive,\n    EmbeddedViewRef,\n    Input,\n    OnChanges,\n    SimpleChange,\n    SimpleChanges,\n    TemplateRef,\n    ViewContainerRef,\n    Output,\n    EventEmitter,\n    inject\n} from '@angular/core';\nimport { IBaseEventArgs } from 'igniteui-angular/core';\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxTemplateOutlet]',\n    standalone: true\n})\nexport class IgxTemplateOutletDirective implements OnChanges {\n    private readonly _viewContainerRef = inject(ViewContainerRef);\n\n    /**\n     * The embedded views cache. Collection is key-value paired.\n     * Key is the template type, value is another key-value paired collection\n     * where the key is the template id and value is the embedded view for the related template.\n     */\n    private readonly _embeddedViewsMap: Map<string, Map<any, EmbeddedViewRef<any>>> = new Map();\n\n    private _viewRef!: EmbeddedViewRef<any>;\n\n\n    @Input() public igxTemplateOutletContext !: any;\n\n    @Input() public igxTemplateOutlet !: TemplateRef<any>;\n\n    @Output()\n    public viewCreated = new EventEmitter<IViewChangeEventArgs>();\n\n    @Output()\n    public viewMoved = new EventEmitter<IViewChangeEventArgs>();\n\n    @Output()\n    public cachedViewLoaded = new EventEmitter<ICachedViewLoadedEventArgs>();\n\n    @Output()\n    public beforeViewDetach = new EventEmitter<IViewChangeEventArgs>();\n\n    public ngOnChanges(changes: SimpleChanges) {\n        const { actionType, cachedView } = this._getActionType(changes);\n\n        switch (actionType) {\n            case TemplateOutletAction.CreateView: this._recreateView(); break;\n            case TemplateOutletAction.MoveView: this._moveView(); break;\n            case TemplateOutletAction.UseCachedView: this._useCachedView(cachedView); break;\n            case TemplateOutletAction.UpdateViewContext: this._updateExistingContext(this.igxTemplateOutletContext); break;\n        }\n    }\n\n    public cleanCache(): void {\n        for (const collection of this._embeddedViewsMap.values()) {\n            for (const item of collection.values()) {\n                if (!item.destroyed) {\n                    item.destroy();\n                }\n            }\n            collection.clear();\n        }\n\n        this._embeddedViewsMap.clear();\n    }\n\n    public cleanView(templateId: { type: string; id: any }): void {\n        const viewCollection = this._embeddedViewsMap.get(templateId.type);\n        const view = viewCollection?.get(templateId.id);\n\n        if (view) {\n            view.destroy();\n            this._embeddedViewsMap.get(templateId.type).delete(templateId.id);\n        }\n    }\n\n    private _recreateView(): void {\n        const prevIndex = this._viewContainerRef.indexOf(this._viewRef);\n\n        // detach old and create new\n        if (prevIndex !== -1) {\n            this.beforeViewDetach.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n            this._viewContainerRef.detach(prevIndex);\n        }\n\n        if (this.igxTemplateOutlet) {\n            this._viewRef = this._viewContainerRef.createEmbeddedView(\n                this.igxTemplateOutlet, this.igxTemplateOutletContext);\n            this.viewCreated.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n            const templateId = this.igxTemplateOutletContext['templateID'];\n\n            if (templateId) {\n                // if context contains a template id, check if we have a view for that template already stored in the cache\n                // if not create a copy and add it to the cache in detached state.\n                // Note: Views in detached state do not appear in the DOM, however they remain stored in memory.\n                let resCollection = this._embeddedViewsMap.get(templateId.type);\n\n                if (!resCollection) {\n                    resCollection = new Map();\n                    this._embeddedViewsMap.set(templateId.type, resCollection);\n                }\n\n                if (!resCollection.has(templateId.id)) {\n                    resCollection.set(templateId.id, this._viewRef);\n                }\n            }\n        }\n    }\n\n    private _moveView() {\n        // using external view and inserting it in current view.\n        const view = this.igxTemplateOutletContext['moveView'];\n        const owner = this.igxTemplateOutletContext['owner'];\n\n        if (view !== this._viewRef) {\n            const viewIndex = owner._viewContainerRef.indexOf(view);\n            const viewRefIndex = this._viewContainerRef.indexOf(this._viewRef);\n\n            if (viewIndex !== -1) {\n                // detach in case view it is attached somewhere else at the moment.\n                this.beforeViewDetach.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n                owner._viewContainerRef.detach(viewIndex);\n            }\n\n            if (this._viewRef && viewRefIndex !== -1) {\n                this.beforeViewDetach.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n                this._viewContainerRef.detach(viewRefIndex);\n            }\n\n            this._viewRef = view;\n            this._viewContainerRef.insert(view, 0);\n            this._updateExistingContext(this.igxTemplateOutletContext);\n            this.viewMoved.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n        } else {\n            this._updateExistingContext(this.igxTemplateOutletContext);\n        }\n    }\n\n    private _useCachedView(cachedView: EmbeddedViewRef<any>) {\n        // use view for specific template cached in the current template outlet\n        // if view exists, but template has been changed and there is a view in the cache with the related template\n        // then detach old view and insert the stored one with the matching template\n        // after that update its context.\n        if (this._viewContainerRef.length > 0) {\n            this.beforeViewDetach.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n            this._viewContainerRef.detach(this._viewContainerRef.indexOf(this._viewRef));\n        }\n\n        this._viewRef = cachedView;\n        const oldContext = {...cachedView.context};\n        this._viewContainerRef.insert(this._viewRef, 0);\n        this._updateExistingContext(this.igxTemplateOutletContext);\n        this.cachedViewLoaded.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext, oldContext });\n    }\n\n    private _shouldRecreateView(changes: SimpleChanges): boolean {\n        const ctxChange = changes['igxTemplateOutletContext'];\n        return !!changes['igxTemplateOutlet'] || (ctxChange && this._hasContextShapeChanged(ctxChange));\n    }\n\n    private _hasContextShapeChanged(ctxChange: SimpleChange): boolean {\n        const prevKeys = new Set(Object.keys(ctxChange.previousValue || {}));\n        const currKeys = new Set(Object.keys(ctxChange.currentValue || {}));\n\n\n        if (prevKeys.size !== currKeys.size) {\n            return true;\n        }\n\n        return currKeys.difference(prevKeys).size > 0;\n    }\n\n    private _updateExistingContext(ctx: any): void {\n        Object.assign(this._viewRef.context, ctx);\n    }\n\n    private _getActionType(changes: SimpleChanges): { actionType: TemplateOutletAction; cachedView: EmbeddedViewRef<any> | null } {\n        const movedView = this.igxTemplateOutletContext['moveView'];\n        const templateId = this.igxTemplateOutletContext['templateID'];\n        const cachedView = templateId ?\n            this._embeddedViewsMap.get(templateId.type)?.get(templateId.id) :\n            null;\n        const shouldRecreate = this._shouldRecreateView(changes);\n\n        if (movedView) {\n            // view is moved from external source\n            return { actionType: TemplateOutletAction.MoveView, cachedView };\n        } else if (shouldRecreate && cachedView) {\n            // should recreate (template or context change) and there is a matching template in cache\n            return { actionType: TemplateOutletAction.UseCachedView, cachedView };\n        } else if (!this._viewRef || shouldRecreate) {\n            // no view or should recreate\n            return { actionType: TemplateOutletAction.CreateView, cachedView };\n        } else if (this.igxTemplateOutletContext) {\n            // has context, update context\n            return { actionType: TemplateOutletAction.UpdateViewContext, cachedView };\n        }\n    }\n}\nenum TemplateOutletAction {\n    CreateView,\n    MoveView,\n    UseCachedView,\n    UpdateViewContext\n}\n\nexport interface IViewChangeEventArgs extends IBaseEventArgs {\n    owner: IgxTemplateOutletDirective;\n    view: EmbeddedViewRef<any>;\n    context: any;\n}\n\nexport interface ICachedViewLoadedEventArgs extends IViewChangeEventArgs {\n    oldContext: any;\n}\n","import {\n    ChangeDetectorRef,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostListener,\n    inject,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n} from '@angular/core';\nimport { AbsoluteScrollStrategy, IgxOverlayOutletDirective } from 'igniteui-angular/core';\nimport { CancelableBrowserEventArgs, IBaseEventArgs, PlatformUtil } from 'igniteui-angular/core';\nimport { ConnectedPositioningStrategy } from 'igniteui-angular/core';\nimport { filter, first, takeUntil } from 'rxjs/operators';\nimport { IgxNavigationService, IToggleView } from 'igniteui-angular/core';\nimport { IgxOverlayService } from 'igniteui-angular/core';\nimport { IPositionStrategy } from 'igniteui-angular/core';\nimport { OffsetMode, OverlayClosingEventArgs, OverlayEventArgs, OverlaySettings } from 'igniteui-angular/core';\nimport { Subscription, Subject, MonoTypeOperatorFunction } from 'rxjs';\n\nexport interface ToggleViewEventArgs extends IBaseEventArgs {\n    /** Id of the toggle view */\n    id: string;\n    /* blazorSuppress */\n    event?: Event;\n}\n\nexport interface ToggleViewCancelableEventArgs extends ToggleViewEventArgs, CancelableBrowserEventArgs { }\n\n@Directive({\n    exportAs: 'toggle',\n    selector: '[igxToggle]',\n    standalone: true,\n    host: {\n        '[class.igx-toggle--hidden]': 'hiddenClass',\n        '[attr.aria-hidden]': 'hiddenClass',\n        '[class.igx-toggle--hidden-webkit]': 'hiddenWebkitClass',\n        '[class.igx-toggle]': 'defaultClass'\n    }\n})\nexport class IgxToggleDirective implements IToggleView, OnInit, OnDestroy {\n    private elementRef = inject(ElementRef);\n    private cdr = inject(ChangeDetectorRef);\n    protected overlayService = inject<IgxOverlayService>(IgxOverlayService);\n    private navigationService = inject(IgxNavigationService, { optional: true });\n    private platform = inject(PlatformUtil, { optional: true });\n\n    /**\n     * Emits an event after the toggle container is opened.\n     *\n     * ```typescript\n     * onToggleOpened(event) {\n     *    alert(\"Toggle opened!\");\n     * }\n     * ```\n     *\n     * ```html\n     * <div\n     *   igxToggle\n     *   (opened)='onToggleOpened($event)'>\n     * </div>\n     * ```\n     */\n    @Output()\n    public opened = new EventEmitter<ToggleViewEventArgs>();\n\n    /**\n     * Emits an event before the toggle container is opened.\n     *\n     * ```typescript\n     * onToggleOpening(event) {\n     *  alert(\"Toggle opening!\");\n     * }\n     * ```\n     *\n     * ```html\n     * <div\n     *   igxToggle\n     *   (opening)='onToggleOpening($event)'>\n     * </div>\n     * ```\n     */\n    @Output()\n    public opening = new EventEmitter<ToggleViewCancelableEventArgs>();\n\n    /**\n     * Emits an event after the toggle container is closed.\n     *\n     * ```typescript\n     * onToggleClosed(event) {\n     *  alert(\"Toggle closed!\");\n     * }\n     * ```\n     *\n     * ```html\n     * <div\n     *   igxToggle\n     *   (closed)='onToggleClosed($event)'>\n     * </div>\n     * ```\n     */\n    @Output()\n    public closed = new EventEmitter<ToggleViewEventArgs>();\n\n    /**\n     * Emits an event before the toggle container is closed.\n     *\n     * ```typescript\n     * onToggleClosing(event) {\n     *  alert(\"Toggle closing!\");\n     * }\n     * ```\n     *\n     * ```html\n     * <div\n     *  igxToggle\n     *  (closing)='onToggleClosing($event)'>\n     * </div>\n     * ```\n     */\n    @Output()\n    public closing = new EventEmitter<ToggleViewCancelableEventArgs>();\n\n    /**\n     * Emits an event after the toggle element is appended to the overlay container.\n     *\n     * ```typescript\n     * onAppended() {\n     *  alert(\"Content appended!\");\n     * }\n     * ```\n     *\n     * ```html\n     * <div\n     *   igxToggle\n     *   (appended)='onToggleAppended()'>\n     * </div>\n     * ```\n     */\n    @Output()\n    public appended = new EventEmitter<ToggleViewEventArgs>();\n\n    /**\n     * @hidden\n     */\n    public get collapsed(): boolean {\n        return this._collapsed;\n    }\n\n    /**\n     * Identifier which is registered into `IgxNavigationService`\n     *\n     * ```typescript\n     * let myToggleId = this.toggle.id;\n     * ```\n     */\n    @Input()\n    public id: string;\n\n    /**\n     * @hidden\n     */\n    public get element(): HTMLElement {\n        return this.elementRef.nativeElement;\n    }\n\n    /**\n     * @hidden\n     */\n    public get hiddenClass() {\n        return this.collapsed;\n    }\n\n    /**\n     * @hidden\n     */\n    public get hiddenWebkitClass() {\n        const isSafari = this.platform?.isSafari;\n        const browserVersion = this.platform?.browserVersion;\n\n        return this.collapsed && isSafari && !!browserVersion && browserVersion < 17.5;\n    }\n\n    /**\n     * @hidden\n     */\n    public get defaultClass() {\n        return !this.collapsed;\n    }\n\n    protected _overlayId: string;\n\n    private _collapsed = true;\n    protected destroy$ = new Subject<boolean>();\n    private _overlaySubFilter: [MonoTypeOperatorFunction<OverlayEventArgs>, MonoTypeOperatorFunction<OverlayEventArgs>] = [\n        filter(x => x.id === this._overlayId),\n        takeUntil(this.destroy$)\n    ];\n    private _overlayOpenedSub: Subscription;\n    private _overlayClosingSub: Subscription;\n    private _overlayClosedSub: Subscription;\n    private _overlayContentAppendedSub: Subscription;\n\n    /**\n     * Opens the toggle.\n     *\n     * ```typescript\n     * this.myToggle.open();\n     * ```\n     */\n    public open(overlaySettings?: OverlaySettings) {\n        //  if there is open animation do nothing\n        //  if toggle is not collapsed and there is no close animation do nothing\n        const info = this.overlayService.getOverlayById(this._overlayId);\n        const openAnimationStarted = info?.openAnimationPlayer?.hasStarted() ?? false;\n        const closeAnimationStarted = info?.closeAnimationPlayer?.hasStarted() ?? false;\n        if (openAnimationStarted || !(this._collapsed || closeAnimationStarted)) {\n            return;\n        }\n\n        this._collapsed = false;\n\n        // TODO: this is a workaround for the issue introduced by Angular's with Ivy renderer.\n        // When calling detectChanges(), Angular marks the element for check, but does not update the classes\n        // immediately, which causes the overlay to calculate incorrect dimensions of target element.\n        // Overlay show should be called in the next tick to ensure the classes are updated and target element is measured correctly.\n        // Note: across the codebase, each host binding should be checked and similar fix applied if needed!!!\n        this.elementRef.nativeElement.className = this.elementRef.nativeElement.className.replace('igx-toggle--hidden', 'igx-toggle');\n        this.elementRef.nativeElement.className = this.elementRef.nativeElement.className.replace('igx-toggle--hidden-webkit', 'igx-toggle');\n        this.elementRef.nativeElement.removeAttribute('aria-hidden');\n\n        this.cdr.detectChanges();\n\n        if (!info) {\n            this.unsubscribe();\n            this.subscribe();\n            this._overlayId = this.overlayService.attach(this.elementRef, overlaySettings);\n        }\n\n        const args: ToggleViewCancelableEventArgs = { cancel: false, owner: this, id: this._overlayId };\n        this.opening.emit(args);\n        if (args.cancel) {\n            this.unsubscribe();\n            this.overlayService.detach(this._overlayId);\n            this._collapsed = true;\n            delete this._overlayId;\n            this.cdr.detectChanges();\n            return;\n        }\n        this.overlayService.show(this._overlayId, overlaySettings);\n    }\n\n    /**\n     * Closes the toggle.\n     *\n     * ```typescript\n     * this.myToggle.close();\n     * ```\n     */\n    public close(event?: Event) {\n        //  if toggle is collapsed do nothing\n        //  if there is close animation do nothing, toggle will close anyway\n        const info = this.overlayService.getOverlayById(this._overlayId);\n        const closeAnimationStarted = info?.closeAnimationPlayer?.hasStarted() || false;\n        if (this._collapsed || closeAnimationStarted) {\n            return;\n        }\n\n        this.overlayService.hide(this._overlayId, event);\n    }\n\n    /**\n     * Opens or closes the toggle, depending on its current state.\n     *\n     * ```typescript\n     * this.myToggle.toggle();\n     * ```\n     */\n    public toggle(overlaySettings?: OverlaySettings) {\n        //  if toggle is collapsed call open\n        //  if there is running close animation call open\n        if (this.collapsed || this.isClosing) {\n            this.open(overlaySettings);\n        } else {\n            this.close();\n        }\n    }\n\n    /** @hidden @internal */\n    public get isClosing() {\n        const info = this.overlayService.getOverlayById(this._overlayId);\n        return info ? info.closeAnimationPlayer?.hasStarted() : false;\n    }\n\n    /**\n     * Returns the id of the overlay the content is rendered in.\n     * ```typescript\n     * this.myToggle.overlayId;\n     * ```\n     */\n    public get overlayId() {\n        return this._overlayId;\n    }\n\n    /**\n     * Repositions the toggle.\n     * ```typescript\n     * this.myToggle.reposition();\n     * ```\n     */\n    public reposition() {\n        this.overlayService.reposition(this._overlayId);\n    }\n\n    /**\n     * Offsets the content along the corresponding axis by the provided amount with optional\n     * offsetMode that determines whether to add (by default) or set the offset values with OffsetMode.Add and OffsetMode.Set\n     */\n    public setOffset(deltaX: number, deltaY: number, offsetMode?: OffsetMode) {\n        this.overlayService.setOffset(this._overlayId, deltaX, deltaY, offsetMode);\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit() {\n        if (this.navigationService && this.id) {\n            this.navigationService.add(this.id, this);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        if (this.navigationService && this.id) {\n            this.navigationService.remove(this.id);\n        }\n        if (this._overlayId) {\n            this.overlayService.detach(this._overlayId);\n        }\n        this.unsubscribe();\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    private overlayClosed = (e) => {\n        this._collapsed = true;\n        this.cdr.detectChanges();\n        this.unsubscribe();\n        this.overlayService.detach(this.overlayId);\n        const args: ToggleViewEventArgs = { owner: this, id: this._overlayId, event: e.event };\n        delete this._overlayId;\n        this.closed.emit(args);\n        this.cdr.markForCheck();\n    };\n\n    private subscribe() {\n        this._overlayContentAppendedSub = this.overlayService\n            .contentAppended\n            .pipe(first(), takeUntil(this.destroy$))\n            .subscribe(() => {\n                const args: ToggleViewEventArgs = { owner: this, id: this._overlayId };\n                this.appended.emit(args);\n            });\n\n        this._overlayOpenedSub = this.overlayService\n            .opened\n            .pipe(...this._overlaySubFilter)\n            .subscribe(() => {\n                const args: ToggleViewEventArgs = { owner: this, id: this._overlayId };\n                this.opened.emit(args);\n            });\n\n        this._overlayClosingSub = this.overlayService\n            .closing\n            .pipe(...this._overlaySubFilter)\n            .subscribe((e: OverlayClosingEventArgs) => {\n                const args: ToggleViewCancelableEventArgs = { cancel: false, event: e.event, owner: this, id: this._overlayId };\n                this.closing.emit(args);\n                e.cancel = args.cancel;\n\n                //  in case event is not canceled this will close the toggle and we need to unsubscribe.\n                //  Otherwise if for some reason, e.g. close on outside click, close() gets called before\n                //  closed was fired we will end with calling closing more than once\n                if (!e.cancel) {\n                    this.clearSubscription(this._overlayClosingSub);\n                }\n            });\n\n        this._overlayClosedSub = this.overlayService\n            .closed\n            .pipe(...this._overlaySubFilter)\n            .subscribe(this.overlayClosed);\n    }\n\n    private unsubscribe() {\n        this.clearSubscription(this._overlayOpenedSub);\n        this.clearSubscription(this._overlayClosingSub);\n        this.clearSubscription(this._overlayClosedSub);\n        this.clearSubscription(this._overlayContentAppendedSub);\n    }\n\n    private clearSubscription(subscription: Subscription) {\n        if (subscription && !subscription.closed) {\n            subscription.unsubscribe();\n        }\n    }\n}\n\n@Directive({\n    exportAs: 'toggle-action',\n    selector: '[igxToggleAction]',\n    standalone: true\n})\nexport class IgxToggleActionDirective implements OnInit {\n    protected element = inject(ElementRef);\n    protected navigationService = inject(IgxNavigationService, { optional: true });\n\n    /**\n     * Provide settings that control the toggle overlay positioning, interaction and scroll behavior.\n     * ```typescript\n     * const settings: OverlaySettings = {\n     *      closeOnOutsideClick: false,\n     *      modal: false\n     *  }\n     * ```\n     * ---\n     * ```html\n     * <!--set-->\n     * <div igxToggleAction [overlaySettings]=\"settings\"></div>\n     * ```\n     */\n    @Input()\n    public overlaySettings: OverlaySettings;\n\n    /**\n     * Determines where the toggle element overlay should be attached.\n     *\n     * ```html\n     * <!--set-->\n     * <div igxToggleAction [igxToggleOutlet]=\"outlet\"></div>\n     * ```\n     * Where `outlet` in an instance of `IgxOverlayOutletDirective` or an `ElementRef`\n     */\n    @Input('igxToggleOutlet')\n    public outlet: IgxOverlayOutletDirective | ElementRef;\n\n    /**\n     * @hidden\n     */\n    @Input('igxToggleAction')\n    public set target(target: any) {\n        if (target !== null && target !== '') {\n            this._target = target;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public get target(): any {\n        if (typeof this._target === 'string') {\n            return this.navigationService.get(this._target);\n        }\n        return this._target;\n    }\n\n    protected _overlayDefaults: OverlaySettings;\n    protected _target: IToggleView | string;\n\n    /**\n     * @hidden\n     */\n    @HostListener('click')\n    public onClick() {\n        if (this.outlet) {\n            this._overlayDefaults.outlet = this.outlet;\n        }\n\n        const clonedSettings = Object.assign({}, this._overlayDefaults, this.overlaySettings);\n        this.updateOverlaySettings(clonedSettings);\n        this.target.toggle(clonedSettings);\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit() {\n        const targetElement = this.element.nativeElement;\n        this._overlayDefaults = {\n            target: targetElement,\n            positionStrategy: new ConnectedPositioningStrategy(),\n            scrollStrategy: new AbsoluteScrollStrategy(),\n            closeOnOutsideClick: true,\n            modal: false,\n            excludeFromOutsideClick: [targetElement as HTMLElement]\n        };\n    }\n\n    /**\n     * Updates provided overlay settings\n     *\n     * @param settings settings to update\n     * @returns returns updated copy of provided overlay settings\n     */\n    protected updateOverlaySettings(settings: OverlaySettings): OverlaySettings {\n        if (settings && settings.positionStrategy) {\n            const positionStrategyClone: IPositionStrategy = settings.positionStrategy.clone();\n            settings.target = this.element.nativeElement;\n            settings.positionStrategy = positionStrategyClone;\n        }\n\n        return settings;\n    }\n}\n","import {\n    Directive, Input, HostBinding,\n    OnDestroy, inject, HostListener,\n    Renderer2,\n    AfterViewInit,\n} from '@angular/core';\nimport { OverlaySettings, PlatformUtil } from 'igniteui-angular/core';\nimport { IgxToggleDirective } from '../toggle/toggle.directive';\nimport { IgxTooltipTargetDirective } from './tooltip-target.directive';\n\nlet NEXT_ID = 0;\n/**\n * **Ignite UI for Angular Tooltip** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tooltip)\n *\n * The Ignite UI for Angular Tooltip directive is used to mark an HTML element in the markup as one that should behave as a tooltip.\n * The tooltip is used in combination with the Ignite UI for Angular Tooltip Target by assigning the exported tooltip reference to the\n * respective target's selector property.\n *\n * Example:\n * ```html\n * <button type=\"button\" igxButton [igxTooltipTarget]=\"tooltipRef\">Hover me</button>\n * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n * ```\n */\n@Directive({\n    exportAs: 'tooltip',\n    selector: '[igxTooltip]',\n    standalone: true\n})\nexport class IgxTooltipDirective extends IgxToggleDirective implements AfterViewInit, OnDestroy {\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-tooltip--hidden')\n    public override get hiddenClass() {\n        return this.collapsed;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-tooltip')\n    public override get defaultClass() {\n        return !this.collapsed;\n    }\n\n    /**\n     * Gets/sets any tooltip related data.\n     * The 'context' can be used for storing any information that is necessary\n     * to access when working with the tooltip.\n     *\n     * ```typescript\n     * // get\n     * let tooltipContext = this.tooltip.context;\n     * ```\n     *\n     * ```typescript\n     * // set\n     * this.tooltip.context = \"Tooltip's context\";\n     * ```\n     */\n    @Input()\n    public context;\n\n    /**\n     * Identifier for the tooltip.\n     * If this is property is not explicitly set, it will be automatically generated.\n     *\n     * ```typescript\n     * let tooltipId = this.tooltip.id;\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public override id = `igx-tooltip-${NEXT_ID++}`;\n\n    /**\n     * Get the role attribute of the tooltip.\n     *\n     * ```typescript\n     * let tooltipRole = this.tooltip.role;\n     * ```\n     */\n    @HostBinding('attr.role')\n    @Input()\n    public set role(value: \"tooltip\" | \"status\"){\n        this._role = value;\n    }\n    public get role() {\n        return this._role;\n    }\n\n    /**\n     * Get the arrow element of the tooltip.\n     *\n     * ```typescript\n     * let tooltipArrow = this.tooltip.arrow;\n     * ```\n     */\n    public get arrow(): HTMLElement {\n        return this._arrowEl;\n    }\n\n    /**\n     * @hidden\n     */\n    public timeoutId;\n\n    /**\n     * @hidden\n     */\n    public tooltipTarget: IgxTooltipTargetDirective;\n\n    private _arrowEl: HTMLElement;\n    private _role: 'tooltip' | 'status' = 'tooltip';\n    private _renderer = inject(Renderer2);\n    private _platformUtil = inject(PlatformUtil);\n\n    /** @hidden */\n    public ngAfterViewInit(): void {\n        if (this._platformUtil.isBrowser) {\n            this._createArrow();\n        }\n    }\n\n    /** @hidden */\n    public override ngOnDestroy() {\n        super.ngOnDestroy();\n\n        if (this.arrow) {\n            this._removeArrow();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('pointerenter')\n    protected onPointerEnter() {\n        if (this.tooltipTarget) {\n            this.tooltipTarget.onShow();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('pointerleave')\n    protected onPointerLeave() {\n        if (this.tooltipTarget) {\n            this.tooltipTarget.onHide();\n        }\n    }\n\n    /**\n     * If there is an animation in progress, this method will reset it to its initial state.\n     * Allows hovering over the tooltip while an open/close animation is running.\n     * Stops the animation and immediately shows the tooltip.\n     *\n     * @hidden\n     */\n    public stopAnimations(): void {\n        const info = this.overlayService.getOverlayById(this._overlayId);\n\n        if (!info) return;\n\n        if (info.openAnimationPlayer) {\n            info.openAnimationPlayer.reset();\n        }\n        if (info.closeAnimationPlayer) {\n            info.closeAnimationPlayer.reset();\n        }\n    }\n\n    /**\n     * If there is a close animation in progress, this method will end it.\n     * If there is no close animation in progress, this method will close the tooltip with no animation.\n     *\n     * @param overlaySettings settings to use for closing the tooltip\n     * @hidden\n     */\n    public forceClose(overlaySettings: OverlaySettings) {\n        const info = this.overlayService.getOverlayById(this._overlayId);\n\n        if (info && info.closeAnimationPlayer) {\n            info.closeAnimationPlayer.finish();\n            info.closeAnimationPlayer.reset();\n            info.closeAnimationPlayer = null;\n        } else if (!this.collapsed) {\n            const animation = overlaySettings.positionStrategy.settings.closeAnimation;\n            overlaySettings.positionStrategy.settings.closeAnimation = null;\n            this.close();\n            overlaySettings.positionStrategy.settings.closeAnimation = animation;\n        }\n    }\n\n    private _createArrow(): void {\n        this._arrowEl = this._renderer.createElement('span');\n        this._renderer.setStyle(this._arrowEl, 'position', 'absolute');\n        this._renderer.setAttribute(this._arrowEl, 'data-arrow', 'true');\n        this._renderer.appendChild(this.element, this._arrowEl);\n    }\n\n    private _removeArrow(): void {\n        this._arrowEl.remove();\n        this._arrowEl = null;\n    }\n}\n","import { Component, ViewChild } from '@angular/core';\nimport { IgxTooltipDirective } from './tooltip.directive';\n\n@Component({\n    selector: 'igx-tooltip',\n    templateUrl: 'tooltip.component.html',\n    imports: [IgxTooltipDirective]\n})\n\nexport class IgxTooltipComponent {\n\n    @ViewChild(IgxTooltipDirective, { static: true })\n    public tooltip: IgxTooltipDirective;\n\n    public content: string;\n}","<span data-default igxTooltip>{{content}}</span>\n","import { Component, Output, EventEmitter, HostListener, Input, TemplateRef } from '@angular/core';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n  selector: 'igx-tooltip-close-button',\n  template: `\n        @if (customTemplate) {\n          <ng-container *ngTemplateOutlet=\"customTemplate\"></ng-container>\n        } @else {\n          <igx-icon aria-hidden=\"true\" family=\"default\" name=\"close\"></igx-icon>\n        }\n        `,\n  imports: [IgxIconComponent, CommonModule],\n})\nexport class IgxTooltipCloseButtonComponent {\n    @Input()\n    public customTemplate: TemplateRef<any>;\n\n    @Output()\n    public clicked = new EventEmitter<void>();\n\n    @HostListener('click')\n    public handleClick() {\n        this.clicked.emit();\n    }\n}\n","import { first } from 'igniteui-angular/core';\nimport { AutoPositionStrategy } from 'igniteui-angular/core';\nimport { ConnectedFit, HorizontalAlignment, Point, PositionSettings, Size, VerticalAlignment } from 'igniteui-angular/core';\nimport { useAnimation } from '@angular/animations';\nimport { fadeOut, scaleInCenter } from 'igniteui-angular/animations';\n\nexport const TooltipRegexes = Object.freeze({\n    /** Used for parsing the strings passed in the tooltip `show/hide-trigger` properties. */\n    triggers: /[,\\s]+/,\n\n    /** Matches horizontal `Placement` end positions. `left-end` | `right-end` */\n    horizontalEnd: /^(left|right)-end$/,\n\n    /** Matches vertical `Placement` centered positions. `left` | `right` */\n    horizontalCenter:  /^(left|right)$/,\n\n    /**\n     * Matches vertical `Placement` positions.\n     * `top` | `top-start` | `top-end` | `bottom` | `bottom-start` | `bottom-end`\n     */\n    vertical:  /^(top|bottom)(-(start|end))?$/,\n\n    /** Matches vertical `Placement` end positions. `top-end` | `bottom-end` */\n    verticalEnd: /^(top|bottom)-end$/,\n\n    /** Matches vertical `Placement` centered positions. `top` | `bottom` */\n    verticalCenter:  /^(top|bottom)$/,\n});\n\nexport interface ArrowFit {\n    /** Rectangle of the arrow element. */\n    readonly arrowRect?: Partial<DOMRect>;\n    /** Rectangle of the tooltip element. */\n    readonly tooltipRect?: Partial<DOMRect>;\n    /** Direction in which the arrow points. */\n    readonly direction?: 'top' | 'bottom' | 'right' | 'left';\n    /** Vertical offset of the arrow element from the tooltip */\n    top?: number;\n    /** Horizontal offset of the arrow element from the tooltip */\n    left?: number;\n}\n\n/**\n * Defines the possible positions for the tooltip relative to its target.\n */\nexport enum Placement {\n    Top = 'top',\n    TopStart = 'top-start',\n    TopEnd = 'top-end',\n    Bottom = 'bottom',\n    BottomStart = 'bottom-start',\n    BottomEnd = 'bottom-end',\n    Right = 'right',\n    RightStart = 'right-start',\n    RightEnd = 'right-end',\n    Left = 'left',\n    LeftStart = 'left-start',\n    LeftEnd = 'left-end'\n}\n\n/**\n * Default tooltip position settings.\n */\nexport const TooltipPositionSettings: PositionSettings = {\n    horizontalDirection: HorizontalAlignment.Center,\n    horizontalStartPoint: HorizontalAlignment.Center,\n    verticalDirection: VerticalAlignment.Bottom,\n    verticalStartPoint: VerticalAlignment.Bottom,\n    openAnimation: useAnimation(scaleInCenter, { params: { duration: '150ms' } }),\n    closeAnimation: useAnimation(fadeOut, { params: { duration: '75ms' } }),\n    offset: 6\n};\n\nexport class TooltipPositionStrategy extends AutoPositionStrategy {\n\n    private _placement: Placement;\n\n    constructor(settings?: PositionSettings) {\n        if (settings) {\n            settings = Object.assign({}, TooltipPositionSettings, settings);\n        }\n\n        super(settings || TooltipPositionSettings);\n    }\n\n    public override position(\n        contentElement: HTMLElement,\n        size: Size,\n        document?: Document,\n        initialCall?: boolean,\n        target?: Point | HTMLElement\n    ): void {\n        super.position(contentElement, size, document, initialCall, target);\n\n        const tooltip = contentElement.children?.[0];\n        this.configArrow(tooltip);\n    }\n\n    protected override fitInViewport(element: HTMLElement, connectedFit: ConnectedFit): void {\n        super.fitInViewport(element, connectedFit);\n\n        const tooltip = element.children?.[0];\n        this.configArrow(tooltip);\n    }\n\n    /**\n     * Sets the position of the arrow relative to the tooltip element.\n     *\n     * @param arrow the arrow element of the tooltip.\n     * @param arrowFit arrowFit object containing all necessary parameters.\n     */\n    public positionArrow(arrow: HTMLElement, arrowFit: ArrowFit): void {\n        this.resetArrowPositionStyles(arrow);\n\n        const convert = (value: number) => {\n            if (!value) {\n                return '';\n            }\n            return `${value}px`\n        };\n\n        Object.assign(arrow.style, {\n            top: convert(arrowFit.top),\n            left: convert(arrowFit.left),\n            [arrowFit.direction]: convert(-4),\n        });\n    }\n\n    /**\n     * Resets the element's top / bottom / left / right style properties.\n     *\n     * @param arrow the arrow element of the tooltip.\n     */\n    private resetArrowPositionStyles(arrow: HTMLElement): void {\n        arrow.style.top = '';\n        arrow.style.bottom = '';\n        arrow.style.left = '';\n        arrow.style.right = '';\n    }\n\n    /**\n     * Gets values for `top` or `left` position styles.\n     *\n     * @param arrowRect\n     * @param tooltipRect\n     * @param positionProperty - for which position property to get style values.\n     */\n    private getArrowPositionStyles(\n        arrowRect: Partial<DOMRect>,\n        tooltipRect: Partial<DOMRect>,\n        positionProperty: 'top' | 'left'\n    ): number {\n        const arrowSize = arrowRect.width > arrowRect.height\n            ? arrowRect.width\n            : arrowRect.height;\n\n        const tooltipSize = TooltipRegexes.vertical.test(this._placement)\n            ? tooltipRect.width\n            : tooltipRect.height;\n\n        const direction = {\n            top: 'horizontal',\n            left: 'vertical',\n        }[positionProperty];\n\n        const center = `${direction}Center`;\n        const end = `${direction}End`;\n\n        if (TooltipRegexes[center].test(this._placement)) {\n            const offset = tooltipSize / 2 - arrowSize / 2;\n            return Math.round(offset);\n        }\n        if (TooltipRegexes[end].test(this._placement)) {\n            const endOffset = TooltipRegexes.vertical.test(this._placement) ? 8 : 4;\n            const offset = tooltipSize - (endOffset + arrowSize);\n            return Math.round(offset);\n        }\n        return 0;\n    }\n\n    /**\n     * Configure arrow class and arrowFit.\n     *\n     * @param tooltip tooltip element.\n     */\n    private configArrow(tooltip: Element): void {\n        if (!tooltip) {\n            return;\n        }\n\n        const arrow = Array.from(tooltip.children).find(el => el.matches('[data-arrow=\"true\"]')) as HTMLElement;\n\n        // If display is none -> tooltipTarget's hasArrow is false\n        if (!arrow || arrow.style.display === 'none') {\n            return;\n        }\n\n        this._placement = this.getPlacementByPositionSettings(this.settings) ?? Placement.Bottom;\n        const tooltipDirection = first(this._placement.split('-'));\n        arrow.className = `igx-tooltip--${tooltipDirection}`;\n\n        // Arrow direction is the opposite of tooltip direction.\n        const direction = this.getOppositeDirection(tooltipDirection) as 'top' | 'right' | 'bottom' | 'left';\n        const arrowRect = arrow.getBoundingClientRect();\n        const tooltipRect = tooltip.getBoundingClientRect();\n        const top = this.getArrowPositionStyles(arrowRect, tooltipRect, 'top');\n        const left = this.getArrowPositionStyles(arrowRect, tooltipRect, 'left');\n\n        const arrowFit: ArrowFit = {\n            direction,\n            arrowRect,\n            tooltipRect,\n            top,\n            left,\n        };\n\n        this.positionArrow(arrow, arrowFit);\n    }\n\n    /**\n     * Gets the placement that correspond to the given position settings.\n     * Returns `undefined` if the position settings do not match any of the predefined placement values.\n     *\n     * @param settings Position settings for which to get the corresponding placement.\n     */\n    private getPlacementByPositionSettings(settings: PositionSettings): Placement {\n        const { horizontalDirection, horizontalStartPoint, verticalDirection, verticalStartPoint } = settings;\n\n        const mapArray = Array.from(PositionsMap.entries());\n        const placement = mapArray.find(\n            ([_, val]) =>\n                val.horizontalDirection === horizontalDirection &&\n                val.horizontalStartPoint === horizontalStartPoint &&\n                val.verticalDirection === verticalDirection &&\n                val.verticalStartPoint === verticalStartPoint\n        );\n\n        return placement ? placement[0] : undefined;\n    }\n\n    /**\n    * Gets opposite direction, e.g., top -> bottom\n    *\n    * @param direction for which direction to return its opposite.\n    * @returns `top` | `bottom` | `right` | `left`\n    */\n    private getOppositeDirection(direction: string): string {\n        const opposite = {\n            top: 'bottom',\n            right: 'left',\n            bottom: 'top',\n            left: 'right',\n        }[direction];\n\n        return opposite;\n    }\n}\n\n/**\n * Maps the predefined placement values to the corresponding directions and starting points.\n */\nexport const PositionsMap = new Map<Placement, PositionSettings>([\n    [Placement.Top, {\n        horizontalDirection: HorizontalAlignment.Center,\n        horizontalStartPoint: HorizontalAlignment.Center,\n        verticalDirection: VerticalAlignment.Top,\n        verticalStartPoint: VerticalAlignment.Top,\n    }],\n    [Placement.TopStart, {\n        horizontalDirection: HorizontalAlignment.Right,\n        horizontalStartPoint: HorizontalAlignment.Left,\n        verticalDirection: VerticalAlignment.Top,\n        verticalStartPoint: VerticalAlignment.Top,\n    }],\n    [Placement.TopEnd, {\n        horizontalDirection: HorizontalAlignment.Left,\n        horizontalStartPoint: HorizontalAlignment.Right,\n        verticalDirection: VerticalAlignment.Top,\n        verticalStartPoint: VerticalAlignment.Top,\n    }],\n    [Placement.Bottom, {\n        horizontalDirection: HorizontalAlignment.Center,\n        horizontalStartPoint: HorizontalAlignment.Center,\n        verticalDirection: VerticalAlignment.Bottom,\n        verticalStartPoint: VerticalAlignment.Bottom,\n    }],\n    [Placement.BottomStart, {\n        horizontalDirection: HorizontalAlignment.Right,\n        horizontalStartPoint: HorizontalAlignment.Left,\n        verticalDirection: VerticalAlignment.Bottom,\n        verticalStartPoint: VerticalAlignment.Bottom,\n    }],\n    [Placement.BottomEnd, {\n        horizontalDirection: HorizontalAlignment.Left,\n        horizontalStartPoint: HorizontalAlignment.Right,\n        verticalDirection: VerticalAlignment.Bottom,\n        verticalStartPoint: VerticalAlignment.Bottom,\n    }],\n    [Placement.Right, {\n        horizontalDirection: HorizontalAlignment.Right,\n        horizontalStartPoint: HorizontalAlignment.Right,\n        verticalDirection: VerticalAlignment.Middle,\n        verticalStartPoint: VerticalAlignment.Middle,\n    }],\n    [Placement.RightStart, {\n        horizontalDirection: HorizontalAlignment.Right,\n        horizontalStartPoint: HorizontalAlignment.Right,\n        verticalDirection: VerticalAlignment.Bottom,\n        verticalStartPoint: VerticalAlignment.Top,\n    }],\n    [Placement.RightEnd, {\n        horizontalDirection: HorizontalAlignment.Right,\n        horizontalStartPoint: HorizontalAlignment.Right,\n        verticalDirection: VerticalAlignment.Top,\n        verticalStartPoint: VerticalAlignment.Bottom,\n    }],\n    [Placement.Left, {\n        horizontalDirection: HorizontalAlignment.Left,\n        horizontalStartPoint: HorizontalAlignment.Left,\n        verticalDirection: VerticalAlignment.Middle,\n        verticalStartPoint: VerticalAlignment.Middle,\n    }],\n    [Placement.LeftStart, {\n        horizontalDirection: HorizontalAlignment.Left,\n        horizontalStartPoint: HorizontalAlignment.Left,\n        verticalDirection: VerticalAlignment.Bottom,\n        verticalStartPoint: VerticalAlignment.Top,\n    }],\n    [Placement.LeftEnd, {\n        horizontalDirection: HorizontalAlignment.Left,\n        horizontalStartPoint: HorizontalAlignment.Left,\n        verticalDirection: VerticalAlignment.Top,\n        verticalStartPoint: VerticalAlignment.Bottom,\n    }]\n]);\n\nexport function parseTriggers(triggers: string): Set<string> {\n    return new Set(\n        (triggers ?? '').split(TooltipRegexes.triggers).filter((s) => s.trim())\n    );\n}\n","import {\n    Directive, OnInit, OnDestroy, Output, ElementRef, ViewContainerRef,\n    Input, EventEmitter, booleanAttribute, TemplateRef, ComponentRef, Renderer2,\n    EnvironmentInjector,\n    createComponent,\n    AfterViewInit,\n    inject,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IBaseEventArgs } from 'igniteui-angular/core';\nimport { PositionSettings } from 'igniteui-angular/core';\nimport { IgxToggleActionDirective } from '../toggle/toggle.directive';\nimport { IgxTooltipComponent } from './tooltip.component';\nimport { IgxTooltipDirective } from './tooltip.directive';\nimport { IgxTooltipCloseButtonComponent } from './tooltip-close-button.component';\nimport { parseTriggers, TooltipPositionSettings, TooltipPositionStrategy } from './tooltip.common';\n\nexport interface ITooltipShowEventArgs extends IBaseEventArgs {\n    target: IgxTooltipTargetDirective;\n    tooltip: IgxTooltipDirective;\n    cancel: boolean;\n}\nexport interface ITooltipHideEventArgs extends IBaseEventArgs {\n    target: IgxTooltipTargetDirective;\n    tooltip: IgxTooltipDirective;\n    cancel: boolean;\n}\n\n/**\n * **Ignite UI for Angular Tooltip Target** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tooltip)\n *\n * The Ignite UI for Angular Tooltip Target directive is used to mark an HTML element in the markup as one that has a tooltip.\n * The tooltip target is used in combination with the Ignite UI for Angular Tooltip by assigning the exported tooltip reference to the\n * target's selector property.\n *\n * Example:\n * ```html\n * <button type=\"button\" igxButton [igxTooltipTarget]=\"tooltipRef\">Hover me</button>\n * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n * ```\n */\n@Directive({\n    exportAs: 'tooltipTarget',\n    selector: '[igxTooltipTarget]',\n    standalone: true\n})\nexport class IgxTooltipTargetDirective extends IgxToggleActionDirective implements OnInit, AfterViewInit, OnDestroy {\n    /**\n     * Gets/sets the amount of milliseconds that should pass before showing the tooltip.\n     *\n     * ```typescript\n     * // get\n     * let tooltipShowDelay = this.tooltipTarget.showDelay;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <button type=\"button\" igxButton [igxTooltipTarget]=\"tooltipRef\" [showDelay]=\"1500\">Hover me</button>\n     * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n     * ```\n     */\n    @Input()\n    public showDelay = 200;\n\n    /**\n     * Gets/sets the amount of milliseconds that should pass before hiding the tooltip.\n     *\n     * ```typescript\n     * // get\n     * let tooltipHideDelay = this.tooltipTarget.hideDelay;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <button type=\"button\" igxButton [igxTooltipTarget]=\"tooltipRef\" [hideDelay]=\"1500\">Hover me</button>\n     * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n     * ```\n     */\n    @Input()\n    public hideDelay = 300;\n\n    /**\n     * Controls whether to display an arrow indicator for the tooltip.\n     * Set to true to show the arrow. Default value is `false`.\n     *\n     * ```typescript\n     * // get\n     * let isArrowDisabled = this.tooltip.hasArrow;\n     * ```\n     *\n     * ```typescript\n     * // set\n     * this.tooltip.hasArrow = true;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-icon igxTooltipTarget [hasArrow]=\"true\" [tooltip]=\"'Infragistics Inc. HQ'\">info</igx-icon>\n     * ```\n     */\n    @Input()\n    public set hasArrow(value: boolean) {\n        if (this.target && this.target.arrow) {\n            this.target.arrow.style.display = value ? '' : 'none';\n        }\n        this._hasArrow = value;\n    }\n\n    public get hasArrow(): boolean {\n        return this._hasArrow;\n    }\n\n    /**\n     * Specifies if the tooltip remains visible until the user closes it via the close button or Esc key.\n     *\n     * ```typescript\n     * // get\n     * let isSticky = this.tooltip.sticky;\n     * ```\n     *\n     * ```typescript\n     * // set\n     * this.tooltip.sticky = true;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-icon igxTooltipTarget [sticky]=\"true\" [tooltip]=\"'Infragistics Inc. HQ'\">info</igx-icon>\n     * ```\n     */\n    @Input()\n    public set sticky (value: boolean) {\n        const changed = this._sticky !== value;\n        this._sticky = value;\n\n        if (changed) {\n            this._createCloseTemplate(this._closeTemplate);\n            this._evaluateStickyState();\n        }\n    };\n\n    public get sticky (): boolean {\n        return this._sticky;\n    }\n\n\n    /**\n     *  Allows full control over the appearance of the close button inside the tooltip.\n     *\n     * ```typescript\n     * // get\n     * let customCloseTemplate = this.tooltip.customCloseTemplate;\n     * ```\n     *\n     * ```typescript\n     * // set\n     * this.tooltip.customCloseTemplate = TemplateRef<any>;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-icon igxTooltipTarget [closeButtonTemplate]=\"customClose\" [tooltip]=\"'Infragistics Inc. HQ'\">info</igx-icon>\n     * <ng-template #customClose>\n     *      <button class=\"my-close-btn\">Close Me</button>\n     * </ng-template>\n     * ```\n     */\n    @Input('closeButtonTemplate')\n    public set closeTemplate(value: TemplateRef<any>) {\n        this._closeTemplate = value;\n        this._createCloseTemplate(this._closeTemplate);\n        this._evaluateStickyState();\n    }\n    public get closeTemplate(): TemplateRef<any> | undefined {\n        return this._closeTemplate;\n    }\n\n    /**\n     * Get the position and animation settings used by the tooltip.\n     * ```typescript\n     * let positionSettings = this.tooltipTarget.positionSettings;\n     * ```\n     */\n    @Input()\n    public get positionSettings(): PositionSettings {\n        return this._positionSettings;\n    }\n\n    /**\n     * Set the position and animation settings used by the tooltip.\n     * ```html\n     * <igx-icon [igxTooltipTarget]=\"tooltipRef\" [positionSettings]=\"newPositionSettings\">info</igx-icon>\n     * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n     * ```\n     * ```typescript\n     *\n     * import { PositionSettings, HorizontalAlignment, VerticalAlignment } from 'igniteui-angular';\n     * ...\n     * public newPositionSettings: PositionSettings = {\n     *     horizontalDirection: HorizontalAlignment.Right,\n     *     horizontalStartPoint: HorizontalAlignment.Left,\n     *     verticalDirection: VerticalAlignment.Top,\n     *     verticalStartPoint: VerticalAlignment.Top,\n     * };\n     * ```\n     */\n    public set positionSettings(settings: PositionSettings) {\n        this._positionSettings = settings;\n        if (this._overlayDefaults) {\n            this._overlayDefaults.positionStrategy = new TooltipPositionStrategy(this._positionSettings);\n        }\n    }\n\n    /**\n     * Specifies if the tooltip should not show when hovering its target with the mouse. (defaults to false)\n     * While setting this property to 'true' will disable the user interactions that shows/hides the tooltip,\n     * the developer will still be able to show/hide the tooltip through the API.\n     *\n     * ```typescript\n     * // get\n     * let tooltipDisabledValue = this.tooltipTarget.tooltipDisabled;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <button type=\"button\" igxButton [igxTooltipTarget]=\"tooltipRef\" [tooltipDisabled]=\"true\">Hover me</button>\n     * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public tooltipDisabled = false;\n\n    /**\n     * Which event triggers will show the tooltip.\n     * Expects a comma-separated string of different event triggers.\n     * Defaults to `pointerenter`.\n     * ```html\n     * <igx-icon [igxTooltipTarget]=\"tooltipRef\" [showTriggers]=\"'click,focus'\">info</igx-icon>\n     * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n     * ```\n     */\n    @Input()\n    public get showTriggers(): string {\n        return Array.from(this._showTriggers).join();\n    }\n\n    public set showTriggers(value: string) {\n        this._showTriggers = parseTriggers(value);\n        this.removeEventListeners();\n        this.addEventListeners();\n    }\n\n    /**\n     * Which event triggers will hide the tooltip.\n     * Expects a comma-separated string of different event triggers.\n     * Defaults to `pointerleave` and `click`.\n     * ```html\n     * <igx-icon [igxTooltipTarget]=\"tooltipRef\" [hideTriggers]=\"'keypress,blur'\">info</igx-icon>\n     * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n     * ```\n     */\n    @Input()\n    public get hideTriggers(): string {\n        return Array.from(this._hideTriggers).join();\n    }\n\n    public set hideTriggers(value: string) {\n        this._hideTriggers = parseTriggers(value);\n        this.removeEventListeners();\n        this.addEventListeners();\n    }\n\n    /**\n     * @hidden\n     */\n    @Input('igxTooltipTarget')\n    public override set target(target: any) {\n        if (target instanceof IgxTooltipDirective) {\n            this._target = target;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public override get target(): any {\n        if (typeof this._target === 'string') {\n            return this.navigationService.get(this._target);\n        }\n        return this._target;\n    }\n\n    /**\n     * Specifies a plain text as tooltip content.\n     * ```html\n     * <igx-icon igxTooltipTarget [tooltip]=\"'Infragistics Inc. HQ'\">info</igx-icon>\n     * ```\n     */\n    @Input()\n    public set tooltip(content: any) {\n        if (!this.target && (typeof content === 'string' || content instanceof String)) {\n            const tooltipComponent = this._viewContainerRef.createComponent(IgxTooltipComponent);\n            tooltipComponent.instance.content = content as string;\n\n            this._target = tooltipComponent.instance.tooltip;\n        }\n    }\n\n    /**\n     * Gets the respective native element of the directive.\n     *\n     * ```typescript\n     * let tooltipTargetElement = this.tooltipTarget.nativeElement;\n     * ```\n     */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    /**\n     * Indicates if the tooltip that is is associated with this target is currently hidden.\n     *\n     * ```typescript\n     * let tooltipHiddenValue = this.tooltipTarget.tooltipHidden;\n     * ```\n     */\n    public get tooltipHidden(): boolean {\n        return !this.target || this.target.collapsed;\n    }\n\n    /**\n     * Emits an event when the tooltip that is associated with this target starts showing.\n     * This event is fired before the start of the countdown to showing the tooltip.\n     *\n     * ```typescript\n     * tooltipShowing(args: ITooltipShowEventArgs) {\n     *    alert(\"Tooltip started showing!\");\n     * }\n     * ```\n     *\n     * ```html\n     * <button type=\"button\" igxButton [igxTooltipTarget]=\"tooltipRef\" (tooltipShow)='tooltipShowing($event)'>Hover me</button>\n     * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n     * ```\n     */\n    @Output()\n    public tooltipShow = new EventEmitter<ITooltipShowEventArgs>();\n\n    /**\n     * Emits an event when the tooltip that is associated with this target starts hiding.\n     * This event is fired before the start of the countdown to hiding the tooltip.\n     *\n     * ```typescript\n     * tooltipHiding(args: ITooltipHideEventArgs) {\n     *    alert(\"Tooltip started hiding!\");\n     * }\n     * ```\n     *\n     * ```html\n     * <button type=\"button\" igxButton [igxTooltipTarget]=\"tooltipRef\" (tooltipHide)='tooltipHiding($event)'>Hover me</button>\n     * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n     * ```\n     */\n    @Output()\n    public tooltipHide = new EventEmitter<ITooltipHideEventArgs>();\n\n    private _viewContainerRef = inject(ViewContainerRef);\n    private _renderer = inject(Renderer2);\n    private _envInjector = inject(EnvironmentInjector);\n\n    private _destroy$ = new Subject<void>();\n    private _autoHideDelay = 180;\n    private _isForceClosed = false;\n    private _hasArrow = false;\n    private _closeButtonRef?: ComponentRef<IgxTooltipCloseButtonComponent>;\n    private _closeTemplate: TemplateRef<any>;\n    private _sticky = false;\n    private _positionSettings: PositionSettings = TooltipPositionSettings;\n    private _showTriggers = new Set(['pointerenter']);\n    private _hideTriggers = new Set(['pointerleave', 'click']);\n\n    private _abortController = new AbortController();\n\n    /**\n     * @hidden\n     */\n    public override onClick() {\n        if (\n            this.target.timeoutId &&\n            this.target.collapsed &&\n            !this._showTriggers.has('click')\n        ) {\n            clearTimeout(this.target.timeoutId);\n            this.target.timeoutId = null;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public onShow(): void {\n        this._checksBeforeShowing(() => this._showOnInteraction());\n    }\n\n    /**\n     * @hidden\n     */\n    public onHide(): void {\n        if (this.tooltipDisabled || this.target.collapsed) {\n            return;\n        }\n\n        this._checkOutletAndOutsideClick();\n        this._hideOnInteraction();\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngOnInit() {\n        super.ngOnInit();\n\n        this._overlayDefaults.positionStrategy = new TooltipPositionStrategy(this._positionSettings);\n        this._overlayDefaults.closeOnOutsideClick = false;\n        this._overlayDefaults.closeOnEscape = true;\n\n        this.target.closing.pipe(takeUntil(this._destroy$)).subscribe((event) => {\n            if (this.target.tooltipTarget !== this) {\n                return;\n            }\n\n            const hidingArgs = { target: this, tooltip: this.target, cancel: false };\n            this.tooltipHide.emit(hidingArgs);\n\n            if (hidingArgs.cancel) {\n                event.cancel = true;\n            }\n        });\n\n        this.removeEventListeners();\n        this.addEventListeners();\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterViewInit(): void {\n        if (this.target && this.target.arrow) {\n            this.target.arrow.style.display = this.hasArrow ? '' : 'none';\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this.hideTooltip();\n        this.removeEventListeners();\n        this._destroyCloseButton();\n        this._destroy$.next();\n        this._destroy$.complete();\n    }\n\n    /**\n     * Shows the tooltip if not already shown.\n     *\n     * ```typescript\n     * this.tooltipTarget.showTooltip();\n     * ```\n     */\n    public showTooltip() {\n        this._checksBeforeShowing(() => this._showTooltip(false, true));\n    }\n\n    /**\n     * Hides the tooltip if not already hidden.\n     *\n     * ```typescript\n     * this.tooltipTarget.hideTooltip();\n     * ```\n     */\n    public hideTooltip() {\n        this._hideTooltip(false);\n    }\n\n    private get _mergedOverlaySettings() {\n        return Object.assign({}, this._overlayDefaults, this.overlaySettings);\n    }\n\n    private addEventListeners(): void {\n        const options = { passive: true, signal: this._abortController.signal };\n\n        this.onShow = this.onShow.bind(this);\n        for (const each of this._showTriggers) {\n            this.nativeElement.addEventListener(each, this.onShow, options);\n        }\n        this.onHide = this.onHide.bind(this);\n        for (const each of this._hideTriggers) {\n            this.nativeElement.addEventListener(each, this.onHide, options);\n        }\n    }\n\n    private removeEventListeners(): void {\n        this._abortController.abort();\n        this._abortController = new AbortController();\n    }\n\n    private _checkOutletAndOutsideClick(): void {\n        if (this.outlet) {\n            this._overlayDefaults.outlet = this.outlet;\n        }\n    }\n\n    /**\n     * A guard method that performs precondition checks before showing the tooltip.\n     * It ensures that the tooltip is not disabled and not already shown in sticky mode.\n     * If all conditions pass, it executes the provided `action` callback.\n     */\n    private _checksBeforeShowing(action: () => void): void {\n        if (this.tooltipDisabled) return;\n        if (!this.target.collapsed && this.target?.tooltipTarget?.sticky) return;\n\n        this._checkOutletAndOutsideClick();\n        this._checkTooltipForMultipleTargets();\n        action();\n    }\n\n    private _hideTooltip(withDelay: boolean): void {\n        if (this.target.collapsed) {\n            return;\n        }\n\n        this.target.timeoutId = setTimeout(() => {\n            // Call close() of IgxTooltipDirective\n            this.target.close();\n        }, withDelay ? this.hideDelay : 0);\n    }\n\n    private _showTooltip(withDelay: boolean, withEvents: boolean): void {\n        if (!this.target.collapsed && !this._isForceClosed) {\n            return;\n        }\n\n        if (this._isForceClosed) {\n            this._isForceClosed = false;\n        }\n\n        if (withEvents) {\n            const showingArgs = { target: this, tooltip: this.target, cancel: false };\n            this.tooltipShow.emit(showingArgs);\n\n            if (showingArgs.cancel) return;\n        }\n\n        this._evaluateStickyState();\n\n        this.target.timeoutId = setTimeout(() => {\n            // Call open() of IgxTooltipDirective\n            this.target.open(this._mergedOverlaySettings);\n        }, withDelay ? this.showDelay : 0);\n    }\n\n\n    private _showOnInteraction(): void {\n        this._stopTimeoutAndAnimation();\n        this._showTooltip(true, true);\n    }\n\n    private _hideOnInteraction(): void {\n        if (this.target?.tooltipTarget?.sticky) {\n            return;\n        }\n\n        this._setAutoHide();\n    }\n\n    private _setAutoHide(): void {\n        this._stopTimeoutAndAnimation();\n\n        this.target.timeoutId = setTimeout(() => {\n            this._hideTooltip(true);\n        }, this._autoHideDelay);\n    }\n\n    /**\n     * Used when the browser animations are set to a lower percentage\n     * and the user interacts with the target or tooltip __while__ an animation is playing.\n     * It stops the running animation, and the tooltip is instantly shown.\n     */\n    private _stopTimeoutAndAnimation(): void {\n        clearTimeout(this.target.timeoutId);\n        this.target.stopAnimations();\n    }\n\n    /**\n     * Used when a single tooltip is used for multiple targets.\n     */\n    private _checkTooltipForMultipleTargets(): void {\n        if (!this.target.tooltipTarget) {\n            this.hasArrow = this._hasArrow;\n            this.target.tooltipTarget = this;\n        }\n        if (this.target.tooltipTarget !== this) {\n            this.hasArrow = this._hasArrow;\n            if (this.target.tooltipTarget.sticky) {\n                this.target.tooltipTarget._removeCloseButtonFromTooltip();\n            }\n\n            // If the tooltip is shown for one target and the user interacts with another target,\n            // the tooltip is instantly hidden for the first target.\n            clearTimeout(this.target.timeoutId);\n            this.target.forceClose(this._mergedOverlaySettings);\n\n            this.target.tooltipTarget = this;\n            this._isForceClosed = true;\n        }\n    }\n\n    /**\n     * Updates the tooltip's sticky-related state, but only if the current target owns the tooltip.\n     *\n     * This method ensures that when the active target modifies its `sticky` or `closeTemplate` properties\n     * at runtime, the tooltip reflects those changes accordingly:\n     */\n    private _evaluateStickyState(): void {\n        if(this?.target?.tooltipTarget === this) {\n            if (this.sticky) {\n                this._appendCloseButtonToTooltip();\n            } else if (!this.sticky) {\n                this._removeCloseButtonFromTooltip();\n            }\n        }\n    }\n\n    /**\n     * Creates (if not already created) an instance of the IgxTooltipCloseButtonComponent,\n     * and assigns it the provided custom template.\n     */\n    private _createCloseTemplate(template?: TemplateRef<any> | undefined): void {\n        if (!this._closeButtonRef) {\n            this._closeButtonRef = createComponent(IgxTooltipCloseButtonComponent, {\n                environmentInjector: this._envInjector\n              });\n\n            this._closeButtonRef.instance.customTemplate = template;\n            this._closeButtonRef.instance.clicked.pipe(takeUntil(this._destroy$)).subscribe(() => {\n                this._hideTooltip(true);\n            });\n        } else {\n            this._closeButtonRef.instance.customTemplate = template;\n        }\n    }\n\n    /**\n     * Appends the close button to the tooltip.\n     */\n    private _appendCloseButtonToTooltip(): void {\n        if (this?.target && this._closeButtonRef) {\n            this._renderer.appendChild(this.target.element, this._closeButtonRef.location.nativeElement);\n            this._closeButtonRef.changeDetectorRef.detectChanges();\n            this.target.role = \"status\"\n        }\n    }\n\n    /**\n     * Removes the close button from the tooltip.\n     */\n    private _removeCloseButtonFromTooltip() {\n        if (this?.target && this._closeButtonRef) {\n            this._renderer.removeChild(this.target.element, this._closeButtonRef.location.nativeElement);\n            this._closeButtonRef.changeDetectorRef.detectChanges();\n            this.target.role = \"tooltip\"\n        }\n    }\n\n    private _destroyCloseButton(): void {\n        if (this._closeButtonRef) {\n            this._closeButtonRef.destroy();\n            this._closeButtonRef = undefined;\n        }\n    }\n}\n","import { IgxTooltipTargetDirective } from './tooltip-target.directive';\nimport { IgxTooltipDirective } from './tooltip.directive';\n\nexport * from './tooltip.directive';\nexport * from './tooltip-target.directive';\nexport { ArrowFit, TooltipPositionStrategy } from './tooltip.common';\n\n/* NOTE: Tooltip directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_TOOLTIP_DIRECTIVES = [\n    IgxTooltipDirective,\n    IgxTooltipTargetDirective\n] as const;\n","import { Directive, Input, DOCUMENT, Output, EventEmitter, LOCALE_ID, OnChanges, SimpleChanges, HostListener, OnInit, booleanAttribute, inject } from '@angular/core';\nimport {\n    ControlValueAccessor,\n    Validator, AbstractControl, ValidationErrors, NG_VALIDATORS, NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { IgxMaskDirective } from '../mask/mask.directive';\nimport { isDate, DatePartInfo, DatePart, DatePartDeltas, DateTimeUtil, I18N_FORMATTER } from 'igniteui-angular/core';\nimport { IgxDateTimeEditorEventArgs } from './date-time-editor.common';\nimport { noop } from 'rxjs';\n\n/**\n * Date Time Editor provides a functionality to input, edit and format date and time.\n *\n * @igxModule IgxDateTimeEditorModule\n *\n * @igxParent IgxInputGroup\n *\n * @igxTheme igx-input-theme\n *\n * @igxKeywords date, time, editor\n *\n * @igxGroup Scheduling\n *\n * @remarks\n *\n * The Ignite UI Date Time Editor Directive makes it easy for developers to manipulate date/time user input.\n * It requires input in a specified or default input format which is visible in the input element as a placeholder.\n * It allows the input of only date (ex: 'dd/MM/yyyy'), only time (ex:'HH:mm tt') or both at once, if needed.\n * Supports display format that may differ from the input format.\n * Provides methods to increment and decrement any specific/targeted `DatePart`.\n *\n * **Note:** This directive uses the Mask Directive internally and requires `type=\"text\"` on the input element.\n * Input elements with `type=\"date\"` or other date/time types are not supported, as they do not allow\n * programmatic cursor positioning and text selection required for mask functionality.\n *\n * @example\n * ```html\n * <igx-input-group>\n *   <input type=\"text\" igxInput [igxDateTimeEditor]=\"'dd/MM/yyyy'\" [displayFormat]=\"'shortDate'\" [(ngModel)]=\"date\"/>\n * </igx-input-group>\n * ```\n */\n@Directive({\n    selector: '[igxDateTimeEditor]',\n    exportAs: 'igxDateTimeEditor',\n    providers: [\n        { provide: NG_VALUE_ACCESSOR, useExisting: IgxDateTimeEditorDirective, multi: true },\n        { provide: NG_VALIDATORS, useExisting: IgxDateTimeEditorDirective, multi: true }\n    ],\n    standalone: true\n})\nexport class IgxDateTimeEditorDirective extends IgxMaskDirective implements OnChanges, OnInit, Validator, ControlValueAccessor {\n    private _document = inject(DOCUMENT);\n    private _localeID = inject(LOCALE_ID);\n    private _i18nFormatter = inject(I18N_FORMATTER);\n\n    /**\n     * Locale settings used for value formatting.\n     *\n     * @remarks\n     * Uses Angular's `LOCALE_ID` by default. Affects both input mask and display format if those are not set.\n     * If a `locale` is set, it must be registered via `registerLocaleData`.\n     * Please refer to https://angular.io/guide/i18n#i18n-pipes.\n     * If it is not registered, `Intl` will be used for formatting.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [locale]=\"'en'\">\n     * ```\n     */\n    @Input()\n    public locale: string;\n\n    /**\n     * Minimum value required for the editor to remain valid.\n     *\n     * @remarks\n     * If a `string` value is passed, it must be in the defined input format.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [minValue]=\"minDate\">\n     * ```\n     */\n    public get minValue(): string | Date {\n        return this._minValue;\n    }\n\n    @Input()\n    public set minValue(value: string | Date) {\n        this._minValue = value;\n        this._onValidatorChange();\n    }\n\n    /**\n     * Maximum value required for the editor to remain valid.\n     *\n     * @remarks\n     * If a `string` value is passed in, it must be in the defined input format.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [maxValue]=\"maxDate\">\n     * ```\n     */\n    public get maxValue(): string | Date {\n        return this._maxValue;\n    }\n\n    @Input()\n    public set maxValue(value: string | Date) {\n        this._maxValue = value;\n        this._onValidatorChange();\n    }\n\n    /**\n     * Specify if the currently spun date segment should loop over.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [spinLoop]=\"false\">\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public spinLoop = true;\n\n    /**\n     * Set both pre-defined format options such as `shortDate` and `longDate`,\n     * as well as constructed format string using characters supported by `DatePipe`, e.g. `EE/MM/yyyy`.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [displayFormat]=\"'shortDate'\">\n     * ```\n     */\n    @Input()\n    public set displayFormat(value: string) {\n        this._displayFormat = value;\n        this.updateDefaultFormat();\n    }\n\n    public get displayFormat(): string {\n        return this._displayFormat || this._inputFormat || DateTimeUtil.getDefaultDisplayFormat(this.locale, this._i18nFormatter, this.defaultFormatType);\n    }\n\n    /**\n     * Expected user input format (and placeholder).\n     *\n     * @example\n     * ```html\n     * <input [igxDateTimeEditor]=\"'dd/MM/yyyy'\">\n     * ```\n     */\n    @Input(`igxDateTimeEditor`)\n    public set inputFormat(value: string) {\n        if (value) {\n            this.setMask(value);\n            this._inputFormat = value;\n        }\n    }\n\n    public get inputFormat(): string {\n        return this._inputFormat || this._defaultInputFormat;\n    }\n\n    /**\n     * Editor value.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [value]=\"date\">\n     * ```\n     */\n    @Input()\n    public set value(value: Date | string | undefined | null) {\n        this._value = value;\n        this.setDateValue(value);\n        this.onChangeCallback(value);\n        this.updateMask();\n    }\n\n    public get value(): Date | string | undefined | null {\n        return this._value;\n    }\n\n    /**\n     * Specify the default input format type. Defaults to `date`, which includes\n     * only date parts for editing. Other valid options are `time` and `dateTime`.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [defaultFormatType]=\"'dateTime'\">\n     * ```\n     */\n    @Input()\n    public defaultFormatType: 'date' | 'time' | 'dateTime' = 'date';\n\n    /**\n     * Delta values used to increment or decrement each editor date part on spin actions.\n     * All values default to `1`.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [spinDelta]=\"{date: 5, minute: 30}\">\n     * ```\n     */\n    @Input()\n    public spinDelta: DatePartDeltas;\n\n    /**\n     * Emitted when the editor's value has changed.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor (valueChange)=\"valueChange($event)\"/>\n     * ```\n     */\n    @Output()\n    public valueChange = new EventEmitter<Date | string>();\n\n    /**\n     * Emitted when the editor is not within a specified range or when the editor's value is in an invalid state.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [minValue]=\"minDate\" [maxValue]=\"maxDate\" (validationFailed)=\"onValidationFailed($event)\"/>\n     * ```\n     */\n    @Output()\n    public validationFailed = new EventEmitter<IgxDateTimeEditorEventArgs>();\n\n\n    private readonly SCROLL_THRESHOLD = 50;\n    private _inputFormat: string;\n    private _scrollAccumulator = 0;\n    private _displayFormat: string;\n    private _oldValue: Date;\n    private _dateValue: Date;\n    private _onClear: boolean;\n    private document: Document;\n    private _defaultInputFormat: string;\n    private _value?: Date | string;\n    private _minValue: Date | string;\n    private _maxValue: Date | string;\n    private _inputDateParts: DatePartInfo[];\n    private _datePartDeltas: DatePartDeltas = {\n        date: 1,\n        month: 1,\n        year: 1,\n        hours: 1,\n        minutes: 1,\n        seconds: 1,\n        fractionalSeconds: 1\n    };\n\n    private onChangeCallback: (...args: any[]) => void = noop;\n    private _onValidatorChange: (...args: any[]) => void = noop;\n\n    private get datePartDeltas(): DatePartDeltas {\n        return Object.assign({}, this._datePartDeltas, this.spinDelta);\n    }\n\n    private get emptyMask(): string {\n        return this.maskParser.applyMask(null, this.maskOptions);\n    }\n\n    private get targetDatePart(): DatePart {\n        // V.K. May 16th, 2022 #11554 Get correct date part in shadow DOM\n        if (this.document.activeElement === this.nativeElement ||\n            this.document.activeElement?.shadowRoot?.activeElement === this.nativeElement) {\n            return this._inputDateParts\n                .find(p => p.start <= this.selectionStart && this.selectionStart <= p.end && p.type !== DatePart.Literal)?.type;\n        } else {\n            if (this._inputDateParts.some(p => p.type === DatePart.Date)) {\n                return DatePart.Date;\n            } else if (this._inputDateParts.some(p => p.type === DatePart.Hours)) {\n                return DatePart.Hours;\n            }\n        }\n    }\n\n    private get hasDateParts(): boolean {\n        return this._inputDateParts.some(\n            p => p.type === DatePart.Date\n                || p.type === DatePart.Month\n                || p.type === DatePart.Year);\n    }\n\n    private get hasTimeParts(): boolean {\n        return this._inputDateParts.some(\n            p => p.type === DatePart.Hours\n                || p.type === DatePart.Minutes\n                || p.type === DatePart.Seconds\n                || p.type === DatePart.FractionalSeconds);\n    }\n\n    private get dateValue(): Date {\n        return this._dateValue;\n    }\n\n    constructor() {\n        super();\n        this.document = this._document as Document;\n        this.locale = this.locale || this._localeID;\n    }\n\n    @HostListener('wheel', ['$event'])\n    public onWheel(event: WheelEvent): void {\n        if (!this._focused) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        this._scrollAccumulator += event.deltaY;\n        if (Math.abs(this._scrollAccumulator) > this.SCROLL_THRESHOLD) {\n            if (this._scrollAccumulator > 0) {\n                this.decrement();\n            } else {\n                this.increment();\n            }\n            this._scrollAccumulator = 0;\n        }\n    }\n\n    public override ngOnInit(): void {\n        this.updateDefaultFormat();\n        this.setMask(this.inputFormat);\n        this.updateMask();\n    }\n\n    /** @hidden @internal */\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes['locale'] && !changes['locale'].firstChange ||\n            changes['defaultFormatType'] && !changes['defaultFormatType'].firstChange\n        ) {\n            this.updateDefaultFormat();\n            this.setMask(this.inputFormat);\n            this.updateMask();\n        }\n        if (changes['inputFormat'] && !changes['inputFormat'].firstChange) {\n            this.updateMask();\n        }\n    }\n\n\n    /** Clear the input element value. */\n    public clear(): void {\n        this._onClear = true;\n        this.updateValue(null);\n        this.setSelectionRange(0, this.inputValue.length);\n        this._onClear = false;\n    }\n\n    /**\n     * Increment specified DatePart.\n     *\n     * @param datePart The optional DatePart to increment. Defaults to Date or Hours (when Date is absent from the inputFormat - ex:'HH:mm').\n     * @param delta The optional delta to increment by. Overrides `spinDelta`.\n     */\n    public increment(datePart?: DatePart, delta?: number): void {\n        const targetPart = datePart || this.targetDatePart;\n        if (!targetPart) {\n            return;\n        }\n        const newValue = this.trySpinValue(targetPart, delta);\n        this.updateValue(newValue);\n    }\n\n    /**\n     * Decrement specified DatePart.\n     *\n     * @param datePart The optional DatePart to decrement. Defaults to Date or Hours (when Date is absent from the inputFormat - ex:'HH:mm').\n     * @param delta The optional delta to decrement by. Overrides `spinDelta`.\n     */\n    public decrement(datePart?: DatePart, delta?: number): void {\n        const targetPart = datePart || this.targetDatePart;\n        if (!targetPart) {\n            return;\n        }\n        const newValue = this.trySpinValue(targetPart, delta, true);\n        this.updateValue(newValue);\n    }\n\n    /** @hidden @internal */\n    public override writeValue(value: any): void {\n        this._value = value;\n        this.setDateValue(value);\n        this.updateMask();\n    }\n\n    /** @hidden @internal */\n    public validate(control: AbstractControl): ValidationErrors | null {\n        if (!control.value) {\n            return null;\n        }\n        // InvalidDate handling\n        if (isDate(control.value) && !DateTimeUtil.isValidDate(control.value)) {\n            return { value: true };\n        }\n\n        let errors = {};\n        const value = DateTimeUtil.isValidDate(control.value) ? control.value : DateTimeUtil.parseIsoDate(control.value);\n        const minValueDate = DateTimeUtil.isValidDate(this.minValue) ? this.minValue : this.parseDate(this.minValue);\n        const maxValueDate = DateTimeUtil.isValidDate(this.maxValue) ? this.maxValue : this.parseDate(this.maxValue);\n        if (minValueDate || maxValueDate) {\n            errors = DateTimeUtil.validateMinMax(value,\n                minValueDate, maxValueDate,\n                this.hasTimeParts, this.hasDateParts);\n        }\n\n        return Object.keys(errors).length > 0 ? errors : null;\n    }\n\n    /** @hidden @internal */\n    public registerOnValidatorChange?(fn: () => void): void {\n        this._onValidatorChange = fn;\n    }\n\n    /** @hidden @internal */\n    public override registerOnChange(fn: any): void {\n        this.onChangeCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public override registerOnTouched(fn: any): void {\n        this._onTouchedCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public setDisabledState?(_isDisabled: boolean): void { }\n\n    /** @hidden @internal */\n    public override onCompositionEnd(): void {\n        super.onCompositionEnd();\n\n        this.updateValue(this.parseDate(this.inputValue));\n        this.updateMask();\n    }\n\n    /** @hidden @internal */\n    public override onInputChanged(event): void {\n        super.onInputChanged(event);\n        if (this._composing) {\n            return;\n        }\n\n        if (this.inputIsComplete()) {\n            const parsedDate = this.parseDate(this.inputValue);\n            if (DateTimeUtil.isValidDate(parsedDate)) {\n                this.updateValue(parsedDate);\n            } else {\n                const oldValue = this.value && new Date(this.dateValue.getTime());\n                const args: IgxDateTimeEditorEventArgs = { oldValue, newValue: parsedDate, userInput: this.inputValue };\n                this.validationFailed.emit(args);\n                if (DateTimeUtil.isValidDate(args.newValue)) {\n                    this.updateValue(args.newValue);\n                } else {\n                    this.updateValue(null);\n                }\n            }\n        } else {\n            this.updateValue(null);\n        }\n    }\n\n    /** @hidden @internal */\n    public override onKeyDown(event: KeyboardEvent): void {\n        if (this.nativeElement.readOnly) {\n            return;\n        }\n        super.onKeyDown(event);\n        const key = event.key;\n\n        if (event.altKey) {\n            return;\n        }\n\n        if (key === this.platform.KEYMAP.ARROW_DOWN || key === this.platform.KEYMAP.ARROW_UP) {\n            this.spin(event);\n            return;\n        }\n\n        if (event.ctrlKey && key === this.platform.KEYMAP.SEMICOLON) {\n            this.updateValue(new Date());\n        }\n\n        this.moveCursor(event);\n    }\n\n    /** @hidden @internal */\n    public override onFocus(): void {\n        if (this.nativeElement.readOnly) {\n            return;\n        }\n        this._focused = true;\n        this._onTouchedCallback();\n        this.updateMask();\n        super.onFocus();\n        this.nativeElement.select();\n    }\n\n    /** @hidden @internal */\n    public override onBlur(event: FocusEvent): void {\n        this._focused = false;\n        if (!this.inputIsComplete() && this.inputValue !== this.emptyMask) {\n            this.updateValue(this.parseDate(this.inputValue));\n        } else {\n            this.updateMask();\n        }\n\n        // TODO: think of a better way to set displayValuePipe in mask directive\n        if (this.displayValuePipe) {\n            return;\n        }\n\n        super.onBlur(event);\n    }\n\n    // the date editor sets its own inputFormat as its placeholder if none is provided\n    /** @hidden */\n    protected override setPlaceholder(_value: string): void { }\n\n    private updateDefaultFormat(): void {\n        this._defaultInputFormat = DateTimeUtil.getNumericInputFormat(this.locale, this._i18nFormatter, this._displayFormat)\n                                || DateTimeUtil.getDefaultInputFormat(this.locale, this._i18nFormatter, this.defaultFormatType);\n        this.setMask(this.inputFormat);\n    }\n\n    /** @hidden @internal */\n    public updateMask(): void {\n        if (this._focused) {\n            // store the cursor position as it will be moved during masking\n            const cursor = this.selectionEnd;\n            this.inputValue = this.getMaskedValue();\n            this.setSelectionRange(cursor);\n        } else {\n            if (!this.dateValue || !DateTimeUtil.isValidDate(this.dateValue)) {\n                this.inputValue = '';\n                return;\n            }\n            if (this.displayValuePipe) {\n                // TODO: remove when formatter func has been deleted\n                this.inputValue = this.displayValuePipe.transform(this.value);\n                return;\n            }\n            const format = this.displayFormat || this.inputFormat;\n            if (format) {\n                this.inputValue = this._i18nFormatter.formatDate(this.dateValue, format.replace('tt', 'aa'), this.locale);\n            } else {\n                this.inputValue = this.dateValue.toLocaleString();\n            }\n        }\n    }\n\n    private setMask(inputFormat: string): void {\n        const oldFormat = this._inputDateParts?.map(p => p.format).join('');\n        this._inputDateParts = DateTimeUtil.parseDateTimeFormat(inputFormat, this._i18nFormatter);\n        inputFormat = this._inputDateParts.map(p => p.format).join('');\n        const mask = (inputFormat || this._defaultInputFormat)\n        .replace(new RegExp(/(?=[^at])[\\w]/, 'g'), '0');\n        this.mask = mask.replaceAll(/(a{1,2})|tt/g, match => 'L'.repeat(match.length === 1 ? 1 : 2));\n        const placeholder = this.nativeElement.placeholder;\n        if (!placeholder || oldFormat === placeholder) {\n            this.renderer.setAttribute(this.nativeElement, 'placeholder', inputFormat);\n        }\n    }\n\n    private parseDate(val: string): Date | null {\n        if (!val) {\n            return null;\n        }\n\n        return DateTimeUtil.parseValueFromMask(val, this._inputDateParts, this.promptChar);\n    }\n\n    private getMaskedValue(): string {\n        let mask = this.emptyMask;\n        if (DateTimeUtil.isValidDate(this.value) || DateTimeUtil.parseIsoDate(this.value)) {\n            for (const part of this._inputDateParts) {\n                if (part.type === DatePart.Literal) {\n                    continue;\n                }\n                const targetValue = this.getPartValue(part, part.format.length);\n                mask = this.maskParser.replaceInMask(mask, targetValue, this.maskOptions, part.start, part.end).value;\n            }\n            return mask;\n        }\n        if (!this.inputIsComplete() || !this._onClear) {\n            return this.inputValue;\n        }\n        return mask;\n    }\n\n\n    private valueInRange(value: Date): boolean {\n        if (!value) {\n            return false;\n        }\n\n        let errors = {};\n        const minValueDate = DateTimeUtil.isValidDate(this.minValue) ? this.minValue : this.parseDate(this.minValue);\n        const maxValueDate = DateTimeUtil.isValidDate(this.maxValue) ? this.maxValue : this.parseDate(this.maxValue);\n        if (minValueDate || maxValueDate) {\n            errors = DateTimeUtil.validateMinMax(value,\n                this.minValue, this.maxValue,\n                this.hasTimeParts, this.hasDateParts);\n        }\n\n        return Object.keys(errors).length === 0;\n    }\n\n    private spinValue(datePart: DatePart, delta: number): Date {\n        if (!this.dateValue || !DateTimeUtil.isValidDate(this.dateValue)) {\n            return null;\n        }\n        const newDate = new Date(this.dateValue.getTime());\n        let formatPart;\n        let amPmFromMask;\n        switch (datePart) {\n            case DatePart.Date:\n                DateTimeUtil.spinDate(delta, newDate, this.spinLoop);\n                break;\n            case DatePart.Month:\n                DateTimeUtil.spinMonth(delta, newDate, this.spinLoop);\n                break;\n            case DatePart.Year:\n                DateTimeUtil.spinYear(delta, newDate);\n                break;\n            case DatePart.Hours:\n                DateTimeUtil.spinHours(delta, newDate, this.spinLoop);\n                break;\n            case DatePart.Minutes:\n                DateTimeUtil.spinMinutes(delta, newDate, this.spinLoop);\n                break;\n            case DatePart.Seconds:\n                DateTimeUtil.spinSeconds(delta, newDate, this.spinLoop);\n                break;\n            case DatePart.FractionalSeconds:\n                DateTimeUtil.spinFractionalSeconds(delta, newDate, this.spinLoop);\n                break;\n            case DatePart.AmPm:\n                formatPart = this._inputDateParts.find(dp => dp.type === DatePart.AmPm);\n                amPmFromMask = this.inputValue.substring(formatPart.start, formatPart.end);\n                return DateTimeUtil.spinAmPm(newDate, this.dateValue, amPmFromMask);\n        }\n\n        return newDate;\n    }\n\n    private trySpinValue(datePart: DatePart, delta?: number, negative = false): Date {\n        if (!delta) {\n            // default to 1 if a delta is set to 0 or any other falsy value\n            delta = this.datePartDeltas[datePart] || 1;\n        }\n        const spinValue = negative ? -Math.abs(delta) : Math.abs(delta);\n        return this.spinValue(datePart, spinValue) || new Date();\n    }\n\n    private setDateValue(value: Date | string): void {\n        this._dateValue = DateTimeUtil.isValidDate(value)\n            ? value\n            : DateTimeUtil.parseIsoDate(value);\n    }\n\n    private updateValue(newDate: Date): void {\n        this._oldValue = this.dateValue;\n        this.value = newDate;\n\n        // TODO: should we emit events here?\n        if (this.inputIsComplete() || this.inputValue === this.emptyMask) {\n            this.valueChange.emit(this.dateValue);\n        }\n        if (this.dateValue && !this.valueInRange(this.dateValue)) {\n            this.validationFailed.emit({ oldValue: this._oldValue, newValue: this.dateValue, userInput: this.inputValue });\n        }\n    }\n\n    private toTwelveHourFormat(value: string): number {\n        let hour = parseInt(value.replace(new RegExp(this.promptChar, 'g'), '0'), 10);\n        if (hour > 12) {\n            hour -= 12;\n        } else if (hour === 0) {\n            hour = 12;\n        }\n\n        return hour;\n    }\n\n    private getPartValue(datePartInfo: DatePartInfo, partLength: number): string {\n        let maskedValue;\n        const datePart = datePartInfo.type;\n        switch (datePart) {\n            case DatePart.Date:\n                maskedValue = this.dateValue.getDate();\n                break;\n            case DatePart.Month:\n                // months are zero based\n                maskedValue = this.dateValue.getMonth() + 1;\n                break;\n            case DatePart.Year:\n                if (partLength === 2) {\n                    maskedValue = this.prependValue(\n                        parseInt(this.dateValue.getFullYear().toString().slice(-2), 10), partLength, '0');\n                } else {\n                    maskedValue = this.dateValue.getFullYear();\n                }\n                break;\n            case DatePart.Hours:\n                if (datePartInfo.format.indexOf('h') !== -1) {\n                    maskedValue = this.prependValue(\n                        this.toTwelveHourFormat(this.dateValue.getHours().toString()), partLength, '0');\n                } else {\n                    maskedValue = this.dateValue.getHours();\n                }\n                break;\n            case DatePart.Minutes:\n                maskedValue = this.dateValue.getMinutes();\n                break;\n            case DatePart.Seconds:\n                maskedValue = this.dateValue.getSeconds();\n                break;\n            case DatePart.FractionalSeconds:\n                partLength = 3;\n                maskedValue = this.prependValue(this.dateValue.getMilliseconds(), 3, '00');\n                break;\n            case DatePart.AmPm:\n                maskedValue = DateTimeUtil.getAmPmValue(partLength, this.dateValue.getHours() < 12);\n                break;\n        }\n\n        if (datePartInfo.type !== DatePart.AmPm) {\n            return this.prependValue(maskedValue, partLength, '0');\n        }\n\n        return maskedValue;\n    }\n\n    private prependValue(value: number, partLength: number, prependChar: string): string {\n        return (prependChar + value.toString()).slice(-partLength);\n    }\n\n    private spin(event: KeyboardEvent): void {\n        event.preventDefault();\n        switch (event.key) {\n            case this.platform.KEYMAP.ARROW_UP:\n                this.increment();\n                break;\n            case this.platform.KEYMAP.ARROW_DOWN:\n                this.decrement();\n                break;\n        }\n    }\n\n    private inputIsComplete(): boolean {\n        return this.inputValue.indexOf(this.promptChar) === -1;\n    }\n\n    private moveCursor(event: KeyboardEvent): void {\n        const value = (event.target as HTMLInputElement).value;\n        switch (event.key) {\n            case this.platform.KEYMAP.ARROW_LEFT:\n                if (event.ctrlKey) {\n                    event.preventDefault();\n                    this.setSelectionRange(this.getNewPosition(value));\n                }\n                break;\n            case this.platform.KEYMAP.ARROW_RIGHT:\n                if (event.ctrlKey) {\n                    event.preventDefault();\n                    this.setSelectionRange(this.getNewPosition(value, 1));\n                }\n                break;\n        }\n    }\n\n    /**\n     * Move the cursor in a specific direction until it reaches a date/time separator.\n     * Then return its index.\n     *\n     * @param value The string it operates on.\n     * @param direction 0 is left, 1 is right. Default is 0.\n     */\n    private getNewPosition(value: string, direction = 0): number {\n        const literals = this._inputDateParts.filter(p => p.type === DatePart.Literal);\n        let cursorPos = this.selectionStart;\n        if (!direction) {\n            do {\n                cursorPos = cursorPos > 0 ? --cursorPos : cursorPos;\n            } while (!literals.some(l => l.end === cursorPos) && cursorPos > 0);\n            return cursorPos;\n        } else {\n            do {\n                cursorPos++;\n            } while (!literals.some(l => l.start === cursorPos) && cursorPos < value.length);\n            return cursorPos;\n        }\n    }\n}\n\n\n","import { Directive, forwardRef, ElementRef, HostListener, Renderer2, inject } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n    // eslint-disable-next-line @angular-eslint/directive-selector\n    selector: 'igc-rating[ngModel],igc-rating[formControlName]',\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => IgcFormControlDirective),\n            multi: true\n        }\n    ],\n    standalone: true\n})\nexport class IgcFormControlDirective implements ControlValueAccessor {\n    private elementRef = inject(ElementRef);\n    private renderer = inject(Renderer2);\n\n    /** @hidden @internal */\n    private onChange: any = () => { };\n    /** @hidden @internal */\n    private onTouched: any = () => { };\n\n    /** @hidden @internal */\n    @HostListener('blur')\n    public onBlur() {\n        this.onTouched();\n    }\n\n    /** @hidden @internal */\n    @HostListener('igcChange', ['$event.detail'])\n    public listenForValueChange(value) {\n        this.onChange(value);\n    }\n\n    /** @hidden @internal */\n    public writeValue(value): void {\n        if (value) {\n            this.elementRef.nativeElement.value = value;\n        }\n    }\n\n    /** @hidden @internal */\n    public registerOnChange(fn): void {\n        this.onChange = fn;\n    }\n\n    /** @hidden @internal */\n    public registerOnTouched(fn): void {\n        this.onTouched = fn;\n    }\n\n    /** @hidden @internal */\n    public setDisabledState(isDisabled: boolean): void {\n        this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', isDisabled);\n    }\n}\n\n","import { Directive, ElementRef, HostBinding, Input, OnDestroy, booleanAttribute } from '@angular/core';\nimport { IgxOverlayOutletDirective, IToggleView } from 'igniteui-angular/core';\nimport { IPositionStrategy, OverlaySettings } from 'igniteui-angular/core';\nimport { IgxToggleDirective } from '../toggle/toggle.directive';\n\n@Directive()\nexport abstract class IgxNotificationsDirective extends IgxToggleDirective\n    implements IToggleView, OnDestroy {\n    /**\n     * Sets/gets the `aria-live` attribute.\n     * If not set, `aria-live` will have value `\"polite\"`.\n     */\n    @HostBinding('attr.aria-live')\n    @Input()\n    public ariaLive = 'polite';\n\n    /**\n     * Sets/gets whether the element will be hidden after the `displayTime` is over.\n     * Default value is `true`.\n     */\n    @Input({ transform: booleanAttribute })\n    public autoHide = true;\n\n    /**\n     * Sets/gets the duration of time span (in milliseconds) which the element will be visible\n     * after it is being shown.\n     * Default value is `4000`.\n     */\n    @Input()\n    public displayTime = 4000;\n\n    /**\n     * Gets/Sets the container used for the element.\n     *\n     * @remarks\n     *  `outlet` is an instance of `IgxOverlayOutletDirective` or an `ElementRef`.\n     */\n    @Input()\n    public outlet: IgxOverlayOutletDirective | ElementRef<HTMLElement>;\n\n    /**\n     * Enables/Disables the visibility of the element.\n     * If not set, the `isVisible` attribute will have value `false`.\n     */\n    @Input({ transform: booleanAttribute })\n    public get isVisible() {\n        return !this.collapsed;\n    }\n\n    public set isVisible(value) {\n        if (value !== this.isVisible) {\n            if (value) {\n                requestAnimationFrame(() => {\n                    this.open();\n                });\n            } else {\n                this.close();\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public textMessage = '';\n\n    /**\n     * @hidden\n     */\n    public timeoutId: number;\n\n    /**\n     * @hidden\n     */\n    protected strategy: IPositionStrategy;\n\n    /**\n     * @hidden\n     */\n    public override open() {\n        clearInterval(this.timeoutId);\n\n        const overlaySettings: OverlaySettings = {\n            positionStrategy: this.strategy,\n            closeOnEscape: false,\n            closeOnOutsideClick: false,\n            modal: false,\n            outlet: this.outlet\n        };\n\n        super.open(overlaySettings);\n\n        if (this.autoHide) {\n            this.timeoutId = window.setTimeout(() => {\n                this.close();\n            }, this.displayTime);\n        }\n    }\n\n    /**\n     * Hides the element.\n     */\n    public override close() {\n        clearTimeout(this.timeoutId);\n        super.close();\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { IgxButtonDirective } from './button.directive';\nimport { IgxIconButtonDirective } from './icon-button.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxButtonDirective, IgxIconButtonDirective],\n    exports: [IgxButtonDirective, IgxIconButtonDirective]\n})\nexport class IgxButtonModule {}\n","import { NgModule } from '@angular/core';\nimport { IgxDateTimeEditorDirective } from './date-time-editor.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxDateTimeEditorDirective],\n    exports: [IgxDateTimeEditorDirective]\n})\nexport class IgxDateTimeEditorModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxDividerDirective } from './divider.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxDividerDirective],\n    exports: [IgxDividerDirective]\n})\nexport class IgxDividerModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxDragDirective, IgxDragHandleDirective, IgxDragIgnoreDirective, IgxDropDirective } from './drag-drop.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxDragDirective, IgxDropDirective, IgxDragHandleDirective, IgxDragIgnoreDirective],\n    exports: [IgxDragDirective, IgxDropDirective, IgxDragHandleDirective, IgxDragIgnoreDirective]\n})\nexport class IgxDragDropModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxFilterDirective, IgxFilterPipe } from './filter.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxFilterDirective, IgxFilterPipe],\n    exports: [IgxFilterDirective, IgxFilterPipe]\n})\nexport class IgxFilterModule {\n}\n","import { NgModule } from '@angular/core';\nimport { IgxFocusDirective } from './focus.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxFocusDirective],\n    exports: [IgxFocusDirective]\n})\nexport class IgxFocusModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxFocusTrapDirective } from './focus-trap.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxFocusTrapDirective],\n    exports: [IgxFocusTrapDirective]\n})\nexport class IgxFocusTrapModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxForOfDirective } from './for_of.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxForOfDirective],\n    exports: [IgxForOfDirective]\n})\nexport class IgxForOfModule {\n}\n","import { NgModule } from '@angular/core';\nimport { IgcFormControlDirective } from './form-control.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgcFormControlDirective],\n    exports: [IgcFormControlDirective]\n})\nexport class IgcFormsModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxFlexDirective, IgxLayoutDirective } from './layout.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxFlexDirective, IgxLayoutDirective],\n    exports: [IgxFlexDirective, IgxLayoutDirective]\n})\nexport class IgxLayoutModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxMaskDirective } from './mask.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxMaskDirective],\n    exports: [IgxMaskDirective]\n})\nexport class IgxMaskModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxRippleDirective } from './ripple.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxRippleDirective],\n    exports: [IgxRippleDirective]\n})\nexport class IgxRippleModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxScrollInertiaDirective } from './scroll_inertia.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxScrollInertiaDirective],\n    exports: [IgxScrollInertiaDirective]\n})\nexport class IgxScrollInertiaModule {\n}\n","import { NgModule } from '@angular/core';\nimport { IgxTextHighlightDirective } from './text-highlight.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxTextHighlightDirective],\n    exports: [IgxTextHighlightDirective]\n})\nexport class IgxTextHighlightModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxTextSelectionDirective } from './text-selection.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxTextSelectionDirective],\n    exports: [IgxTextSelectionDirective]\n})\nexport class IgxTextSelectionModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxToggleActionDirective, IgxToggleDirective } from './toggle.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxToggleDirective, IgxToggleActionDirective],\n    exports: [IgxToggleDirective, IgxToggleActionDirective]\n})\nexport class IgxToggleModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_TOOLTIP_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n @NgModule({\n    imports: [...IGX_TOOLTIP_DIRECTIVES],\n    exports: [...IGX_TOOLTIP_DIRECTIVES]\n})\nexport class IgxTooltipModule { }\n","// Directives\n// Note: Autocomplete moved to drop-down entry point in v21.0.0\n// Users should now import from 'igniteui-angular/drop-down' instead\n// Removed re-export to avoid circular dependency\nexport * from './directives/button/button.directive';\nexport * from './directives/checkbox/checkbox-base.directive';\nexport * from './directives/divider/divider.directive';\nexport * from './directives/drag-drop/public_api';\nexport * from './directives/filter/filter.directive';\nexport * from './directives/focus/focus.directive';\nexport * from './directives/focus-trap/focus-trap.directive';\nexport {\n    IForOfDataChangeEventArgs,\n    IForOfDataChangingEventArgs,\n    IForOfState,\n    IgxForOfContext,\n    IgxForOfDirective,\n    IgxGridForOfContext,\n    IgxGridForOfDirective,\n    IgxForOfToken\n} from './directives/for-of/for_of.directive';\nexport { IgxForOfSyncService, IgxForOfScrollSyncService } from './directives/for-of/for_of.sync.service';\nexport * from './directives/button/icon-button.directive';\nexport * from './directives/layout/layout.directive';\nexport * from './directives/mask/mask.directive';\n// Note: Radio-group directive moved to radio entry point in v21.0.0\n// Users should now import from 'igniteui-angular/radio' instead\n// export { IgxRadioGroupDirective } from 'igniteui-angular/radio';\nexport * from './directives/ripple/ripple.directive';\nexport * from './directives/scroll-inertia/scroll_inertia.directive';\nexport * from './directives/size/ig-size.directive';\nexport * from './directives/text-highlight/text-highlight.directive';\nexport * from './directives/text-selection/text-selection.directive';\nexport * from './directives/template-outlet/template_outlet.directive';\nexport * from './directives/toggle/toggle.directive';\nexport * from './directives/tooltip/public_api';\nexport * from './directives/date-time-editor/public_api';\nexport * from './directives/form-control/form-control.directive';\nexport * from './directives/notification/notifications.directive';\nexport * from './directives/text-highlight/text-highlight.service';\n\n// NOTE: Input-related directives (IgxHintDirective, IgxInputDirective, IgxLabelDirective,\n// IgxPrefixDirective, IgxSuffixDirective, IgxReadonlyInputDirective) have been moved\n// to igniteui-angular/input-group entry point.\n// Import them from 'igniteui-angular/input-group' instead of 'igniteui-angular/directives'\n\n// Directive modules for backwards compatibility\nexport * from './directives/button/button.module';\nexport * from './directives/date-time-editor/date-time-editor.module';\nexport * from './directives/divider/divider.module';\nexport * from './directives/drag-drop/drag-drop.module';\nexport * from './directives/filter/filter.module';\nexport * from './directives/focus/focus.module';\nexport * from './directives/focus-trap/focus-trap.module';\nexport * from './directives/for-of/for_of.module';\nexport * from './directives/form-control/form-control.module';\nexport * from './directives/layout/layout.module';\nexport * from './directives/mask/mask.module';\n// export { IgxRadioModule } from 'igniteui-angular/radio';\nexport * from './directives/ripple/ripple.module';\nexport * from './directives/scroll-inertia/scroll_inertia.module';\nexport * from './directives/text-highlight/text-highlight.module';\nexport * from './directives/text-selection/text-selection.module';\nexport * from './directives/toggle/toggle.module';\nexport * from './directives/tooltip/tooltip.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["NEXT_ID","DOCUMENT","first","i1.IgxTooltipDirective","i2.IgxTooltipTargetDirective"],"mappings":"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"}