igniteui-angular 21.0.2 → 21.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"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} from '@angular/core';\nimport { PlatformUtil } from 'igniteui-angular/core';\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{\n private _platformUtil = inject(PlatformUtil);\n public element = inject(ElementRef);\n private _viewInit = false;\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 }\n }\n\n public ngAfterViewInit(): void {\n if (this._platformUtil.isBrowser && !this._viewInit) {\n this._viewInit = true;\n\n requestAnimationFrame(() => {\n this.element.nativeElement.style.removeProperty('--_init-transition');\n });\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 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\n/**\n * @hidden\n */\n@Directive({\n selector: '[igxScrollInertia]',\n standalone: true\n})\nexport class IgxScrollInertiaDirective implements OnInit, OnDestroy {\n private element = inject(ElementRef);\n private _zone = inject(NgZone);\n\n\n @Input()\n public IgxScrollInertiaDirection: string;\n\n @Input()\n public IgxScrollInertiaScrollContainer: any;\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;\n private _startX;\n private _startY;\n private _touchStartX;\n private _touchStartY;\n private _lastTouchEnd;\n private _lastTouchX;\n private _lastTouchY;\n private _savedSpeedsX = [];\n private _savedSpeedsY;\n private _totalMovedX;\n private _offsetRecorded;\n private _offsetDirection;\n private _lastMovedX;\n private _lastMovedY;\n private _nextX;\n private _nextY;\n private parentElement;\n private baseDeltaMultiplier = 1 / 120;\n private firefoxDeltaMultiplier = 1 / 30;\n\n public ngOnInit(): void {\n this._zone.runOutsideAngular(() => {\n this.parentElement = this.element.nativeElement.parentElement || this.element.nativeElement.parentNode;\n if (!this.parentElement) {\n return;\n }\n const targetElem = this.parentElement;\n this.onWheel = this.onWheel.bind(this);\n this.onTouchStart = this.onTouchStart.bind(this);\n this.onTouchMove = this.onTouchMove.bind(this);\n this.onTouchEnd = this.onTouchEnd.bind(this);\n targetElem.addEventListener('wheel', this.onWheel, { passive: false });\n targetElem.addEventListener('touchstart', this.onTouchStart, { passive: false });\n targetElem.addEventListener('touchmove', this.onTouchMove, { passive: false });\n targetElem.addEventListener('touchend', this.onTouchEnd, { passive: false });\n });\n }\n\n public ngOnDestroy() {\n this._zone.runOutsideAngular(() => {\n const targetElem = this.parentElement;\n if (!targetElem) {\n return;\n }\n targetElem.removeEventListener('wheel', this.onWheel);\n targetElem.removeEventListener('touchstart', this.onTouchStart);\n targetElem.removeEventListener('touchmove', this.onTouchMove);\n targetElem.removeEventListener('touchend', this.onTouchEnd);\n });\n }\n\n /**\n * @hidden\n * Function that is called when scrolling with the mouse wheel or using touchpad\n */\n protected onWheel(evt) {\n // if no scrollbar return\n if (!this.IgxScrollInertiaScrollContainer) {\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;\n let scrollDeltaY;\n const scrollStep = this.wheelStep;\n const minWheelStep = 1 / this.wheelStep;\n const smoothing = this.smoothingDuration !== 0;\n\n this._startX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n this._startY = this.IgxScrollInertiaScrollContainer.scrollTop;\n\n if (evt.wheelDeltaX) {\n /* Option supported on Chrome, Safari, Opera.\n /* 120 is default for mousewheel on these browsers. Other values are for trackpads */\n scrollDeltaX = -evt.wheelDeltaX * this.baseDeltaMultiplier;\n\n if (-minWheelStep < scrollDeltaX && scrollDeltaX < minWheelStep) {\n scrollDeltaX = Math.sign(scrollDeltaX) * minWheelStep;\n }\n } else if (evt.deltaX) {\n /* For other browsers that don't provide wheelDelta, use the deltaY to determine direction and pass default values. */\n const deltaScaledX = evt.deltaX * (evt.deltaMode === 0 ? this.firefoxDeltaMultiplier : 1);\n scrollDeltaX = this.calcAxisCoords(deltaScaledX, -1, 1);\n }\n\n /** Get delta for the Y axis */\n if (evt.wheelDeltaY) {\n /* Option supported on Chrome, Safari, Opera.\n /* 120 is default for mousewheel on these browsers. Other values are for trackpads */\n scrollDeltaY = -evt.wheelDeltaY * this.baseDeltaMultiplier;\n\n if (-minWheelStep < scrollDeltaY && scrollDeltaY < minWheelStep) {\n scrollDeltaY = Math.sign(scrollDeltaY) * minWheelStep;\n }\n } else if (evt.deltaY) {\n /* For other browsers that don't provide wheelDelta, use the deltaY to determine direction and pass default values. */\n const deltaScaledY = evt.deltaY * (evt.deltaMode === 0 ? this.firefoxDeltaMultiplier : 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 maxScrollLeft = parseInt(this.IgxScrollInertiaScrollContainer.children[0].style.width, 10);\n if (0 < nextLeft && nextLeft < maxScrollLeft) {\n // Prevent navigating through pages when scrolling on Mac\n evt.preventDefault();\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, preventDefault, nextTop = 0) {\n const curScrollTop = nextTop === 0 ? this.IgxScrollInertiaScrollContainer.scrollTop : nextTop;\n const maxScrollTop = this.IgxScrollInertiaScrollContainer.children[0].scrollHeight -\n this.IgxScrollInertiaScrollContainer.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 protected didChildScroll(evt, scrollDeltaX, scrollDeltaY): boolean {\n const path = evt.composedPath();\n let i = 0;\n while (i < path.length && path[i].localName !== 'igx-display-container') {\n const e = path[i++];\n if (e.scrollHeight > e.clientHeight) {\n const overflowY = window.getComputedStyle(e)['overflow-y'];\n if (overflowY === 'auto' || overflowY === 'scroll') {\n if (scrollDeltaY > 0 && e.scrollHeight - Math.abs(Math.round(e.scrollTop)) !== e.clientHeight) {\n return true;\n }\n if (scrollDeltaY < 0 && e.scrollTop !== 0) {\n return true;\n }\n }\n }\n if (e.scrollWidth > e.clientWidth) {\n const overflowX = window.getComputedStyle(e)['overflow-x'];\n if (overflowX === 'auto' || overflowX === 'scroll') {\n if (scrollDeltaX > 0 && e.scrollWidth - Math.abs(Math.round(e.scrollLeft)) !== e.clientWidth) {\n return true;\n }\n if (scrollDeltaX < 0 && e.scrollLeft !== 0) {\n return true;\n }\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) {\n if (!this.IgxScrollInertiaScrollContainer) {\n return false;\n }\n\n // stops any current ongoing inertia\n cancelAnimationFrame(this._touchInertiaAnimID);\n\n const touch = event.touches[0];\n\n this._startX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n\n this._startY = this.IgxScrollInertiaScrollContainer.scrollTop;\n\n this._touchStartX = touch.pageX;\n this._touchStartY = touch.pageY;\n\n this._lastTouchEnd = new Date().getTime();\n this._lastTouchX = touch.pageX;\n this._lastTouchY = touch.pageY;\n this._savedSpeedsX = [];\n this._savedSpeedsY = [];\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) {\n if (!this.IgxScrollInertiaScrollContainer) {\n return;\n }\n\n const touch = event.touches[0];\n const destX = this._startX + (this._touchStartX - touch.pageX) * Math.sign(this.inertiaStep);\n const destY = this._startY + (this._touchStartY - touch.pageY) * Math.sign(this.inertiaStep);\n\n /* Handle complex touchmoves when swipe stops but the toch doesn't end and then a swipe is initiated again */\n /* **********************************************************/\n\n\n const timeFromLastTouch = (new Date().getTime()) - this._lastTouchEnd;\n if (timeFromLastTouch !== 0 && timeFromLastTouch < 100) {\n const speedX = (this._lastTouchX - touch.pageX) / timeFromLastTouch;\n const speedY = (this._lastTouchY - touch.pageY) / timeFromLastTouch;\n\n // Save the last 5 speeds between two touchmoves on X axis\n if (this._savedSpeedsX.length < 5) {\n this._savedSpeedsX.push(speedX);\n } else {\n this._savedSpeedsX.shift();\n this._savedSpeedsX.push(speedX);\n }\n\n // Save the last 5 speeds between two touchmoves on Y axis\n if (this._savedSpeedsY.length < 5) {\n this._savedSpeedsY.push(speedY);\n } else {\n this._savedSpeedsY.shift();\n this._savedSpeedsY.push(speedY);\n }\n }\n this._lastTouchEnd = new Date().getTime();\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 untill 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 hickup 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 ammout 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 behaviour 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) {\n let speedX = 0;\n let speedY = 0;\n\n // savedSpeedsX and savedSpeedsY have same length\n for (let i = 0; i < this._savedSpeedsX.length; i++) {\n speedX += this._savedSpeedsX[i];\n speedY += this._savedSpeedsY[i];\n }\n speedX = this._savedSpeedsX.length ? speedX / this._savedSpeedsX.length : 0;\n speedY = this._savedSpeedsX.length ? speedY / this._savedSpeedsY.length : 0;\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) > 0.1 || Math.abs(speedY) > 0.1) &&\n (Math.abs(this._lastMovedX) > 2 || Math.abs(this._lastMovedY) > 2)) {\n this._inertiaInit(speedX, speedY);\n }\n if (this.IgxScrollInertiaDirection === 'vertical') {\n this.preventParentScroll(event, false);\n }\n }\n\n protected _smoothWheelScroll(delta) {\n this._nextY = this.IgxScrollInertiaScrollContainer.scrollTop;\n this._nextX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n let x = -1;\n let wheelInertialAnimation = null;\n const inertiaWheelStep = () => {\n if (x > 1) {\n cancelAnimationFrame(wheelInertialAnimation);\n return;\n }\n const nextScroll = ((-3 * x * x + 3) * delta * 2) * this.smoothingStep;\n if (this.IgxScrollInertiaDirection === 'vertical') {\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 x += 0.08 * (1 / this.smoothingDuration);\n wheelInertialAnimation = requestAnimationFrame(inertiaWheelStep);\n };\n wheelInertialAnimation = requestAnimationFrame(inertiaWheelStep);\n }\n\n protected _inertiaInit(speedX, speedY) {\n const stepModifer = this.inertiaStep;\n const inertiaDuration = this.inertiaDuration;\n let x = 0;\n this._nextX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n this._nextY = this.IgxScrollInertiaScrollContainer.scrollTop;\n\n // Sets timeout until executing next movement iteration of the inertia\n const inertiaStep = () => {\n if (x > 6) {\n cancelAnimationFrame(this._touchInertiaAnimID);\n return;\n }\n\n if (Math.abs(speedX) > Math.abs(speedY)) {\n x += 0.05 / (1 * inertiaDuration);\n } else {\n x += 0.05 / (1 * inertiaDuration);\n }\n\n if (x <= 1) {\n // We use constant quation to determine the offset without speed falloff befor x reaches 1\n if (Math.abs(speedY) <= Math.abs(speedX) * this.inertiaDeltaY) {\n this._nextX += 1 * speedX * 15 * stepModifer;\n }\n if (Math.abs(speedY) >= Math.abs(speedX) * this.inertiaDeltaX) {\n this._nextY += 1 * speedY * 15 * stepModifer;\n }\n } else {\n // We use the quation \"y = 2 / (x + 0.55) - 0.3\" to determine the offset\n if (Math.abs(speedY) <= Math.abs(speedX) * this.inertiaDeltaY) {\n this._nextX += Math.abs(2 / (x + 0.55) - 0.3) * speedX * 15 * stepModifer;\n }\n if (Math.abs(speedY) >= Math.abs(speedX) * this.inertiaDeltaX) {\n this._nextY += Math.abs(2 / (x + 0.55) - 0.3) * speedY * 15 * stepModifer;\n }\n }\n\n // If we have mixed environment we use the default behaviour. 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, min, max) {\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, destY) {\n // TODO Trigger scrolling event?\n const scrolledX = this._scrollToX(destX);\n const scrolledY = this._scrollToY(destY);\n\n return { x: scrolledX, y: scrolledY };\n }\n private _scrollToX(dest) {\n this.IgxScrollInertiaScrollContainer.scrollLeft = dest;\n }\n private _scrollToY(dest) {\n this.IgxScrollInertiaScrollContainer.scrollTop = dest;\n }\n}\n\n/**\n * @hidden\n */\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 @HostListener('scroll', ['$event'])\n public onScroll(event) {\n this.scrollAmount = event.target.scrollTop || event.target.scrollLeft;\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, DoCheck, EmbeddedViewRef, EventEmitter, Input, IterableChanges, IterableDiffer, IterableDiffers, NgZone, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, TemplateRef, TrackByFunction, ViewContainerRef, AfterViewInit, booleanAttribute, DOCUMENT, inject } 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\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, OnChanges, DoCheck, OnDestroy, AfterViewInit {\n private _viewContainer = inject(ViewContainerRef);\n protected _template = inject<TemplateRef<NgForOfContext<T>>>(TemplateRef);\n protected _differs = inject(IterableDiffers);\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\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 igxForOf: U & T[] | null;\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 * 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 /** 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.getScroll().scrollHeight;\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.getScroll().scrollTop + 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 > parseInt(this.igxForContainerSize, 10);\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.top = '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 }\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 /**\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\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 = parseInt(changes[containerSize].previousValue, 10);\n const newSize = parseInt(changes[containerSize].currentValue, 10);\n this._recalcOnContainerChange({prevSize, newSize});\n }\n }\n\n /**\n * @hidden\n */\n public ngDoCheck(): 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 = parseInt(this.igxForContainerSize, 10);\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 this.dc.instance._viewContainer.element.nativeElement.style.top = -(scrollOffset) + 'px';\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 = parseInt(this.igxForContainerSize, 10);\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 + parseInt(this.igxForContainerSize, 10), 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(parseInt(this.igxForContainerSize, 10));\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 = (parseInt(this.igxForContainerSize, 10));\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 + parseInt(this.igxForContainerSize, 10), 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 = parseInt(this.igxForContainerSize, 10);\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._embeddedViews.map(view =>\n view.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE) || view.rootNodes[0].nextElementSibling)[index - this.state.startIndex] : null;\n const rowHeight = this.getSizeAt(index);\n const containerSize = parseInt(this.igxForContainerSize, 10);\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 /**\n * @hidden\n * Function that recalculates and updates cache sizes.\n */\n public recalcUpdateSizes() {\n const dimension = this.igxForScrollOrientation === 'horizontal' ?\n this.igxForSizePropName : 'height';\n const diffs = [];\n let totalDiff = 0;\n const l = this._embeddedViews.length;\n const rNodes = this._embeddedViews.map(view =>\n view.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE) || view.rootNodes[0].nextElementSibling);\n for (let i = 0; i < l; i++) {\n const rNode = rNodes[i];\n if (rNode) {\n const height = window.getComputedStyle(rNode).getPropertyValue('height');\n const h = parseFloat(height) || parseInt(this.igxForItemSize, 10);\n const index = this.state.startIndex + i;\n if (!this.isRemote && !this.igxForOf[index]) {\n continue;\n }\n const margin = this.getMargin(rNode, dimension);\n const oldVal = this.individualSizeCache[index];\n const newVal = (dimension === 'height' ? h : rNode.clientWidth) + margin;\n this.individualSizeCache[index] = newVal;\n const currDiff = newVal - oldVal;\n diffs.push(currDiff);\n totalDiff += currDiff;\n this.sizesCache[index + 1] = (this.sizesCache[index] || 0) + newVal;\n }\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 const hSum = this.individualSizeCache.reduce(reducer);\n if (hSum > this._maxSize) {\n this._virtRatio = hSum / this._maxSize;\n }\n this.scrollComponent.size = Math.min(this.scrollComponent.size + totalDiff, this._maxSize);\n this._virtSize = hSum;\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 = parseInt(this.igxForContainerSize, 10);\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 (!parseInt(this.scrollComponent.nativeElement.style.height, 10)) {\n return;\n }\n if (!this._bScrollInternal) {\n this._calcVirtualScrollPosition(event.target.scrollTop);\n } else {\n this._bScrollInternal = false;\n }\n const prevStartIndex = this.state.startIndex;\n const scrollOffset = this.fixedUpdateAllElements(this._virtScrollPosition);\n\n this.dc.instance._viewContainer.element.nativeElement.style.top = -(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 /**\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 /**\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 (!parseInt(firstScrollChild.style.width, 10)) {\n return;\n }\n if (!this._bScrollInternal) {\n this._calcVirtualScrollPosition(event.target.scrollLeft);\n } else {\n this._bScrollInternal = false;\n }\n const prevStartIndex = this.state.startIndex;\n const scrLeft = event.target.scrollLeft;\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 this.sizesCache = [];\n this.individualSizeCache = [];\n this.sizesCache.push(0);\n const count = this.isRemote ? this.totalItemCount : items.length;\n for (i; i < count; i++) {\n size = this._getItemSize(items[i], dimension);\n this.individualSizeCache.push(size);\n totalSize += size;\n this.sizesCache.push(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 = parseInt(this.igxForContainerSize, 10);\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 parseInt(prevItem[dimension], 10);\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 = parseInt(this.igxForContainerSize, 10) > 0 ? this._calcSize() : 0;\n if (totalWidth <= parseInt(this.igxForContainerSize, 10)) {\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 <= parseInt(this.igxForContainerSize, 10)) {\n this.resetScrollPosition();\n }\n this.scrollComponent.nativeElement.style.height = parseInt(this.igxForContainerSize, 10) + '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 // 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\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 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 = parseInt(this.igxForContainerSize, 10);\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 : parseInt(this.igxForItemSize, 10) || 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' : 'top';\n this.dc.instance._viewContainer.element.nativeElement.style[dir] = -(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 this.recalcUpdateSizes();\n const offset = this.igxForScrollOrientation === 'horizontal' ?\n parseInt(this.dc.instance._viewContainer.element.nativeElement.style.left, 10) :\n parseInt(this.dc.instance._viewContainer.element.nativeElement.style.top, 10);\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 private 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, DoCheck {\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() {\n if (this.igxGridForOfVariableSizes && this.igxForScrollOrientation === 'vertical') {\n super.recalcUpdateSizes();\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 }\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 = parseInt(changes[containerSize].previousValue, 10);\n const newSize = parseInt(changes[containerSize].currentValue, 10);\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 ngDoCheck() {\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 if (!parseInt(this.scrollComponent.nativeElement.style.height, 10)) {\n return;\n }\n if (!this._bScrollInternal) {\n this._calcVirtualScrollPosition(event.target.scrollTop);\n } else {\n this._bScrollInternal = false;\n }\n const scrollOffset = this.fixedUpdateAllElements(this._virtScrollPosition);\n\n this.dc.instance._viewContainer.element.nativeElement.style.top = -(scrollOffset) + 'px';\n\n this._zone.onStable.pipe(first()).subscribe(this.recalcUpdateSizes.bind(this));\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 || !parseInt(firstScrollChild.style.width, 10)) {\n return;\n }\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 = parseInt(item[dimension], 10) || 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 this.sizesCache = [];\n this.individualSizeCache = [];\n this.sizesCache.push(0);\n const count = this.isRemote ? this.totalItemCount : items.length;\n for (i; i < count; i++) {\n size = this.getItemSize(items[i]);\n this.individualSizeCache.push(size);\n totalSize += size;\n this.sizesCache.push(totalSize);\n }\n return totalSize;\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.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(/[0123456789]/g, (num) => ({\n '1': '1', '2': '2', '3': '3', '4': '4', '5': '5',\n '6': '6', '7': '7', '8': '8', '9': '9', '0': '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 { Directive, ElementRef, HostListener, Input, NgZone, Renderer2, booleanAttribute, inject } from '@angular/core';\nimport { AnimationBuilder, style, animate } from '@angular/animations';\n\n@Directive({\n selector: '[igxRipple]',\n standalone: true\n})\nexport class IgxRippleDirective {\n protected builder = inject(AnimationBuilder);\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) {\n this.zone.runOutsideAngular(() => this._ripple(event));\n }\n\n private setStyles(rippleElement: HTMLElement, styleParams: any) {\n this.renderer.addClass(rippleElement, this.rippleElementClass);\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) {\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 = this.builder.build([\n style({ opacity: 0.5, transform: 'scale(.3)' }),\n animate(this.rippleDuration, style({ opacity: 0, transform: 'scale(2)' }))\n ]).create(rippleElement);\n\n this.animationQueue.push(animation);\n\n animation.onDone(() => {\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 animation.play();\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 this._lastSearchInfo.searchText = '';\n this._lastSearchInfo.matchCount = 0;\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 { Directive, EmbeddedViewRef, Input, OnChanges, ChangeDetectorRef, SimpleChange, SimpleChanges, TemplateRef, ViewContainerRef, NgZone, Output, EventEmitter, inject } from '@angular/core';\n\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 public _viewContainerRef = inject(ViewContainerRef);\n private _zone = inject(NgZone);\n public cdr = inject(ChangeDetectorRef);\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 private _viewRef !: EmbeddedViewRef<any>;\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 _embeddedViewsMap: Map<string, Map<any, EmbeddedViewRef<any>>> = new Map();\n\n public ngOnChanges(changes: SimpleChanges) {\n const actionType: TemplateOutletAction = this._getActionType(changes);\n switch (actionType) {\n case TemplateOutletAction.CreateView: this._recreateView(); break;\n case TemplateOutletAction.MoveView: this._moveView(); break;\n case TemplateOutletAction.UseCachedView: this._useCachedView(); break;\n case TemplateOutletAction.UpdateViewContext: this._updateExistingContext(this.igxTemplateOutletContext); break;\n }\n }\n\n public cleanCache() {\n this._embeddedViewsMap.forEach((collection) => {\n collection.forEach((item => {\n if (!item.destroyed) {\n item.destroy();\n }\n }));\n collection.clear();\n });\n this._embeddedViewsMap.clear();\n }\n\n public cleanView(tmplID) {\n const embViewCollection = this._embeddedViewsMap.get(tmplID.type);\n const embView = embViewCollection?.get(tmplID.id);\n if (embView) {\n embView.destroy();\n this._embeddedViewsMap.get(tmplID.type).delete(tmplID.id);\n }\n }\n\n private _recreateView() {\n const prevIndex = this._viewRef ? this._viewContainerRef.indexOf(this._viewRef) : -1;\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 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 tmplId = this.igxTemplateOutletContext['templateID'];\n if (tmplId) {\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 const resCollection = this._embeddedViewsMap.get(this.igxTemplateOutletContext['templateID'].type);\n const res = resCollection?.get(this.igxTemplateOutletContext['templateID'].id);\n if (!res) {\n this._embeddedViewsMap.set(this.igxTemplateOutletContext['templateID'].type,\n new Map([[this.igxTemplateOutletContext['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 if (view !== this._viewRef) {\n if (owner._viewContainerRef.indexOf(view) !== -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(owner._viewContainerRef.indexOf(view));\n }\n if (this._viewRef && this._viewContainerRef.indexOf(this._viewRef) !== -1) {\n this.beforeViewDetach.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n this._viewContainerRef.detach(this._viewContainerRef.indexOf(this._viewRef));\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 private _useCachedView() {\n // use view for specific template cached in the current template outlet\n const tmplID = this.igxTemplateOutletContext['templateID'];\n const cachedView = tmplID ?\n this._embeddedViewsMap.get(tmplID.type)?.get(tmplID.id) :\n null;\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 = this._cloneContext(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 prevCtxKeys = Object.keys(ctxChange.previousValue || {});\n const currCtxKeys = Object.keys(ctxChange.currentValue || {});\n\n if (prevCtxKeys.length === currCtxKeys.length) {\n for (const propName of currCtxKeys) {\n if (prevCtxKeys.indexOf(propName) === -1) {\n return true;\n }\n }\n return false;\n } else {\n return true;\n }\n }\n\n private _updateExistingContext(ctx: any): void {\n for (const propName of Object.keys(ctx)) {\n this._viewRef.context[propName] = this.igxTemplateOutletContext[propName];\n }\n }\n\n private _cloneContext(ctx: any): any {\n const clone = {};\n for (const propName of Object.keys(ctx)) {\n clone[propName] = ctx[propName];\n }\n return clone;\n }\n\n private _getActionType(changes: SimpleChanges) {\n const movedView = this.igxTemplateOutletContext['moveView'];\n const tmplID = this.igxTemplateOutletContext['templateID'];\n const cachedView = tmplID ?\n this._embeddedViewsMap.get(tmplID.type)?.get(tmplID.id) :\n null;\n const shouldRecreate = this._shouldRecreateView(changes);\n if (movedView) {\n // view is moved from external source\n return TemplateOutletAction.MoveView;\n } else if (shouldRecreate && cachedView) {\n // should recreate (template or context change) and there is a matching template in cache\n return TemplateOutletAction.UseCachedView;\n } else if (!this._viewRef || shouldRecreate) {\n // no view or should recreate\n return TemplateOutletAction.CreateView;\n } else if (this.igxTemplateOutletContext) {\n // has context, update context\n return TemplateOutletAction.UpdateViewContext;\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\n/**\n * @hidden\n */\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 /** Provides reference to the owner component (from IBaseEventArgs) */\n owner?: any;\n /* blazorSuppress */\n event?: Event;\n}\n\nexport interface ToggleViewCancelableEventArgs extends ToggleViewEventArgs, CancelableBrowserEventArgs {\n cancel: boolean;\n}\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, DOCUMENT, 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';\nimport { Subject, takeUntil } from 'rxjs';\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 _destroy$ = new Subject<boolean>();\n private _document = inject(DOCUMENT);\n private _renderer = inject(Renderer2);\n private _platformUtil = inject(PlatformUtil);\n\n /** @hidden */\n constructor() {\n super();\n\n this.onDocumentTouchStart = this.onDocumentTouchStart.bind(this);\n this.opening.pipe(takeUntil(this._destroy$)).subscribe(() => {\n this._document.addEventListener('touchstart', this.onDocumentTouchStart, { passive: true });\n });\n this.closed.pipe(takeUntil(this._destroy$)).subscribe(() => {\n this._document.removeEventListener('touchstart', this.onDocumentTouchStart);\n });\n }\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 this._document.removeEventListener('touchstart', this.onDocumentTouchStart);\n this._destroy$.next(true);\n this._destroy$.complete();\n\n if (this.arrow) {\n this._removeArrow();\n }\n }\n\n /**\n * @hidden\n */\n @HostListener('mouseenter')\n public onMouseEnter() {\n this.tooltipTarget?.onMouseEnter();\n }\n\n /**\n * @hidden\n */\n @HostListener('mouseleave')\n public onMouseLeave() {\n this.tooltipTarget?.onMouseLeave();\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 private onDocumentTouchStart(event) {\n this.tooltipTarget?.onDocumentTouchStart(event);\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 /** 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 = tooltip.querySelector('[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","import {\n Directive, OnInit, OnDestroy, Output, ViewContainerRef, HostListener,\n Input, EventEmitter, booleanAttribute, inject, TemplateRef, ComponentRef, Renderer2,\n EnvironmentInjector,\n createComponent,\n AfterViewInit,\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 { 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 private _viewContainerRef = inject(ViewContainerRef);\n private _renderer = inject(Renderer2);\n private _envInjector = inject(EnvironmentInjector);\n\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 * @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 * @hidden\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 _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\n /**\n * @hidden\n */\n @HostListener('click')\n public override onClick() {\n if (!this.target.collapsed) {\n this._hideOnInteraction();\n } else if (this.target.timeoutId) {\n clearTimeout(this.target.timeoutId);\n this.target.timeoutId = null;\n }\n }\n\n /**\n * @hidden\n */\n @HostListener('mouseenter')\n public onMouseEnter() {\n this._checksBeforeShowing(() => this._showOnInteraction());\n }\n\n /**\n * @hidden\n */\n @HostListener('mouseleave')\n public onMouseLeave() {\n if (this.tooltipDisabled) {\n return;\n }\n\n this._checkOutletAndOutsideClick();\n this._hideOnInteraction();\n }\n\n /**\n * @hidden\n */\n public onTouchStart() {\n this._checksBeforeShowing(() => this._showOnInteraction());\n }\n\n /**\n * @hidden\n */\n public onDocumentTouchStart(event) {\n if (this.tooltipDisabled || this?.target?.tooltipTarget !== this) {\n return;\n }\n\n if (this.nativeElement !== event.target &&\n !this.nativeElement.contains(event.target)\n ) {\n this._hideOnInteraction();\n }\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.nativeElement.addEventListener('touchstart', this.onTouchStart = this.onTouchStart.bind(this), { passive: true });\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.nativeElement.removeEventListener('touchstart', this.onTouchStart);\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 _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 } 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 _locale = inject(LOCALE_ID);\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;\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._locale;\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._displayFormat)\n || DateTimeUtil.getDefaultInputFormat(this.locale, this.defaultFormatType);\n this.setMask(this.inputFormat);\n }\n\n private 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 = DateTimeUtil.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);\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 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","takeUntil","first","i1.IgxTooltipDirective","i2.IgxTooltipTargetDirective"],"mappings":"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"}
1
+ {"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} from '@angular/core';\nimport { PlatformUtil } from 'igniteui-angular/core';\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{\n private _platformUtil = inject(PlatformUtil);\n public element = inject(ElementRef);\n private _viewInit = false;\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 }\n }\n\n public ngAfterViewInit(): void {\n if (this._platformUtil.isBrowser && !this._viewInit) {\n this._viewInit = true;\n\n requestAnimationFrame(() => {\n this.element.nativeElement.style.removeProperty('--_init-transition');\n });\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 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\n/**\n * @hidden\n */\n@Directive({\n selector: '[igxScrollInertia]',\n standalone: true\n})\nexport class IgxScrollInertiaDirective implements OnInit, OnDestroy {\n private element = inject(ElementRef);\n private _zone = inject(NgZone);\n\n\n @Input()\n public IgxScrollInertiaDirection: string;\n\n @Input()\n public IgxScrollInertiaScrollContainer: any;\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;\n private _startX;\n private _startY;\n private _touchStartX;\n private _touchStartY;\n private _lastTouchEnd;\n private _lastTouchX;\n private _lastTouchY;\n private _savedSpeedsX = [];\n private _savedSpeedsY;\n private _totalMovedX;\n private _offsetRecorded;\n private _offsetDirection;\n private _lastMovedX;\n private _lastMovedY;\n private _nextX;\n private _nextY;\n private parentElement;\n private baseDeltaMultiplier = 1 / 120;\n private firefoxDeltaMultiplier = 1 / 30;\n\n public ngOnInit(): void {\n this._zone.runOutsideAngular(() => {\n this.parentElement = this.element.nativeElement.parentElement || this.element.nativeElement.parentNode;\n if (!this.parentElement) {\n return;\n }\n const targetElem = this.parentElement;\n this.onWheel = this.onWheel.bind(this);\n this.onTouchStart = this.onTouchStart.bind(this);\n this.onTouchMove = this.onTouchMove.bind(this);\n this.onTouchEnd = this.onTouchEnd.bind(this);\n targetElem.addEventListener('wheel', this.onWheel, { passive: false });\n targetElem.addEventListener('touchstart', this.onTouchStart, { passive: false });\n targetElem.addEventListener('touchmove', this.onTouchMove, { passive: false });\n targetElem.addEventListener('touchend', this.onTouchEnd, { passive: false });\n });\n }\n\n public ngOnDestroy() {\n this._zone.runOutsideAngular(() => {\n const targetElem = this.parentElement;\n if (!targetElem) {\n return;\n }\n targetElem.removeEventListener('wheel', this.onWheel);\n targetElem.removeEventListener('touchstart', this.onTouchStart);\n targetElem.removeEventListener('touchmove', this.onTouchMove);\n targetElem.removeEventListener('touchend', this.onTouchEnd);\n });\n }\n\n /**\n * @hidden\n * Function that is called when scrolling with the mouse wheel or using touchpad\n */\n protected onWheel(evt) {\n // if no scrollbar return\n if (!this.IgxScrollInertiaScrollContainer) {\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;\n let scrollDeltaY;\n const scrollStep = this.wheelStep;\n const minWheelStep = 1 / this.wheelStep;\n const smoothing = this.smoothingDuration !== 0;\n\n this._startX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n this._startY = this.IgxScrollInertiaScrollContainer.scrollTop;\n\n if (evt.wheelDeltaX) {\n /* Option supported on Chrome, Safari, Opera.\n /* 120 is default for mousewheel on these browsers. Other values are for trackpads */\n scrollDeltaX = -evt.wheelDeltaX * this.baseDeltaMultiplier;\n\n if (-minWheelStep < scrollDeltaX && scrollDeltaX < minWheelStep) {\n scrollDeltaX = Math.sign(scrollDeltaX) * minWheelStep;\n }\n } else if (evt.deltaX) {\n /* For other browsers that don't provide wheelDelta, use the deltaY to determine direction and pass default values. */\n const deltaScaledX = evt.deltaX * (evt.deltaMode === 0 ? this.firefoxDeltaMultiplier : 1);\n scrollDeltaX = this.calcAxisCoords(deltaScaledX, -1, 1);\n }\n\n /** Get delta for the Y axis */\n if (evt.wheelDeltaY) {\n /* Option supported on Chrome, Safari, Opera.\n /* 120 is default for mousewheel on these browsers. Other values are for trackpads */\n scrollDeltaY = -evt.wheelDeltaY * this.baseDeltaMultiplier;\n\n if (-minWheelStep < scrollDeltaY && scrollDeltaY < minWheelStep) {\n scrollDeltaY = Math.sign(scrollDeltaY) * minWheelStep;\n }\n } else if (evt.deltaY) {\n /* For other browsers that don't provide wheelDelta, use the deltaY to determine direction and pass default values. */\n const deltaScaledY = evt.deltaY * (evt.deltaMode === 0 ? this.firefoxDeltaMultiplier : 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 maxScrollLeft = parseInt(this.IgxScrollInertiaScrollContainer.children[0].style.width, 10);\n if (0 < nextLeft && nextLeft < maxScrollLeft) {\n // Prevent navigating through pages when scrolling on Mac\n evt.preventDefault();\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, preventDefault, nextTop = 0) {\n const curScrollTop = nextTop === 0 ? this.IgxScrollInertiaScrollContainer.scrollTop : nextTop;\n const maxScrollTop = this.IgxScrollInertiaScrollContainer.children[0].scrollHeight -\n this.IgxScrollInertiaScrollContainer.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 protected didChildScroll(evt, scrollDeltaX, scrollDeltaY): boolean {\n const path = evt.composedPath();\n let i = 0;\n while (i < path.length && path[i].localName !== 'igx-display-container') {\n const e = path[i++];\n if (e.scrollHeight > e.clientHeight) {\n const overflowY = window.getComputedStyle(e)['overflow-y'];\n if (overflowY === 'auto' || overflowY === 'scroll') {\n if (scrollDeltaY > 0 && e.scrollHeight - Math.abs(Math.round(e.scrollTop)) !== e.clientHeight) {\n return true;\n }\n if (scrollDeltaY < 0 && e.scrollTop !== 0) {\n return true;\n }\n }\n }\n if (e.scrollWidth > e.clientWidth) {\n const overflowX = window.getComputedStyle(e)['overflow-x'];\n if (overflowX === 'auto' || overflowX === 'scroll') {\n if (scrollDeltaX > 0 && e.scrollWidth - Math.abs(Math.round(e.scrollLeft)) !== e.clientWidth) {\n return true;\n }\n if (scrollDeltaX < 0 && e.scrollLeft !== 0) {\n return true;\n }\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) {\n if (!this.IgxScrollInertiaScrollContainer) {\n return false;\n }\n\n // stops any current ongoing inertia\n cancelAnimationFrame(this._touchInertiaAnimID);\n\n const touch = event.touches[0];\n\n this._startX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n\n this._startY = this.IgxScrollInertiaScrollContainer.scrollTop;\n\n this._touchStartX = touch.pageX;\n this._touchStartY = touch.pageY;\n\n this._lastTouchEnd = new Date().getTime();\n this._lastTouchX = touch.pageX;\n this._lastTouchY = touch.pageY;\n this._savedSpeedsX = [];\n this._savedSpeedsY = [];\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) {\n if (!this.IgxScrollInertiaScrollContainer) {\n return;\n }\n\n const touch = event.touches[0];\n const destX = this._startX + (this._touchStartX - touch.pageX) * Math.sign(this.inertiaStep);\n const destY = this._startY + (this._touchStartY - touch.pageY) * Math.sign(this.inertiaStep);\n\n /* Handle complex touchmoves when swipe stops but the toch doesn't end and then a swipe is initiated again */\n /* **********************************************************/\n\n\n const timeFromLastTouch = (new Date().getTime()) - this._lastTouchEnd;\n if (timeFromLastTouch !== 0 && timeFromLastTouch < 100) {\n const speedX = (this._lastTouchX - touch.pageX) / timeFromLastTouch;\n const speedY = (this._lastTouchY - touch.pageY) / timeFromLastTouch;\n\n // Save the last 5 speeds between two touchmoves on X axis\n if (this._savedSpeedsX.length < 5) {\n this._savedSpeedsX.push(speedX);\n } else {\n this._savedSpeedsX.shift();\n this._savedSpeedsX.push(speedX);\n }\n\n // Save the last 5 speeds between two touchmoves on Y axis\n if (this._savedSpeedsY.length < 5) {\n this._savedSpeedsY.push(speedY);\n } else {\n this._savedSpeedsY.shift();\n this._savedSpeedsY.push(speedY);\n }\n }\n this._lastTouchEnd = new Date().getTime();\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 untill 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 hickup 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 ammout 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 behaviour 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) {\n let speedX = 0;\n let speedY = 0;\n\n // savedSpeedsX and savedSpeedsY have same length\n for (let i = 0; i < this._savedSpeedsX.length; i++) {\n speedX += this._savedSpeedsX[i];\n speedY += this._savedSpeedsY[i];\n }\n speedX = this._savedSpeedsX.length ? speedX / this._savedSpeedsX.length : 0;\n speedY = this._savedSpeedsX.length ? speedY / this._savedSpeedsY.length : 0;\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) > 0.1 || Math.abs(speedY) > 0.1) &&\n (Math.abs(this._lastMovedX) > 2 || Math.abs(this._lastMovedY) > 2)) {\n this._inertiaInit(speedX, speedY);\n }\n if (this.IgxScrollInertiaDirection === 'vertical') {\n this.preventParentScroll(event, false);\n }\n }\n\n protected _smoothWheelScroll(delta) {\n this._nextY = this.IgxScrollInertiaScrollContainer.scrollTop;\n this._nextX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n let x = -1;\n let wheelInertialAnimation = null;\n const inertiaWheelStep = () => {\n if (x > 1) {\n cancelAnimationFrame(wheelInertialAnimation);\n return;\n }\n const nextScroll = ((-3 * x * x + 3) * delta * 2) * this.smoothingStep;\n if (this.IgxScrollInertiaDirection === 'vertical') {\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 x += 0.08 * (1 / this.smoothingDuration);\n wheelInertialAnimation = requestAnimationFrame(inertiaWheelStep);\n };\n wheelInertialAnimation = requestAnimationFrame(inertiaWheelStep);\n }\n\n protected _inertiaInit(speedX, speedY) {\n const stepModifer = this.inertiaStep;\n const inertiaDuration = this.inertiaDuration;\n let x = 0;\n this._nextX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n this._nextY = this.IgxScrollInertiaScrollContainer.scrollTop;\n\n // Sets timeout until executing next movement iteration of the inertia\n const inertiaStep = () => {\n if (x > 6) {\n cancelAnimationFrame(this._touchInertiaAnimID);\n return;\n }\n\n if (Math.abs(speedX) > Math.abs(speedY)) {\n x += 0.05 / (1 * inertiaDuration);\n } else {\n x += 0.05 / (1 * inertiaDuration);\n }\n\n if (x <= 1) {\n // We use constant quation to determine the offset without speed falloff befor x reaches 1\n if (Math.abs(speedY) <= Math.abs(speedX) * this.inertiaDeltaY) {\n this._nextX += 1 * speedX * 15 * stepModifer;\n }\n if (Math.abs(speedY) >= Math.abs(speedX) * this.inertiaDeltaX) {\n this._nextY += 1 * speedY * 15 * stepModifer;\n }\n } else {\n // We use the quation \"y = 2 / (x + 0.55) - 0.3\" to determine the offset\n if (Math.abs(speedY) <= Math.abs(speedX) * this.inertiaDeltaY) {\n this._nextX += Math.abs(2 / (x + 0.55) - 0.3) * speedX * 15 * stepModifer;\n }\n if (Math.abs(speedY) >= Math.abs(speedX) * this.inertiaDeltaX) {\n this._nextY += Math.abs(2 / (x + 0.55) - 0.3) * speedY * 15 * stepModifer;\n }\n }\n\n // If we have mixed environment we use the default behaviour. 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, min, max) {\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, destY) {\n // TODO Trigger scrolling event?\n const scrolledX = this._scrollToX(destX);\n const scrolledY = this._scrollToY(destY);\n\n return { x: scrolledX, y: scrolledY };\n }\n private _scrollToX(dest) {\n this.IgxScrollInertiaScrollContainer.scrollLeft = dest;\n }\n private _scrollToY(dest) {\n this.IgxScrollInertiaScrollContainer.scrollTop = dest;\n }\n}\n\n/**\n * @hidden\n */\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 @HostListener('scroll', ['$event'])\n public onScroll(event) {\n this.scrollAmount = event.target.scrollTop || event.target.scrollLeft;\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, DoCheck, EmbeddedViewRef, EventEmitter, Input, IterableChanges, IterableDiffer, IterableDiffers, NgZone, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, TemplateRef, TrackByFunction, ViewContainerRef, AfterViewInit, booleanAttribute, DOCUMENT, inject } 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\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, OnChanges, DoCheck, OnDestroy, AfterViewInit {\n private _viewContainer = inject(ViewContainerRef);\n protected _template = inject<TemplateRef<NgForOfContext<T>>>(TemplateRef);\n protected _differs = inject(IterableDiffers);\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\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 igxForOf: U & T[] | null;\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 * 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 /** 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.getScroll().scrollHeight;\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.getScroll().scrollTop + 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 > parseInt(this.igxForContainerSize, 10);\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.top = '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 }\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 /**\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\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 = parseInt(changes[containerSize].previousValue, 10);\n const newSize = parseInt(changes[containerSize].currentValue, 10);\n this._recalcOnContainerChange({prevSize, newSize});\n }\n }\n\n /**\n * @hidden\n */\n public ngDoCheck(): 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 = parseInt(this.igxForContainerSize, 10);\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 this.dc.instance._viewContainer.element.nativeElement.style.top = -(scrollOffset) + 'px';\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 = parseInt(this.igxForContainerSize, 10);\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 + parseInt(this.igxForContainerSize, 10), 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(parseInt(this.igxForContainerSize, 10));\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 = (parseInt(this.igxForContainerSize, 10));\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 + parseInt(this.igxForContainerSize, 10), 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 = parseInt(this.igxForContainerSize, 10);\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._embeddedViews.map(view =>\n view.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE) || view.rootNodes[0].nextElementSibling)[index - this.state.startIndex] : null;\n const rowHeight = this.getSizeAt(index);\n const containerSize = parseInt(this.igxForContainerSize, 10);\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 /**\n * @hidden\n * Function that recalculates and updates cache sizes.\n */\n public recalcUpdateSizes() {\n const dimension = this.igxForScrollOrientation === 'horizontal' ?\n this.igxForSizePropName : 'height';\n const diffs = [];\n let totalDiff = 0;\n const l = this._embeddedViews.length;\n const rNodes = this._embeddedViews.map(view =>\n view.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE) || view.rootNodes[0].nextElementSibling);\n for (let i = 0; i < l; i++) {\n const rNode = rNodes[i];\n if (rNode) {\n const height = window.getComputedStyle(rNode).getPropertyValue('height');\n const h = parseFloat(height) || parseInt(this.igxForItemSize, 10);\n const index = this.state.startIndex + i;\n if (!this.isRemote && !this.igxForOf[index]) {\n continue;\n }\n const margin = this.getMargin(rNode, dimension);\n const oldVal = this.individualSizeCache[index];\n const newVal = (dimension === 'height' ? h : rNode.clientWidth) + margin;\n this.individualSizeCache[index] = newVal;\n const currDiff = newVal - oldVal;\n diffs.push(currDiff);\n totalDiff += currDiff;\n this.sizesCache[index + 1] = (this.sizesCache[index] || 0) + newVal;\n }\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 const hSum = this.individualSizeCache.reduce(reducer);\n if (hSum > this._maxSize) {\n this._virtRatio = hSum / this._maxSize;\n }\n this.scrollComponent.size = Math.min(this.scrollComponent.size + totalDiff, this._maxSize);\n this._virtSize = hSum;\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 = parseInt(this.igxForContainerSize, 10);\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 (!parseInt(this.scrollComponent.nativeElement.style.height, 10)) {\n return;\n }\n if (!this._bScrollInternal) {\n this._calcVirtualScrollPosition(event.target.scrollTop);\n } else {\n this._bScrollInternal = false;\n }\n const prevStartIndex = this.state.startIndex;\n const scrollOffset = this.fixedUpdateAllElements(this._virtScrollPosition);\n\n this.dc.instance._viewContainer.element.nativeElement.style.top = -(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 /**\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 /**\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 (!parseInt(firstScrollChild.style.width, 10)) {\n return;\n }\n if (!this._bScrollInternal) {\n this._calcVirtualScrollPosition(event.target.scrollLeft);\n } else {\n this._bScrollInternal = false;\n }\n const prevStartIndex = this.state.startIndex;\n const scrLeft = event.target.scrollLeft;\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 this.sizesCache = [];\n this.individualSizeCache = [];\n this.sizesCache.push(0);\n const count = this.isRemote ? this.totalItemCount : items.length;\n for (i; i < count; i++) {\n size = this._getItemSize(items[i], dimension);\n this.individualSizeCache.push(size);\n totalSize += size;\n this.sizesCache.push(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 = parseInt(this.igxForContainerSize, 10);\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 parseInt(prevItem[dimension], 10);\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 = parseInt(this.igxForContainerSize, 10) > 0 ? this._calcSize() : 0;\n if (totalWidth <= parseInt(this.igxForContainerSize, 10)) {\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 <= parseInt(this.igxForContainerSize, 10)) {\n this.resetScrollPosition();\n }\n this.scrollComponent.nativeElement.style.height = parseInt(this.igxForContainerSize, 10) + '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 // 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\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 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 = parseInt(this.igxForContainerSize, 10);\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 : parseInt(this.igxForItemSize, 10) || 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' : 'top';\n this.dc.instance._viewContainer.element.nativeElement.style[dir] = -(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 this.recalcUpdateSizes();\n const offset = this.igxForScrollOrientation === 'horizontal' ?\n parseInt(this.dc.instance._viewContainer.element.nativeElement.style.left, 10) :\n parseInt(this.dc.instance._viewContainer.element.nativeElement.style.top, 10);\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 private 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, DoCheck {\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() {\n if (this.igxGridForOfVariableSizes && this.igxForScrollOrientation === 'vertical') {\n super.recalcUpdateSizes();\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 }\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 = parseInt(changes[containerSize].previousValue, 10);\n const newSize = parseInt(changes[containerSize].currentValue, 10);\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 ngDoCheck() {\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 if (!parseInt(this.scrollComponent.nativeElement.style.height, 10)) {\n return;\n }\n if (!this._bScrollInternal) {\n this._calcVirtualScrollPosition(event.target.scrollTop);\n } else {\n this._bScrollInternal = false;\n }\n const scrollOffset = this.fixedUpdateAllElements(this._virtScrollPosition);\n\n this.dc.instance._viewContainer.element.nativeElement.style.top = -(scrollOffset) + 'px';\n\n this._zone.onStable.pipe(first()).subscribe(this.recalcUpdateSizes.bind(this));\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 || !parseInt(firstScrollChild.style.width, 10)) {\n return;\n }\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 = parseInt(item[dimension], 10) || 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 this.sizesCache = [];\n this.individualSizeCache = [];\n this.sizesCache.push(0);\n const count = this.isRemote ? this.totalItemCount : items.length;\n for (i; i < count; i++) {\n size = this.getItemSize(items[i]);\n this.individualSizeCache.push(size);\n totalSize += size;\n this.sizesCache.push(totalSize);\n }\n return totalSize;\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.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(/[0123456789]/g, (num) => ({\n '1': '1', '2': '2', '3': '3', '4': '4', '5': '5',\n '6': '6', '7': '7', '8': '8', '9': '9', '0': '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 { Directive, ElementRef, HostListener, Input, NgZone, Renderer2, booleanAttribute, inject } from '@angular/core';\nimport { AnimationBuilder, style, animate } from '@angular/animations';\n\n@Directive({\n selector: '[igxRipple]',\n standalone: true\n})\nexport class IgxRippleDirective {\n protected builder = inject(AnimationBuilder);\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) {\n this.zone.runOutsideAngular(() => this._ripple(event));\n }\n\n private setStyles(rippleElement: HTMLElement, styleParams: any) {\n this.renderer.addClass(rippleElement, this.rippleElementClass);\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) {\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 = this.builder.build([\n style({ opacity: 0.5, transform: 'scale(.3)' }),\n animate(this.rippleDuration, style({ opacity: 0, transform: 'scale(2)' }))\n ]).create(rippleElement);\n\n this.animationQueue.push(animation);\n\n animation.onDone(() => {\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 animation.play();\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 this._lastSearchInfo.searchText = '';\n this._lastSearchInfo.matchCount = 0;\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 { Directive, EmbeddedViewRef, Input, OnChanges, ChangeDetectorRef, SimpleChange, SimpleChanges, TemplateRef, ViewContainerRef, NgZone, Output, EventEmitter, inject } from '@angular/core';\n\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 public _viewContainerRef = inject(ViewContainerRef);\n private _zone = inject(NgZone);\n public cdr = inject(ChangeDetectorRef);\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 private _viewRef !: EmbeddedViewRef<any>;\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 _embeddedViewsMap: Map<string, Map<any, EmbeddedViewRef<any>>> = new Map();\n\n public ngOnChanges(changes: SimpleChanges) {\n const actionType: TemplateOutletAction = this._getActionType(changes);\n switch (actionType) {\n case TemplateOutletAction.CreateView: this._recreateView(); break;\n case TemplateOutletAction.MoveView: this._moveView(); break;\n case TemplateOutletAction.UseCachedView: this._useCachedView(); break;\n case TemplateOutletAction.UpdateViewContext: this._updateExistingContext(this.igxTemplateOutletContext); break;\n }\n }\n\n public cleanCache() {\n this._embeddedViewsMap.forEach((collection) => {\n collection.forEach((item => {\n if (!item.destroyed) {\n item.destroy();\n }\n }));\n collection.clear();\n });\n this._embeddedViewsMap.clear();\n }\n\n public cleanView(tmplID) {\n const embViewCollection = this._embeddedViewsMap.get(tmplID.type);\n const embView = embViewCollection?.get(tmplID.id);\n if (embView) {\n embView.destroy();\n this._embeddedViewsMap.get(tmplID.type).delete(tmplID.id);\n }\n }\n\n private _recreateView() {\n const prevIndex = this._viewRef ? this._viewContainerRef.indexOf(this._viewRef) : -1;\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 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 tmplId = this.igxTemplateOutletContext['templateID'];\n if (tmplId) {\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 const resCollection = this._embeddedViewsMap.get(this.igxTemplateOutletContext['templateID'].type);\n const res = resCollection?.get(this.igxTemplateOutletContext['templateID'].id);\n if (!res) {\n this._embeddedViewsMap.set(this.igxTemplateOutletContext['templateID'].type,\n new Map([[this.igxTemplateOutletContext['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 if (view !== this._viewRef) {\n if (owner._viewContainerRef.indexOf(view) !== -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(owner._viewContainerRef.indexOf(view));\n }\n if (this._viewRef && this._viewContainerRef.indexOf(this._viewRef) !== -1) {\n this.beforeViewDetach.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n this._viewContainerRef.detach(this._viewContainerRef.indexOf(this._viewRef));\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 private _useCachedView() {\n // use view for specific template cached in the current template outlet\n const tmplID = this.igxTemplateOutletContext['templateID'];\n const cachedView = tmplID ?\n this._embeddedViewsMap.get(tmplID.type)?.get(tmplID.id) :\n null;\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 = this._cloneContext(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 prevCtxKeys = Object.keys(ctxChange.previousValue || {});\n const currCtxKeys = Object.keys(ctxChange.currentValue || {});\n\n if (prevCtxKeys.length === currCtxKeys.length) {\n for (const propName of currCtxKeys) {\n if (prevCtxKeys.indexOf(propName) === -1) {\n return true;\n }\n }\n return false;\n } else {\n return true;\n }\n }\n\n private _updateExistingContext(ctx: any): void {\n for (const propName of Object.keys(ctx)) {\n this._viewRef.context[propName] = this.igxTemplateOutletContext[propName];\n }\n }\n\n private _cloneContext(ctx: any): any {\n const clone = {};\n for (const propName of Object.keys(ctx)) {\n clone[propName] = ctx[propName];\n }\n return clone;\n }\n\n private _getActionType(changes: SimpleChanges) {\n const movedView = this.igxTemplateOutletContext['moveView'];\n const tmplID = this.igxTemplateOutletContext['templateID'];\n const cachedView = tmplID ?\n this._embeddedViewsMap.get(tmplID.type)?.get(tmplID.id) :\n null;\n const shouldRecreate = this._shouldRecreateView(changes);\n if (movedView) {\n // view is moved from external source\n return TemplateOutletAction.MoveView;\n } else if (shouldRecreate && cachedView) {\n // should recreate (template or context change) and there is a matching template in cache\n return TemplateOutletAction.UseCachedView;\n } else if (!this._viewRef || shouldRecreate) {\n // no view or should recreate\n return TemplateOutletAction.CreateView;\n } else if (this.igxTemplateOutletContext) {\n // has context, update context\n return TemplateOutletAction.UpdateViewContext;\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\n/**\n * @hidden\n */\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 /** Provides reference to the owner component (from IBaseEventArgs) */\n owner?: any;\n /* blazorSuppress */\n event?: Event;\n}\n\nexport interface ToggleViewCancelableEventArgs extends ToggleViewEventArgs, CancelableBrowserEventArgs {\n cancel: boolean;\n}\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, DOCUMENT, 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';\nimport { Subject, takeUntil } from 'rxjs';\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 _destroy$ = new Subject<boolean>();\n private _document = inject(DOCUMENT);\n private _renderer = inject(Renderer2);\n private _platformUtil = inject(PlatformUtil);\n\n /** @hidden */\n constructor() {\n super();\n\n this.onDocumentTouchStart = this.onDocumentTouchStart.bind(this);\n this.opening.pipe(takeUntil(this._destroy$)).subscribe(() => {\n this._document.addEventListener('touchstart', this.onDocumentTouchStart, { passive: true });\n });\n this.closed.pipe(takeUntil(this._destroy$)).subscribe(() => {\n this._document.removeEventListener('touchstart', this.onDocumentTouchStart);\n });\n }\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 this._document.removeEventListener('touchstart', this.onDocumentTouchStart);\n this._destroy$.next(true);\n this._destroy$.complete();\n\n if (this.arrow) {\n this._removeArrow();\n }\n }\n\n /**\n * @hidden\n */\n @HostListener('mouseenter')\n public onMouseEnter() {\n this.tooltipTarget?.onMouseEnter();\n }\n\n /**\n * @hidden\n */\n @HostListener('mouseleave')\n public onMouseLeave() {\n this.tooltipTarget?.onMouseLeave();\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 private onDocumentTouchStart(event) {\n this.tooltipTarget?.onDocumentTouchStart(event);\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 /** 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","import {\n Directive, OnInit, OnDestroy, Output, ViewContainerRef, HostListener,\n Input, EventEmitter, booleanAttribute, inject, TemplateRef, ComponentRef, Renderer2,\n EnvironmentInjector,\n createComponent,\n AfterViewInit,\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 { 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 private _viewContainerRef = inject(ViewContainerRef);\n private _renderer = inject(Renderer2);\n private _envInjector = inject(EnvironmentInjector);\n\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 * @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 * @hidden\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 _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\n /**\n * @hidden\n */\n @HostListener('click')\n public override onClick() {\n if (!this.target.collapsed) {\n this._hideOnInteraction();\n } else if (this.target.timeoutId) {\n clearTimeout(this.target.timeoutId);\n this.target.timeoutId = null;\n }\n }\n\n /**\n * @hidden\n */\n @HostListener('mouseenter')\n public onMouseEnter() {\n this._checksBeforeShowing(() => this._showOnInteraction());\n }\n\n /**\n * @hidden\n */\n @HostListener('mouseleave')\n public onMouseLeave() {\n if (this.tooltipDisabled) {\n return;\n }\n\n this._checkOutletAndOutsideClick();\n this._hideOnInteraction();\n }\n\n /**\n * @hidden\n */\n public onTouchStart() {\n this._checksBeforeShowing(() => this._showOnInteraction());\n }\n\n /**\n * @hidden\n */\n public onDocumentTouchStart(event) {\n if (this.tooltipDisabled || this?.target?.tooltipTarget !== this) {\n return;\n }\n\n if (this.nativeElement !== event.target &&\n !this.nativeElement.contains(event.target)\n ) {\n this._hideOnInteraction();\n }\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.nativeElement.addEventListener('touchstart', this.onTouchStart = this.onTouchStart.bind(this), { passive: true });\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.nativeElement.removeEventListener('touchstart', this.onTouchStart);\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 _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 } 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 _locale = inject(LOCALE_ID);\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;\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._locale;\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._displayFormat)\n || DateTimeUtil.getDefaultInputFormat(this.locale, this.defaultFormatType);\n this.setMask(this.inputFormat);\n }\n\n private 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 = DateTimeUtil.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);\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 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","takeUntil","first","i1.IgxTooltipDirective","i2.IgxTooltipTargetDirective"],"mappings":"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"}