{"version":3,"file":"igniteui-angular-core.mjs","sources":["../../../projects/igniteui-angular/core/src/core/navigation/nav.service.ts","../../../projects/igniteui-angular/core/src/core/navigation/directives.ts","../../../projects/igniteui-angular/core/src/core/dates/dateRange.ts","../../../projects/igniteui-angular/core/src/core/enums.ts","../../../projects/igniteui-angular/core/src/core/utils.ts","../../../projects/igniteui-angular/core/src/core/selection.ts","../../../projects/igniteui-angular/core/src/core/edit-provider.ts","../../../projects/igniteui-angular/core/src/core/touch.ts","../../../projects/igniteui-angular/core/src/core/touch-annotations.ts","../../../projects/igniteui-angular/core/src/grid-column-actions/token.ts","../../../projects/igniteui-angular/core/src/date-common/picker-icons.common.ts","../../../projects/igniteui-angular/core/src/date-common/types.ts","../../../projects/igniteui-angular/core/src/date-common/date-parts.ts","../../../projects/igniteui-angular/core/src/data-operations/grid-types.ts","../../../projects/igniteui-angular/core/src/date-common/util/date-time.util.ts","../../../projects/igniteui-angular/core/src/date-common/util/model.ts","../../../projects/igniteui-angular/core/src/date-common/util/helpers.ts","../../../projects/igniteui-angular/core/src/data-operations/data-clone-strategy.ts","../../../projects/igniteui-angular/core/src/data-operations/filtering-expression.interface.ts","../../../projects/igniteui-angular/core/src/data-operations/filtering-condition.ts","../../../projects/igniteui-angular/core/src/data-operations/expressions-tree-util.ts","../../../projects/igniteui-angular/core/src/data-operations/filtering-expressions-tree.ts","../../../projects/igniteui-angular/core/src/data-operations/paging-state.interface.ts","../../../projects/igniteui-angular/core/src/services/transaction/transaction.ts","../../../projects/igniteui-angular/core/src/data-operations/sorting-strategy.ts","../../../projects/igniteui-angular/core/src/data-operations/operations.ts","../../../projects/igniteui-angular/core/src/data-operations/grid-sorting-strategy.ts","../../../projects/igniteui-angular/core/src/data-operations/merge-strategy.ts","../../../projects/igniteui-angular/core/src/data-operations/data-util.ts","../../../projects/igniteui-angular/core/src/data-operations/filtering-strategy.ts","../../../projects/igniteui-angular/core/src/data-operations/tree-grid-filtering-strategy.ts","../../../projects/igniteui-angular/core/src/data-operations/groupby-record.interface.ts","../../../projects/igniteui-angular/core/src/core/i18n/formatters/formatter-base.ts","../../../projects/igniteui-angular/core/src/data-operations/pipes.ts","../../../projects/igniteui-angular/core/src/services/animation/angular-animation-player.ts","../../../projects/igniteui-angular/core/src/services/animation/angular-animation-service.ts","../../../projects/igniteui-angular/core/src/services/direction/directionality.ts","../../../projects/igniteui-angular/core/src/services/overlay/utilities.ts","../../../projects/igniteui-angular/core/src/services/overlay/position/connected-positioning-strategy.ts","../../../projects/igniteui-angular/core/src/services/overlay/position/base-fit-position-strategy.ts","../../../projects/igniteui-angular/core/src/services/overlay/position/auto-position-strategy.ts","../../../projects/igniteui-angular/core/src/services/overlay/position/global-position-strategy.ts","../../../projects/igniteui-angular/core/src/services/overlay/position/container-position-strategy.ts","../../../projects/igniteui-angular/core/src/services/overlay/position/elastic-position-strategy.ts","../../../projects/igniteui-angular/core/src/services/overlay/scroll/scroll-strategy.ts","../../../projects/igniteui-angular/core/src/services/overlay/scroll/NoOpScrollStrategy.ts","../../../projects/igniteui-angular/core/src/services/overlay/overlay.ts","../../../projects/igniteui-angular/core/src/services/overlay/position/index.ts","../../../projects/igniteui-angular/core/src/services/overlay/scroll/absolute-scroll-strategy.ts","../../../projects/igniteui-angular/core/src/services/overlay/scroll/block-scroll-strategy.ts","../../../projects/igniteui-angular/core/src/services/overlay/scroll/close-scroll-strategy.ts","../../../projects/igniteui-angular/core/src/services/overlay/scroll/index.ts","../../../projects/igniteui-angular/core/src/services/transaction/base-transaction.ts","../../../projects/igniteui-angular/core/src/services/transaction/igx-transaction.ts","../../../projects/igniteui-angular/core/src/services/transaction/igx-hierarchical-transaction.ts","../../../projects/igniteui-angular/core/src/services/transaction/transaction-factory.service.ts","../../../projects/igniteui-angular/core/src/services/theme/theme.token.ts","../../../projects/igniteui-angular/core/src/services/public_api.ts","../../../projects/igniteui-angular/core/src/performance.service.ts","../../../projects/igniteui-angular/core/src/core/i18n/resources.ts","../../../projects/igniteui-angular/core/src/core/i18n/formatters/formatter-intl.ts","../../../projects/igniteui-angular/core/src/core/i18n/action-strip-resources.ts","../../../projects/igniteui-angular/core/src/core/i18n/banner-resources.ts","../../../projects/igniteui-angular/core/src/core/i18n/calendar-resources.ts","../../../projects/igniteui-angular/core/src/core/i18n/carousel-resources.ts","../../../projects/igniteui-angular/core/src/core/i18n/chip-resources.ts","../../../projects/igniteui-angular/core/src/core/i18n/combo-resources.ts","../../../projects/igniteui-angular/core/src/core/i18n/date-picker-resources.ts","../../../projects/igniteui-angular/core/src/core/i18n/date-range-picker-resources.ts","../../../projects/igniteui-angular/core/src/core/i18n/grid-resources.ts","../../../projects/igniteui-angular/core/src/core/i18n/input-resources.ts","../../../projects/igniteui-angular/core/src/core/i18n/list-resources.ts","../../../projects/igniteui-angular/core/src/core/i18n/paginator-resources.ts","../../../projects/igniteui-angular/core/src/core/i18n/query-builder-resources.ts","../../../projects/igniteui-angular/core/src/core/i18n/time-picker-resources.ts","../../../projects/igniteui-angular/core/src/core/i18n/tree-resources.ts","../../../projects/igniteui-angular/core/src/core/global-types.ts","../../../projects/igniteui-angular/core/src/public_api.ts","../../../projects/igniteui-angular/core/src/igniteui-angular-core.ts"],"sourcesContent":["import { IToggleView } from './IToggleView';\nimport { Injectable } from '@angular/core';\n\n/**\n * Common service to be injected between components where those implementing common\n * ToggleView interface can register and toggle directives can call their methods.\n * TODO: Track currently active? Events?\n */\n@Injectable({ providedIn: 'root' })\nexport class IgxNavigationService {\n    private navs: { [id: string]: IToggleView };\n\n    constructor() {\n        this.navs = {};\n    }\n\n    public add(id: string, navItem: IToggleView) {\n        this.navs[id] = navItem;\n    }\n\n    public remove(id: string) {\n        delete this.navs[id];\n    }\n\n    public get(id: string): IToggleView {\n        if (id) {\n            return this.navs[id];\n        }\n    }\n\n    public toggle(id: string, ...args) {\n        if (this.navs[id]) {\n            return this.navs[id].toggle(...args);\n        }\n    }\n    public open(id: string, ...args) {\n        if (this.navs[id]) {\n            return this.navs[id].open(...args);\n        }\n    }\n    public close(id: string, ...args) {\n        if (this.navs[id]) {\n            return this.navs[id].close(...args);\n        }\n    }\n}\n","import { Directive, HostListener, Input, inject } from '@angular/core';\nimport { IgxNavigationService } from './nav.service';\n\n/**\n * Directive that can toggle targets through provided NavigationService.\n *\n * Usage:\n * ```\n * <button type=\"button\" igxNavToggle=\"ID\">Toggle</button>\n * ```\n * Where the `ID` matches the ID of compatible `IToggleView` component.\n */\n@Directive({\n    selector: '[igxNavToggle]',\n    standalone: true\n})\nexport class IgxNavigationToggleDirective {\n    @Input('igxNavToggle') private target;\n\n    public state: IgxNavigationService;\n\n    constructor() {\n        const nav = inject(IgxNavigationService);\n\n        this.state = nav;\n    }\n\n    @HostListener('click')\n    public toggleNavigationDrawer() {\n        this.state.toggle(this.target, true);\n    }\n}\n\n/**\n * Directive that can close targets through provided NavigationService.\n *\n * Usage:\n * ```\n * <button type=\"button\" igxNavClose=\"ID\">Close</button>\n * ```\n * Where the `ID` matches the ID of compatible `IToggleView` component.\n */\n@Directive({\n    selector: '[igxNavClose]',\n    standalone: true\n})\nexport class IgxNavigationCloseDirective {\n    @Input('igxNavClose') private target;\n\n    public state: IgxNavigationService;\n\n    constructor() {\n        const nav = inject(IgxNavigationService);\n\n        this.state = nav;\n    }\n\n    @HostListener('click')\n    public closeNavigationDrawer() {\n        this.state.close(this.target, true);\n    }\n}\n","export interface DateRangeDescriptor {\n    type: DateRangeType;\n    dateRange?: Date[];\n}\n\nexport enum DateRangeType {\n    After,\n    Before,\n    Between,\n    Specific,\n    Weekdays,\n    Weekends\n}\n","/**\n * @hidden @internal\n *\n * Enumeration representing the possible predefined size options of the grid.\n * - Small: This is the smallest size with 32px row height. Left and Right paddings are 12px. Minimal column width is 56px.\n * - Medium: This is the middle size with 40px row height. Left and Right paddings are 16px. Minimal column width is 64px.\n * - Large:  this is the default Grid size with the lowest intense and row height equal to 50px. Left and Right paddings are 24px. Minimal column width is 80px.\n */\nexport const Size = {\n    Small: '1',\n    Medium: '2',\n    Large: '3'\n} as const;\nexport type Size = (typeof Size)[keyof typeof Size];\n\n\n/**\n * Enumeration representing the days of the week.\n */\nexport enum WEEKDAYS {\n    SUNDAY,\n    MONDAY,\n    TUESDAY,\n    WEDNESDAY,\n    THURSDAY,\n    FRIDAY,\n    SATURDAY\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Injectable, InjectionToken, PLATFORM_ID, inject } from '@angular/core';\nimport { mergeWith } from 'lodash-es';\nimport { NEVER, Observable } from 'rxjs';\nimport { isDevMode } from '@angular/core';\nimport type { IgxTheme } from '../services/theme/theme.token';\n\n/** @hidden @internal */\nexport const ELEMENTS_TOKEN = /*@__PURE__*/new InjectionToken<boolean>('elements environment');\n\n/**\n * @hidden\n */\nexport const showMessage = (message: string, isMessageShown: boolean): boolean => {\n    if (!isMessageShown && isDevMode()) {\n        console.warn(message);\n    }\n\n    return true;\n};\n\n/**\n *\n * @hidden @internal\n */\nexport const getResizeObserver = () => globalThis.window?.ResizeObserver;\n\n/**\n * @hidden\n */\nexport function cloneArray<T>(array: T[], deep = false): T[] {\n    return deep ? (array ?? []).map(cloneValue) : (array ?? []).slice();\n}\n\n/**\n * @hidden\n */\nexport function areEqualArrays<T>(arr1: T[], arr2: T[]): boolean {\n    if (arr1.length !== arr2.length) return false;\n        for (let i = 0; i < arr1.length; i++) {\n          if (arr1[i] !== arr2[i]) return false;\n        }\n        return true;\n}\n\n/**\n * Doesn't clone leaf items\n *\n * @hidden\n */\nexport const cloneHierarchicalArray = (array: any[], childDataKey: any): any[] => {\n    const result: any[] = [];\n    if (!array) {\n        return result;\n    }\n\n    for (const item of array) {\n        const clonedItem = cloneValue(item);\n        if (Array.isArray(item[childDataKey])) {\n            clonedItem[childDataKey] = cloneHierarchicalArray(clonedItem[childDataKey], childDataKey);\n        }\n        result.push(clonedItem);\n    }\n    return result;\n};\n\n/**\n * Creates an object with prototype from provided source and copies\n * all properties descriptors from provided source\n * @param obj Source to copy prototype and descriptors from\n * @returns New object with cloned prototype and property descriptors\n */\nexport const copyDescriptors = (obj) => {\n    if (obj) {\n        return Object.create(\n            Object.getPrototypeOf(obj),\n            Object.getOwnPropertyDescriptors(obj)\n        );\n    }\n}\n\n\n/**\n * Deep clones all first level keys of Obj2 and merges them to Obj1\n *\n * @param obj1 Object to merge into\n * @param obj2 Object to merge from\n * @returns Obj1 with merged cloned keys from Obj2\n * @hidden\n */\nexport const mergeObjects = (obj1: any, obj2: any): any => mergeWith(obj1, obj2, (objValue, srcValue) => {\n    if (Array.isArray(srcValue)) {\n        return objValue = srcValue;\n    }\n});\n\n/**\n * Creates deep clone of provided value.\n * Supports primitive values, dates and objects.\n * If passed value is array returns shallow copy of the array.\n *\n * @param value value to clone\n * @returns Deep copy of provided value\n * @hidden\n */\nexport const cloneValue = (value: any): any => {\n    if (isDate(value)) {\n        return new Date(value.getTime());\n    }\n    if (Array.isArray(value)) {\n        return value.slice();\n    }\n\n    if (value instanceof Map || value instanceof Set) {\n        return value;\n    }\n\n    if (isObject(value)) {\n        const result = {};\n\n        for (const key of Object.keys(value)) {\n            if (key === \"externalObject\") {\n                continue;\n            }\n            result[key] = cloneValue(value[key]);\n        }\n        return result;\n    }\n    return value;\n};\n\n/**\n * Creates deep clone of provided value.\n * Supports primitive values, dates and objects.\n * If passed value is array returns shallow copy of the array.\n * For Objects property values and references are cached and reused.\n * This allows for circular references to same objects.\n *\n * @param value value to clone\n * @param cache map of cached values already parsed\n * @returns Deep copy of provided value\n * @hidden\n */\nexport const cloneValueCached = (value: any, cache: Map<any, any>): any => {\n    if (isDate(value)) {\n        return new Date(value.getTime());\n    }\n    if (Array.isArray(value)) {\n        return [...value];\n    }\n\n    if (value instanceof Map || value instanceof Set) {\n        return value;\n    }\n\n    if (isObject(value)) {\n        if (cache.has(value)) {\n            return cache.get(value);\n        }\n\n        const result = {};\n        cache.set(value, result);\n\n        for (const key of Object.keys(value)) {\n            result[key] = cloneValueCached(value[key], cache);\n        }\n        return result;\n    }\n    return value;\n};\n\n/**\n * Parse provided input to Date.\n *\n * @param value input to parse\n * @returns Date if parse succeed or null\n * @hidden\n */\nexport const parseDate = (value: any): Date | null => {\n    // if value is Invalid Date return null\n    if (isDate(value)) {\n        return !isNaN(value.getTime()) ? value : null;\n    }\n    return value ? new Date(value) : null;\n};\n\n/**\n * Returns an array with unique dates only.\n *\n * @param columnValues collection of date values (might be numbers or ISO 8601 strings)\n * @returns collection of unique dates.\n * @hidden\n */\nexport const uniqueDates = (columnValues: any[]) => columnValues.reduce((a, c) => {\n    if (!a.cache[c.label]) {\n        a.result.push(c);\n    }\n    a.cache[c.label] = true;\n    return a;\n}, { result: [], cache: {} }).result;\n\n/**\n * Checks if provided variable is Object\n *\n * @param value Value to check\n * @returns true if provided variable is Object\n * @hidden\n */\nexport const isObject = (value: any): boolean => !!(value && value.toString() === '[object Object]');\n\n/**\n * Checks if provided variable is Date\n *\n * @param value Value to check\n * @returns true if provided variable is Date\n * @hidden\n */\nexport const isDate = (value: any): value is Date => {\n    return Object.prototype.toString.call(value) === \"[object Date]\";\n}\n\n/**\n * Checks if the two passed arguments are equal\n * Currently supports date objects\n *\n * @param obj1\n * @param obj2\n * @returns: `boolean`\n * @hidden\n */\nexport const isEqual = (obj1, obj2): boolean => {\n    if (isDate(obj1) && isDate(obj2)) {\n        return obj1.getTime() === obj2.getTime();\n    }\n    return obj1 === obj2;\n};\n\n/**\n * Limits a number to a range between a minimum and a maximum value.\n *\n * @param number\n * @param min\n * @param max\n * @returns: `number`\n * @hidden\n */\nexport const clamp = (number: number, min: number, max: number) =>\n    Math.max(min, Math.min(number, max));\n\n\n/**\n * Utility service taking care of various utility functions such as\n * detecting browser features, general cross browser DOM manipulation, etc.\n *\n * @hidden @internal\n */\n@Injectable({ providedIn: 'root' })\nexport class PlatformUtil {\n    private platformId = inject(PLATFORM_ID);\n\n    public isBrowser: boolean = isPlatformBrowser(this.platformId);\n    public isIOS = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) && !('MSStream' in window);\n    public isSafari = this.isBrowser && /Safari[\\/\\s](\\d+\\.\\d+)/.test(navigator.userAgent);\n    public isFirefox = this.isBrowser && /Firefox[\\/\\s](\\d+\\.\\d+)/.test(navigator.userAgent);\n    public isEdge = this.isBrowser && /Edge[\\/\\s](\\d+\\.\\d+)/.test(navigator.userAgent);\n    public isChromium = this.isBrowser && (/Chrom|e?ium/g.test(navigator.userAgent) ||\n        /Google Inc/g.test(navigator.vendor)) && !/Edge/g.test(navigator.userAgent);\n    public browserVersion = this.isBrowser ? parseFloat(navigator.userAgent.match(/Version\\/([\\d.]+)/)?.at(1)) : 0;\n\n    /** @hidden @internal */\n    public isElements = inject(ELEMENTS_TOKEN, { optional: true });\n\n    public KEYMAP = {\n        ENTER: 'Enter',\n        SPACE: ' ',\n        ESCAPE: 'Escape',\n        ARROW_DOWN: 'ArrowDown',\n        ARROW_UP: 'ArrowUp',\n        ARROW_LEFT: 'ArrowLeft',\n        ARROW_RIGHT: 'ArrowRight',\n        END: 'End',\n        HOME: 'Home',\n        PAGE_DOWN: 'PageDown',\n        PAGE_UP: 'PageUp',\n        F2: 'F2',\n        TAB: 'Tab',\n        SEMICOLON: ';',\n        // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values#editing_keys\n        DELETE: 'Delete',\n        BACKSPACE: 'Backspace',\n        CONTROL: 'Control',\n        X: 'x',\n        Y: 'y',\n        Z: 'z'\n    } as const;\n\n    /**\n     * @hidden @internal\n     * Returns the actual size of the node content, using Range\n     * ```typescript\n     * let range = document.createRange();\n     * let column = this.grid.columnList.filter(c => c.field === 'ID')[0];\n     *\n     * let size = getNodeSizeViaRange(range, column.cells[0].nativeElement);\n     *\n     * @remarks\n     * The last parameter is useful when the size of the element to measure is modified by a\n     * parent element that has explicit size. In such cases the calculated size is never lower\n     * and the function may instead remove the parent size while measuring to get the correct value.\n     * ```\n     */\n    public getNodeSizeViaRange(range: Range, node: HTMLElement, sizeHoldingNode?: HTMLElement) {\n        let overflow = null;\n        let nodeStyles: string[];\n\n        if (!this.isFirefox) {\n            overflow = node.style.overflow;\n            // we need that hack - otherwise content won't be measured correctly in IE/Edge\n            node.style.overflow = 'visible';\n        }\n\n        if (sizeHoldingNode) {\n            const style = sizeHoldingNode.style;\n            nodeStyles = [style.width, style.minWidth, style.flexBasis];\n            style.width = '';\n            style.minWidth = '';\n            style.flexBasis = '';\n        }\n\n        range.selectNodeContents(node);\n        const scale = node.getBoundingClientRect().width / node.offsetWidth;\n        const width = range.getBoundingClientRect().width / scale;\n\n        if (!this.isFirefox) {\n            // we need that hack - otherwise content won't be measured correctly in IE/Edge\n            node.style.overflow = overflow;\n        }\n\n        if (sizeHoldingNode) {\n            sizeHoldingNode.style.width = nodeStyles[0];\n            sizeHoldingNode.style.minWidth = nodeStyles[1];\n            sizeHoldingNode.style.flexBasis = nodeStyles[2];\n        }\n\n        return width;\n    }\n\n\n    /**\n     * Returns true if the current keyboard event is an activation key (Enter/Space bar)\n     *\n     * @hidden\n     * @internal\n     *\n     * @memberof PlatformUtil\n     */\n    public isActivationKey(event: KeyboardEvent) {\n        return event.key === this.KEYMAP.ENTER || event.key === this.KEYMAP.SPACE;\n    }\n\n    /**\n     * Returns true if the current keyboard event is a combination that closes the filtering UI of the grid. (Escape/Ctrl+Shift+L)\n     *\n     * @hidden\n     * @internal\n     * @param event\n     * @memberof PlatformUtil\n     */\n    public isFilteringKeyCombo(event: KeyboardEvent) {\n        return event.key === this.KEYMAP.ESCAPE || (event.ctrlKey && event.shiftKey && event.key.toLowerCase() === 'l');\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isLeftClick(event: PointerEvent | MouseEvent) {\n        return event.button === 0;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isNavigationKey(key: string) {\n        return [\n            this.KEYMAP.HOME, this.KEYMAP.END, this.KEYMAP.SPACE,\n            this.KEYMAP.ARROW_DOWN, this.KEYMAP.ARROW_LEFT, this.KEYMAP.ARROW_RIGHT, this.KEYMAP.ARROW_UP\n        ].includes(key as any);\n    }\n}\n\n/**\n * @hidden\n */\nexport const flatten = (arr: any[]) => {\n    let result = [];\n\n    arr.forEach(el => {\n        result.push(el);\n        if (el.children) {\n            const children = Array.isArray(el.children) ? el.children : el.children.toArray();\n            result = result.concat(flatten(children));\n        }\n    });\n    return result;\n};\n\nexport interface CancelableEventArgs {\n    /**\n     * Provides the ability to cancel the event.\n     */\n    cancel: boolean;\n}\n\nexport interface IBaseEventArgs {\n    /**\n     * Provides reference to the owner component.\n     */\n    owner?: any;\n}\n\nexport interface CancelableBrowserEventArgs extends CancelableEventArgs {\n    /* blazorSuppress */\n    /** Browser event */\n    event?: Event;\n}\n\nexport interface IBaseCancelableBrowserEventArgs extends CancelableBrowserEventArgs, IBaseEventArgs { }\n\nexport interface IBaseCancelableEventArgs extends CancelableEventArgs, IBaseEventArgs { }\n\nexport const NAVIGATION_KEYS = new Set([\n    'down',\n    'up',\n    'left',\n    'right',\n    'arrowdown',\n    'arrowup',\n    'arrowleft',\n    'arrowright',\n    'home',\n    'end',\n    'space',\n    'spacebar',\n    ' '\n]);\n\n/**\n * @hidden\n * @internal\n *\n * Creates a new ResizeObserver on `target` and returns it as an Observable.\n * Run the resizeObservable outside angular zone, because it patches the MutationObserver which causes an infinite loop.\n * Related issue: https://github.com/angular/angular/issues/31712\n */\nexport const resizeObservable = (target: HTMLElement): Observable<ResizeObserverEntry[]> => {\n    const resizeObserver = getResizeObserver();\n    // check whether we are on server env or client env\n    if (resizeObserver) {\n        return new Observable((observer) => {\n            const instance = new resizeObserver((entries: ResizeObserverEntry[]) => {\n                observer.next(entries);\n            });\n            instance.observe(target);\n            const unsubscribe = () => instance.disconnect();\n            return unsubscribe;\n        });\n    }\n    // if on a server env return a empty observable that does not complete immediately\n    return NEVER;\n\n}\n\n/**\n * @hidden\n * @internal\n *\n * Compares two maps.\n */\nexport const compareMaps = (map1: Map<any, any>, map2: Map<any, any>): boolean => {\n    if (!map2) {\n        return !map1;\n    }\n    if (map1.size !== map2.size) {\n        return false;\n    }\n    let match = true;\n    const keys = Array.from(map2.keys());\n    for (const key of keys) {\n        if (map1.has(key)) {\n            match = map1.get(key) === map2.get(key);\n        } else {\n            match = false;\n        }\n        if (!match) {\n            break;\n        }\n    }\n    return match;\n};\n\nfunction _isObject(entity: unknown): entity is object {\n    return entity != null && typeof entity === 'object';\n}\n\nexport function columnFieldPath(path?: string): string[] {\n    return path?.split('.') ?? [];\n}\n\n/**\n * Given a property access path in the format `x.y.z` resolves and returns\n * the value of the `z` property in the passed object.\n *\n * @hidden\n * @internal\n */\nexport function resolveNestedPath<T extends object, U>(obj: unknown, pathParts: string[], defaultValue?: U): T | U | undefined {\n    if (!_isObject(obj) || pathParts.length < 1) {\n        return defaultValue;\n    }\n\n    let current = obj;\n\n    for (const key of pathParts) {\n        if (_isObject(current) && key in (current as T)) {\n            current = current[key];\n        } else {\n            return defaultValue;\n        }\n    }\n\n    return current as T;\n}\n\n/**\n *\n * Given a property access path in the format `x.y.z` and a value\n * this functions builds and returns an object following the access path.\n *\n * @example\n * ```typescript\n * console.log('x.y.z.', 42);\n * >> { x: { y: { z: 42 } } }\n * ```\n *\n * @hidden\n * @internal\n */\nexport const reverseMapper = (path: string, value: any) => {\n    const obj = {};\n    const parts = path?.split('.') ?? [];\n\n    let _prop = parts.shift();\n    let mapping: any;\n\n    // Initial binding for first level bindings\n    obj[_prop] = value;\n    mapping = obj;\n\n    parts.forEach(prop => {\n        // Start building the hierarchy\n        mapping[_prop] = {};\n        // Go down a level\n        mapping = mapping[_prop];\n        // Bind the value and move the key\n        mapping[prop] = value;\n        _prop = prop;\n    });\n\n    return obj;\n};\n\nexport const isConstructor = (ref: any) => typeof ref === 'function' && Boolean(ref.prototype) && Boolean(ref.prototype.constructor);\n\n/** Converts pixel values to their rem counterparts for a base value */\nexport const rem = (value: number | string) => {\n    const base = parseFloat(globalThis.window?.getComputedStyle(globalThis.document?.documentElement).getPropertyValue('--ig-base-font-size'))\n    return Number(value) / base;\n}\n\n/** Get the size of the component as derived from the CSS size variable */\nexport function getComponentSize(el: Element) {\n    return globalThis.window?.getComputedStyle(el).getPropertyValue('--component-size');\n}\n\n/** Get the first item in an array */\nexport function first<T>(arr: T[]) {\n    return arr.at(0) as T;\n}\n\n/** Get the last item in an array */\nexport function last<T>(arr: T[]) {\n    return arr.at(-1) as T;\n}\n\n/** Calculates the modulo of two numbers, ensuring a non-negative result. */\nexport function modulo(n: number, d: number) {\n    return ((n % d) + d) % d;\n}\n\n/**\n * Splits an array into chunks of length `size` and returns a generator\n * yielding each chunk.\n * The last chunk may contain less than `size` elements.\n *\n * @example\n * ```typescript\n * const arr = [0,1,2,3,4,5,6,7,8,9];\n *\n * Array.from(chunk(arr, 2)) // [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]]\n * Array.from(chunk(arr, 3)) // [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]\n * Array.from(chunk([], 3)) // []\n * Array.from(chunk(arr, -3)) // Error\n * ```\n */\nexport function* intoChunks<T>(arr: T[], size: number) {\n    if (size < 1) {\n        throw new Error('size must be an integer >= 1');\n    }\n    for (let i = 0; i < arr.length; i += size) {\n        yield arr.slice(i, i + size);\n    }\n}\n\n/**\n * @param size\n * @returns string that represents the --component-size default value\n */\nexport function getComponentCssSizeVar(size: string) {\n    switch (size) {\n        case \"1\":\n            return 'var(--ig-size, var(--ig-size-small))';\n        case \"2\":\n            return 'var(--ig-size, var(--ig-size-medium))';\n        default:\n            return 'var(--ig-size, var(--ig-size-large))';\n    }\n}\n\n/**\n * @param path - The URI path to be normalized.\n * @returns string encoded using the encodeURI function.\n */\nexport function normalizeURI(path: string) {\n    return path?.split('/').map(encodeURI).join('/');\n}\n\nexport function getComponentTheme(el: Element) {\n    return globalThis.window\n        ?.getComputedStyle(el)\n        .getPropertyValue('--theme')\n        .trim() as IgxTheme;\n}\n\n/**\n * Collection re-created w/ the built in track by identity will always log\n * warning even for valid cases of recalculating all collection items.\n * See https://github.com/angular/angular/blob/55581b4181639568fb496e91055142a1b489e988/packages/core/src/render3/instructions/control_flow.ts#L393-L409\n * Current solution explicit track function doing the same as suggested in:\n * https://github.com/angular/angular/issues/56471#issuecomment-2180315803\n * This should be used with moderation and when necessary.\n * @internal\n */\nexport function trackByIdentity<T>(item: T): T {\n    return item;\n}\n","import { Injectable } from '@angular/core';\n\n/** @hidden */\n@Injectable({\n    providedIn: 'root',\n})\nexport class IgxSelectionAPIService {\n    /**\n     * If primaryKey is defined, then multiple selection is based on the primaryKey, and it is array of numbers, strings, etc.\n     * If the primaryKey is omitted, then selection is based on the item data\n     */\n    protected selection: Map<string,  Set<any>> = new Map<string, Set<any>>();\n\n    /**\n     * Get current component selection.\n     *\n     * @param componentID ID of the component.\n     */\n    public get(componentID: string): Set<any> {\n        return this.selection.get(componentID);\n    }\n\n    /**\n     * Set new component selection.\n     *\n     * @param componentID ID of the component.\n     * @param newSelection The new component selection to be set.\n     */\n    public set(componentID: string, newSelection: Set<any>) {\n        if (!componentID) {\n            throw Error('Invalid value for component id!');\n        }\n        this.selection.set(componentID, newSelection);\n    }\n\n    /**\n     * Clears selection for component.\n     *\n     * @param componentID ID of the component.\n     */\n    public clear(componentID: string) {\n        this.selection.set(componentID, this.get_empty());\n    }\n\n    /**\n     * Removes selection for a component.\n     * @param componentID\n     */\n      public delete(componentID: string) {\n        this.selection.delete(componentID);\n    }\n\n    /**\n     * Get current component selection length.\n     *\n     * @param componentID ID of the component.\n     */\n    public size(componentID: string): number {\n        const sel = this.get(componentID);\n        return sel ? sel.size : 0;\n    }\n\n    /**\n     * Creates new selection that consist of the new item added to the current component selection.\n     * The returned collection is new Set,\n     * therefore if you want to update component selection you need to call in addition the set_selection() method\n     * or instead use the select_item() one.\n     *\n     * @param componentID ID of the component, which we add new item to.\n     * @param itemID ID of the item to add to component selection.\n     * @param sel Used internally only by the selection (add_items method) to accumulate selection for multiple items.\n     *\n     * @returns Selection after the new item is added.\n     */\n    public add_item(componentID: string, itemID, sel?: Set<any>): Set<any> {\n        if (!sel) {\n            sel = new Set(this.get(componentID));\n        }\n        if (sel === undefined) {\n            sel = this.get_empty();\n        }\n        sel.add(itemID);\n        return sel;\n    }\n\n    /**\n     * Creates new selection that consist of the new items added to the current component selection.\n     * The returned collection is new Set,\n     * therefore if you want to update component selection you need to call in addition the set_selection() method\n     * or instead use the select_items() one.\n     *\n     * @param componentID ID of the component, which we add new items to.\n     * @param itemIDs Array of IDs of the items to add to component selection.\n     * @param clearSelection If true it will clear previous selection.\n     *\n     * @returns Selection after the new items are added.\n     */\n    public add_items(componentID: string, itemIDs: any[], clearSelection?: boolean): Set<any> {\n        let selection: Set<any>;\n        if (clearSelection) {\n            selection = this.get_empty();\n        } else if (itemIDs && itemIDs.length === 0) {\n            selection = new Set(this.get(componentID));\n        }\n        itemIDs.forEach((item) => selection = this.add_item(componentID, item, selection));\n        return selection;\n    }\n\n    /**\n     * Add item to the current component selection.\n     *\n     * @param componentID ID of the component, which we add new item to.\n     * @param itemID ID of the item to add to component selection.\n     * @param sel Used internally only by the selection (select_items method) to accumulate selection for multiple items.\n     */\n    public select_item(componentID: string, itemID, sel?: Set<any>) {\n        this.set(componentID, this.add_item(componentID, itemID, sel));\n    }\n\n    /**\n     * Add items to the current component selection.\n     *\n     * @param componentID ID of the component, which we add new items to.\n     * @param itemIDs Array of IDs of the items to add to component selection.\n     * @param clearSelection If true it will clear previous selection.\n     */\n    public select_items(componentID: string, itemID: any[], clearSelection?: boolean) {\n        this.set(componentID, this.add_items(componentID, itemID, clearSelection));\n    }\n\n    /**\n     * Creates new selection that consist of the new items excluded from the current component selection.\n     * The returned collection is new Set,\n     * therefore if you want to update component selection you need to call in addition the set_selection() method\n     * or instead use the deselect_item() one.\n     *\n     * @param componentID ID of the component, which we remove items from.\n     * @param itemID ID of the item to remove from component selection.\n     * @param sel Used internally only by the selection (delete_items method) to accumulate deselected items.\n     *\n     * @returns Selection after the item is removed.\n     */\n    public delete_item(componentID: string, itemID, sel?: Set<any>) {\n        if (!sel) {\n            sel = new Set(this.get(componentID));\n        }\n        if (sel === undefined) {\n            return;\n        }\n        sel.delete(itemID);\n        return sel;\n    }\n\n    /**\n     * Creates new selection that consist of the new items removed to the current component selection.\n     * The returned collection is new Set,\n     * therefore if you want to update component selection you need to call in addition the set_selection() method\n     * or instead use the deselect_items() one.\n     *\n     * @param componentID ID of the component, which we remove items from.\n     * @param itemID ID of the items to remove from component selection.\n     *\n     * @returns Selection after the items are removed.\n     */\n    public delete_items(componentID: string, itemIDs: any[]): Set<any> {\n        let selection: Set<any>;\n        itemIDs.forEach((deselectedItem) => selection = this.delete_item(componentID, deselectedItem, selection));\n        return selection;\n    }\n\n    /**\n     * Remove item from the current component selection.\n     *\n     * @param componentID ID of the component, which we remove item from.\n     * @param itemID ID of the item to remove from component selection.\n     * @param sel Used internally only by the selection (deselect_items method) to accumulate selection for multiple items.\n     */\n    public deselect_item(componentID: string, itemID, sel?: Set<any>) {\n        this.set(componentID, this.delete_item(componentID, itemID, sel));\n    }\n\n    /**\n     * Remove items to the current component selection.\n     *\n     * @param componentID ID of the component, which we add new items to.\n     * @param itemIDs Array of IDs of the items to add to component selection.\n     */\n    public deselect_items(componentID: string, itemID: any[], _clearSelection?: boolean) {\n        this.set(componentID, this.delete_items(componentID, itemID));\n    }\n\n    /**\n     * Check if the item is selected in the component selection.\n     *\n     * @param componentID ID of the component.\n     * @param itemID ID of the item to search.\n     *\n     * @returns If item is selected.\n     */\n    public is_item_selected(componentID: string, itemID): boolean {\n        const sel = this.get(componentID);\n        if (!sel) {\n            return false;\n        }\n        return sel.has(itemID);\n    }\n\n    /**\n     * Get first element in the selection.\n     * This is correct when we have only one item in the collection (for single selection purposes)\n     * and the method returns that item.\n     *\n     * @param componentID ID of the component.\n     *\n     * @returns First element in the set.\n     */\n    public first_item(componentID: string) {\n        const sel = this.get(componentID);\n        if (sel && sel.size > 0) {\n            return sel.values().next().value;\n       }\n    }\n\n    /**\n     * Returns whether all items are selected.\n     *\n     * @param componentID ID of the component.\n     * @param dataCount: number Number of items in the data.\n     *\n     * @returns If all items are selected.\n     */\n    public are_all_selected(componentID: string, dataCount: number): boolean {\n        return dataCount > 0 && dataCount === this.size(componentID);\n    }\n\n    /**\n     * Returns whether any of the items is selected.\n     *\n     * @param componentID ID of the component.\n     * @param data Entire data array.\n     *\n     * @returns If there is any item selected.\n     */\n    public are_none_selected(componentID: string): boolean {\n        return this.size(componentID) === 0;\n    }\n\n    /**\n     * Get all primary key values from a data array. If there isn't a primary key defined that the entire data is returned instead.\n     *\n     * @param data Entire data array.\n     * @param primaryKey Data primary key.\n     *\n     * @returns Array of identifiers, either primary key values or the entire data array.\n     */\n    public get_all_ids(data, primaryKey?) {\n        // If primaryKey is 0, this should still map to the property\n        return primaryKey !== undefined && primaryKey !== null ? data.map((x) => x[primaryKey]) : data;\n    }\n\n    /**\n     * Returns empty selection collection.\n     *\n     * @returns empty set.\n     */\n    public get_empty() {\n        return new Set();\n    }\n}\n","import { InjectionToken } from \"@angular/core\";\n\n/**\n * Used for editor control components\n *\n * @hidden\n */\nexport interface EditorProvider {\n    /** Return the focusable native element */\n    getEditElement(): HTMLElement;\n}\n\n/**\n * Injection token is used to inject the EditorProvider token into components\n *\n * @hidden @internal\n */\nexport const EDITOR_PROVIDER = new InjectionToken<EditorProvider>('EditorProvider');\n","import { Injectable, NgZone, DOCUMENT, inject } from '@angular/core';\nimport { ɵgetDOM as getDOM } from '@angular/platform-browser';\nimport { PlatformUtil } from './utils';\nimport { HammerManager, HammerOptions, HammerStatic } from './touch-annotations';\n\nconst EVENT_SUFFIX = 'precise';\n\n/**\n * Touch gestures manager based on Hammer.js\n * Use with caution, this will track references for single manager per element. Very TBD. Much TODO.\n *\n * @hidden\n */\n@Injectable()\nexport class HammerGesturesManager {\n    private _zone = inject(NgZone);\n    private doc = inject(DOCUMENT);\n    private platformUtil = inject(PlatformUtil);\n\n    public static Hammer: HammerStatic = typeof window !== 'undefined' ? (window as any).Hammer : null;\n    /**\n     * Event option defaults for each recognizer, see http://hammerjs.github.io/api/ for API listing.\n     */\n    protected hammerOptions: HammerOptions = {};\n\n    private platformBrowser: boolean;\n    private _hammerManagers: Array<{ element: EventTarget; manager: HammerManager }> = [];\n\n    constructor() {\n        this.platformBrowser = this.platformUtil.isBrowser;\n        if (this.platformBrowser && HammerGesturesManager.Hammer) {\n            this.hammerOptions = {\n                // D.P. #447 Force TouchInput due to PointerEventInput bug (https://github.com/hammerjs/hammer.js/issues/1065)\n                // see https://github.com/IgniteUI/igniteui-angular/issues/447#issuecomment-324601803\n                inputClass: HammerGesturesManager.Hammer.TouchInput,\n                recognizers: [\n                    [HammerGesturesManager.Hammer.Pan, { threshold: 0 }],\n                    [HammerGesturesManager.Hammer.Swipe, { direction: HammerGesturesManager.Hammer.DIRECTION_HORIZONTAL }],\n                    [HammerGesturesManager.Hammer.Tap],\n                    [HammerGesturesManager.Hammer.Tap, { event: 'doubletap', taps: 2 }, ['tap']]\n                ]\n            };\n        }\n    }\n\n    public supports(eventName: string): boolean {\n        return eventName.toLowerCase().endsWith('.' + EVENT_SUFFIX);\n    }\n\n    /**\n     * Add listener extended with options for Hammer.js. Will use defaults if none are provided.\n     * Modeling after other event plugins for easy future modifications.\n     */\n    public addEventListener(\n        element: HTMLElement,\n        eventName: string,\n        eventHandler: (eventObj) => void,\n        options: HammerOptions = null): () => void {\n        if (!this.platformBrowser) {\n            return;\n        }\n\n        // Creating the manager bind events, must be done outside of angular\n        return this._zone.runOutsideAngular(() => {\n            if (!HammerGesturesManager.Hammer) {\n                //no hammer\n                return;\n            }\n            let mc: HammerManager = this.getManagerForElement(element);\n            if (mc === null) {\n                // new Hammer is a shortcut for Manager with defaults\n                mc = new HammerGesturesManager.Hammer(element, Object.assign(this.hammerOptions, options));\n                this.addManagerForElement(element, mc);\n            }\n            const handler = (eventObj) => this._zone.run(() => eventHandler(eventObj));\n            mc.on(eventName, handler);\n            return () => mc.off(eventName, handler);\n        });\n    }\n\n    /**\n     * Add listener extended with options for Hammer.js. Will use defaults if none are provided.\n     * Modeling after other event plugins for easy future modifications.\n     *\n     * @param target Can be one of either window, body or document(fallback default).\n     */\n    public addGlobalEventListener(target: string, eventName: string, eventHandler: (eventObj) => void): () => void {\n        if (!this.platformBrowser || !HammerGesturesManager.Hammer) {\n            return;\n        }\n\n        const element = this.getGlobalEventTarget(target);\n\n        // Creating the manager bind events, must be done outside of angular\n        return this.addEventListener(element as HTMLElement, eventName, eventHandler);\n    }\n\n    /**\n     * Exposes [Dom]Adapter.getGlobalEventTarget to get global event targets.\n     * Supported: window, document, body. Defaults to document for invalid args.\n     *\n     * @param target Target name\n     */\n    public getGlobalEventTarget(target: string): EventTarget {\n        return getDOM().getGlobalEventTarget(this.doc, target);\n    }\n\n    /**\n     * Set HammerManager options.\n     *\n     * @param element The DOM element used to create the manager on.\n     *\n     * ### Example\n     *\n     * ```ts\n     * manager.setManagerOption(myElem, \"pan\", { pointers: 1 });\n     * ```\n     */\n    public setManagerOption(element: EventTarget, event: string, options: any) {\n        const manager = this.getManagerForElement(element);\n        manager.get(event).set(options);\n    }\n\n    /**\n     * Add an element and manager map to the internal collection.\n     *\n     * @param element The DOM element used to create the manager on.\n     */\n    public addManagerForElement(element: EventTarget, manager: HammerManager) {\n        this._hammerManagers.push({element, manager});\n    }\n\n    /**\n     * Get HammerManager for the element or null\n     *\n     * @param element The DOM element used to create the manager on.\n     */\n    public getManagerForElement(element: EventTarget): HammerManager {\n        const result =  this._hammerManagers.filter(value => value.element === element);\n        return result.length ? result[0].manager : null;\n    }\n\n    /**\n     * Destroys the HammerManager for the element, removing event listeners in the process.\n     *\n     * @param element The DOM element used to create the manager on.\n     */\n    public removeManagerForElement(element: HTMLElement) {\n        let index: number = null;\n        for (let i = 0; i < this._hammerManagers.length; i++) {\n            if (element === this._hammerManagers[i].element) {\n                index = i;\n                break;\n            }\n        }\n        if (index !== null) {\n            const item = this._hammerManagers.splice(index, 1)[0];\n            // destroy also\n            item.manager.destroy();\n        }\n    }\n\n    /** Destroys all internally tracked HammerManagers, removing event listeners in the process. */\n    public destroy() {\n        for (const item of this._hammerManagers) {\n            item.manager.destroy();\n        }\n        this._hammerManagers = [];\n    }\n}\n","/**\n * Stripped-down HammerJS annotations.\n */\n\n/**\n* @hidden\n* @internal\n*/\nexport interface HammerInput {\n    preventDefault: () => void;\n    deltaX: number;\n    deltaY: number;\n    center: { x: number; y: number; };\n    pointerType: string;\n    distance: number;\n}\n\n/**\n* @hidden\n* @internal\n*/\nexport interface HammerStatic {\n    new(element: HTMLElement | SVGElement, options?: any): HammerManager;\n\n    Pan: Recognizer;\n    Swipe: Recognizer;\n    Tap: Recognizer;\n    TouchInput: HammerInput;\n    DIRECTION_HORIZONTAL: number;\n    DIRECTION_VERTICAL: number;\n}\n\n/**\n* @hidden\n* @internal\n*/\nexport interface Recognizer { }\n\n/**\n* @hidden\n* @internal\n*/\nexport interface HammerManager {\n    set(options: any): HammerManager;\n    off(events: string, handler?: (event: HammerInput) => void): void;\n    on(events: string, handler: (event: HammerInput) => void): void;\n    destroy(): void;\n    get(event: string): HammerManager;\n}\n\n/**\n* @hidden\n* @internal\n*/\nexport interface HammerOptions {\n    cssProps?: { [key: string]: string };\n    recognizers?: any[];\n    inputClass?: HammerInput;\n}\n","import { ChangeDetectorRef, QueryList } from '@angular/core';\nimport { OverlaySettings } from '../services/overlay/utilities';\n\n/* csSuppress */\n/** @hidden @internal */\nexport abstract class IgxActionStripToken {\n    public abstract cdr: ChangeDetectorRef\n    public abstract context: any;\n    public abstract menuOverlaySettings: OverlaySettings;\n    public abstract get hideOnRowLeave(): boolean;\n\n    public abstract show(context?: any): void;\n    public abstract hide(): void;\n}\n\n/* csSuppress */\n/**\n * Abstract class defining the contract for components that provide actions to the action strip.\n * This allows the action strip to remain standalone and not be aware of specific implementations.\n * @hidden @internal\n */\nexport abstract class IgxActionStripActionsToken {\n    public abstract asMenuItems: boolean;\n    public abstract buttons: QueryList<any>;\n    public abstract strip: any | null;\n}\n","import { Component, Output, EventEmitter, HostListener, Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * Templates the default toggle icon in the picker.\n *\n * @remarks Can be applied to IgxDatePickerComponent, IgxTimePickerComponent, IgxDateRangePickerComponent\n *\n * @example\n * ```html\n * <igx-date-range-picker>\n *   <igx-picker-toggle igxSuffix>\n *      <igx-icon>calendar_view_day</igx-icon>\n *   </igx-picker-toggle>\n * </igx-date-range-picker>\n * ```\n */\n@Component({\n    template: `<ng-content></ng-content>`,\n    selector: 'igx-picker-toggle',\n    standalone: true\n})\nexport class IgxPickerToggleComponent {\n    @Output()\n    public clicked = new EventEmitter();\n\n    @HostListener('click', ['$event'])\n    public onClick(event: MouseEvent) {\n        // do not focus input on click\n        event.stopPropagation();\n        this.clicked.emit();\n    }\n}\n\n/**\n * Templates the default clear icon in the picker.\n *\n * @remarks Can be applied to IgxDatePickerComponent, IgxTimePickerComponent, IgxDateRangePickerComponent\n *\n * @example\n * ```html\n * <igx-date-picker>\n *   <igx-picker-clear igxSuffix>\n *      <igx-icon>delete</igx-icon>\n *   </igx-picker-clear>\n * </igx-date-picker>\n * ```\n */\n@Component({\n    template: `<ng-content></ng-content>`,\n    selector: 'igx-picker-clear',\n    standalone: true\n})\nexport class IgxPickerClearComponent extends IgxPickerToggleComponent { }\n\n/**\n * IgxPickerActionsDirective can be used to re-template the dropdown/dialog action buttons.\n *\n * @remarks Can be applied to IgxDatePickerComponent, IgxTimePickerComponent, IgxDateRangePickerComponent\n *\n */\n@Directive({\n    selector: '[igxPickerActions]',\n    standalone: true\n})\nexport class IgxPickerActionsDirective {\n    public template = inject<TemplateRef<any>>(TemplateRef);\n}\n\n","/** Header orientation in `dialog` mode. */\nexport const PickerHeaderOrientation = {\n    Horizontal: 'horizontal',\n    Vertical: 'vertical'\n} as const;\nexport type PickerHeaderOrientation = (typeof PickerHeaderOrientation)[keyof typeof PickerHeaderOrientation];\n\n/** Calendar orientation. */\nexport const PickerCalendarOrientation = {\n    Horizontal: 'horizontal',\n    Vertical: 'vertical'\n} as const;\nexport type PickerCalendarOrientation = (typeof PickerCalendarOrientation)[keyof typeof PickerCalendarOrientation];\n\n/**\n * This enumeration is used to configure whether the date/time picker has an editable input with drop down\n * or is readonly - the date/time is selected only through a dialog.\n */\nexport const PickerInteractionMode = {\n    DropDown: 'dropdown',\n    Dialog: 'dialog'\n} as const;\nexport type PickerInteractionMode = (typeof PickerInteractionMode)[keyof typeof PickerInteractionMode];\n\nexport type WeekDays =\n  | 'sunday'\n  | 'monday'\n  | 'tuesday'\n  | 'wednesday'\n  | 'thursday'\n  | 'friday'\n  | 'saturday';\n\nexport interface IgcCalendarBaseEventMap {\n  igcChange: CustomEvent<Date | Date[]>;\n}\n\n/** Represents a range between two dates. */\nexport interface DateRange {\n    start: Date | string;\n    end: Date | string;\n}\n\n/** Represents a range between two dates and a label used for predefined and custom date ranges. */\nexport interface CustomDateRange {\n    label: string;\n    dateRange: DateRange;\n}\n","/**\n * Specify a particular date, time or AmPm part.\n */\nexport enum DatePart {\n    Date = 'date',\n    Month = 'month',\n    Year = 'year',\n    Hours = 'hours',\n    Minutes = 'minutes',\n    Seconds = 'seconds',\n    FractionalSeconds = 'fractionalSeconds',\n    AmPm = 'ampm',\n    Literal = 'literal'\n}\n\n/** @hidden @internal */\nexport interface DatePartInfo {\n    type: DatePart;\n    start: number;\n    end: number;\n    format: string;\n}\n\n/** Delta values used for spin actions. */\nexport interface DatePartDeltas {\n    date?: number;\n    month?: number;\n    year?: number;\n    hours?: number;\n    minutes?: number;\n    seconds?: number;\n    fractionalSeconds?: number;\n}\n","/**\n * Minimal type stubs for grid types to avoid circular dependencies.\n * These are simple interfaces that core uses for typing only.\n * The actual implementations are in igniteui-angular/grids.\n */\n\nimport { QueryList, TemplateRef } from '@angular/core';\nimport { WEEKDAYS } from '../core/enums';\nimport { IgxFilteringOperand } from './filtering-condition';\nimport { ISortingStrategy } from './sorting-strategy';\nimport { FilteringExpressionsTree } from './filtering-expressions-tree';\n\n\n/* IgxGrid column types */\nexport interface IFieldPipeArgs {\n    /** The date/time components that a date column will display, using predefined options or a custom format string. */\n    format?: string;\n    /** A timezone offset (such as '+0430'), or a standard UTC/GMT or continental US timezone abbreviation. */\n    timezone?: string;\n    /**\n     * Decimal representation options, specified by a string in the following format:\n     * `{minIntegerDigits}`.`{minFractionDigits}`-`{maxFractionDigits}`.\n     * `minIntegerDigits`: The minimum number of integer digits before the decimal point. Default is 1.\n     * `minFractionDigits`: The minimum number of digits after the decimal point. Default is 0.\n     * `maxFractionDigits`: The maximum number of digits after the decimal point. Default is 3.\n     */\n    digitsInfo?: string;\n    /** The currency code of type string, default value undefined */\n    currencyCode?: string;\n    /**\n     * Allow us to display currency 'symbol' or 'code' or 'symbol-narrow' or our own string.\n     * The value is of type string. By default is set to 'symbol'\n     */\n    display?: string;\n\n    /** The first week day to be displayed in calendar when filtering or editing a date column */\n    weekStart?: WEEKDAYS | number;\n}\n\n// D.P. Can't use `export type IColumnPipeArgs = IFieldPipeArgs` because TypeScripts Compiler API optimizes it away completely\n\nexport interface IColumnPipeArgs extends IFieldPipeArgs {}\n\nexport interface IFieldEditorOptions {\n    /**\n     * A custom input format string used for the built-in editors of date/time columns.\n     * See the Editing section under https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/column-types#datetime-date-and-time\n     */\n    dateTimeFormat?: string;\n}\n\nexport interface IColumnEditorOptions extends IFieldEditorOptions {}\n\nexport interface ISortingOptions {\n    mode: 'single' | 'multiple';\n}\n\n/**\n * @hidden\n * @internal\n */\nexport interface MRLColumnSizeInfo {\n    ref: ColumnType;\n    width: number;\n    colSpan: number;\n    colEnd: number;\n    widthSetByUser: boolean;\n}\n\n/**\n * @hidden\n * @internal\n */\nexport interface MRLResizeColumnInfo {\n    target: ColumnType;\n    spanUsed: number;\n}\n\n/* mustCoerceToInt */\n/**\n * Enumeration representing the possible positions for pinning columns.\n * - Start: Columns are pinned to the start of the grid.\n * - End: Columns are pinned to the end of the grid.\n */\nexport enum ColumnPinningPosition {\n    Start,\n    End\n}\n\n/**\n * Stub type for GridType - minimal interface for typing in core\n */\nexport interface GridTypeBase {\n    primaryKey?: string;\n    id?: string;\n    data: any[] | null;\n    [key: string]: any;\n}\n\n/**\n * Describes a field that can be used in the Grid and QueryBuilder components.\n */\nexport interface FieldType {\n    /**\n     * Display label for the field.\n     */\n    label?: string;\n\n    /**\n     * The internal field name, used in expressions and queries.\n     */\n    field: string;\n\n    /**\n     * Optional column header for UI display purposes.\n     */\n    header?: string;\n\n    /**\n     * The data type of the field.\n     */\n    /* alternateType: GridColumnDataType */\n    dataType: GridColumnDataType;\n\n    /**\n     * Options for the editor associated with this field.\n     */\n    editorOptions?: IFieldEditorOptions;\n\n    /**\n     * Optional filtering operands that apply to this field.\n     */\n    filters?: IgxFilteringOperand;\n\n    /**\n     * Optional arguments for any pipe applied to the field.\n     */\n    pipeArgs?: IFieldPipeArgs;\n\n    /**\n     * Default time format for Date/Time fields.\n     */\n    defaultTimeFormat?: string;\n\n    /**\n     * Default date/time format for Date/Time fields.\n     */\n    defaultDateTimeFormat?: string;\n\n    /**\n     * Optional formatter function to transform the value before display.\n     *\n     * @param value - The value of the field.\n     * @param rowData - Optional row data that contains this field.\n     * @returns The formatted value.\n     */\n    formatter?(value: any, rowData?: any): any;\n}\n\n/**\n * Represents a column in the `GridType`. It is essentially the blueprint to a column object.\n * Contains definitions of properties and methods, relevant to a column\n */\nexport interface ColumnType extends FieldType {\n    /** Represents the instance of the parent `GridType` that contains this column. */\n    grid: GridTypeBase;\n    /**\n     * A list containing all the child columns under this column (if any).\n     * @deprecated in version 18.1.0. Use the `childColumns` property instead.\n     */\n    children: QueryList<ColumnType>;\n    /**\n     * A list containing all the child columns under this column (if any).\n     * Empty without children or if this column is not Group or Layout.\n     */\n    get childColumns(): ColumnType[];\n    /** @hidden @internal */\n    allChildren: ColumnType[];\n    /** @hidden @internal */\n    headerGroup: any;\n    /** @hidden @internal */\n    headerCell: any;\n    validators: any[];\n    mergingComparer: (prevRecord: any, record: any, field: string) => boolean;\n\n    /**\n     * The template reference for the custom header of the column\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    headerTemplate: TemplateRef<any>;\n    /**\n     * The template reference for the collapsible indicator of the column.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    collapsibleIndicatorTemplate?: TemplateRef<any>;\n    /** Represents custom CSS classes applied to the header element. When added, they take different styling */\n    headerClasses: any;\n    /** Represents custom CSS styles applied to the header element. When added, they take different styling */\n    headerStyles: any;\n     /** Represents custom CSS classes applied to the header group. When added, they take different styling */\n    headerGroupClasses: any;\n     /** Represents custom CSS styles applied to the header group. When added, they take different styling */\n    headerGroupStyles: any;\n\n    /**\n     * Custom CSS styling, applied to every column\n     * calcWidth, minWidthPx, maxWidthPx, minWidth, maxWidth, minWidthPercent, maxWidthPercent, resolvedWidth\n     */\n    calcWidth: any;\n    minWidthPx: number;\n    maxWidthPx: number;\n    minWidth: string;\n    maxWidth: string;\n    minWidthPercent: number;\n    maxWidthPercent: number;\n    resolvedWidth: string;\n\n    /**\n     * Optional\n     * Represents the header text of the column\n     */\n    header?: string;\n    /**\n     * The index of the column within the grid.\n     * Includes the hidden columns when counting\n     */\n    index: number;\n    /**\n     * Represents the type of data for the column:\n     * string, number, boolean, currency, date, time, etc.\n     */\n    dataType: GridColumnDataType;\n    /**\n     * Sets properties on the default column editors\n     */\n    editorOptions: IColumnEditorOptions;\n    /**\n     * The template reference for the custom inline editor of the column\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    inlineEditorTemplate: TemplateRef<any>;\n    /**\n     * The index of the column within the grid.\n     * Does not include the hidden columns when counting\n     */\n    visibleIndex: number;\n    /** Optional\n     * Indicated whether the column can be collapsed. If the value is true, the column can be collapsed\n     * It is used in tree grid and for navigation\n     */\n    collapsible?: boolean;\n    /** Indicated whether the column can be edited. If the value is true, the column can be edited */\n    editable: boolean;\n    /** Specifies whether the column can be resized. If the value is true, the column can be resized */\n    resizable: boolean;\n    /** Specifies whether the data of the column can be searched. If the value is true, the column data can be searched */\n    searchable: boolean;\n    /** Specifies whether the column belongs to a group of columns. */\n    columnGroup: boolean;\n    /** Indicates whether a column can be put in a group. If the value is true, the column can be put in a group */\n    groupable: boolean;\n    /** Indicates whether a column can be sorted. If the value is true, the column can be sorted. */\n    sortable: boolean;\n    /** Indicates whether a column can be filtered. If the value is true, the column can be filtered */\n    filterable: boolean;\n    /** Indicates whether a column is currently hidden (not visible). If the value is true, the column is not visible */\n    hidden: boolean;\n    /** Indicates whether a column can be pinned. If the value is true, the column cannot be pinned */\n    disablePinning: boolean;\n    /** Indicates whether a column can be hidden. If the value is true, the column cannot be hidden */\n    disableHiding: boolean;\n    /**\n     * The sorting strategy used for sorting this column.\n     * The interface contains a method sort that sorts the provided data based on the given sorting expressions\n     */\n    sortStrategy: ISortingStrategy;\n     /**\n     * Indicates whether the search should match results, no matter the case of the letters (upper and lower)\n     * If the value is false, the result will depend on the case (example: `E` will not match `e`)\n     * If the value is true, the result will not depend on the case (example: `E` will match `e`)\n     */\n    sortingIgnoreCase: boolean;\n    /** @hidden @internal */\n    filterCell: any;\n    filteringIgnoreCase: boolean;\n    /**\n     * The filtering expressions for the column.\n     * The type contains properties and methods for filtering: filteringOperands, operator (logic), fieldName, etc.\n     */\n    filteringExpressionsTree: FilteringExpressionsTree;\n    hasSummary: boolean;\n    summaries: any;\n    disabledSummaries?: string[];\n    /**\n     * The template reference for a summary of the column\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    summaryTemplate: TemplateRef<any>;\n    /** Indicates if the column is currently pinned. If the value is true, the column is pinned */\n    pinned: boolean;\n    /** Indicates if the column is currently expanded or collapsed. If the value is true, the column is expanded */\n    expanded: boolean;\n    merge: boolean;\n    /** Indicates if the column is currently selected. If the value is true, the column is selected */\n    selected: boolean;\n    /** Indicates if the column can be selected. If the value is true, the column can be selected */\n    selectable: boolean;\n    columnLayout: boolean;\n    /** Represents the hierarchical level of the column in the column layout */\n    level: number;\n    rowStart: number;\n    rowEnd: number;\n    colStart: number;\n    colEnd: number;\n    /** @hidden @internal */\n    gridRowSpan: number;\n    /** @hidden @internal */\n    gridColumnSpan: number;\n    columnLayoutChild: boolean;\n    width: string;\n    /**\n     * Optional\n     * The root parent of this column (if any).\n     * If there is no root parent, that means the current column is the root parent\n     */\n    topLevelParent?: ColumnType;\n    /* alternateName: parentColumn */\n    /* blazorAlternateType: object */\n    /**\n     * Optional\n     * The immediate parent (right above) column of this column (if any).\n     * If there is no parent, that means the current column is the root parent\n     */\n    parent: ColumnType | null;\n    pipeArgs: IColumnPipeArgs;\n    hasNestedPath: boolean;\n    additionalTemplateContext: any;\n    /** Indicates whether the current column is the last to be pinned.\n     * If the value is false, there are columns, that have been pinned after the current */\n    isLastPinned: boolean;\n    /** Indicates whether the current column is the first for the grid to be pinned.\n     * If the value is false, there are columns, that have been pinned before the current */\n    isFirstPinned: boolean;\n    applySelectableClass: boolean;\n    /** The title of the column, used for accessibility purposes */\n    title: string;\n    /* blazorSuppress */\n    /** Represents a method with custom grouping comparator to determine the members of the group. */\n    groupingComparer: (a: any, b: any) => number;\n\n    /**\n     * Represents a custom template for filtering\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    filterCellTemplate: TemplateRef<any>;\n\n    /**\n     * A method definition to move the column to the specified index.\n     * It takes the index of type number as a parameter\n    */\n    move(index: number): void;\n    /** A method definition to retrieve the set CSS size */\n    getAutoSize(): string;\n    getResizableColUnderEnd(): MRLResizeColumnInfo[];\n    /** A method definition to retrieve the set CSS width of the cells under the column */\n    getCellWidth(): string;\n    getGridTemplate(isRow: boolean): string;\n    /** A method definition to toggle column visibility (hidden or visible) */\n    toggleVisibility(value?: boolean): void;\n    populateVisibleIndexes?(): void;\n    /** Pins the column at the specified index (if not already pinned). */\n    pin(index?: number, pinningPosition?: ColumnPinningPosition): boolean;\n    /** Unpins the column at the specified index (if not already unpinned). */\n    unpin(index?: number): boolean;\n}\n\n/**\n * Describes an entity in the QueryBuilder.\n * An entity represents a logical grouping of fields and can have nested child entities.\n */\nexport interface EntityType {\n    /**\n     * The name of the entity.\n     * Typically used as an identifier in expressions.\n     */\n    name: string;\n\n    /**\n     * The list of fields that belong to this entity.\n     */\n    fields: FieldType[];\n\n    /**\n     * Optional child entities.\n     * This allows building hierarchical or nested query structures.\n     */\n    childEntities?: EntityType[];\n}\n\n/* marshalByValue */\nexport interface ITreeGridRecord {\n    key: any;\n    data: any;\n    children?: ITreeGridRecord[];\n    /* blazorAlternateName: RecordParent */\n    parent?: ITreeGridRecord;\n    level?: number;\n    isFilteredOutParent?: boolean;\n    expanded?: boolean;\n}\n\n/**\n * Stub type for IgxTreeGridAPIService - minimal interface for typing in core\n */\nexport interface IgxTreeGridAPIService {\n    get_row_id(rowData: any): any;\n    [key: string]: any;\n}\n\n\n/** Interface representing a segment of a path in a hierarchical grid. */\nexport interface IPathSegment {\n    /**\n     * The unique identifier of the row within the segment.\n     * @deprecated since version 17.1.0. Use the `rowKey` property instead.\n     */\n    rowID: any;\n    rowKey: any;\n    /** The key representing the row's 'hierarchical level. */\n    rowIslandKey: string;\n}\n\n/* tsPlainInterface */\n/* marshalByValue */\nexport interface ISummaryExpression {\n    fieldName: string;\n    /* blazorCSSuppress */\n    customSummary?: any;\n}\n\n/* tsPlainInterface */\n/* marshalByValue */\nexport interface IgxSummaryResult {\n    key: string;\n    label: string;\n    /* blazorAlternateName: Result */\n    summaryResult: any;\n    /**\n     * Apply default formatting based on the grid column type.\n     * ```typescript\n     * const result: IgxSummaryResult = {\n     *   key: 'key',\n     *   label: 'label',\n     *   defaultFormatting: true\n     * }\n     * ```\n     *\n     * @memberof IgxSummaryResult\n     */\n    defaultFormatting?: boolean;\n}\n\nexport interface ISummaryRecord {\n    summaries: Map<string, IgxSummaryResult[]>;\n    max?: number;\n    cellIndentation?: number;\n}\n\n/**\n * Enumeration representing different calculation modes for grid summaries.\n * - rootLevelOnly: Summaries are calculated only for the root level.\n * - childLevelsOnly: Summaries are calculated only for child levels.\n * - rootAndChildLevels: Default value; Summaries are calculated for both root and child levels.\n */\nexport const GridSummaryCalculationMode = {\n    rootLevelOnly: 'rootLevelOnly',\n    childLevelsOnly: 'childLevelsOnly',\n    rootAndChildLevels: 'rootAndChildLevels'\n} as const;\nexport type GridSummaryCalculationMode = (typeof GridSummaryCalculationMode)[keyof typeof GridSummaryCalculationMode];\n\n/**\n * @hidden\n */\nexport const GridColumnDataType = {\n    String: 'string',\n    Number: 'number',\n    Boolean: 'boolean',\n    Date: 'date',\n    DateTime: 'dateTime',\n    Time: 'time',\n    Currency: 'currency',\n    Percent: 'percent',\n    Image: 'image'\n} as const;\nexport type GridColumnDataType = (typeof GridColumnDataType)[keyof typeof GridColumnDataType];\n","import { DatePart, DatePartInfo } from '../date-parts';\nimport { ValidationErrors } from '@angular/forms';\nimport { isDate } from '../../core/utils';\nimport { GridColumnDataType } from '../../data-operations/grid-types';\nimport { BaseFormatter } from '../../core/i18n/formatters/formatter-base';\n\n/** @hidden */\nconst enum FormatDesc {\n    Numeric = 'numeric',\n    TwoDigits = '2-digit'\n}\n\nconst TIME_CHARS = ['h', 'H', 'm', 's', 'S', 't', 'T', 'a'];\nconst DATE_CHARS = ['d', 'D', 'M', 'y', 'Y'];\n\n/** @hidden */\nconst enum AmPmValues {\n    AM = 'AM',\n    A = 'a',\n    PM = 'PM',\n    P = 'p'\n}\n\n/** @hidden */\nconst enum DateParts {\n    Day = 'day',\n    Month = 'month',\n    Year = 'year',\n    Hour = 'hour',\n    Minute = 'minute',\n    Second = 'second',\n    AmPm = 'dayPeriod'\n}\n\n/** Maps of the pre-defined date-time format options supported by the Angular DatePipe\n * - predefinedNumericFormats resolve to numeric parts only (and period) for the default 'en' culture\n * - predefinedNonNumericFormats usually contain non-numeric date/time parts, which cannot be\n *   handled for editing by the date/time editors\n *  Ref: https://angular.dev/api/common/DatePipe?tab=usage-notes\n * @hidden\n */\nconst predefinedNumericFormats = new Map<string, DateParts[]>([\n    ['short', [DateParts.Month, DateParts.Day, DateParts.Year, DateParts.Hour, DateParts.Minute]],\n    ['shortDate', [DateParts.Month, DateParts.Day, DateParts.Year]],\n    ['shortTime', [DateParts.Hour, DateParts.Minute]],\n    ['mediumTime', [DateParts.Hour, DateParts.Minute, DateParts.Second]],\n]);\n\nconst predefinedNonNumericFormats = new Set<string>([\n    'medium', 'long', 'full', 'mediumDate', 'longDate', 'fullDate', 'longTime', 'fullTime',\n])\n\n/** @hidden */\nexport abstract class DateTimeUtil {\n    private static readonly DEFAULT_LOCALE = 'en';\n\n    /**\n     * Parse a Date value from masked string input based on determined date parts\n     *\n     * @param inputData masked value to parse\n     * @param dateTimeParts Date parts array for the mask\n     */\n    public static parseValueFromMask(inputData: string, dateTimeParts: DatePartInfo[], promptChar?: string): Date | null {\n        const parts: { [key in DatePart]: number } = {} as any;\n        dateTimeParts.forEach(dp => {\n            let value = parseInt(DateTimeUtil.getCleanVal(inputData, dp, promptChar), 10);\n            if (!value) {\n                value = dp.type === DatePart.Date || dp.type === DatePart.Month ? 1 : 0;\n            }\n            parts[dp.type] = value;\n        });\n        parts[DatePart.Month] -= 1;\n\n        if (parts[DatePart.Month] < 0 || 11 < parts[DatePart.Month]) {\n            return null;\n        }\n\n        // TODO: Century threshold\n        if (parts[DatePart.Year] < 50) {\n            parts[DatePart.Year] += 2000;\n        }\n\n        if (parts[DatePart.Date] > DateTimeUtil.daysInMonth(parts[DatePart.Year], parts[DatePart.Month])) {\n            return null;\n        }\n\n        if (parts[DatePart.Hours] > 23 || parts[DatePart.Minutes] > 59\n            || parts[DatePart.Seconds] > 59 || parts[DatePart.FractionalSeconds] > 999) {\n            return null;\n        }\n\n        const amPm = dateTimeParts.find(p => p.type === DatePart.AmPm);\n        if (amPm) {\n            parts[DatePart.Hours] %= 12;\n        }\n\n        if (amPm) {\n            const cleanVal = DateTimeUtil.getCleanVal(inputData, amPm, promptChar);\n            if (DateTimeUtil.isPm(cleanVal)) {\n                parts[DatePart.Hours] += 12;\n            }\n        }\n\n        return new Date(\n            parts[DatePart.Year] || 2000,\n            parts[DatePart.Month] || 0,\n            parts[DatePart.Date] || 1,\n            parts[DatePart.Hours] || 0,\n            parts[DatePart.Minutes] || 0,\n            parts[DatePart.Seconds] || 0,\n            parts[DatePart.FractionalSeconds] || 0\n        );\n    }\n\n    /** Parse the mask into date/time and literal parts */\n    public static parseDateTimeFormat(mask: string, formatter: BaseFormatter, locale?: string): DatePartInfo[] {\n        const format = mask || DateTimeUtil.getDefaultInputFormat(locale, formatter);\n        const dateTimeParts: DatePartInfo[] = [];\n        const formatArray = Array.from(format);\n        let currentPart: DatePartInfo = null;\n        let position = 0;\n        let lastPartAdded = false;\n        for (let i = 0; i < formatArray.length; i++, position++) {\n            const type = DateTimeUtil.determineDatePart(formatArray[i]);\n            if (currentPart) {\n                if (currentPart.type === type) {\n                    currentPart.format += formatArray[i];\n                    if (i < formatArray.length - 1) {\n                        continue;\n                    }\n                }\n\n                if (currentPart.type === DatePart.AmPm && currentPart.format.indexOf('a') !== -1) {\n                    currentPart = DateTimeUtil.simplifyAmPmFormat(currentPart);\n                }\n                DateTimeUtil.addCurrentPart(currentPart, dateTimeParts);\n                lastPartAdded = true;\n                position = currentPart.end;\n                if(i === formatArray.length - 1 && currentPart.type !== type) {\n                    lastPartAdded = false;\n                }\n            }\n\n            currentPart = {\n                start: position,\n                end: position + formatArray[i].length,\n                type,\n                format: formatArray[i]\n            };\n        }\n\n        // make sure the last member of a format like H:m:s is not omitted\n        if (!lastPartAdded) {\n            if (currentPart.type === DatePart.AmPm) {\n                currentPart = DateTimeUtil.simplifyAmPmFormat(currentPart);\n            }\n            DateTimeUtil.addCurrentPart(currentPart, dateTimeParts);\n        }\n        // formats like \"y\" or \"yyy\" are treated like \"yyyy\" while editing\n        const yearPart = dateTimeParts.filter(p => p.type === DatePart.Year)[0];\n        if (yearPart && yearPart.format !== 'yy') {\n            yearPart.end += 4 - yearPart.format.length;\n            yearPart.format = 'yyyy';\n        }\n\n        return dateTimeParts;\n    }\n\n    /** Simplifies the AmPm part to as many chars as will be displayed */\n    private static simplifyAmPmFormat(currentPart: DatePartInfo){\n            currentPart.format = currentPart.format.length === 5 ? 'a' : 'aa';\n            currentPart.end = currentPart.start +  currentPart.format.length;\n            return { ...currentPart };\n    }\n\n    public static getPartValue(value: Date, datePartInfo: DatePartInfo, partLength: number): string {\n        let maskedValue;\n        const datePart = datePartInfo.type;\n        switch (datePart) {\n            case DatePart.Date:\n                maskedValue = value.getDate();\n                break;\n            case DatePart.Month:\n                // months are zero based\n                maskedValue = value.getMonth() + 1;\n                break;\n            case DatePart.Year:\n                if (partLength === 2) {\n                    maskedValue = this.prependValue(\n                        parseInt(value.getFullYear().toString().slice(-2), 10), partLength, '0');\n                } else {\n                    maskedValue = value.getFullYear();\n                }\n                break;\n            case DatePart.Hours:\n                if (datePartInfo.format.indexOf('h') !== -1) {\n                    maskedValue = this.prependValue(\n                        this.toTwelveHourFormat(value.getHours().toString()), partLength, '0');\n                } else {\n                    maskedValue = value.getHours();\n                }\n                break;\n            case DatePart.Minutes:\n                maskedValue = value.getMinutes();\n                break;\n            case DatePart.Seconds:\n                maskedValue = value.getSeconds();\n                break;\n            case DatePart.FractionalSeconds:\n                maskedValue = value.getMilliseconds();\n                break;\n            case DatePart.AmPm:\n                maskedValue = DateTimeUtil.getAmPmValue(partLength, value.getHours() < 12);\n                break;\n        }\n\n        if (datePartInfo.type !== DatePart.AmPm && datePartInfo.type !== DatePart.Literal) {\n            return this.prependValue(maskedValue, partLength, '0');\n        }\n\n        return maskedValue;\n    }\n\n    /** Returns the AmPm part value depending on the part length and a\n     * conditional expression indicating whether the value is AM or PM.\n     */\n    public static getAmPmValue(partLength: number, isAm: boolean) {\n        if (isAm) {\n            return partLength === 1 ? AmPmValues.A : AmPmValues.AM;\n        } else {\n            return partLength === 1 ? AmPmValues.P : AmPmValues.PM;\n        }\n    }\n\n    /** Returns true if a string value indicates an AM period */\n    public static isAm(value: string) {\n        value = value.toLowerCase();\n        return (value === AmPmValues.AM.toLowerCase() || value === AmPmValues.A.toLowerCase());\n    }\n\n    /** Returns true if a string value indicates a PM period */\n    public static isPm(value: string) {\n        value = value.toLowerCase();\n        return (value === AmPmValues.PM.toLowerCase() || value === AmPmValues.P.toLowerCase());\n    }\n\n    /** Builds a date-time editor's default input format based on provided locale settings and data type. */\n    public static getDefaultInputFormat(locale: string, formatter: BaseFormatter, dataType: GridColumnDataType = GridColumnDataType.Date): string {\n        locale = locale || DateTimeUtil.DEFAULT_LOCALE;\n        return formatter.getLocaleDateTimeFormat(locale, true, DateTimeUtil.getFormatOptions(dataType, true));\n    }\n\n    /** Builds a date-time editor's default display format based on provided locale settings and data type. */\n    public static getDefaultDisplayFormat(locale: string, formatter: BaseFormatter, dataType: GridColumnDataType = GridColumnDataType.Date): string {\n        locale = locale || DateTimeUtil.DEFAULT_LOCALE;\n        return formatter.getLocaleDateTimeFormat(locale, false, DateTimeUtil.getFormatOptions(dataType, false));\n    }\n\n    /** Determines if a given character is `d/M/y` or `h/m/s`. */\n    public static isDateOrTimeChar(char: string): boolean {\n        return DATE_CHARS.indexOf(char) !== -1 || TIME_CHARS.indexOf(char) !== -1;\n    }\n\n    /** Spins the date portion in a date-time editor. */\n    public static spinDate(delta: number, newDate: Date, spinLoop: boolean): void {\n        const maxDate = DateTimeUtil.daysInMonth(newDate.getFullYear(), newDate.getMonth());\n        let date = newDate.getDate() + delta;\n        if (date > maxDate) {\n            date = spinLoop ? date % maxDate : maxDate;\n        } else if (date < 1) {\n            date = spinLoop ? maxDate + (date % maxDate) : 1;\n        }\n\n        newDate.setDate(date);\n    }\n\n    /** Spins the month portion in a date-time editor. */\n    public static spinMonth(delta: number, newDate: Date, spinLoop: boolean): void {\n        const maxDate = DateTimeUtil.daysInMonth(newDate.getFullYear(), newDate.getMonth() + delta);\n        if (newDate.getDate() > maxDate) {\n            newDate.setDate(maxDate);\n        }\n\n        const maxMonth = 11;\n        const minMonth = 0;\n        let month = newDate.getMonth() + delta;\n        if (month > maxMonth) {\n            month = spinLoop ? (month % maxMonth) - 1 : maxMonth;\n        } else if (month < minMonth) {\n            month = spinLoop ? maxMonth + (month % maxMonth) + 1 : minMonth;\n        }\n\n        newDate.setMonth(month);\n    }\n\n    /** Spins the year portion in a date-time editor. */\n    public static spinYear(delta: number, newDate: Date): void {\n        const maxDate = DateTimeUtil.daysInMonth(newDate.getFullYear() + delta, newDate.getMonth());\n        if (newDate.getDate() > maxDate) {\n            // clip to max to avoid leap year change shifting the entire value\n            newDate.setDate(maxDate);\n        }\n        newDate.setFullYear(newDate.getFullYear() + delta);\n    }\n\n    /** Spins the hours portion in a date-time editor. */\n    public static spinHours(delta: number, newDate: Date, spinLoop: boolean): void {\n        const maxHour = 23;\n        const minHour = 0;\n        let hours = newDate.getHours() + delta;\n        if (hours > maxHour) {\n            hours = spinLoop ? hours % maxHour - 1 : maxHour;\n        } else if (hours < minHour) {\n            hours = spinLoop ? maxHour + (hours % maxHour) + 1 : minHour;\n        }\n\n        newDate.setHours(hours);\n    }\n\n    /** Spins the minutes portion in a date-time editor. */\n    public static spinMinutes(delta: number, newDate: Date, spinLoop: boolean): void {\n        const maxMinutes = 59;\n        const minMinutes = 0;\n        let minutes = newDate.getMinutes() + delta;\n        if (minutes > maxMinutes) {\n            minutes = spinLoop ? minutes % maxMinutes - 1 : maxMinutes;\n        } else if (minutes < minMinutes) {\n            minutes = spinLoop ? maxMinutes + (minutes % maxMinutes) + 1 : minMinutes;\n        }\n\n        newDate.setMinutes(minutes);\n    }\n\n    /** Spins the seconds portion in a date-time editor. */\n    public static spinSeconds(delta: number, newDate: Date, spinLoop: boolean): void {\n        const maxSeconds = 59;\n        const minSeconds = 0;\n        let seconds = newDate.getSeconds() + delta;\n        if (seconds > maxSeconds) {\n            seconds = spinLoop ? seconds % maxSeconds - 1 : maxSeconds;\n        } else if (seconds < minSeconds) {\n            seconds = spinLoop ? maxSeconds + (seconds % maxSeconds) + 1 : minSeconds;\n        }\n\n        newDate.setSeconds(seconds);\n    }\n\n     /** Spins the fractional seconds (milliseconds) portion in a date-time editor. */\n    public static spinFractionalSeconds(delta: number, newDate: Date, spinLoop: boolean) {\n        const maxMs = 999;\n        const minMs = 0;\n        let ms = newDate.getMilliseconds() + delta;\n        if (ms > maxMs) {\n            ms = spinLoop ? ms % maxMs - 1 : maxMs;\n        } else if (ms < minMs) {\n            ms = spinLoop ? maxMs + (ms % maxMs) + 1 : minMs;\n        }\n\n        newDate.setMilliseconds(ms);\n    }\n\n    /** Spins the AM/PM portion in a date-time editor. */\n    public static spinAmPm(newDate: Date, currentDate: Date, amPmFromMask: string): Date {\n        if(DateTimeUtil.isAm(amPmFromMask)) {\n            newDate = new Date(newDate.setHours(newDate.getHours() + 12));\n        } else if(DateTimeUtil.isPm(amPmFromMask)) {\n            newDate = new Date(newDate.setHours(newDate.getHours() - 12));\n        }\n\n        if (newDate.getDate() !== currentDate.getDate()) {\n            return currentDate;\n        }\n\n        return newDate;\n    }\n\n    /**\n     * Determines whether the provided value is greater than the provided max value.\n     *\n     * @param includeTime set to false if you want to exclude time portion of the two dates\n     * @param includeDate set to false if you want to exclude the date portion of the two dates\n     * @returns true if provided value is greater than provided maxValue\n     */\n    public static greaterThanMaxValue(value: Date, maxValue: Date, includeTime = true, includeDate = true): boolean {\n        if (includeTime && includeDate) {\n            return value.getTime() > maxValue.getTime();\n        }\n\n        const _value = new Date(value.getTime());\n        const _maxValue = new Date(maxValue.getTime());\n        if (!includeTime) {\n            _value.setHours(0, 0, 0, 0);\n            _maxValue.setHours(0, 0, 0, 0);\n        }\n        if (!includeDate) {\n            _value.setFullYear(0, 0, 0);\n            _maxValue.setFullYear(0, 0, 0);\n        }\n\n        return _value.getTime() > _maxValue.getTime();\n    }\n\n    /**\n     * Determines whether the provided value is less than the provided min value.\n     *\n     * @param includeTime set to false if you want to exclude time portion of the two dates\n     * @param includeDate set to false if you want to exclude the date portion of the two dates\n     * @returns true if provided value is less than provided minValue\n     */\n    public static lessThanMinValue(value: Date, minValue: Date, includeTime = true, includeDate = true): boolean {\n        if (includeTime && includeDate) {\n            return value.getTime() < minValue.getTime();\n        }\n\n        const _value = new Date(value.getTime());\n        const _minValue = new Date(minValue.getTime());\n        if (!includeTime) {\n            _value.setHours(0, 0, 0, 0);\n            _minValue.setHours(0, 0, 0, 0);\n        }\n        if (!includeDate) {\n            _value.setFullYear(0, 0, 0);\n            _minValue.setFullYear(0, 0, 0);\n        }\n\n        return _value.getTime() < _minValue.getTime();\n    }\n\n    /**\n     * Validates a value within a given min and max value range.\n     *\n     * @param value The value to validate\n     * @param minValue The lowest possible value that `value` can take\n     * @param maxValue The largest possible value that `value` can take\n     */\n    public static validateMinMax(value: Date, minValue: Date | string, maxValue: Date | string,\n        includeTime = true, includeDate = true): ValidationErrors {\n        if (!value) {\n            return null;\n        }\n        const errors = {};\n        const min = DateTimeUtil.isValidDate(minValue) ? minValue : DateTimeUtil.parseIsoDate(minValue);\n        const max = DateTimeUtil.isValidDate(maxValue) ? maxValue : DateTimeUtil.parseIsoDate(maxValue);\n        if (min && value && DateTimeUtil.lessThanMinValue(value, min, includeTime, includeDate)) {\n            Object.assign(errors, { minValue: true });\n        }\n        if (max && value && DateTimeUtil.greaterThanMaxValue(value, max, includeTime, includeDate)) {\n            Object.assign(errors, { maxValue: true });\n        }\n\n        return errors;\n    }\n\n    /** Parse an ISO string to a Date */\n    public static parseIsoDate(value: string): Date | null {\n        let regex = /^\\d{4}/g;\n        const timeLiteral = 'T';\n        if (regex.test(value)) {\n            return new Date(value + `${value.indexOf(timeLiteral) === -1 ? 'T00:00:00' : ''}`);\n        }\n\n        regex = /^\\d{2}/g;\n        if (regex.test(value)) {\n            const dateNow = new Date().toISOString();\n            // eslint-disable-next-line prefer-const\n            let [datePart, _timePart] = dateNow.split(timeLiteral);\n            return new Date(`${datePart}T${value}`);\n        }\n\n        return null;\n    }\n\n    /**\n     * Returns whether the input is valid date\n     *\n     * @param value input to check\n     * @returns true if provided input is a valid date\n     */\n    public static isValidDate(value: any): value is Date {\n        if (isDate(value)) {\n            return !isNaN(value.getTime());\n        }\n\n        return false;\n    }\n\n    public static isFormatNumeric(locale: string, inputFormat: string, formatter: BaseFormatter): boolean {\n        const dateParts = DateTimeUtil.parseDateTimeFormat(inputFormat, formatter);\n        if (predefinedNonNumericFormats.has(inputFormat) || dateParts.every(p => p.type === DatePart.Literal)) {\n            return false;\n        }\n        for (let i = 0; i < dateParts.length; i++) {\n            if (dateParts[i].type === DatePart.AmPm || dateParts[i].type === DatePart.Literal) {\n                continue;\n            }\n            const transformedValue = formatter.formatDate(new Date(), dateParts[i].format, locale);\n            // check if the transformed date/time part contains any kind of letter from any language\n            if (/\\p{L}+/gu.test(transformedValue)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Returns an input format that can be used by the date-time editors, as\n     * - if the format is already numeric, return it as is\n     * - if it is among the predefined numeric ones, return it as the equivalent locale-based format\n     *   for the corresponding numeric date parts\n     * - otherwise, return an empty string\n     */\n    public static getNumericInputFormat(locale: string, formatter: BaseFormatter, format: string): string {\n        let resultFormat = '';\n        if (!format) {\n            return resultFormat;\n        }\n        if (predefinedNumericFormats.has(format)) {\n            resultFormat = DateTimeUtil.getLocaleInputFormatFromParts(locale, formatter, predefinedNumericFormats.get(format));\n\n        } else if (DateTimeUtil.isFormatNumeric(locale, format, formatter)) {\n            resultFormat = format;\n        }\n        return resultFormat;\n    }\n\n    /** Gets the locale-based format from an array of date parts */\n    private static getLocaleInputFormatFromParts(locale: string, formatter: BaseFormatter, dateParts: DateParts[]): string {\n        const options = {};\n        dateParts.forEach(p => {\n            if (p === DateParts.Year) {\n                options[p] = FormatDesc.Numeric;\n            } else if (p !== DateParts.AmPm) {\n                options[p] = FormatDesc.TwoDigits;\n            }\n        });\n\n        return formatter.getLocaleDateTimeFormat(locale, true, options);\n    }\n\n    private static addCurrentPart(currentPart: DatePartInfo, dateTimeParts: DatePartInfo[]): void {\n        DateTimeUtil.ensureLeadingZero(currentPart);\n        currentPart.end = currentPart.start + currentPart.format.length;\n        dateTimeParts.push(currentPart);\n    }\n\n    private static daysInMonth(fullYear: number, month: number): number {\n        return new Date(fullYear, month + 1, 0).getDate();\n    }\n\n    private static trimEmptyPlaceholders(value: string, promptChar?: string): string {\n        const result = value.replace(new RegExp(promptChar || '_', 'g'), '');\n        return result;\n    }\n\n    private static prependValue(value: number, partLength: number, prependChar: string): string {\n        return (prependChar + value.toString()).slice(-partLength);\n    }\n\n    private static toTwelveHourFormat(value: string, promptChar = '_'): number {\n        let hour = parseInt(value.replace(new RegExp(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 static ensureLeadingZero(part: DatePartInfo) {\n        switch (part.type) {\n            case DatePart.Date:\n            case DatePart.Month:\n            case DatePart.Hours:\n            case DatePart.Minutes:\n            case DatePart.Seconds:\n                if (part.format.length === 1) {\n                    part.format = part.format.repeat(2);\n                }\n                break;\n            case DatePart.FractionalSeconds:\n                part.format = part.format[0].repeat(3);\n                break;\n        }\n    }\n\n    private static getCleanVal(inputData: string, datePart: DatePartInfo, promptChar?: string): string {\n        return DateTimeUtil.trimEmptyPlaceholders(inputData.substring(datePart.start, datePart.end), promptChar);\n    }\n\n    private static determineDatePart(char: string): DatePart {\n        switch (char) {\n            case 'd':\n            case 'D':\n                return DatePart.Date;\n            case 'M':\n                return DatePart.Month;\n            case 'y':\n            case 'Y':\n                return DatePart.Year;\n            case 'h':\n            case 'H':\n                return DatePart.Hours;\n            case 'm':\n                return DatePart.Minutes;\n            case 's':\n                return DatePart.Seconds;\n            case 'S':\n                return DatePart.FractionalSeconds;\n            case 'a':\n            case 't':\n            case 'T':\n                return DatePart.AmPm;\n            default:\n                return DatePart.Literal;\n        }\n    }\n\n    private static getFormatOptions(dataType: GridColumnDataType, forceLeadingZero?: boolean) {\n        const resolvedFormat = forceLeadingZero ? FormatDesc.TwoDigits : FormatDesc.Numeric;\n        const dateOptions = {\n            day: resolvedFormat,\n            month: resolvedFormat,\n            year: FormatDesc.Numeric\n        };\n        const timeOptions = {\n            hour: resolvedFormat,\n            minute: resolvedFormat\n        };\n        switch (dataType) {\n            case GridColumnDataType.Date:\n                return dateOptions;\n            case GridColumnDataType.Time:\n                return timeOptions;\n            case GridColumnDataType.DateTime:\n                return {\n                    ...dateOptions,\n                    ...timeOptions,\n                    second: resolvedFormat\n                };\n            default:\n                return { };\n        }\n    }\n}\n","import { isDate } from '../../core/utils';\n\n/* eslint-disable @typescript-eslint/consistent-type-definitions */\nexport type DayParameter = CalendarDay | Date;\n\nexport type CalendarRangeParams = {\n    start: DayParameter;\n    end: DayParameter | number;\n    unit?: DayInterval;\n    inclusive?: boolean;\n};\n\ntype CalendarDayParams = {\n    year: number;\n    month: number;\n    date?: number;\n};\n\nexport type DayInterval = \"year\" | \"quarter\" | \"month\" | \"week\" | \"day\";\n\nexport const daysInWeek = 7;\nconst millisecondsInDay = 86400000;\n\nexport function toCalendarDay(date: DayParameter) {\n    return isDate(date) ? CalendarDay.from(date) : date;\n}\n\nfunction checkRollover(original: CalendarDay, modified: CalendarDay) {\n    return original.date !== modified.date\n        ? modified.set({ date: 0 })\n        : modified;\n}\n\nexport class CalendarDay {\n    private _date!: Date;\n\n    /** Constructs and returns the current day. */\n    public static get today() {\n        return CalendarDay.from(new Date());\n    }\n\n    /** Constructs a new CalendarDay instance from a Date object. */\n    public static from(date: Date) {\n        return new CalendarDay({\n            year: date.getFullYear(),\n            month: date.getMonth(),\n            date: date.getDate(),\n        });\n    }\n\n    constructor(args: CalendarDayParams) {\n        this._date = new Date(args.year, args.month, args.date ?? 1);\n    }\n\n    /** Returns a copy of this instance. */\n    public clone() {\n        return CalendarDay.from(this._date);\n    }\n\n    /**\n     * Returns a new instance with values replaced.\n     */\n    public set(args: Partial<CalendarDayParams>) {\n        return new CalendarDay({\n            year: args.year ?? this.year,\n            month: args.month ?? this.month,\n            date: args.date ?? this.date,\n        });\n    }\n\n    public add(unit: DayInterval, value: number) {\n        const result = this.clone();\n        switch (unit) {\n            case \"year\":\n                result._date.setFullYear(result.year + value);\n                return checkRollover(this, result);\n            case \"quarter\":\n                result._date.setMonth(result.month + 3 * value);\n                return checkRollover(this, result);\n            case \"month\":\n                result._date.setMonth(result.month + value);\n                return checkRollover(this, result);\n            case \"week\":\n                result._date.setDate(result.date + 7 * value);\n                return result;\n            case \"day\":\n                result._date.setDate(result.date + value);\n                return result;\n            default:\n                throw new Error(\"Invalid interval\");\n        }\n    }\n\n    /** Returns the day of the week (Sunday = 0). */\n    public get day() {\n        return this._date.getDay();\n    }\n\n    /** Returns the full year. */\n    public get year() {\n        return this._date.getFullYear();\n    }\n\n    /** Returns the month. */\n    public get month() {\n        return this._date.getMonth();\n    }\n\n    /** Returns the date */\n    public get date() {\n        return this._date.getDate();\n    }\n\n    /** Returns the timestamp since epoch in milliseconds. */\n    public get timestamp() {\n        return this._date.getTime();\n    }\n\n    /** Returns the ISO 8601 week number. */\n    public get week() {\n        return this.getWeekNumber();\n    }\n\n    /**\n     * Gets the week number based on week start day.\n     * Uses ISO 8601 (first Thursday rule) only when weekStart is Monday (1).\n     * For other week starts, uses simple counting from January 1st.\n     */\n    public getWeekNumber(weekStart: number = 1): number {\n        if (weekStart === 1) {\n            return this.calculateISO8601WeekNumber();\n        } else {\n            return this.calculateSimpleWeekNumber(weekStart);\n        }\n    }\n\n    /**\n     * Calculates week number using ISO 8601 standard (Monday start, first Thursday rule).\n     */\n    private calculateISO8601WeekNumber(): number {\n        const currentThursday = this.getThursdayOfWeek();\n        const firstWeekThursday = this.getFirstWeekThursday(currentThursday.year);\n\n        const weeksDifference = this.getWeeksDifference(currentThursday, firstWeekThursday);\n        const weekNumber = weeksDifference + 1;\n\n        // Handle dates that belong to the previous year's last week\n        if (weekNumber <= 0) {\n            return this.getPreviousYearLastWeek(currentThursday.year - 1);\n        }\n\n        return weekNumber;\n    }\n\n    /**\n     * Calculates week number using simple counting from January 1st.\n     */\n    private calculateSimpleWeekNumber(weekStart: number): number {\n        const yearStart = new CalendarDay({ year: this.year, month: 0, date: 1 });\n        const yearStartDay = yearStart.day;\n\n        const daysUntilFirstWeek = (weekStart - yearStartDay + 7) % 7;\n\n        if (daysUntilFirstWeek > 0) {\n            const firstWeekStart = yearStart.add('day', daysUntilFirstWeek);\n\n            if (this.timestamp < firstWeekStart.timestamp) {\n                const prevYear = this.year - 1;\n                const prevYearDec31 = new CalendarDay({ year: prevYear, month: 11, date: 31 });\n                return prevYearDec31.calculateSimpleWeekNumber(weekStart);\n            }\n\n            const daysSinceFirstWeek = Math.round((this.timestamp - firstWeekStart.timestamp) / millisecondsInDay);\n            return Math.floor(daysSinceFirstWeek / 7) + 1;\n        } else {\n            const daysSinceYearStart = Math.round((this.timestamp - yearStart.timestamp) / millisecondsInDay);\n            return Math.floor(daysSinceYearStart / 7) + 1;\n        }\n    }\n\n    /**\n     * Gets the Thursday of the current date's week (ISO 8601 helper).\n     */\n    private getThursdayOfWeek(): CalendarDay {\n        const dayOffset = (this.day - 1 + 7) % 7; // Monday start\n        const thursdayOffset = 3; // Thursday is 3 days from Monday\n        return this.add('day', thursdayOffset - dayOffset);\n    }\n\n    /**\n     * Gets the Thursday of the first week of the given year (ISO 8601 helper).\n     */\n    private getFirstWeekThursday(year: number): CalendarDay {\n        const january4th = new CalendarDay({ year, month: 0, date: 4 });\n        const dayOffset = (january4th.day - 1 + 7) % 7; // Monday start\n        const thursdayOffset = 3; // Thursday is 3 days from Monday\n        return january4th.add('day', thursdayOffset - dayOffset);\n    }\n\n    /**\n     * Calculates the number of weeks between two Thursday dates (ISO 8601 helper).\n     */\n    private getWeeksDifference(currentThursday: CalendarDay, firstWeekThursday: CalendarDay): number {\n        const daysDifference = Math.round((currentThursday.timestamp - firstWeekThursday.timestamp) / millisecondsInDay);\n        return Math.floor(daysDifference / 7);\n    }\n\n    /**\n     * Gets the last week number of the previous year (ISO 8601 helper).\n     */\n    private getPreviousYearLastWeek(previousYear: number): number {\n        const december31st = new CalendarDay({ year: previousYear, month: 11, date: 31 });\n        const lastWeekThursday = december31st.getThursdayOfWeek();\n        const firstWeekThursday = this.getFirstWeekThursday(previousYear);\n\n        return this.getWeeksDifference(lastWeekThursday, firstWeekThursday) + 1;\n    }\n\n    /** Returns the underlying native date instance. */\n    public get native() {\n        return new Date(this._date);\n    }\n\n    /**\n     * Whether the current date is a weekend day.\n     *\n     * @remarks\n     * This is naive, since it does not account for locale specifics.\n     */\n    public get weekend() {\n        return this.day < 1 || this.day > 5;\n    }\n\n    public equalTo(value: DayParameter) {\n        return this.timestamp === toCalendarDay(value).timestamp;\n    }\n\n    public greaterThan(value: DayParameter) {\n        return this.timestamp > toCalendarDay(value).timestamp;\n    }\n    public greaterThanOrEqual(value: DayParameter) {\n        return this.timestamp >= toCalendarDay(value).timestamp;\n    }\n\n    public lessThan(value: DayParameter) {\n        return this.timestamp < toCalendarDay(value).timestamp;\n    }\n\n    public lessThanOrEqual(value: DayParameter) {\n        return this.timestamp <= toCalendarDay(value).timestamp;\n    }\n\n    public toString() {\n        return `${this.native}`;\n    }\n}\n","import {\n    CalendarDay,\n    CalendarRangeParams,\n    DayParameter,\n    daysInWeek,\n    toCalendarDay,\n} from \"./model\";\nimport { DateRangeDescriptor, DateRangeType } from '../../core/dates';\nimport { first, last, modulo } from '../../core/utils';\nimport { getDateFormatter } from 'igniteui-i18n-core';\n\ninterface IFormattedParts {\n    value: string;\n    literal: string;\n    combined: string;\n}\n\nexport function areSameMonth(\n    firstMonth: DayParameter,\n    secondMonth: DayParameter,\n) {\n    const [a, b] = [toCalendarDay(firstMonth), toCalendarDay(secondMonth)];\n    return a.year === b.year && a.month === b.month;\n}\n\nexport function isNextMonth(target: DayParameter, origin: DayParameter) {\n    const [a, b] = [toCalendarDay(target), toCalendarDay(origin)];\n    return a.year === b.year ? a.month > b.month : a.year > b.year;\n}\n\nexport function isPreviousMonth(target: DayParameter, origin: DayParameter) {\n    const [a, b] = [toCalendarDay(target), toCalendarDay(origin)];\n    return a.year === b.year ? a.month < b.month : a.year < b.year;\n}\n\n/** Returns the next date starting from `start` that does not match the `disabled` descriptors */\nexport function getNextActiveDate(\n    start: CalendarDay,\n    disabled: DateRangeDescriptor[] = [],\n) {\n    while (isDateInRanges(start, disabled)) {\n        start = start.add(\"day\", 1);\n    }\n\n    return start;\n}\n\n/** Returns the previous date starting from `start` that does not match the `disabled` descriptors */\nexport function getPreviousActiveDate(\n    start: CalendarDay,\n    disabled: DateRangeDescriptor[] = [],\n) {\n    while (isDateInRanges(start, disabled)) {\n        start = start.add(\"day\", -1);\n    }\n\n    return start;\n}\n\nexport function getClosestActiveDate(\n    start: CalendarDay,\n    delta: number,\n    disabled: DateRangeDescriptor[] = [],\n): CalendarDay {\n    // TODO: implement a more robust logic for max attempts,\n    // i.e. the amount of days to jump between before giving up\n    // currently it will try to find the closest date for a year\n    const maxAttempts = 366;\n    let date = start;\n    let attempts = 0;\n\n    while (attempts < maxAttempts) {\n        date = start.add(\"day\", delta * (attempts + 1));\n\n        if (!isDateInRanges(date, disabled)) {\n            return date;\n        }\n\n        attempts++;\n    }\n\n    return date;\n}\n\n/**\n * Returns a generator yielding day values between `start` and `end` (non-inclusive)\n * by a given `unit` as a step.\n *\n * @remarks\n * By default, `unit` is set to 'day'.\n */\nexport function* calendarRange(\n    options: CalendarRangeParams\n): Generator<CalendarDay, void, unknown> {\n    const { start, end, unit = 'day', inclusive = false } = options;\n\n    let currentDate = toCalendarDay(start);\n    const endDate =\n        typeof end === 'number'\n            ? toCalendarDay(start).add(unit, end)\n            : toCalendarDay(end);\n\n    const isReversed = endDate.lessThan(currentDate);\n    const step = isReversed ? -1 : 1;\n\n    const shouldContinue = () => {\n        if (inclusive) {\n            return isReversed\n                ? currentDate.greaterThanOrEqual(endDate)\n                : currentDate.lessThanOrEqual(endDate);\n        }\n        return isReversed\n            ? currentDate.greaterThan(endDate)\n            : currentDate.lessThan(endDate);\n    };\n\n    while (shouldContinue()) {\n        yield currentDate;\n        currentDate = currentDate.add(unit, step);\n    }\n}\n\nexport function* generateMonth(value: DayParameter, firstWeekDay: number) {\n    const { year, month } = toCalendarDay(value);\n\n    const start = new CalendarDay({ year, month });\n    const offset = modulo(start.day - firstWeekDay, daysInWeek);\n    yield* calendarRange({\n        start: start.add(\"day\", -offset),\n        end: 42,\n    });\n}\n\nexport function getYearRange(current: DayParameter, range: number) {\n    const year = toCalendarDay(current).year;\n    const start = Math.floor(year / range) * range;\n    return { start, end: start + range - 1 };\n}\n\nexport function isDateInRanges(\n    date: DayParameter,\n    ranges: DateRangeDescriptor[],\n) {\n    const value = toCalendarDay(date);\n\n    return ranges.some((range) => {\n        const days = (range.dateRange ?? []).map((day) => toCalendarDay(day));\n\n        switch (range.type) {\n            case DateRangeType.After:\n                return value.greaterThan(first(days));\n\n            case DateRangeType.Before:\n                return value.lessThan(first(days));\n\n            case DateRangeType.Between: {\n                const min = Math.min(\n                    first(days).timestamp,\n                    last(days).timestamp,\n                );\n                const max = Math.max(\n                    first(days).timestamp,\n                    last(days).timestamp,\n                );\n                return value.timestamp >= min && value.timestamp <= max;\n            }\n\n            case DateRangeType.Specific:\n                return days.some((day) => day.equalTo(value));\n\n            case DateRangeType.Weekdays:\n                return !value.weekend;\n\n            case DateRangeType.Weekends:\n                return value.weekend;\n\n            default:\n                return false;\n        }\n    });\n}\n\nexport function formatToParts(\n    date: Date,\n    locale: string,\n    options: Intl.DateTimeFormatOptions,\n    parts: string[],\n): Record<string, any> {\n    const formatter = getDateFormatter().getIntlFormatter(locale, options);\n    const result: Record<string, any> = {\n        date,\n        full: formatter.format(date),\n    };\n\n    const getFormattedPart = (\n        formattedParts: Intl.DateTimeFormatPart[],\n        partType: string,\n    ): IFormattedParts => {\n        const part = formattedParts.find(({ type }) => type === partType);\n        const nextPart = formattedParts[formattedParts.indexOf(part) + 1];\n        const value = part?.value || \"\";\n        const literal = nextPart?.type === \"literal\" ? nextPart.value : \"\";\n        return {\n            value,\n            literal,\n            combined: value + literal,\n        };\n    };\n\n    if (\"formatToParts\" in formatter) {\n        const formattedParts = formatter.formatToParts(date);\n        parts.forEach(\n            (part) => (result[part] = getFormattedPart(formattedParts, part)),\n        );\n    } else {\n        parts.forEach(\n            (part) => (result[part] = { value: \"\", literal: \"\", combined: \"\" }),\n        );\n    }\n\n    return result;\n}\n","import { cloneValue, cloneValueCached } from \"../core/utils\";\n\nexport interface IDataCloneStrategy {\n    /**\n     * Clones provided data\n     * @param data primitive value, date and object to be cloned\n     * @returns deep copy of provided value\n     */\n    clone(data: any): any;\n}\n\n/**\n * Simplified data clone strategy that deep clones primitive values, dates and objects.\n * Does not support circular references in objects.\n */\nexport class DefaultDataCloneStrategy implements IDataCloneStrategy {\n    public clone(data: any): any {\n        return cloneValue(data);\n    }\n}\n\n/**\n * Data clone strategy that is uses cache to deep clone primitive values, dates and objects.\n * It allows using circular references inside object.\n */\nexport class CachedDataCloneStrategy implements IDataCloneStrategy {\n    public clone(data: any): any {\n        return cloneValueCached(data, new Map<any, any>);\n    }\n}\n","import { IFilteringOperation } from './filtering-condition';\nimport { IExpressionTree } from './filtering-expressions-tree';\n\n/* mustCoerceToInt */\nexport enum FilteringLogic {\n    And,\n    Or\n}\n\n/* marshalByValue */\n/* tsPlainInterface */\n/**\n * Represents filtering expressions.\n */\nexport declare interface IFilteringExpression {\n    fieldName: string;\n    condition?: IFilteringOperation | null;\n    conditionName?: string | null;\n    searchVal?: any;\n    searchTree?: IExpressionTree | null;\n    ignoreCase?: boolean;\n}\n","/**\n * Provides base filtering operations\n * Implementations should be Singleton\n *\n * @export\n */\nexport class IgxFilteringOperand {\n    protected static _instance: IgxFilteringOperand = null;\n    public operations: IFilteringOperation[];\n\n    constructor() {\n        this.operations = [{\n            name: 'null',\n            isUnary: true,\n            iconName: 'filter_null',\n            logic: (target: any) => target === null\n        }, {\n            name: 'notNull',\n            isUnary: true,\n            iconName: 'filter_not_null',\n            logic: (target: any) => target !== null\n        }, {\n            name: 'in',\n            isUnary: false,\n            iconName: 'filter_in',\n            hidden: true,\n            logic: (target: any, searchVal: Set<any>) => this.findValueInSet(target, searchVal)\n        }, {\n            name: 'inQuery',\n            isUnary: false,\n            isNestedQuery: true,\n            iconName: 'in',\n            logic: (target: any, searchVal: Set<any>) => this.findValueInSet(target, searchVal)\n        }, {\n            name: 'notInQuery',\n            isUnary: false,\n            isNestedQuery: true,\n            iconName: 'not-in',\n            logic: (target: any, searchVal: Set<any>) => !this.findValueInSet(target, searchVal)\n        }];\n    }\n\n    public static instance(): IgxFilteringOperand {\n        return this._instance || (this._instance = new this());\n    }\n\n    /**\n     * Returns an array of names of the conditions which are visible in the filtering UI\n     */\n    public conditionList(): string[] {\n        return this.operations.filter(f => !f.hidden && !f.isNestedQuery).map((element) => element.name);\n    }\n\n    /**\n     * Returns an array of names of the conditions which are visible in the UI, including \"In\" and \"Not In\", allowing the creation of sub-queries.\n     * @hidden @internal\n     */\n    public extendedConditionList(): string[] {\n        return this.operations.filter(f => !f.hidden).map((element) => element.name);\n    }\n\n    /**\n     * Returns an instance of the condition with the specified name.\n     *\n     * @param name The name of the condition.\n     */\n    public condition(name: string): IFilteringOperation {\n        return this.operations.find((element) => element.name === name);\n    }\n\n    /**\n     * Adds a new condition to the filtering operations.\n     *\n     * @param operation The filtering operation.\n     */\n    public append(operation: IFilteringOperation) {\n        this.operations.push(operation);\n    }\n\n    protected findValueInSet(target: any, searchVal: Set<any>) {\n        return searchVal.has(target);\n    }\n}\n\n/* blazorCSSuppress */\n/**\n * Provides filtering operations for booleans\n *\n * @export\n */\nexport class IgxBooleanFilteringOperand extends IgxFilteringOperand {\n    protected constructor() {\n        super();\n        const newOperations: IFilteringOperation[] = [{\n            name: 'all',\n            isUnary: true,\n            iconName: 'filter_all',\n            logic: (_target: boolean) => true\n        }, {\n            name: 'true',\n            isUnary: true,\n            iconName: 'filter_true',\n            logic: (target: boolean) => !!(target && target !== null && target !== undefined)\n        }, {\n            name: 'false',\n            isUnary: true,\n            iconName: 'filter_false',\n            logic: (target: boolean) => !target && target !== null && target !== undefined\n        }, {\n            name: 'empty',\n            isUnary: true,\n            iconName: 'filter_empty',\n            logic: (target: boolean) => target === null || target === undefined\n        }, {\n            name: 'notEmpty',\n            isUnary: true,\n            iconName: 'filter_not_empty',\n            logic: (target: boolean) => target !== null && target !== undefined\n        }];\n\n        this.operations = newOperations.concat(this.operations);\n    }\n}\n\n/* blazorCSSuppress */\n/**\n * @internal\n * @hidden\n */\nclass IgxBaseDateTimeFilteringOperand extends IgxFilteringOperand {\n    protected constructor() {\n        super();\n        const newOperations: IFilteringOperation[] = [{\n            name: 'empty',\n            isUnary: true,\n            iconName: 'filter_empty',\n            logic: (target: Date) => target === null || target === undefined\n        }, {\n            name: 'notEmpty',\n            isUnary: true,\n            iconName: 'filter_not_empty',\n            logic: (target: Date) => target !== null && target !== undefined\n        }];\n\n        this.operations = newOperations.concat(this.operations);\n    }\n\n    /**\n     * Splits a Date object into parts\n     *\n     * @memberof IgxDateFilteringOperand\n     */\n    public static getDateParts(date: Date, dateFormat?: string): IDateParts {\n        const res = {\n            day: null,\n            hours: null,\n            milliseconds: null,\n            minutes: null,\n            month: null,\n            seconds: null,\n            year: null\n        };\n        if (!date || !dateFormat) {\n            return res;\n        }\n        if (dateFormat.indexOf('y') >= 0) {\n            res.year = date.getFullYear();\n        }\n        if (dateFormat.indexOf('M') >= 0) {\n            res.month = date.getMonth();\n        }\n        if (dateFormat.indexOf('d') >= 0) {\n            res.day = date.getDate();\n        }\n        if (dateFormat.indexOf('h') >= 0) {\n            res.hours = date.getHours();\n        }\n        if (dateFormat.indexOf('m') >= 0) {\n            res.minutes = date.getMinutes();\n        }\n        if (dateFormat.indexOf('s') >= 0) {\n            res.seconds = date.getSeconds();\n        }\n        if (dateFormat.indexOf('f') >= 0) {\n            res.milliseconds = date.getMilliseconds();\n        }\n        return res;\n    }\n\n    protected override findValueInSet(target: any, searchVal: Set<any>) {\n        if (!target) {\n            return false;\n        }\n        return searchVal.has((target instanceof Date) ? target.toISOString() : target);\n    }\n\n    protected validateInputData(target: Date) {\n        if (!(target instanceof Date)) {\n            throw new Error('Could not perform filtering on \\'date\\' column because the datasource object type is not \\'Date\\'.');\n        }\n    }\n}\n\n/* blazorCSSuppress */\n/**\n * Provides filtering operations for Dates\n *\n * @export\n */\nexport class IgxDateFilteringOperand extends IgxBaseDateTimeFilteringOperand {\n    protected constructor() {\n        super();\n        const newOperations: IFilteringOperation[] = [{\n            name: 'equals',\n            isUnary: false,\n            iconName: 'filter_equal',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const targetp = IgxDateFilteringOperand.getDateParts(target, 'yMd');\n                const searchp = IgxDateFilteringOperand.getDateParts(searchVal, 'yMd');\n                return targetp.year === searchp.year &&\n                    targetp.month === searchp.month &&\n                    targetp.day === searchp.day;\n            }\n        }, {\n            name: 'doesNotEqual',\n            isUnary: false,\n            iconName: 'filter_not_equal',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return true;\n                }\n\n                this.validateInputData(target);\n\n                const targetp = IgxDateFilteringOperand.getDateParts(target, 'yMd');\n                const searchp = IgxDateFilteringOperand.getDateParts(searchVal, 'yMd');\n                return targetp.year !== searchp.year ||\n                    targetp.month !== searchp.month ||\n                    targetp.day !== searchp.day;\n            }\n        }, {\n            name: 'before',\n            isUnary: false,\n            iconName: 'filter_before',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                return target < searchVal;\n            }\n        }, {\n            name: 'after',\n            isUnary: false,\n            iconName: 'filter_after',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                return target > searchVal;\n            }\n        }, {\n            name: 'today',\n            isUnary: true,\n            iconName: 'filter_today',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateFilteringOperand.getDateParts(target, 'yMd');\n                const now = IgxDateFilteringOperand.getDateParts(new Date(), 'yMd');\n                return d.year === now.year &&\n                    d.month === now.month &&\n                    d.day === now.day;\n            }\n        }, {\n            name: 'yesterday',\n            isUnary: true,\n            iconName: 'filter_yesterday',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const td = IgxDateFilteringOperand.getDateParts(target, 'yMd');\n                const y = ((d) => new Date(d.setDate(d.getDate() - 1)))(new Date());\n                const yesterday = IgxDateFilteringOperand.getDateParts(y, 'yMd');\n                return td.year === yesterday.year &&\n                    td.month === yesterday.month &&\n                    td.day === yesterday.day;\n            }\n        }, {\n            name: 'thisMonth',\n            isUnary: true,\n            iconName: 'filter_this_month',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateFilteringOperand.getDateParts(target, 'yM');\n                const now = IgxDateFilteringOperand.getDateParts(new Date(), 'yM');\n                return d.year === now.year &&\n                    d.month === now.month;\n            }\n        }, {\n            name: 'lastMonth',\n            isUnary: true,\n            iconName: 'filter_last_month',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateFilteringOperand.getDateParts(target, 'yM');\n                const now = IgxDateFilteringOperand.getDateParts(new Date(), 'yM');\n                if (!now.month) {\n                    now.month = 11;\n                    now.year -= 1;\n                } else {\n                    now.month--;\n                }\n                return d.year === now.year &&\n                    d.month === now.month;\n            }\n        }, {\n            name: 'nextMonth',\n            isUnary: true,\n            iconName: 'filter_next_month',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateFilteringOperand.getDateParts(target, 'yM');\n                const now = IgxDateFilteringOperand.getDateParts(new Date(), 'yM');\n                if (now.month === 11) {\n                    now.month = 0;\n                    now.year += 1;\n                } else {\n                    now.month++;\n                }\n                return d.year === now.year &&\n                    d.month === now.month;\n            }\n        }, {\n            name: 'thisYear',\n            isUnary: true,\n            iconName: 'filter_this_year',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateFilteringOperand.getDateParts(target, 'y');\n                const now = IgxDateFilteringOperand.getDateParts(new Date(), 'y');\n                return d.year === now.year;\n            }\n        }, {\n            name: 'lastYear',\n            isUnary: true,\n            iconName: 'filter_last_year',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateFilteringOperand.getDateParts(target, 'y');\n                const now = IgxDateFilteringOperand.getDateParts(new Date(), 'y');\n                return d.year === now.year - 1;\n            }\n        }, {\n            name: 'nextYear',\n            isUnary: true,\n            iconName: 'filter_next_year',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateFilteringOperand.getDateParts(target, 'y');\n                const now = IgxDateFilteringOperand.getDateParts(new Date(), 'y');\n                return d.year === now.year + 1;\n            }\n        }];\n\n        this.operations = newOperations.concat(this.operations);\n    }\n\n    protected override findValueInSet(target: any, searchVal: Set<any>) {\n        if (!target) {\n            return false;\n        }\n\n        target = target.toDateString();\n        return searchVal.has(target);\n    }\n}\n\n/* blazorCSSuppress */\nexport class IgxDateTimeFilteringOperand extends IgxBaseDateTimeFilteringOperand {\n    protected constructor() {\n        super();\n        const newOperations: IFilteringOperation[] = [{\n            name: 'equals',\n            isUnary: false,\n            iconName: 'filter_equal',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n                this.validateInputData(target);\n                const targetp = IgxDateTimeFilteringOperand.getDateParts(target, 'yMdhms');\n                const searchp = IgxDateTimeFilteringOperand.getDateParts(searchVal, 'yMdhms');\n                return targetp.year === searchp.year &&\n                    targetp.month === searchp.month &&\n                    targetp.day === searchp.day &&\n                    targetp.hours === searchp.hours &&\n                    targetp.minutes === searchp.minutes &&\n                    targetp.seconds === searchp.seconds;\n            }\n        }, {\n            name: 'doesNotEqual',\n            isUnary: false,\n            iconName: 'filter_not_equal',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return true;\n                }\n                this.validateInputData(target);\n                const targetp = IgxDateTimeFilteringOperand.getDateParts(target, 'yMdhms');\n                const searchp = IgxDateTimeFilteringOperand.getDateParts(searchVal, 'yMdhms');\n                return targetp.year !== searchp.year ||\n                    targetp.month !== searchp.month ||\n                    targetp.day !== searchp.day ||\n                    targetp.hours !== searchp.hours ||\n                    targetp.minutes !== searchp.minutes ||\n                    targetp.seconds !== searchp.seconds;\n            }\n        }, {\n            name: 'before',\n            isUnary: false,\n            iconName: 'filter_before',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                return target < searchVal;\n            }\n        }, {\n            name: 'after',\n            isUnary: false,\n            iconName: 'filter_after',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                return target > searchVal;\n            }\n        }, {\n            name: 'today',\n            isUnary: true,\n            iconName: 'filter_today',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yMd');\n                const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yMd');\n                return d.year === now.year &&\n                    d.month === now.month &&\n                    d.day === now.day;\n            }\n        }, {\n            name: 'yesterday',\n            isUnary: true,\n            iconName: 'filter_yesterday',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const td = IgxDateTimeFilteringOperand.getDateParts(target, 'yMd');\n                const y = ((d) => new Date(d.setDate(d.getDate() - 1)))(new Date());\n                const yesterday = IgxDateTimeFilteringOperand.getDateParts(y, 'yMd');\n                return td.year === yesterday.year &&\n                    td.month === yesterday.month &&\n                    td.day === yesterday.day;\n            }\n        }, {\n            name: 'thisMonth',\n            isUnary: true,\n            iconName: 'filter_this_month',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yM');\n                const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yM');\n                return d.year === now.year &&\n                    d.month === now.month;\n            }\n        }, {\n            name: 'lastMonth',\n            isUnary: true,\n            iconName: 'filter_last_month',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yM');\n                const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yM');\n                if (!now.month) {\n                    now.month = 11;\n                    now.year -= 1;\n                } else {\n                    now.month--;\n                }\n                return d.year === now.year &&\n                    d.month === now.month;\n            }\n        }, {\n            name: 'nextMonth',\n            isUnary: true,\n            iconName: 'filter_next_month',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yM');\n                const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yM');\n                if (now.month === 11) {\n                    now.month = 0;\n                    now.year += 1;\n                } else {\n                    now.month++;\n                }\n                return d.year === now.year &&\n                    d.month === now.month;\n            }\n        }, {\n            name: 'thisYear',\n            isUnary: true,\n            iconName: 'filter_this_year',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateTimeFilteringOperand.getDateParts(target, 'y');\n                const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'y');\n                return d.year === now.year;\n            }\n        }, {\n            name: 'lastYear',\n            isUnary: true,\n            iconName: 'filter_last_year',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateTimeFilteringOperand.getDateParts(target, 'y');\n                const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'y');\n                return d.year === now.year - 1;\n            }\n        }, {\n            name: 'nextYear',\n            isUnary: true,\n            iconName: 'filter_next_year',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateTimeFilteringOperand.getDateParts(target, 'y');\n                const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'y');\n                return d.year === now.year + 1;\n            }\n        }];\n\n        this.operations = newOperations.concat(this.operations);\n    }\n}\n\n/* blazorCSSuppress */\nexport class IgxTimeFilteringOperand extends IgxBaseDateTimeFilteringOperand {\n    protected constructor() {\n        super();\n        const newOperations: IFilteringOperation[] = [{\n            name: 'at',\n            isUnary: false,\n            iconName: 'filter_equal',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n                this.validateInputData(target);\n                const targetp = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n                const searchp = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n                return targetp.hours === searchp.hours &&\n                    targetp.minutes === searchp.minutes &&\n                    targetp.seconds === searchp.seconds;\n            }\n        }, {\n            name: 'not_at',\n            isUnary: false,\n            iconName: 'filter_not_equal',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return true;\n                }\n                this.validateInputData(target);\n                const targetp = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n                const searchp = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n                return targetp.hours !== searchp.hours ||\n                    targetp.minutes !== searchp.minutes ||\n                    targetp.seconds !== searchp.seconds;\n            }\n        }, {\n            name: 'before',\n            isUnary: false,\n            iconName: 'filter_before',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n                const targetn = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n                const search = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n\n                return targetn.hours < search.hours ? true : targetn.hours === search.hours && targetn.minutes < search.minutes ?\n                    true : targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds < search.seconds;\n            }\n        }, {\n            name: 'after',\n            isUnary: false,\n            iconName: 'filter_after',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n                const targetn = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n                const search = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n\n                return targetn.hours > search.hours ? true : targetn.hours === search.hours && targetn.minutes > search.minutes ?\n                    true : targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds > search.seconds;\n            }\n        }, {\n            name: 'at_before',\n            isUnary: false,\n            iconName: 'filter_before',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n                const targetn = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n                const search = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n                return (targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds === search.seconds) ||\n                targetn.hours < search.hours ? true : targetn.hours === search.hours && targetn.minutes < search.minutes ?\n                    true : targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds < search.seconds;\n            }\n        }, {\n            name: 'at_after',\n            isUnary: false,\n            iconName: 'filter_after',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n                const targetn = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n                const search = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n                return (targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds === search.seconds) ||\n                    targetn.hours > search.hours ? true : targetn.hours === search.hours && targetn.minutes > search.minutes ?\n                    true : targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds > search.seconds;\n            }\n        }];\n\n        this.operations = newOperations.concat(this.operations);\n    }\n\n    protected override findValueInSet(target: any, searchVal: Set<any>) {\n        if (!target) {\n            return false;\n        }\n        return searchVal.has(target.toLocaleTimeString());\n    }\n}\n\n/* blazorCSSuppress */\n/**\n * Provides filtering operations for numbers\n *\n * @export\n */\nexport class IgxNumberFilteringOperand extends IgxFilteringOperand {\n    protected constructor() {\n        super();\n        const newOperations: IFilteringOperation[] = [{\n            name: 'equals',\n            isUnary: false,\n            iconName: 'filter_equal',\n            logic: (target: number, searchVal: number) => target === searchVal\n        }, {\n            name: 'doesNotEqual',\n            isUnary: false,\n            iconName: 'filter_not_equal',\n            logic: (target: number, searchVal: number) => target !== searchVal\n        }, {\n            name: 'greaterThan',\n            isUnary: false,\n            iconName: 'filter_greater_than',\n            logic: (target: number, searchVal: number) => target > searchVal\n        }, {\n            name: 'lessThan',\n            isUnary: false,\n            iconName: 'filter_less_than',\n            logic: (target: number, searchVal: number) => target < searchVal\n        }, {\n            name: 'greaterThanOrEqualTo',\n            isUnary: false,\n            iconName: 'filter_greater_than_or_equal',\n            logic: (target: number, searchVal: number) => target >= searchVal\n        }, {\n            name: 'lessThanOrEqualTo',\n            isUnary: false,\n            iconName: 'filter_less_than_or_equal',\n            logic: (target: number, searchVal: number) => target <= searchVal\n        }, {\n            name: 'empty',\n            isUnary: true,\n            iconName: 'filter_empty',\n            logic: (target: number) => target === null || target === undefined || isNaN(target)\n        }, {\n            name: 'notEmpty',\n            isUnary: true,\n            iconName: 'filter_not_empty',\n            logic: (target: number) => target !== null && target !== undefined && !isNaN(target)\n        }];\n\n        this.operations = newOperations.concat(this.operations);\n    }\n}\n\n/* blazorCSSuppress */\n/**\n * Provides filtering operations for strings\n *\n * @export\n */\nexport class IgxStringFilteringOperand extends IgxFilteringOperand {\n    protected constructor() {\n        super();\n        const newOperations: IFilteringOperation[] = [{\n            name: 'contains',\n            isUnary: false,\n            iconName: 'filter_contains',\n            logic: (target: string, searchVal: string, ignoreCase?: boolean) => {\n                const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n                target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n                return target.indexOf(search) !== -1;\n            }\n        }, {\n            name: 'doesNotContain',\n            isUnary: false,\n            iconName: 'filter_does_not_contain',\n            logic: (target: string, searchVal: string, ignoreCase?: boolean) => {\n                const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n                target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n                return target.indexOf(search) === -1;\n            }\n        }, {\n            name: 'startsWith',\n            isUnary: false,\n            iconName: 'filter_starts_with',\n            logic: (target: string, searchVal: string, ignoreCase?: boolean) => {\n                const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n                target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n                return target.startsWith(search);\n            }\n        }, {\n            name: 'endsWith',\n            isUnary: false,\n            iconName: 'filter_ends_with',\n            logic: (target: string, searchVal: string, ignoreCase?: boolean) => {\n                const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n                target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n                return target.endsWith(search);\n            }\n        }, {\n            name: 'equals',\n            isUnary: false,\n            iconName: 'filter_equal',\n            logic: (target: string, searchVal: string, ignoreCase?: boolean) => {\n                const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n                target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n                return target === search;\n            }\n        }, {\n            name: 'doesNotEqual',\n            isUnary: false,\n            iconName: 'filter_not_equal',\n            logic: (target: string, searchVal: string, ignoreCase?: boolean) => {\n                const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n                target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n                return target !== search;\n            }\n        }, {\n            name: 'empty',\n            isUnary: true,\n            iconName: 'filter_empty',\n            logic: (target: string) => target === null || target === undefined || target.length === 0\n        }, {\n            name: 'notEmpty',\n            isUnary: true,\n            iconName: 'filter_not_empty',\n            logic: (target: string) => target !== null && target !== undefined && target.length > 0\n        }];\n\n        this.operations = newOperations.concat(this.operations);\n    }\n\n    /**\n     * Applies case sensitivity on strings if provided\n     *\n     * @memberof IgxStringFilteringOperand\n     */\n    public static applyIgnoreCase(a: string, ignoreCase: boolean): string {\n        a = a ?? '';\n        // bulletproof\n        return ignoreCase ? ('' + a).toLowerCase() : a;\n    }\n}\n\n/* tsPlainInterface */\n/* marshalByValue */\n/**\n * Interface describing filtering operations\n *\n * @export\n */\nexport interface IFilteringOperation {\n    name: string;\n    isUnary: boolean;\n    isNestedQuery?: boolean;\n    iconName: string;\n    hidden?: boolean;\n    /* blazorCSSuppress */\n    /* blazorAlternateType: FilteringOperationLogicHandler */\n    logic?: null | ((value: any, searchVal?: any, ignoreCase?: boolean) => boolean);\n}\n\n/**\n * Interface describing Date object in parts\n *\n * @export\n */\nexport interface IDateParts {\n    year: number;\n    month: number;\n    day: number;\n    hours: number;\n    minutes: number;\n    seconds: number;\n    milliseconds: number;\n}\n","import type { EntityType, FieldType } from './grid-types';\nimport { GridColumnDataType } from './grid-types';\nimport { IFilteringOperation, IgxBooleanFilteringOperand, IgxDateFilteringOperand, IgxDateTimeFilteringOperand, IgxFilteringOperand, IgxNumberFilteringOperand, IgxStringFilteringOperand, IgxTimeFilteringOperand } from './filtering-condition';\nimport { IFilteringExpression } from './filtering-expression.interface';\nimport { IExpressionTree, IFilteringExpressionsTree } from './filtering-expressions-tree';\nimport { DateTimeUtil } from '../date-common/public_api';\n\nexport class ExpressionsTreeUtil {\n    /**\n     * Returns the filtering expression for a column with the provided tree and fieldName.\n     * ```typescript\n     * let filteringExpression = ExpressionsTreeUtil.find(gridExpressionTree, 'Column Field');\n     * ```\n     */\n    public static find(tree: IFilteringExpressionsTree, fieldName: string): IFilteringExpressionsTree | IFilteringExpression {\n        const index = this.findIndex(tree, fieldName);\n\n        if (index > -1) {\n            return tree.filteringOperands[index];\n        }\n\n        return null;\n    }\n\n    /**\n     * Returns the index of the filtering expression for a column with the provided tree and fieldName.\n     * ```typescript\n     * let filteringExpressionIndex = ExpressionsTreeUtil.findIndex(gridExpressionTree, 'Column Field');\n     * ```\n     */\n    public static findIndex(tree: IFilteringExpressionsTree, fieldName: string): number {\n        for (let i = 0; i < tree.filteringOperands.length; i++) {\n            const expr = tree.filteringOperands[i];\n            if ((expr as IFilteringExpressionsTree).operator !== undefined) {\n                if (this.isFilteringExpressionsTreeForColumn(expr as IFilteringExpressionsTree, fieldName)) {\n                    return i;\n                }\n            } else if ((expr as IFilteringExpression).fieldName === fieldName) {\n                return i;\n            }\n        }\n\n        return -1;\n    }\n\n    protected static isFilteringExpressionsTreeForColumn(expressionsTree: IFilteringExpressionsTree, fieldName: string): boolean {\n        if (expressionsTree.fieldName === fieldName) {\n            return true;\n        }\n\n        for (const expr of expressionsTree.filteringOperands) {\n            if ((expr as IFilteringExpressionsTree).operator !== undefined) {\n                return this.isFilteringExpressionsTreeForColumn(expr as IFilteringExpressionsTree, fieldName);\n            } else if ((expr as IFilteringExpression).fieldName === fieldName) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\n\n/**\n * Recreates the search value for a given expression.\n * @param searchValue The search value to recreate.\n * @param dataType The data type of the field.\n * @returns The recreated search value.\n */\nfunction recreateSearchValue(searchValue: any, dataType: string): any {\n    if (!dataType && !Array.isArray(searchValue)) {\n        return searchValue;\n    }\n    // In ESF, values are stored as a Set.\n    // Those values are converted to an array before returning string in the stringifyCallback\n    // now we need to convert those back to Set\n    if (Array.isArray(searchValue)) {\n        return new Set(searchValue);\n    } else if ((dataType.toLowerCase().includes('date') || dataType.toLowerCase().includes('time')) && !(searchValue instanceof Date)) {\n        return DateTimeUtil.parseIsoDate(searchValue) ?? searchValue;\n    }\n\n    return searchValue;\n}\n\n/**\n * Returns the filtering logic function for a given dataType and condition (contains, greaterThan, etc.)\n * @param dataType The data type of the field.\n * @param name The name of the filtering condition.\n * @returns The filtering logic function.\n */\nfunction getFilteringCondition(dataType: string, name: string): IFilteringOperation {\n    let filters: IgxFilteringOperand;\n    switch (dataType) {\n        case GridColumnDataType.Boolean:\n            filters = IgxBooleanFilteringOperand.instance();\n            break;\n        case GridColumnDataType.Number:\n        case GridColumnDataType.Currency:\n        case GridColumnDataType.Percent:\n            filters = IgxNumberFilteringOperand.instance();\n            break;\n        case GridColumnDataType.Date:\n            filters = IgxDateFilteringOperand.instance();\n            break;\n        case GridColumnDataType.Time:\n            filters = IgxTimeFilteringOperand.instance();\n            break;\n        case GridColumnDataType.DateTime:\n            filters = IgxDateTimeFilteringOperand.instance();\n            break;\n        case GridColumnDataType.String:\n        default:\n            filters = IgxStringFilteringOperand.instance();\n            break;\n    }\n    return filters.condition(name);\n}\n\n/**\n * Recreates the IFilteringOperation for a given expression.\n * If the `logic` is already populated - it will return the original IFilteringOperation\n * of the expression.\n * @param expression The expression for which to resolve the IFilteringOperation.\n * @param dataType The data type of the field.\n * @returns The IFilteringOperation for the given expression.\n */\nfunction recreateOperatorFromDataType(expression: IFilteringExpression, dataType: string): IFilteringOperation {\n    if (!expression.condition?.logic) {\n        return getFilteringCondition(dataType, expression.conditionName || expression.condition?.name);\n    }\n\n    return expression.condition;\n}\n\n/**\n * Recreates an expression from the given fields by applying the correct operands\n * and adjusting the search value to be the correct type.\n * @param expression The expression to recreate.\n * @param fields An array of fields to use for recreating the expression.\n * @returns The recreated expression.\n */\nexport function recreateExpression(expression: IFilteringExpression, fields: FieldType[]): IFilteringExpression {\n    const field = fields?.find(f => f.field === expression.fieldName);\n\n    if (field && !expression.condition?.logic) {\n        if (!field.filters) {\n            expression.condition = recreateOperatorFromDataType(expression, field.dataType);\n        } else {\n            expression.condition = field.filters.condition(expression.conditionName || expression.condition?.name);\n        }\n    }\n\n    if (!expression.condition && expression.conditionName) {\n        throw Error('Wrong `conditionName`, `condition` or `field` provided! It is possible that there is a type mismatch between the condition type and field type.');\n    }\n\n    if (!expression.conditionName) {\n        expression.conditionName = expression.condition?.name;\n    }\n\n    expression.searchVal = recreateSearchValue(expression.searchVal, field?.dataType);\n\n    return expression;\n}\n\n/**\n * Checks if the given entry is an IExpressionTree.\n * @param entry The entry to check.\n * @returns True if the entry is an IExpressionTree, false otherwise.\n */\nexport function isTree(entry: IExpressionTree | IFilteringExpression): entry is IExpressionTree {\n    return 'operator' in entry;\n}\n\n/**\n * Recreates the tree from a given array of entities by applying the correct operands\n * for each expression and adjusting the search values to be the correct type.\n * @param tree The expression tree to recreate.\n * @param entities An array of entities to use for recreating the tree.\n * @returns The recreated expression tree.\n */\nexport function recreateTree(tree: IExpressionTree, entities: EntityType[], isRoot: boolean = false): IExpressionTree {\n    const entity = isRoot ? entities[0] : entities.find(e => e.name === tree.entity);\n    if (!entity) return tree;\n\n    for (let i = 0; i < tree.filteringOperands.length; i++) {\n        const operand = tree.filteringOperands[i];\n        if (isTree(operand)) {\n            tree.filteringOperands[i] = recreateTree(operand, entities);\n        } else {\n            if (operand.searchTree) {\n                operand.searchTree = recreateTree(operand.searchTree, entities[0].childEntities ?? entities);\n            }\n            tree.filteringOperands[i] = recreateExpression(operand, entity?.fields);\n        }\n    }\n\n    return tree;\n}\n\n/**\n * Recreates the tree from a given array of fields by applying the correct operands.\n * It is recommended to use `recreateTree` if there will be multiple entities in the tree\n * with potentially colliding field names.\n * @param tree The expression tree to recreate.\n * @param fields An array of fields to use for recreating the tree.\n */\nexport function recreateTreeFromFields(tree: IExpressionTree, fields: FieldType[]): IExpressionTree {\n    for (let i = 0; i < tree.filteringOperands.length; i++) {\n        const operand = tree.filteringOperands[i];\n        if (isTree(operand)) {\n            tree.filteringOperands[i] = recreateTreeFromFields(operand, fields);\n        } else {\n            if (operand.searchTree) {\n                operand.searchTree = recreateTreeFromFields(operand.searchTree, fields);\n            }\n            tree.filteringOperands[i] = recreateExpression(operand, fields);\n        }\n    }\n\n    return tree;\n}\n","import { FilteringLogic, IFilteringExpression } from './filtering-expression.interface';\nimport { IBaseEventArgs } from '../core/utils';\nimport { ExpressionsTreeUtil } from './expressions-tree-util';\n\n/* mustCoerceToInt */\nexport enum FilteringExpressionsTreeType {\n    Regular,\n    Advanced\n}\n\n/* marshalByValue */\nexport declare interface IExpressionTree {\n    filteringOperands: (IExpressionTree | IFilteringExpression)[];\n    operator: FilteringLogic;\n    fieldName?: string | null;\n    entity?: string | null;\n    returnFields?: string[] | null;\n}\n\n/* alternateBaseType: ExpressionTree */\n/* marshalByValue */\nexport declare interface IFilteringExpressionsTree extends IBaseEventArgs, IExpressionTree {\n    filteringOperands: (IFilteringExpressionsTree | IFilteringExpression)[];\n    /* alternateName: treeType */\n    type?: FilteringExpressionsTreeType;\n\n    /* blazorSuppress */\n    /**\n     * @deprecated in version 18.2.0. Use `ExpressionsTreeUtil.find` instead.\n     */\n    find?: (fieldName: string) => IFilteringExpressionsTree | IFilteringExpression;\n\n    /* blazorSuppress */\n    /**\n     * @deprecated in version 18.2.0. Use `ExpressionsTreeUtil.findIndex` instead.\n     */\n    findIndex?: (fieldName: string) => number;\n}\n\n/* marshalByValue */\n/* jsonAPIPlainObject */\nexport class FilteringExpressionsTree implements IFilteringExpressionsTree {\n\n    /**\n     * Sets/gets the filtering operands.\n     * ```typescript\n     * const gridExpressionsTree = new FilteringExpressionsTree(FilteringLogic.And);\n     * const expression = [\n     * {\n     *   condition: IgxStringFilteringOperand.instance().condition('contains'),\n     *   fieldName: 'Column Field',\n     *   searchVal: 'Value',\n     *   ignoreCase: false\n     * }];\n     * gridExpressionsTree.filteringOperands.push(expression);\n     * this.grid.filteringExpressionsTree = gridExpressionsTree;\n     * ```\n     * ```typescript\n     * let filteringOperands = gridExpressionsTree.filteringOperands;\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     */\n    public filteringOperands: (IFilteringExpressionsTree | IFilteringExpression)[] = [];\n\n    /**\n     * Sets/gets the operator.\n     * ```typescript\n     * gridExpressionsTree.operator = FilteringLogic.And;\n     * ```\n     * ```typescript\n     * let operator = gridExpressionsTree.operator;\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     */\n    public operator: FilteringLogic;\n\n    /**\n     * Sets/gets the field name of the column where the filtering expression is placed.\n     * ```typescript\n     * gridExpressionTree.fieldName = 'Column Field';\n     * ```\n     * ```typescript\n     * let columnField = expressionTree.fieldName;\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     */\n    public fieldName?: string;\n\n    /* alternateName: treeType */\n    /**\n     * Sets/gets the type of the filtering expressions tree.\n     * ```typescript\n     * gridExpressionTree.type = FilteringExpressionsTree.Advanced;\n     * ```\n     * ```typescript\n     * let type = expressionTree.type;\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     */\n    public type?: FilteringExpressionsTreeType;\n\n    /**\n     * Sets/gets the entity.\n     * ```typescript\n     * gridExpressionsTree.entity = 'Entity A';\n     * ```\n     * ```typescript\n     * let entity = gridExpressionsTree.entity;\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     */\n    public entity?: string;\n\n    /**\n     * Sets/gets the return fields.\n     * ```typescript\n     * gridExpressionsTree.returnFields = ['Column Field 1', 'Column Field 2'];\n     * ```\n     * ```typescript\n     * let returnFields = gridExpressionsTree.returnFields;\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     */\n    public returnFields?: string[];\n\n    constructor(operator: FilteringLogic, fieldName?: string, entity?: string, returnFields?: string[]) {\n        this.operator = operator;\n        this.entity = entity;\n        this.returnFields = returnFields;\n        this.fieldName = fieldName;\n    }\n\n    /**\n     * Checks if filtering expressions tree is empty.\n     *\n     * @param expressionTree filtering expressions tree.\n     */\n    public static empty(expressionTree: IFilteringExpressionsTree): boolean {\n        return !expressionTree || !expressionTree.filteringOperands || !expressionTree.filteringOperands.length;\n    }\n\n    /* blazorSuppress */\n    /**\n     * Returns the filtering expression for a column with the provided fieldName.\n     * ```typescript\n     * let filteringExpression = gridExpressionTree.find('Column Field');\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     * @deprecated in version 18.2.0. Use `ExpressionsTreeUtil.find` instead.\n     */\n    public find(fieldName: string): IFilteringExpressionsTree | IFilteringExpression {\n        return ExpressionsTreeUtil.find(this, fieldName);\n    }\n\n    /* blazorSuppress */\n    /**\n     * Returns the index of the filtering expression for a column with the provided fieldName.\n     * ```typescript\n     * let filteringExpressionIndex = gridExpressionTree.findIndex('Column Field');\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     * @deprecated in version 18.2.0. Use `ExpressionsTreeUtil.findIndex` instead.\n     */\n    public findIndex(fieldName: string): number {\n        return ExpressionsTreeUtil.findIndex(this, fieldName);\n    }\n}\n","export enum PagingError {\n    None,\n    IncorrectPageIndex,\n    IncorrectRecordsPerPage\n}\n\n/* marshalByValue */\n/* tsPlainInterface */\nexport declare interface IPagingState {\n    index: number;\n    recordsPerPage: number;\n    /* blazorSuppress */\n    metadata?: {\n        countPages: number;\n        error: PagingError;\n        countRecords: number;\n    };\n}\n","import { EventEmitter } from '@angular/core';\nimport { IDataCloneStrategy } from '../../data-operations/data-clone-strategy';\n\nexport enum TransactionType {\n    ADD = 'add',\n    DELETE = 'delete',\n    UPDATE = 'update'\n}\n\nexport enum TransactionEventOrigin {\n    UNDO = 'undo',\n    REDO = 'redo',\n    CLEAR = 'clear',\n    ADD = 'add',\n    END = 'endPending'\n}\n\nexport interface Transaction {\n    id: any;\n    type: TransactionType;\n    newValue: any;\n}\n\n/**\n * @experimental\n * @hidden\n */\nexport interface HierarchicalTransaction extends Transaction {\n    path?: any[];\n}\n\nexport interface State {\n    value: any;\n    recordRef: any;\n    type: TransactionType;\n}\n\nexport interface Action<T extends Transaction> {\n    transaction: T;\n    recordRef: any;\n}\n\nexport interface StateUpdateEvent {\n    origin: TransactionEventOrigin;\n    actions: Action<Transaction>[];\n}\n\n/**\n * @experimental\n * @hidden\n */\nexport interface HierarchicalState extends State {\n    path: any[];\n}\n\nexport interface TransactionService<T extends Transaction, S extends State> {\n    /**\n     * Returns whether transaction is enabled for this service\n     */\n    readonly enabled: boolean;\n\n    /**\n     * Gets/Sets the data clone strategy used to clone data\n     */\n    cloneStrategy: IDataCloneStrategy;\n\n    /**\n     * Event fired when transaction state has changed - add transaction, commit all transactions, undo and redo\n     */\n    onStateUpdate?: EventEmitter<StateUpdateEvent>;\n\n    /**\n     * @returns if there are any transactions in the Undo stack\n     */\n    canUndo: boolean;\n\n    /**\n     * @returns if there are any transactions in the Redo stack\n     */\n    canRedo: boolean;\n\n    /**\n     * Adds provided  transaction with recordRef if any\n     *\n     * @param transaction Transaction to be added\n     * @param recordRef Reference to the value of the record in the data source related to the changed item\n     */\n    add(transaction: T, recordRef?: any): void;\n\n    /**\n     * Returns all recorded transactions in chronological order\n     *\n     * @param id Optional record id to get transactions for\n     * @returns All transaction in the service or for the specified record\n     */\n    getTransactionLog(id?: any): T[];\n\n    /**\n     * Remove the last transaction if any\n     */\n    undo(): void;\n\n    /**\n     * Applies the last undone transaction if any\n     */\n    redo(): void;\n\n    /**\n     * Returns aggregated changes from all transactions\n     *\n     * @param mergeChanges If set to true will merge each state's value over relate recordRef\n     * and will record resulting value in the related transaction\n     * @returns Collection of aggregated transactions for each changed record\n     */\n    getAggregatedChanges(mergeChanges: boolean): T[];\n\n    /**\n     * Returns the state of the record with provided id\n     *\n     * @param id The id of the record\n     * @param pending Should get pending state\n     * @returns State of the record if any\n     */\n    getState(id: any, pending?: boolean): S;\n\n    /**\n     * Returns value of the required id including all uncommitted changes\n     *\n     * @param id The id of the record to return value for\n     * @param mergeChanges If set to true will merge state's value over relate recordRef\n     * and will return merged value\n     * @returns Value with changes or **null**\n     */\n    getAggregatedValue(id: any, mergeChanges: boolean): any;\n\n    /**\n     * Applies all transactions over the provided data\n     *\n     * @param data Data source to update\n     * @param id Optional record id to commit transactions for\n     */\n    commit(data: any[], id?: any): void;\n\n    /**\n     * Clears all transactions\n     *\n     * @param id Optional record id to clear transactions for\n     */\n    clear(id?: any): void;\n\n    /**\n     * Starts pending transactions. All transactions passed after call to startPending\n     * will not be added to transaction log\n     */\n    startPending(): void;\n\n    /**\n     * Clears all pending transactions and aggregated pending state. If commit is set to true\n     * commits pending states as single transaction\n     *\n     * @param commit Should commit the pending states\n     */\n    endPending(commit: boolean): void;\n}\n","import type { KeyOfOrString } from '../core/types';\nimport { IBaseEventArgs } from '../core/utils';\nimport type { GridTypeBase } from './grid-types';\n\n/* mustCoerceToInt */\nexport enum SortingDirection {\n    None = 0,\n    Asc = 1,\n    Desc = 2\n}\n\n/* marshalByValue */\n/* tsPlainInterface */\nexport interface ISortingExpression<T = any> extends IBaseEventArgs {\n    fieldName: KeyOfOrString<T> & string;\n    /* mustCoerceToInt */\n    dir: SortingDirection;\n    ignoreCase?: boolean;\n    strategy?: ISortingStrategy;\n}\n\nexport interface ISortingStrategy {\n    /* blazorSuppress */\n    sort: (\n        data: any[],\n        fieldName: string,\n        dir: SortingDirection,\n        ignoreCase: boolean,\n        valueResolver: (obj: any, key: string, isDate?: boolean) => any,\n        isDate?: boolean,\n        isTime?: boolean,\n        grid?: GridTypeBase\n    ) => any[];\n}\n\nexport class DefaultSortingStrategy implements ISortingStrategy {\n    protected static _instance: DefaultSortingStrategy = null;\n\n    protected constructor() { }\n\n    public static instance(): DefaultSortingStrategy {\n        return this._instance || (this._instance = new this());\n    }\n\n    /* blazorSuppress */\n    public sort(\n        data: any[],\n        fieldName: string,\n        dir: SortingDirection,\n        ignoreCase: boolean,\n        valueResolver: (obj: any, key: string, isDate?: boolean) => any,\n        isDate?: boolean,\n        isTime?: boolean\n    ) {\n        const key = fieldName;\n        const reverse = (dir === SortingDirection.Desc ? -1 : 1);\n\n        /**\n         * Use Schwartizian transform on the data before sorting it so that the sorting value\n         * is not recomputed on every object compare which improves the number of comparisons from O(nlogn) to O(n)\n         * where n is the length of the datasource.\n         * This, on a very large dataset of 1 million records, gives a significant performance boost.\n         */\n        const resolver = valueResolver.bind(this);\n        const preparedData = data.map(item => {\n            return {\n                original: item,\n                sortValue: this.prepareSortValue(resolver(item, key, isDate, isTime), ignoreCase)\n            }\n        });\n        const compareFn = (a, b) => reverse * this.compareValues(a.sortValue, b.sortValue);\n        preparedData.sort(compareFn);\n\n        return preparedData.map(item => item.original);\n    }\n\n    public compareValues(a: any, b: any): number {\n        const aIsNullish = a == null;\n        const bIsNullish = b == null;\n\n        if (aIsNullish && bIsNullish) return 0;\n        if (aIsNullish) return -1\n        if (bIsNullish) return 1;\n\n        return a > b ? 1 : a < b ? -1 : 0;\n    }\n\n    protected compareObjects(\n        obj1: any,\n        obj2: any,\n        key: string,\n        reverse: number,\n        ignoreCase: boolean,\n        valueResolver: (obj: any, key: string, isDate?: boolean, isTime?: boolean) => any,\n        isDate: boolean,\n        isTime: boolean\n    ) {\n        let a = valueResolver.call(this, obj1, key, isDate, isTime);\n        let b = valueResolver.call(this, obj2, key, isDate, isTime);\n        if (ignoreCase) {\n            a = a && a.toLowerCase ? a.toLowerCase() : a;\n            b = b && b.toLowerCase ? b.toLowerCase() : b;\n        }\n        return reverse * this.compareValues(a, b);\n    }\n\n    protected arraySort(data: any[], compareFn?: (arg0: any, arg1: any) => number): any[] {\n        return data.sort(compareFn);\n    }\n\n    protected prepareSortValue(value: any, ignoreCase: boolean) {\n        return ignoreCase && typeof value === 'string' ? value.toLocaleLowerCase() : value;\n    }\n}\n\nexport class GroupMemberCountSortingStrategy implements ISortingStrategy {\n    protected static _instance: GroupMemberCountSortingStrategy = null;\n\n    protected constructor() { }\n\n    public static instance(): GroupMemberCountSortingStrategy {\n        return this._instance || (this._instance = new this());\n    }\n\n    public sort(data: any[], fieldName: string, dir: SortingDirection) {\n        const groupedArray = this.groupBy(data, fieldName);\n        const reverse = (dir === SortingDirection.Desc ? -1 : 1);\n\n        const cmpFunc = (a, b) => {\n            return this.compareObjects(a, b, groupedArray, fieldName, reverse);\n        };\n\n        return data\n            .sort((a, b) => a[fieldName].localeCompare(b[fieldName]))\n            .sort(cmpFunc);\n    }\n\n    public groupBy(data, key) {\n        return data.reduce((acc, curr) => {\n            (acc[curr[key]] = acc[curr[key]] || []).push(curr);\n            return acc;\n        }, {})\n    }\n\n    protected compareObjects(obj1: any, obj2: any, data: any[], fieldName: string, reverse: number) {\n        const firstItemValuesLength = data[obj1[fieldName]].length;\n        const secondItemValuesLength = data[obj2[fieldName]].length;\n\n        return reverse * (firstItemValuesLength - secondItemValuesLength);\n    }\n}\n\nexport class FormattedValuesSortingStrategy extends DefaultSortingStrategy {\n    protected static override _instance: FormattedValuesSortingStrategy = null;\n\n    constructor() {\n        super();\n    }\n\n    public static override instance(): FormattedValuesSortingStrategy {\n        return this._instance || (this._instance = new this());\n    }\n\n    public override sort(\n        data: any[],\n        fieldName: string,\n        dir: SortingDirection,\n        ignoreCase: boolean,\n        valueResolver: (obj: any, key: string, isDate?: boolean) => any,\n        isDate?: boolean,\n        isTime?: boolean,\n        grid?: GridTypeBase\n    ) {\n        const key = fieldName;\n        const reverse = (dir === SortingDirection.Desc ? -1 : 1);\n        const cmpFunc = (obj1: any, obj2: any) => this.compareObjects(obj1, obj2, key, reverse, ignoreCase, valueResolver, isDate, isTime, grid);\n        return this.arraySort(data, cmpFunc);\n    }\n\n    protected override compareObjects(\n        obj1: any,\n        obj2: any,\n        key: string,\n        reverse: number,\n        ignoreCase: boolean,\n        valueResolver: (obj: any, key: string, isDate?: boolean, isTime?: boolean) => any,\n        isDate: boolean,\n        isTime: boolean,\n        grid?: GridTypeBase\n    ) {\n        let a = valueResolver.call(this, obj1, key, isDate, isTime);\n        let b = valueResolver.call(this, obj2, key, isDate, isTime);\n\n        if (grid) {\n            const col = grid.getColumnByName(key);\n            if (col && col.formatter) {\n                a = col.formatter(a);\n                b = col.formatter(b);\n            }\n        }\n\n        if (ignoreCase) {\n            a = a && a.toLowerCase ? a.toLowerCase() : a;\n            b = b && b.toLowerCase ? b.toLowerCase() : b;\n        }\n        return reverse * this.compareValues(a, b);\n    }\n}\n","import { IGroupByKey } from './groupby-expand-state.interface';\nimport { IGroupByRecord } from './groupby-record.interface';\nimport { IGroupingExpression } from './grouping-expression.interface';\nimport { DefaultSortingStrategy } from './sorting-strategy';\n\nexport const isHierarchyMatch = (h1: Array<IGroupByKey>, h2: Array<IGroupByKey>, expressions: IGroupingExpression[]): boolean => {\n    if (h1.length !== h2.length) {\n        return false;\n    }\n    return h1.every((level, index): boolean => {\n        const expr = expressions.find(e => e.fieldName === level.fieldName);\n        const comparer = expr.groupingComparer || DefaultSortingStrategy.instance().compareValues;\n        return level.fieldName === h2[index].fieldName && comparer(level.value, h2[index].value) === 0;\n    });\n};\n\nexport const getHierarchy = (gRow: IGroupByRecord): Array<IGroupByKey> => {\n    const hierarchy: Array<IGroupByKey> = [];\n    if (gRow !== undefined && gRow.expression) {\n        hierarchy.push({ fieldName: gRow.expression.fieldName, value: gRow.value });\n        while (gRow.groupParent) {\n            gRow = gRow.groupParent;\n            hierarchy.unshift({ fieldName: gRow.expression.fieldName, value: gRow.value });\n        }\n    }\n    return hierarchy;\n};\n","import { cloneArray, columnFieldPath, parseDate, resolveNestedPath } from '../core/utils';\nimport { IGroupByExpandState } from './groupby-expand-state.interface';\nimport { IGroupByRecord } from './groupby-record.interface';\nimport { IGroupingState } from './groupby-state.interface';\nimport { IGroupingExpression } from './grouping-expression.interface';\nimport { IGroupByResult } from './grouping-result.interface';\nimport { getHierarchy, isHierarchyMatch } from './operations';\nimport { DefaultSortingStrategy, ISortingExpression, SortingDirection } from './sorting-strategy';\nimport type { GridTypeBase } from './grid-types';\n\nconst DATE_TYPE = 'date';\nconst TIME_TYPE = 'time';\nconst DATE_TIME_TYPE = 'dateTime';\nconst STRING_TYPE = 'string';\n\n/**\n * Represents a sorting strategy for the grid data\n * Contains a single method sort that sorts the provided data based on the given sorting expressions\n */\nexport interface IGridSortingStrategy {\n    /* blazorCSSuppress */\n    /**\n    * `data`: The array of data to be sorted. Could be of any type.\n    * `expressions`: An array of sorting expressions that define the sorting rules. The expression contains information like file name, whether the letter case should be taken into account, etc.\n    * `grid`: (Optional) The instance of the grid where the sorting is applied.\n    * Returns a new array with the data sorted according to the sorting expressions.\n    */\n    sort(data: any[], expressions: ISortingExpression[], grid?: GridTypeBase): any[];\n}\n\n/**\n * Represents a grouping strategy for the grid data, extending the Sorting Strategy interface (contains a sorting method).\n */\nexport interface IGridGroupingStrategy extends IGridSortingStrategy {\n    /* blazorCSSuppress */\n    /**\n     * The method groups the provided data based on the given grouping state and returns the result.\n     * `data`: The array of data to be grouped. Could be of any type.\n     * `state`: The grouping state that defines the grouping settings and expressions.\n     * `grid`: (Optional) The instance of the grid where the grouping is applied.\n     * `groupsRecords`: (Optional) An array that holds the records for each group.\n     * `fullResult`: (Optional) The complete result of grouping including groups and summary data.\n     * Returns an object containing the result of the grouping operation.\n     */\n    groupBy(data: any[], state: IGroupingState, grid?: any, groupsRecords?: any[], fullResult?: IGroupByResult): IGroupByResult;\n}\n\n/**\n * Represents internal sorting expression that extends the public one.\n * Contains boolean properties that represent the type of the column that is being sorted.\n * @internal\n */\ninterface IGridInternalSortingExpression extends ISortingExpression {\n    isDate: boolean;\n    isTime: boolean;\n    isString: boolean;\n}\n\n/**\n * Stack item represents a frame.\n * Each frame needs:\n * - data: The subset of records to process at this level.\n * - level: The current grouping level.\n * - parentGroup: The parent IGroupByRecord for groups created in this frame.\n * - currentIndex: The index within 'data' to start processing.\n * - isExpandingChildren: Flag to indicate if children generated by this group should be added to `result` and `metadata`.\n * @internal\n */\ninterface StackFrame {\n    data: any[];\n    level: number;\n    parentGroup: IGroupByRecord | null;\n    currentIndex: number;\n    isExpandingChildren: boolean;\n}\n\n/**\n * Represents a class implementing the IGridSortingStrategy interface.\n * It provides sorting functionality for grid data based on sorting expressions.\n */\nexport class IgxSorting implements IGridSortingStrategy {\n    /* blazorSuppress */\n    /**\n   * Sorts the provided data based on the given sorting expressions.\n   * `data`: The array of data to be sorted.\n   * `expressions`: An array of sorting expressions that define the sorting rules. The expression contains information like file name, whether the letter case should be taken into account, etc.\n   * `grid`: (Optional) The instance of the grid where the sorting is applied.\n   * Returns a new array with the data sorted according to the sorting expressions.\n   */\n    public sort(data: any[], expressions: ISortingExpression[], grid?: GridTypeBase): any[] {\n        return this.sortData(data, expressions, grid);\n    }\n\n    /**\n     * Retrieves the value of the specified field from the given object, considering date and time data types.\n     * `key`: The key of the field to retrieve.\n     * `isDate`: (Optional) Indicates if the field is of type Date.\n     * `isTime`: (Optional) Indicates if the field is of type Time.\n     * Returns the value of the specified field in the data object.\n     * @internal\n     */\n    protected getFieldValue<T>(obj: T, key: string, isDate = false, isTime = false) {\n        let resolvedValue = resolveNestedPath(obj, columnFieldPath(key));\n        if (isDate || isTime) {\n            const date = parseDate(resolvedValue);\n            if (date && isDate && isTime) {\n                resolvedValue = date;\n            } else if (date && isDate && !isTime) {\n                resolvedValue = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0);\n            } else if (date && isTime && !isDate) {\n                resolvedValue = new Date(new Date().setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n            }\n        }\n        return resolvedValue;\n    }\n\n    /**\n   * Sorts the provided data array based on the given sorting expressions.\n   * The method can be used when multiple sorting is performed, going through each one\n   * Returns a new array with the data sorted according to the sorting expressions.\n   * @internal\n   */\n    private sortData<T>(\n        data: T[],\n        expressions: ISortingExpression[],\n        grid: GridTypeBase\n    ): T[] {\n        const sortingExpressions = this.prepareExpressions(expressions, grid);\n\n        if (data.length <= 1) {\n            return data;\n        }\n\n        for (let i = sortingExpressions.length - 1; i >= 0; i--) {\n            data = sortingExpressions[i].strategy.sort(data, sortingExpressions[i].fieldName, sortingExpressions[i].dir, sortingExpressions[i].ignoreCase, this.getFieldValue, sortingExpressions[i].isDate, sortingExpressions[i].isTime, grid)\n        }\n\n        return data;\n    }\n\n    private prepareExpressions(expressions: ISortingExpression[], grid: GridTypeBase): IGridInternalSortingExpression[] {\n        const multipleSortingExpressions: IGridInternalSortingExpression[] = [];\n        for (const expr of expressions) {\n            if (expr.dir === SortingDirection.None) {\n                continue;\n            }\n            if (!expr.strategy) {\n                expr.strategy = DefaultSortingStrategy.instance();\n            }\n            const column = grid?.getColumnByName(expr.fieldName);\n            const isDate = column?.dataType === DATE_TYPE || column?.dataType === DATE_TIME_TYPE;\n            const isTime = column?.dataType === TIME_TYPE || column?.dataType === DATE_TIME_TYPE;\n            const isString = column?.dataType === STRING_TYPE;\n            multipleSortingExpressions.push({ ...expr, isDate, isTime, isString })\n        }\n        return multipleSortingExpressions;\n    }\n}\n\n/**\n * Represents a class implementing the IGridGroupingStrategy interface and extending the IgxSorting class.\n * It provides a method to group data based on the given grouping state.\n */\nexport class IgxGrouping extends IgxSorting implements IGridGroupingStrategy {\n    /* blazorSuppress */\n    /**\n     * Groups the provided data based on the given grouping state.\n     * Returns an object containing the result of the grouping operation.\n     */\n    public groupBy(data: any[], state: IGroupingState, grid?: any,\n        groupsRecords?: any[], fullResult: IGroupByResult = { data: [], metadata: [] }): IGroupByResult {\n        const grouping = this.groupData(data, state, grid, groupsRecords, fullResult);\n        grid?.groupingPerformedSubject.next();\n        return {\n            data: grouping.data,\n            metadata: grouping.metadata\n        };\n    }\n\n    /**\n     * Groups the provided data based on the given grouping state.\n     * Changes groupsRecords and fullResult collections by reference.\n     * Returns an array containing the visible grouped result.\n     * @internal\n     */\n    protected groupData(\n        data: any[],\n        state: IGroupingState,\n        grid: GridTypeBase = null,\n        groupsRecords: any[] = [],\n        fullResult: IGroupByResult\n    ): IGroupByResult {\n\n        const expressions = state.expressions;\n        const expansion = state.expansion;\n\n        // This holds the final visible data (the rows that are expanded).\n        const result: any[] = [];\n\n        // This holds the group rows for each record in the result array. Used in grid for information when scrolling.\n        const metadata: IGroupByRecord[] = [];\n\n        // Initialize the stack with the root level processing.\n        const initialFrame: StackFrame = {\n            data: data,\n            level: 0,\n            parentGroup: null,\n            currentIndex: 0,\n            isExpandingChildren: true\n        };\n        const stack: StackFrame[] = [initialFrame];\n\n        while (stack.length > 0) {\n            const currentFrame = stack[stack.length - 1]; // Peek at the top of the stack\n\n            const { data: currentData, level, parentGroup, currentIndex, isExpandingChildren } = currentFrame;\n\n            // If we've processed all data in this frame, pop it.\n            if (currentIndex >= currentData.length) {\n                stack.pop();\n                continue;\n            }\n\n            // Process the next group at the current level\n            const column = grid ? grid.getColumnByName(expressions[level].fieldName) : null;\n            const isDate = column?.dataType === DATE_TYPE || column?.dataType === DATE_TIME_TYPE;\n            const isTime = column?.dataType === TIME_TYPE || column?.dataType === DATE_TIME_TYPE;\n            const isString = column?.dataType === STRING_TYPE;\n\n            // Next block of grouped records for the expression of the current level\n            const group = this.groupedRecordsByExpression(\n                currentData,\n                currentIndex,\n                expressions[level],\n                isDate,\n                isTime,\n                isString,\n                column?.groupingComparer\n            );\n\n            // Create the group row\n            const groupRow: IGroupByRecord = {\n                expression: expressions[level],\n                level,\n                records: cloneArray(group),\n                value: this.getFieldValue(group[0], expressions[level].fieldName, isDate, isTime),\n                groupParent: parentGroup,\n                groups: [],\n                height: grid ? grid.renderedRowHeight : null,\n                column\n            };\n\n            // Link to parent's groups list\n            if (parentGroup) {\n                parentGroup.groups.push(groupRow);\n            } else {\n                groupsRecords.push(groupRow)\n            }\n\n            // Determine expansion state for this groupRow\n            const hierarchy = getHierarchy(groupRow);\n            const expandState: IGroupByExpandState = expansion.find((s) =>\n                isHierarchyMatch(\n                    s.hierarchy || [{ fieldName: groupRow.expression.fieldName, value: groupRow.value }],\n                    hierarchy,\n                    expressions\n                )\n            );\n            const expandedForThisGroup = expandState ? expandState.expanded : state.defaultExpanded;\n\n            // Add the group row to the full result set\n            fullResult.data.push(groupRow);\n            fullResult.metadata.push(null);\n\n            // Add the group row to the visible results (if its parent was expanded or it's a root group)\n            if (isExpandingChildren) {\n                result.push(groupRow);\n                metadata.push(null);\n            }\n\n            // Advance the current frame's index for the next iteration of its loop\n            currentFrame.currentIndex += group.length;\n\n            if (level < expressions.length - 1) {\n                // If there are more levels to group, push a new frame onto the stack\n                const nextFrame: StackFrame = {\n                    data: group, // The records of the current group become the data for the next level\n                    level: level + 1,\n                    parentGroup: groupRow, // The current group row is the parent for the next level\n                    currentIndex: 0,\n                    isExpandingChildren: isExpandingChildren && expandedForThisGroup // Children are expanded only if this group is expanded AND parent is expanded\n                };\n                stack.push(nextFrame);\n            } else {\n                // This is the leaf level, add individual items to fullResult and conditionally to result/metadata\n                for (const groupItem of group) {\n                    fullResult.metadata.push(groupRow); // The metadata for an item is its immediate parent group row.\n                    fullResult.data.push(groupItem);\n                    if (isExpandingChildren && expandedForThisGroup) {\n                        // Add to result and metadata only if expanded\n                        metadata.push(groupRow);\n                        result.push(groupItem);\n                    }\n                }\n            }\n        }\n\n        return { data: result, metadata };\n    }\n\n    /**\n     * Groups the records in the provided data array based on the given grouping expression.\n     * `groupingComparer`: (Optional) A custom grouping comparator to determine the members of the group.\n     * Returns an array containing the records that belong to the group.\n     * @internal\n     */\n    private groupedRecordsByExpression<T>(\n        data: T[],\n        index: number,\n        expression: IGroupingExpression,\n        isDate = false,\n        isTime = false,\n        isString: boolean,\n        groupingComparer?: (a: any, b: any, currRec: any, groupRec: any) => number\n    ): T[] {\n        const res: T[] = [];\n        const key = expression.fieldName;\n        const len = data.length;\n        const groupRecord = data[index];\n        let groupValue = this.getFieldValue(groupRecord, key, isDate, isTime);\n        if (expression.ignoreCase && isString && groupValue) {\n            // when column's dataType is string but the value is number\n            groupValue = groupValue.toString().toLowerCase();\n        }\n        res.push(groupRecord);\n        const comparer = expression.groupingComparer || groupingComparer || DefaultSortingStrategy.instance().compareValues;\n        for (let i = index + 1; i < len; i++) {\n            const currRec = data[i];\n            let fieldValue = this.getFieldValue(currRec, key, isDate, isTime);\n            if (expression.ignoreCase && isString && fieldValue) {\n                // when column's dataType is string but the value is number\n                fieldValue = fieldValue.toString().toLowerCase();\n            }\n            if (comparer(fieldValue, groupValue, currRec, groupRecord) === 0) {\n                res.push(currRec);\n            } else {\n                break;\n            }\n        }\n        return res;\n    }\n}\n\n/* csSuppress */\n/**\n * Represents a class implementing the IGridSortingStrategy interface with a no-operation sorting strategy.\n * It performs no sorting and returns the data as it is.\n */\nexport class NoopSortingStrategy implements IGridSortingStrategy {\n    private static _instance: NoopSortingStrategy = null;\n\n    private constructor() { }\n\n    public static instance(): NoopSortingStrategy {\n        return this._instance || (this._instance = new NoopSortingStrategy());\n    }\n\n    /* csSuppress */\n    public sort(data: any[]): any[] {\n        return data;\n    }\n}\n\n/**\n * Represents a class extending the IgxSorting class\n * Provides custom data record sorting.\n */\nexport class IgxDataRecordSorting extends IgxSorting {\n    /**\n    * Overrides the base method to retrieve the field value from the data object instead of the record object.\n    * Returns the value of the specified field in the data object.\n    */\n    protected override getFieldValue(obj: any, key: string, isDate = false, isTime = false): any {\n        return super.getFieldValue(obj.data, key, isDate, isTime);\n    }\n}\n","import { columnFieldPath, parseDate, resolveNestedPath } from '../core/utils';\nimport type { GridTypeBase } from './grid-types';\n\nexport interface IMergeByResult {\n    rowSpan: number;\n    root?: any;\n    childRecords?: any[];\n}\n\n/* csSuppress */\n/**\n * Merge strategy interface.\n */\nexport interface IGridMergeStrategy {\n    /* blazorCSSuppress */\n    /**\n     * Function that processes merging of the whole data per merged field.\n     * Returns collection where object has reference to the original record and map of the cell merge metadata per field.\n     */\n    merge: (\n        /* The original data to merge. */\n        data: any[],\n        /* The field in the data to merge. */\n        field: string,\n        /* Custom comparer function to use for field. */\n        comparer: (prevRecord: any, currentRecord: any, field: string) => boolean,\n        /* Existing merge result to which to add the field specific metadata for merging. */\n        result: any[],\n        /* The active row indexes, where merging should break the sequence. */\n        activeRowIndexes: number[],\n        /* (Optional) Indicates if the field is of type Date. */\n        isDate?: boolean,\n        /* (Optional) Indicates if the field is of type Time. */\n        isTime?: boolean,\n        /* (Optional) Reference to the grid */\n        grid?: GridTypeBase\n    ) => any[];\n    /**\n     * Function that compares values for merging. Returns true if same, false if different.\n     */\n    comparer: (prevRecord: any, record: any, field: string) => boolean;\n}\n\n/* csSuppress */\nexport class DefaultMergeStrategy implements IGridMergeStrategy {\n    protected static _instance: DefaultMergeStrategy = null;\n\n    public static instance(): DefaultMergeStrategy {\n        return this._instance || (this._instance = new this());\n    }\n\n    /* blazorCSSuppress */\n    public merge(\n        data: any[],\n        field: string,\n        comparer: (prevRecord: any, record: any, field: string, isDate?: boolean, isTime?: boolean) => boolean = this.comparer,\n        result: any[],\n        activeRowIndexes: number[],\n        isDate = false,\n        isTime = false,\n        grid?: GridTypeBase\n    ): any[] {\n        let prev = null;\n        let index = 0;\n        for (const rec of data) {\n\n            const recData = result[index];\n            // if this is active row or some special record type - add and skip merging\n            if (activeRowIndexes.indexOf(index) != -1 || (grid && grid.isDetailRecord(rec) || grid.isGroupByRecord(rec) || grid.isChildGridRecord(rec) || grid.isSummaryRow(rec))) {\n                if (!recData) {\n                    result.push(rec);\n                }\n                prev = null;\n                index++;\n                continue;\n            }\n            const recToUpdateData = recData ?? { recordRef: grid.isGhostRecord(rec) ? rec.recordRef : rec, cellMergeMeta: new Map<string, IMergeByResult>(), ghostRecord: rec.ghostRecord };\n            recToUpdateData.cellMergeMeta.set(field, { rowSpan: 1, childRecords: [] });\n            if (prev && comparer.call(this, prev.recordRef, recToUpdateData.recordRef, field, isDate, isTime) && prev.ghostRecord === recToUpdateData.ghostRecord) {\n                const root = prev.cellMergeMeta.get(field)?.root ?? prev;\n                root.cellMergeMeta.get(field).rowSpan += 1;\n                root.cellMergeMeta.get(field).childRecords.push(recToUpdateData);\n                recToUpdateData.cellMergeMeta.get(field).root = root;\n            }\n            prev = recToUpdateData;\n            if (!recData) {\n                result.push(recToUpdateData);\n            }\n            index++;\n        }\n        return result;\n    }\n\n    /* blazorCSSuppress */\n    public comparer(prevRecord: any, record: any, field: string, isDate = false, isTime = false): boolean {\n        const a = this.getFieldValue(prevRecord, field, isDate, isTime);\n        const b = this.getFieldValue(record, field, isDate, isTime);\n        const an = (a === null || a === undefined);\n        const bn = (b === null || b === undefined);\n        if (an) {\n            if (bn) {\n                return true;\n            }\n            return false;\n        } else if (bn) {\n            return false;\n        }\n        return a === b;\n    }\n\n    /**\n     * Retrieves the value of the specified field from the given object, considering date and time data types.\n     * `key`: The key of the field to retrieve.\n     * `isDate`: (Optional) Indicates if the field is of type Date.\n     * `isTime`: (Optional) Indicates if the field is of type Time.\n     * Returns the value of the specified field in the data object.\n     * @internal\n     */\n    protected getFieldValue<T>(obj: T, key: string, isDate = false, isTime = false) {\n        let resolvedValue = resolveNestedPath(obj, columnFieldPath(key));\n        if (isDate || isTime) {\n            resolvedValue = this.getDateValue(resolvedValue, isDate, isTime);\n        }\n        return resolvedValue;\n    }\n\n    /**\n   * @internal\n   */\n    protected getDateValue<T>(obj: T, isDate = false, isTime = false) {\n        const date = obj instanceof Date ? obj : parseDate(obj);\n        let resolvedValue;\n        if (isDate && isTime) {\n            // date + time\n            resolvedValue = date.getTime();\n        } else if (date && isDate && !isTime) {\n            // date, but no time\n            resolvedValue = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0).getTime();\n        } else if (date && isTime && !isDate) {\n            // just time\n            resolvedValue = new Date().setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n        }\n        return resolvedValue;\n    }\n}\n\n/* csSuppress */\nexport class DefaultTreeGridMergeStrategy extends DefaultMergeStrategy {\n    /* blazorCSSuppress */\n    public override comparer(prevRecord: any, record: any, field: string, isDate = false, isTime = false): boolean {\n        const a = this.getFieldValue(prevRecord.data, field, isDate, isTime);\n        const b = this.getFieldValue(record.data, field, isDate, isTime);\n        const an = (a === null || a === undefined);\n        const bn = (b === null || b === undefined);\n        if (an) {\n            if (bn) {\n                return true;\n            }\n            return false;\n        } else if (bn) {\n            return false;\n        }\n        return a === b;\n    }\n}\n\n/* csSuppress */\nexport class ByLevelTreeGridMergeStrategy extends DefaultMergeStrategy {\n    /* blazorCSSuppress */\n    public override comparer(prevRecord: any, record: any, field: string, isDate = false, isTime = false): boolean {\n        const a = this.getFieldValue(prevRecord.data, field, isDate, isTime);\n        const b = this.getFieldValue(record.data, field, isDate, isTime);\n        const levelA = prevRecord.level;\n        const levelB = record.level;\n        const an = (a === null || a === undefined);\n        const bn = (b === null || b === undefined);\n        if (an) {\n            if (bn) {\n                return true;\n            }\n            return false;\n        } else if (bn) {\n            return false;\n        }\n        return a === b && levelA === levelB;\n    }\n}\n","import { IGroupByResult } from './grouping-result.interface';\n\nimport { IPagingState, PagingError } from './paging-state.interface';\n\nimport { IGroupByKey } from './groupby-expand-state.interface';\nimport { IGroupByRecord } from './groupby-record.interface';\nimport { IGroupingState } from './groupby-state.interface';\nimport { cloneArray, mergeObjects } from '../core/utils';\nimport { Transaction, TransactionType, HierarchicalTransaction } from '../services/transaction/transaction';\nimport { getHierarchy, isHierarchyMatch } from './operations';\nimport type { ColumnType, GridTypeBase, ITreeGridRecord } from './grid-types';\nimport { ISortingExpression } from './sorting-strategy';\nimport {\n    IGridSortingStrategy,\n    IGridGroupingStrategy,\n    IgxDataRecordSorting,\n    IgxSorting,\n    IgxGrouping\n} from './grid-sorting-strategy';\nimport { DefaultDataCloneStrategy, IDataCloneStrategy } from '../data-operations/data-clone-strategy';\nimport { IGroupingExpression } from './grouping-expression.interface';\nimport { DefaultMergeStrategy, IGridMergeStrategy } from './merge-strategy';\nimport { IFilteringExpressionsTree } from './filtering-expressions-tree';\nimport { FilteringStrategy, FilterUtil } from './filtering-strategy';\nimport { GridColumnDataType } from './grid-types';\n\n/**\n * @hidden\n */\nexport class DataUtil {\n    public static sort<T>(data: T[], expressions: ISortingExpression[], sorting: IGridSortingStrategy = new IgxSorting(),\n        grid?: GridTypeBase): T[] {\n        return sorting.sort(data, expressions, grid);\n    }\n\n    public static treeGridSort(hierarchicalData: ITreeGridRecord[],\n        expressions: ISortingExpression[],\n        sorting: IGridSortingStrategy = new IgxDataRecordSorting(),\n        grid?: GridTypeBase): ITreeGridRecord[] {\n        const res: ITreeGridRecord[] = [];\n        const stack: {\n            original: ITreeGridRecord[];\n            parent?: ITreeGridRecord;\n            result: ITreeGridRecord[];\n        }[] = [];\n\n        stack.push({ original: hierarchicalData, parent: null, result: res });\n\n        while (stack.length > 0) {\n            const { original, parent, result } = stack.pop()!;\n\n            const clonedRecords: ITreeGridRecord[] = [];\n\n            for (const treeRecord of original) {\n                const rec: ITreeGridRecord = DataUtil.cloneTreeGridRecord(treeRecord);\n                rec.parent = parent;\n                clonedRecords.push(rec);\n\n                // If it has children, process them later\n                if (rec.children && rec.children.length > 0) {\n                    const childClones: ITreeGridRecord[] = [];\n                    rec.children = childClones;\n                    stack.push({\n                        original: treeRecord.children,\n                        parent: rec,\n                        result: childClones\n                    });\n                }\n            }\n\n            // Sort the clonedRecords before assigning to the result\n            const sorted = DataUtil.sort(clonedRecords, expressions, sorting, grid);\n            for (const item of sorted) {\n                result.push(item);\n            }\n        }\n\n        return res;\n    }\n\n    public static cloneTreeGridRecord(hierarchicalRecord: ITreeGridRecord) {\n        const rec: ITreeGridRecord = {\n            key: hierarchicalRecord.key,\n            data: hierarchicalRecord.data,\n            children: hierarchicalRecord.children,\n            isFilteredOutParent: hierarchicalRecord.isFilteredOutParent,\n            level: hierarchicalRecord.level,\n            expanded: hierarchicalRecord.expanded\n        };\n        return rec;\n    }\n\n    public static group<T>(data: T[], state: IGroupingState, grouping: IGridGroupingStrategy = new IgxGrouping(), grid: GridTypeBase = null,\n        groupsRecords: any[] = [], fullResult: IGroupByResult = { data: [], metadata: [] }): IGroupByResult {\n        groupsRecords.splice(0, groupsRecords.length);\n        return grouping.groupBy(data, state, grid, groupsRecords, fullResult);\n    }\n\n    public static merge<T>(data: T[], columns: ColumnType[], strategy: IGridMergeStrategy = new DefaultMergeStrategy(), activeRowIndexes = [], grid: GridTypeBase = null,\n    ): any[] {\n        const result = [];\n        for (const col of columns) {\n            const isDate = col?.dataType === 'date' || col?.dataType === 'dateTime';\n            const isTime = col?.dataType === 'time' || col?.dataType === 'dateTime';\n            strategy.merge(\n                data,\n                col.field,\n                col.mergingComparer,\n                result,\n                activeRowIndexes,\n                isDate,\n                isTime,\n                grid);\n        }\n        return result;\n    }\n\n    public static page<T>(data: T[], state: IPagingState, dataLength?: number): T[] {\n        if (!state) {\n            return data;\n        }\n        const len = dataLength !== undefined ? dataLength : data.length;\n        const index = state.index;\n        const res = [];\n        const recordsPerPage = dataLength !== undefined && state.recordsPerPage > dataLength ? dataLength : state.recordsPerPage;\n        state.metadata = {\n            countPages: 0,\n            countRecords: len,\n            error: PagingError.None\n        };\n        if (index < 0 || isNaN(index)) {\n            state.metadata.error = PagingError.IncorrectPageIndex;\n            return res;\n        }\n        if (recordsPerPage <= 0 || isNaN(recordsPerPage)) {\n            state.metadata.error = PagingError.IncorrectRecordsPerPage;\n            return res;\n        }\n        state.metadata.countPages = Math.ceil(len / recordsPerPage);\n        if (!len) {\n            return data;\n        }\n        if (index >= state.metadata.countPages) {\n            state.metadata.error = PagingError.IncorrectPageIndex;\n            return res;\n        }\n        return data.slice(index * recordsPerPage, (index + 1) * recordsPerPage);\n    }\n\n    public static correctPagingState(state: IPagingState, length: number) {\n        const maxPage = Math.ceil(length / state.recordsPerPage) - 1;\n        if (!isNaN(maxPage) && state.index > maxPage) {\n            state.index = maxPage;\n        }\n    }\n\n    public static getHierarchy(gRow: IGroupByRecord): Array<IGroupByKey> {\n        return getHierarchy(gRow);\n    }\n\n    public static isHierarchyMatch(h1: Array<IGroupByKey>, h2: Array<IGroupByKey>, expressions: IGroupingExpression[]): boolean {\n        return isHierarchyMatch(h1, h2, expressions);\n    }\n\n    /**\n     * Merges all changes from provided transactions into provided data collection\n     *\n     * @param data Collection to merge\n     * @param transactions Transactions to merge into data\n     * @param primaryKey Primary key of the collection, if any\n     * @param deleteRows Should delete rows with DELETE transaction type from data\n     * @returns Provided data collections updated with all provided transactions\n     */\n    public static mergeTransactions<T>(data: T[], transactions: Transaction[], primaryKey?: any, cloneStrategy: IDataCloneStrategy = new DefaultDataCloneStrategy(), deleteRows = false): T[] {\n        data.forEach((item: any, index: number) => {\n            const rowId = primaryKey ? item[primaryKey] : item;\n            const transaction = transactions.find(t => t.id === rowId);\n            if (transaction && transaction.type === TransactionType.UPDATE) {\n                data[index] = mergeObjects(cloneStrategy.clone(data[index]), transaction.newValue);\n            }\n        });\n\n        if (deleteRows) {\n            transactions\n                .filter(t => t.type === TransactionType.DELETE)\n                .forEach(t => {\n                    const index = primaryKey ? data.findIndex(d => d[primaryKey] === t.id) : data.findIndex(d => d === t.id);\n                    if (0 <= index && index < data.length) {\n                        data.splice(index, 1);\n                    }\n                });\n        }\n\n        data.push(...transactions\n            .filter(t => t.type === TransactionType.ADD)\n            .map(t => t.newValue));\n\n        return data;\n    }\n\n    /**\n     * Merges all changes from provided transactions into provided hierarchical data collection\n     *\n     * @param data Collection to merge\n     * @param transactions Transactions to merge into data\n     * @param childDataKey Data key of child collections\n     * @param primaryKey Primary key of the collection, if any\n     * @param deleteRows Should delete rows with DELETE transaction type from data\n     * @returns Provided data collections updated with all provided transactions\n     */\n    public static mergeHierarchicalTransactions(\n        data: any[],\n        transactions: HierarchicalTransaction[],\n        childDataKey: any,\n        primaryKey?: any,\n        cloneStrategy: IDataCloneStrategy = new DefaultDataCloneStrategy(),\n        deleteRows = false): any[] {\n        for (const transaction of transactions) {\n            if (transaction.path) {\n                const parent = this.findParentFromPath(data, primaryKey, childDataKey, transaction.path);\n                let collection: any[] = parent ? parent[childDataKey] : data;\n                switch (transaction.type) {\n                    case TransactionType.ADD:\n                        //  if there is no parent this is ADD row at root level\n                        if (parent && !parent[childDataKey]) {\n                            parent[childDataKey] = collection = [];\n                        }\n                        collection.push(transaction.newValue);\n                        break;\n                    case TransactionType.UPDATE:\n                        const updateIndex = collection.findIndex(x => x[primaryKey] === transaction.id);\n                        if (updateIndex !== -1) {\n                            collection[updateIndex] = mergeObjects(cloneStrategy.clone(collection[updateIndex]), transaction.newValue);\n                        }\n                        break;\n                    case TransactionType.DELETE:\n                        if (deleteRows) {\n                            const deleteIndex = collection.findIndex(r => r[primaryKey] === transaction.id);\n                            if (deleteIndex !== -1) {\n                                collection.splice(deleteIndex, 1);\n                            }\n                        }\n                        break;\n                }\n            } else {\n                //  if there is no path this is ADD row in root. Push the newValue to data\n                data.push(transaction.newValue);\n            }\n        }\n        return data;\n    }\n\n    public static parseValue(dataType: GridColumnDataType, value: any): any {\n        if (dataType === GridColumnDataType.Number || dataType === GridColumnDataType.Currency || dataType === GridColumnDataType.Percent) {\n            value = parseFloat(value);\n        }\n\n        return value;\n    }\n\n    public static filterDataByExpressions(data: any[], expressionsTree: IFilteringExpressionsTree, grid: GridTypeBase): any {\n        if (expressionsTree.filteringOperands.length) {\n            const state = { expressionsTree, strategy: FilteringStrategy.instance() };\n            data = FilterUtil.filter(cloneArray(data), state, grid);\n        }\n\n        return data;\n    }\n\n    private static findParentFromPath(data: any[], primaryKey: any, childDataKey: any, path: any[]): any {\n        let collection: any[] = data;\n        let result: any;\n\n        for (const id of path) {\n            result = collection && collection.find(x => x[primaryKey] === id);\n            if (!result) {\n                break;\n            }\n\n            collection = result[childDataKey];\n        }\n\n        return result;\n    }\n}\n","import { FilteringLogic, type IFilteringExpression } from './filtering-expression.interface';\nimport { FilteringExpressionsTree, type IFilteringExpressionsTree } from './filtering-expressions-tree';\nimport { resolveNestedPath, parseDate, columnFieldPath } from '../core/utils';\nimport { GridColumnDataType, type ColumnType, type EntityType, type GridTypeBase } from './grid-types';\nimport { DataUtil } from './data-util';\nimport { SortingDirection } from './sorting-strategy';\nimport type { IFilteringState } from './filtering-state.interface';\nimport { isTree } from './expressions-tree-util';\nimport { IgxSorting } from './grid-sorting-strategy';\n\nconst DateType = 'date';\nconst DateTimeType = 'dateTime';\nconst TimeType = 'time';\n\nexport class FilterUtil {\n    public static filter<T>(data: T[], state: IFilteringState, grid?: GridTypeBase): T[] {\n        if (!state.strategy) {\n            state.strategy = new FilteringStrategy();\n        }\n        return state.strategy.filter(data, state.expressionsTree, state.advancedExpressionsTree, grid);\n    }\n}\n\nexport interface IFilteringStrategy {\n    filter(data: any[], expressionsTree: IFilteringExpressionsTree, advancedExpressionsTree?: IFilteringExpressionsTree,\n        grid?: GridTypeBase): any[];\n    /* csSuppress */\n    getFilterItems(column: ColumnType, tree: IFilteringExpressionsTree): Promise<IgxFilterItem[]>;\n}\n\n/* csSuppress */\nexport interface IgxFilterItem {\n    value: any;\n    label?: string;\n    children?: IgxFilterItem[];\n}\n\n/* csSuppress */\nexport abstract class BaseFilteringStrategy implements IFilteringStrategy {\n    // protected\n    public findMatchByExpression(rec: any, expr: IFilteringExpression, isDate?: boolean, isTime?: boolean, grid?: GridTypeBase): boolean {\n        if (expr.searchTree) {\n            const records = rec[expr.searchTree.entity];\n            const shouldMatchRecords = expr.conditionName === 'inQuery';\n            if (!records) { // child grid is not yet created\n                return true;\n            }\n\n            for (let index = 0; index < records.length; index++) {\n                const record = records[index];\n                if ((shouldMatchRecords && this.matchRecord(record, expr.searchTree, grid, expr.searchTree.entity)) ||\n                    (!shouldMatchRecords && !this.matchRecord(record, expr.searchTree, grid, expr.searchTree.entity))) {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        const val = this.getFieldValue(rec, expr.fieldName, isDate, isTime, grid);\n        if (expr.condition?.logic) {\n            return expr.condition.logic(val, expr.searchVal, expr.ignoreCase);\n        }\n    }\n\n    // protected\n    public matchRecord(rec: any, expressions: IFilteringExpressionsTree | IFilteringExpression, grid?: GridTypeBase, entity?: string): boolean {\n        if (expressions) {\n            if (isTree(expressions)) {\n                const expressionsTree = expressions;\n                const operator = expressionsTree.operator as FilteringLogic;\n                let matchOperand;\n\n                if (expressionsTree.filteringOperands?.length) {\n                    for (const operand of expressionsTree.filteringOperands) {\n                        matchOperand = this.matchRecord(rec, operand, grid, entity);\n\n                        // Return false if at least one operand does not match and the filtering logic is And\n                        if (!matchOperand && operator === FilteringLogic.And) {\n                            return false;\n                        }\n\n                        // Return true if at least one operand matches and the filtering logic is Or\n                        if (matchOperand && operator === FilteringLogic.Or) {\n                            return true;\n                        }\n                    }\n\n                    return matchOperand;\n                }\n\n                return true;\n            } else {\n                const expression = expressions;\n                let dataType = null;\n                if (!entity) {\n                    const column = grid && grid.getColumnByName(expression.fieldName);\n                    dataType = column?.dataType;\n                } else if (grid.type === 'hierarchical') {\n                    const schema = grid.schema;\n                    const entityMatch = this.findEntityByName(schema, entity);\n                    dataType = entityMatch?.fields.find(f => f.field === expression.fieldName)?.dataType;\n                }\n\n                const isDate = dataType ? dataType === DateType || dataType === DateTimeType : false;\n                const isTime = dataType ? dataType === TimeType : false;\n\n                return this.findMatchByExpression(rec, expression, isDate, isTime, grid);\n            }\n        }\n\n        return true;\n    }\n\n    private findEntityByName(schema: EntityType[], name: string): EntityType | null {\n        for (const entity of schema) {\n            if (entity.name === name) {\n                return entity;\n            }\n\n            if (entity.childEntities && entity.childEntities.length > 0) {\n                const found = this.findEntityByName(entity.childEntities, name);\n                if (found) {\n                    return found;\n                }\n            }\n        }\n        return null;\n    }\n\n    public getFilterItems(column: ColumnType, tree: IFilteringExpressionsTree): Promise<IgxFilterItem[]> {\n        const applyFormatter = column.formatter && this.shouldFormatFilterValues(column);\n\n        const data = this.getFilteredData(column, tree);\n\n        const pathParts = columnFieldPath(column.field)\n        const seenFormattedFilterItems = new Map<any, IgxFilterItem>()\n\n        for (let i = 0; i < data.length; ++i) {\n            const record = data[i]\n            const rawValue = resolveNestedPath(record, pathParts);\n            const formattedValue = applyFormatter ? column.formatter(rawValue, record) : rawValue;\n            const { key, finalValue } = this.getFilterItemKeyValue(formattedValue, column);\n            // Deduplicate by normalized key\n            if (!seenFormattedFilterItems.has(key)) {\n                const label = this.getFilterItemLabel(column, finalValue, !applyFormatter, record);\n                seenFormattedFilterItems.set(key, { value: finalValue, label });\n            }\n        }\n\n        let filterItems: IgxFilterItem[] = Array.from(seenFormattedFilterItems.values());\n\n        filterItems = DataUtil.sort(filterItems,\n            [{ fieldName: 'value', dir: SortingDirection.Asc, ignoreCase: column.sortingIgnoreCase }], new IgxSorting())\n\n        return Promise.resolve(filterItems);\n    }\n\n    protected getFilteredData(column: ColumnType, tree: IFilteringExpressionsTree) {\n        return column.grid.gridAPI.filterDataByExpressions(tree);\n    }\n\n    protected getFilterItemLabel(column: ColumnType, value: any, applyFormatter: boolean, data: any) {\n        if (column.formatter) {\n            if (applyFormatter) {\n                return column.formatter(value, data);\n            }\n            return value;\n        }\n\n        const { display, format, digitsInfo, currencyCode, timezone } = column.pipeArgs;\n        const locale = column.grid.locale;\n        const i18nFormatter = column.grid.i18nFormatter;\n\n        switch (column.dataType) {\n            case GridColumnDataType.Date:\n            case GridColumnDataType.DateTime:\n            case GridColumnDataType.Time:\n                return i18nFormatter.formatDate(value, format, locale, timezone);\n            case GridColumnDataType.Currency: {\n                const currencyCodeFinal = i18nFormatter.getCurrencyCode(locale, currencyCode);\n                return i18nFormatter.formatCurrency(value, locale, display, currencyCodeFinal, digitsInfo); }\n            case GridColumnDataType.Number:\n                return i18nFormatter.formatNumber(value, locale, digitsInfo);\n            case GridColumnDataType.Percent:\n                return i18nFormatter.formatPercent(value, locale, digitsInfo);\n            default:\n                return value;\n        }\n    }\n\n    protected getFilterItemKeyValue(value: any, column: ColumnType) {\n        let key: any = value;\n        let finalValue = value;\n        if (column.dataType === GridColumnDataType.String && column.filteringIgnoreCase) {\n            key = key?.toString().toLowerCase();\n        } else if (column.dataType === GridColumnDataType.DateTime) {\n            key = value?.toString();\n            finalValue = key ? new Date(key) : key;\n        } else if (column.dataType === GridColumnDataType.Time) {\n            const date = key ? new Date(key) : key;\n            key = date\n                ? new Date().setHours(\n                    date.getHours(),\n                    date.getMinutes(),\n                    date.getSeconds(),\n                    date.getMilliseconds()\n                )\n                : date;\n            finalValue = key ? new Date(key) : key;\n        } else if (column.dataType === GridColumnDataType.Date) {\n            const date = key ? new Date(key) : key;\n            key = date\n                ? new Date(date.getFullYear(), date.getMonth(), date.getDate()).toISOString()\n                : date;\n            finalValue = date;\n        }\n        return { key, finalValue };\n    }\n\n    protected shouldFormatFilterValues(_column: ColumnType): boolean {\n        return false;\n    }\n\n    public abstract filter(data: any[], expressionsTree: IFilteringExpressionsTree,\n        advancedExpressionsTree?: IFilteringExpressionsTree, grid?: GridTypeBase): any[];\n\n    protected abstract getFieldValue(rec: any, fieldName: string, isDate?: boolean, isTime?: boolean, grid?: GridTypeBase): any;\n}\n\n/* csSuppress */\nexport class NoopFilteringStrategy extends BaseFilteringStrategy {\n    protected getFieldValue(rec: any, _fieldName: string) {\n        return rec;\n    }\n    private static _instance: NoopFilteringStrategy = null;\n\n    public static instance() {\n        return this._instance || (this._instance = new NoopFilteringStrategy());\n    }\n\n    public filter(data: any[], _: IFilteringExpressionsTree, __?: IFilteringExpressionsTree): any[] {\n        return data;\n    }\n}\n\n\nexport class FilteringStrategy extends BaseFilteringStrategy {\n    private static _instance: FilteringStrategy = null;\n\n\n    public static instance() {\n        return this._instance || (this._instance = new this());\n    }\n\n    public filter<T>(data: T[], expressionsTree: IFilteringExpressionsTree, advancedExpressionsTree: IFilteringExpressionsTree,\n        grid: GridTypeBase): T[] {\n\n\n        if ((FilteringExpressionsTree.empty(expressionsTree) && FilteringExpressionsTree.empty(advancedExpressionsTree))) {\n            return data;\n        }\n\n        return data.filter(record => this.matchRecord(record, expressionsTree, grid) && this.matchRecord(record, advancedExpressionsTree, grid));\n    }\n\n    protected getFieldValue(rec: any, fieldName: string, isDate = false, isTime = false, grid?: GridTypeBase): any {\n        const column = grid?.getColumnByName(fieldName);\n        let value = resolveNestedPath(rec, columnFieldPath(fieldName));\n\n        value = column?.formatter && this.shouldFormatFilterValues(column) ?\n            column.formatter(value, rec) :\n            value && (isDate || isTime) ? parseDate(value) : value;\n\n        return value;\n    }\n}\nexport class FormattedValuesFilteringStrategy extends FilteringStrategy {\n    /**\n     * Creates a new instance of FormattedValuesFilteringStrategy.\n     *\n     * @param fields An array of column field names that should be formatted.\n     * If omitted the values of all columns which has formatter will be formatted.\n     */\n    constructor(private fields?: string[]) {\n        super();\n    }\n\n    protected override shouldFormatFilterValues(column: ColumnType): boolean {\n        return !this.fields || this.fields.length === 0 || this.fields.some(f => f === column.field);\n    }\n}\n","import { columnFieldPath, parseDate, resolveNestedPath } from '../core/utils';\nimport { DataUtil } from './data-util';\nimport { FilteringExpressionsTree, type IFilteringExpressionsTree } from './filtering-expressions-tree';\nimport { BaseFilteringStrategy, type IgxFilterItem } from './filtering-strategy';\nimport { SortingDirection } from './sorting-strategy';\nimport type { ColumnType, GridTypeBase, IgxTreeGridAPIService, ITreeGridRecord } from './grid-types';\n\nexport class TreeGridFilteringStrategy extends BaseFilteringStrategy {\n\n    constructor(public hierarchicalFilterFields?: string[]) {\n        super();\n    }\n\n    public filter(data: ITreeGridRecord[], expressionsTree: IFilteringExpressionsTree,\n        advancedExpressionsTree?: IFilteringExpressionsTree, grid?: GridTypeBase): ITreeGridRecord[] {\n        return this.filterImpl(data, expressionsTree, advancedExpressionsTree, undefined, grid);\n    }\n\n    protected getFieldValue(rec: any, fieldName: string, isDate = false, isTime = false, grid?: GridTypeBase): any {\n        const column = grid?.getColumnByName(fieldName);\n        const hierarchicalRecord = rec as ITreeGridRecord;\n        let value = this.isHierarchicalFilterField(fieldName) ?\n            this.getHierarchicalFieldValue(hierarchicalRecord, fieldName) :\n            resolveNestedPath(hierarchicalRecord.data, columnFieldPath(fieldName));\n\n        value = column?.formatter && this.shouldFormatFilterValues(column) ?\n            column.formatter(value, rec.data) :\n            value && (isDate || isTime) ? parseDate(value) : value;\n\n        return value;\n    }\n\n    private getHierarchicalFieldValue(record: ITreeGridRecord, field: string) {\n        const value = resolveNestedPath(record.data, columnFieldPath(field));\n\n        return record.parent ?\n            `${this.getHierarchicalFieldValue(record.parent, field)}${value ? `.[${value}]` : ''}` :\n            `[${value}]`;\n    }\n\n    private filterImpl(data: ITreeGridRecord[], expressionsTree: IFilteringExpressionsTree,\n        advancedExpressionsTree: IFilteringExpressionsTree, parent: ITreeGridRecord, grid?: GridTypeBase): ITreeGridRecord[] {\n        let i: number;\n        let rec: ITreeGridRecord;\n        const len = data.length;\n        const res: ITreeGridRecord[] = [];\n        if ((FilteringExpressionsTree.empty(expressionsTree) && FilteringExpressionsTree.empty(advancedExpressionsTree)) || !len) {\n            return data;\n        }\n        for (i = 0; i < len; i++) {\n            rec = DataUtil.cloneTreeGridRecord(data[i]);\n            rec.parent = parent;\n            if (rec.children) {\n                const filteredChildren = this.filterImpl(rec.children, expressionsTree, advancedExpressionsTree, rec, grid);\n                rec.children = filteredChildren.length > 0 ? filteredChildren : null;\n            }\n\n            if (this.matchRecord(rec, expressionsTree, grid) && this.matchRecord(rec, advancedExpressionsTree, grid)) {\n                res.push(rec);\n            } else if (rec.children && rec.children.length > 0) {\n                rec.isFilteredOutParent = true;\n                res.push(rec);\n            }\n        }\n        return res;\n    }\n\n    private isHierarchicalFilterField(field: string) {\n        return this.hierarchicalFilterFields && this.hierarchicalFilterFields.indexOf(field) !== -1;\n    }\n\n    public override getFilterItems(column: ColumnType, tree: IFilteringExpressionsTree): Promise<IgxFilterItem[]> {\n        if (!this.isHierarchicalFilterField(column.field)) {\n            return super.getFilterItems(column, tree);\n        }\n\n        let data = (column.grid.gridAPI as IgxTreeGridAPIService).filterTreeDataByExpressions(tree);\n        data = DataUtil.treeGridSort(\n            data,\n            [{ fieldName: column.field, dir: SortingDirection.Asc, ignoreCase: column.sortingIgnoreCase }],\n            column.grid.sortStrategy,\n            column.grid);\n\n        const items = this.getHierarchicalFilterItems(data, column);\n\n\n        return Promise.resolve(items);\n    }\n\n    protected override getFilteredData(column: ColumnType, tree: IFilteringExpressionsTree) {\n        return DataUtil.filterDataByExpressions(column.grid.flatData, tree, column.grid);\n    }\n\n    private getHierarchicalFilterItems(records: ITreeGridRecord[], column: ColumnType, parent?: IgxFilterItem): IgxFilterItem[] {\n        const pathParts = columnFieldPath(column.field);\n        return records?.map(record => {\n            let value = resolveNestedPath(record.data, pathParts);\n            const applyFormatter = column.formatter && this.shouldFormatFilterValues(column);\n\n            value = applyFormatter ?\n                column.formatter(value, record.data) :\n                value;\n\n            const hierarchicalValue = parent ?\n                (value || value === 0) ? `${parent.value}.[${value}]` : value :\n                `[${value}]`;\n\n            const filterItem: IgxFilterItem = { value: hierarchicalValue };\n            filterItem.label = this.getFilterItemLabel(column, value, !applyFormatter, record.data);\n            filterItem.children = this.getHierarchicalFilterItems(record.children, column, filterItem);\n            return filterItem;\n        });\n    }\n}\n\nexport class TreeGridFormattedValuesFilteringStrategy extends TreeGridFilteringStrategy {\n    /**\n     * Creates a new instance of FormattedValuesFilteringStrategy.\n     *\n     * @param fields An array of column field names that should be formatted.\n     * If omitted the values of all columns which has formatter will be formatted.\n     */\n    constructor(private fields?: string[]) {\n        super();\n    }\n\n    protected override shouldFormatFilterValues(column: ColumnType): boolean {\n        return !this.fields || this.fields.length === 0 || this.fields.some(f => f === column.field);\n    }\n}\n\nexport class TreeGridMatchingRecordsOnlyFilteringStrategy extends TreeGridFilteringStrategy {\n    public override filter(data: ITreeGridRecord[], expressionsTree: IFilteringExpressionsTree,\n        advancedExpressionsTree?: IFilteringExpressionsTree, grid?: GridTypeBase): ITreeGridRecord[] {\n        return this.filterImplementation(data, expressionsTree, advancedExpressionsTree, undefined, grid);\n    }\n\n    private filterImplementation(data: ITreeGridRecord[], expressionsTree: IFilteringExpressionsTree,\n        advancedExpressionsTree: IFilteringExpressionsTree, parent: ITreeGridRecord, grid?: GridTypeBase): ITreeGridRecord[] {\n        let i: number;\n        let rec: ITreeGridRecord;\n        const len = data.length;\n        const res: ITreeGridRecord[] = [];\n        if ((FilteringExpressionsTree.empty(expressionsTree) && FilteringExpressionsTree.empty(advancedExpressionsTree)) || !len) {\n            return data;\n        }\n        for (i = 0; i < len; i++) {\n            rec = DataUtil.cloneTreeGridRecord(data[i]);\n            rec.parent = parent;\n            if (rec.children) {\n                const filteredChildren = this.filterImplementation(rec.children, expressionsTree, advancedExpressionsTree, rec, grid);\n                rec.children = filteredChildren.length > 0 ? filteredChildren : null;\n            }\n            if (this.matchRecord(rec, expressionsTree, grid) && this.matchRecord(rec, advancedExpressionsTree, grid)) {\n                res.push(rec);\n            } else if (rec.children && rec.children.length > 0) {\n                rec = this.setCorrectLevelToFilteredRecords(rec);\n                res.push(...rec.children);\n            }\n        }\n        return res;\n    }\n\n    private setCorrectLevelToFilteredRecords(rec: ITreeGridRecord): ITreeGridRecord {\n        if (rec.children && rec.children.length > 0) {\n            rec.children.map(child => {\n                child.level = child.level - 1;\n                return this.setCorrectLevelToFilteredRecords(child);\n            });\n        }\n        return rec;\n    }\n}\n","import type { ColumnType } from './grid-types';\nimport { ISortingExpression } from './sorting-strategy';\n\n/**\n * @hidden\n */\nexport class GroupedRecords extends Array<any> {}\n\n/* jsonAPIComplexObject */\nexport interface IGroupByRecord {\n    expression: ISortingExpression;\n    level: number;\n    /* wcAlternateType: any[] */\n    records: GroupedRecords;\n    value: any;\n    groupParent: IGroupByRecord;\n    groups?: IGroupByRecord[];\n    height: number;\n    column?: ColumnType;\n }\n","import {\n    formatDate as ngFormatDate,\n    getLocaleCurrencyCode,\n    getLocaleFirstDayOfWeek as ngGetLocaleFirstDayOfWeek,\n    formatNumber as ngFormatNumber,\n    formatPercent as ngFormatPercent,\n    getCurrencySymbol as ngGetCurrencySymbol,\n    CurrencyPipe\n} from '@angular/common';\nimport { InjectionToken } from '@angular/core';\nimport { getCurrentI18n, getDateFormatter } from 'igniteui-i18n-core';\n\n/**\n * Injection token that allows for retrieving the i18n formatter for the IgniteUI components.\n */\nexport const I18N_FORMATTER = new InjectionToken<BaseFormatter>('IgniteFormattingToken',{\n    providedIn: 'root',\n    factory: () => new BaseFormatter(),\n});\n\nexport class BaseFormatter {\n    protected IntlDateTimeStyleValues = {\n        full: 'Full',\n        long: 'Long',\n        medium: 'Medium',\n        short: 'Short'\n    };\n    private _currencyPipe = new CurrencyPipe('en-US', 'USD');\n\n    public verifyLocale(locale: string): string {\n        try {\n            // Any angular method should work.\n            ngGetLocaleFirstDayOfWeek(locale);\n        } catch {\n            return undefined;\n        }\n        return locale;\n    }\n\n    /**\n     * Get Intl options based on format provided:\n     *\n     * date and time formats - short, medium, long, full\n     *\n     * date formats - shortDate, mediumDate, longDate, fullDate\n     *\n     * time formats - shortTime, mediumTime, longTime, fullTime\n     *\n     * @returns Return the resolved options or null if not matching any of the above.\n     */\n    public getFormatOptions(format: string | null | undefined): Intl.DateTimeFormatOptions | null {\n        let dateStyle = undefined, timeStyle = undefined;\n        if (format === 'short' || format === 'medium' || format === 'long' || format === 'full') {\n            dateStyle = format;\n            timeStyle = format;\n        } else if (format?.includes('Date')) {\n            dateStyle = format.replace('Date', '');\n        } else if (format?.includes('Time')) {\n            timeStyle = format.replace('Time', '');\n        } else {\n            return null;\n        }\n\n        return {\n            dateStyle,\n            timeStyle\n        };\n    }\n\n    /**\n     * Returns the date and time format based on a provided locale and options.\n     */\n    public getLocaleDateTimeFormat(locale: string, forceLeadingZero = false, options?: Intl.DateTimeFormatOptions): string {\n        return getDateFormatter().getLocaleDateTimeFormat(locale, forceLeadingZero, options);\n    }\n\n    /**\n     * Format provided date to reflect locales format. Similar to Angular's formatDate.\n     */\n    public formatDate(value: Date | string | number | null | undefined, format: string, locale: string, timezone?: string): string {\n        return value != null ? ngFormatDate(value, format, locale, timezone) : '';\n    }\n\n    /** Format number value based on locale */\n    public formatNumber(value: number | string | null | undefined, locale: string, digitsInfo?: string): string {\n        if (typeof value === \"string\") {\n            value = parseFloat(value);\n        }\n        return value != null ? ngFormatNumber(value, locale, digitsInfo) : '';\n    }\n\n    /** Format number value as percent based on locale */\n    public formatPercent(value: number | string | null | undefined, locale: string, digitsInfo?: string): string {\n        if (typeof value === \"string\") {\n            value = parseFloat(value);\n        }\n        return value != null ? ngFormatPercent(value, locale, digitsInfo) : '';\n    }\n\n    /** Format number as a currency based on locale */\n    public formatCurrency(value: number | string | null | undefined, locale?: string, display?: 'code' | 'symbol' | 'symbol-narrow' | string, currencyCode?: string, digitsInfo?: string): string {\n        if (typeof value === \"string\") {\n            value = parseFloat(value);\n        }\n\n        return value != null ? this._currencyPipe.transform(value, currencyCode, display, digitsInfo, locale ?? getCurrentI18n()) : '';\n    }\n\n    /**\n     * Retrieve the currency code of the locale provided.\n     * Angular provides locale data for them, if using that.\n     * When using Intl, it should be user defined and defaults to USD.\n     */\n    public getCurrencyCode(locale: string, overrideCode?: string): string {\n        if (overrideCode) {\n            return overrideCode;\n        }\n        return getLocaleCurrencyCode(locale);\n    }\n\n\n    /** Get the currency symbol based on a currency code. */\n    public getCurrencySymbol(currencyCode: string, locale: string, currencyDisplay: keyof Intl.NumberFormatOptionsCurrencyDisplayRegistry = \"symbol\"): string {\n        let format: 'wide' | 'narrow' = 'wide';\n        if (currencyDisplay === 'narrowSymbol') {\n            format = 'narrow';\n        }\n        return ngGetCurrencySymbol(currencyCode, format, locale);\n    }\n\n    /**\n     * Get first day of the week.\n     * Angular's default: 0...6.\n     * Intl default: 1...7.\n     */\n    public getLocaleFirstDayOfWeek(locale: string): number {\n        // Angular returns 0 for Sunday...\n        return ngGetLocaleFirstDayOfWeek(locale);\n    }\n}\n","import { Pipe, PipeTransform, LOCALE_ID, inject } from '@angular/core';\nimport { I18N_FORMATTER } from '../core/i18n/formatters/formatter-base';\n\n@Pipe({\n    name: 'date',\n    standalone: true\n})\nexport class IgxDateFormatterPipe implements PipeTransform {\n    private i18nFormatter = inject(I18N_FORMATTER);\n    private locale_ID = inject(LOCALE_ID);\n\n    public transform(value: Date | string | number | null | undefined, format?: string, timezone?: string, locale?: string) {\n        return this.i18nFormatter.formatDate(value, format, locale ?? this.locale_ID, timezone);\n    }\n}\n\n@Pipe({\n    name: 'number',\n    standalone: true\n})\nexport class IgxNumberFormatterPipe implements PipeTransform {\n    private i18nFormatter = inject(I18N_FORMATTER);\n\n    public transform(value: number | string | null | undefined, digitsInfo?: string, locale?: string) {\n        return this.i18nFormatter.formatNumber(value, locale, digitsInfo);\n    }\n}\n\n@Pipe({\n    name: 'percent',\n    standalone: true\n})\nexport class IgxPercentFormatterPipe implements PipeTransform {\n    private i18nFormatter = inject(I18N_FORMATTER);\n\n    public transform(value: number | string | null | undefined, digitsInfo?: string, locale?: string) {\n        return this.i18nFormatter.formatPercent(value, locale, digitsInfo);\n    }\n}\n\n@Pipe({\n    name: 'currency',\n    standalone: true\n})\nexport class IgxCurrencyFormatterPipe implements PipeTransform {\n    private i18nFormatter = inject(I18N_FORMATTER);\n\n    public transform(value: number | string | null | undefined, currencyCode?: string, display?: 'code' | 'symbol' | 'symbol-narrow' | string , digitsInfo?: string, locale?: string) {\n\n        return this.i18nFormatter.formatCurrency(value, locale, display, currencyCode, digitsInfo);\n    }\n}\n","import { AnimationPlayer as AngularAnimationPlayer } from '@angular/animations';\nimport { EventEmitter } from '@angular/core';\nimport { IBaseEventArgs } from '../../core/utils';\nimport { AnimationPlayer } from './animation';\n\nexport class IgxAngularAnimationPlayer implements AnimationPlayer {\n    private _innerPlayer: AngularAnimationPlayer;\n    public animationStart: EventEmitter<IBaseEventArgs> = new EventEmitter<IBaseEventArgs>();\n    public animationEnd: EventEmitter<IBaseEventArgs> = new EventEmitter<IBaseEventArgs>();\n\n    public get position(): number {\n        return this._innerPlayer.getPosition();\n    }\n\n    public set position(value: number) {\n        this.internalPlayer.setPosition(value);\n    }\n\n    constructor(private internalPlayer: AngularAnimationPlayer) {\n        this.internalPlayer.onDone(() => this.onDone());\n        const innerRenderer = (this.internalPlayer as any)._renderer;\n        //  We need inner player as Angular.AnimationPlayer.getPosition returns always 0.\n        // To workaround this we are getting the positions from the inner player.\n        //  This is logged in Angular here - https://github.com/angular/angular/issues/18891\n        //  As soon as this is resolved we can remove this hack\n        const rendererEngine = innerRenderer.engine || innerRenderer.delegate.engine;\n        // A workaround because of Angular SSR is using some delegation.\n        this._innerPlayer = rendererEngine.players[rendererEngine.players.length - 1];\n    }\n\n    public init(): void {\n        this.internalPlayer.init();\n    }\n\n    public play(): void {\n        this.animationStart.emit({ owner: this });\n        this.internalPlayer.play();\n    }\n\n    public finish(): void {\n        this.internalPlayer.finish();\n        // TODO: when animation finish angular deletes all onDone handlers. Add handlers again if needed\n    }\n\n    public reset(): void {\n        this.internalPlayer.reset();\n        // calling reset does not change hasStarted to false. This is why we are doing it here via internal field\n        (this.internalPlayer as any)._started = false;\n    }\n\n    public destroy(): void {\n        this.internalPlayer.destroy();\n    }\n\n    public hasStarted(): boolean {\n        return this.internalPlayer.hasStarted();\n    }\n\n    private onDone(): void {\n        this.animationEnd.emit({ owner: this });\n    }\n}\n","import { AnimationBuilder, AnimationReferenceMetadata } from '@angular/animations';\nimport { Injectable, inject } from '@angular/core';\nimport { IgxAngularAnimationPlayer } from './angular-animation-player';\nimport { AnimationService, AnimationPlayer } from './animation';\n\n@Injectable({providedIn: 'root'})\nexport class IgxAngularAnimationService implements AnimationService {\n    private builder = inject(AnimationBuilder);\n\n    public buildAnimation(animationMetaData: AnimationReferenceMetadata, element: HTMLElement): AnimationPlayer {\n        if (!animationMetaData) {\n            return null;\n        }\n        const animationBuilder = this.builder.build(animationMetaData);\n        const player = new IgxAngularAnimationPlayer(animationBuilder.create(element));\n        return player;\n    }\n}\n","import { Injectable, InjectionToken, inject, DOCUMENT } from '@angular/core';\n\n/**\n * @hidden @internal\n */\nexport type Direction = 'ltr' | 'rtl';\n\n/**\n * @hidden\n */\nfunction DIR_DOCUMENT_FACTORY(): Document {\n    return inject(DOCUMENT);\n}\n\n/**\n * Injection token is used to inject the document into Directionality\n * which factory could be faked for testing purposes.\n *\n * We can't provide and mock the DOCUMENT token from platform-browser because configureTestingModule\n * allows override of the default providers, directive, pipes, modules of the test injector\n * which causes errors.\n *\n * @hidden @internal\n */\nexport const DIR_DOCUMENT = /*@__PURE__*/new InjectionToken<Document>('dir-doc', {\n    providedIn: 'root',\n    factory: DIR_DOCUMENT_FACTORY\n});\n\n/**\n * @hidden @internal\n *\n * Bidirectional service that extracts the value of the direction attribute on the body or html elements.\n *\n * The dir attribute over the body element takes precedence.\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class IgxDirectionality {\n    private _dir: Direction;\n    private _document: Document;\n\n    public get value(): Direction {\n        return this._dir;\n    }\n\n    public get document() {\n        return this._document;\n    }\n\n    public get rtl() {\n        return this._dir === 'rtl';\n    }\n\n    constructor() {\n        const document = inject(DIR_DOCUMENT);\n\n        this._document = document;\n        const bodyDir = this._document.body ? this._document.body.dir : null;\n        const htmlDir = this._document.documentElement ? this._document.documentElement.dir : null;\n        const extractedDir = bodyDir || htmlDir;\n        this._dir = (extractedDir === 'ltr' || extractedDir === 'rtl') ? extractedDir : 'ltr';\n    }\n}\n","import { AnimationReferenceMetadata } from '@angular/animations';\nimport { ComponentRef, Directive, ElementRef, inject, Injector, NgZone } from '@angular/core';\nimport { CancelableBrowserEventArgs, CancelableEventArgs, cloneValue, IBaseEventArgs } from '../../core/utils';\nimport { AnimationPlayer } from '../animation/animation';\nimport { IPositionStrategy } from './position/IPositionStrategy';\nimport { IScrollStrategy } from './scroll';\n\n/**\n * @hidden @internal\n */\nconst getIntersectionObserver = () => globalThis.window?.IntersectionObserver;\n\n/**\n * Mark an element as an igxOverlay outlet container.\n * Directive instance is exported as `overlay-outlet` to be assigned to templates variables:\n * ```html\n * <div igxOverlayOutlet #outlet=\"overlay-outlet\"></div>\n * ```\n */\n@Directive({\n    exportAs: 'overlay-outlet',\n    selector: '[igxOverlayOutlet]',\n    standalone: true\n})\nexport class IgxOverlayOutletDirective {\n    /* blazorSuppress */\n    public element = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    /** @hidden */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n}\n\n/* blazorAlternateName: GridHorizontalAlignment */\nexport enum HorizontalAlignment {\n    Left = -1,\n    Center = -0.5,\n    Right = 0\n}\n\n/* blazorAlternateName: GridVerticalAlignment */\nexport enum VerticalAlignment {\n    Top = -1,\n    Middle = -0.5,\n    Bottom = 0\n}\n\n/**\n * Defines the possible values of the overlays' position strategy.\n */\nexport enum RelativePositionStrategy {\n    Connected = 'connected',\n    Auto = 'auto',\n    Elastic = 'elastic'\n}\n\n/**\n * Defines the possible positions for the relative overlay settings presets.\n */\nexport enum RelativePosition {\n    Above = 'above',\n    Below = 'below',\n    Before = 'before',\n    After = 'after',\n    Default = 'default'\n}\n\n/**\n * Defines the possible positions for the absolute overlay settings presets.\n */\nexport enum AbsolutePosition {\n    Bottom = 'bottom',\n    Top = 'top',\n    Center = 'center'\n}\n\n/**\n * Determines whether to add or set the offset values.\n */\nexport enum OffsetMode {\n    Add,\n    Set\n}\n\n// TODO: make this interface\nexport class Point {\n    constructor(public x: number, public y: number) { }\n}\n\n/** @hidden */\nexport interface OutOfViewPort {\n    /** Out of view port at Top or Left */\n    back: number;\n    /** Out of view port at Bottom or Right */\n    forward: number;\n}\n\nexport interface PositionSettings {\n    /** Direction in which the component should show */\n    horizontalDirection?: HorizontalAlignment;\n    /** Direction in which the component should show */\n    verticalDirection?: VerticalAlignment;\n    /** Target's starting point */\n    horizontalStartPoint?: HorizontalAlignment;\n    /** Target's starting point */\n    verticalStartPoint?: VerticalAlignment;\n    /* blazorSuppress */\n    /** Animation applied while overlay opens */\n    openAnimation?: AnimationReferenceMetadata;\n    /* blazorSuppress */\n    /** Animation applied while overlay closes */\n    closeAnimation?: AnimationReferenceMetadata;\n    /** The size up to which element may shrink when shown in elastic position strategy */\n    minSize?: Size;\n    /** The offset of the element from the target in pixels */\n    offset?: number;\n}\n\nexport interface OverlaySettings {\n    /** Attaching target for the component to show */\n    target?: Point | HTMLElement;\n    /** Position strategy to use with these settings */\n    positionStrategy?: IPositionStrategy;\n    /** Scroll strategy to use with these settings */\n    scrollStrategy?: IScrollStrategy;\n    /** Set if the overlay should be in modal mode */\n    modal?: boolean;\n    /** Set if the overlay should close on outside click */\n    closeOnOutsideClick?: boolean;\n    /** Set if the overlay should close when `Esc` key is pressed */\n    closeOnEscape?: boolean;\n    /* blazorSuppress */\n    /** Set the outlet container to attach the overlay to */\n    outlet?: IgxOverlayOutletDirective | ElementRef;\n    /**\n     * @hidden @internal\n     * Elements to be excluded for closeOnOutsideClick.\n     * Clicking on the elements in this collection will not close the overlay when closeOnOutsideClick = true.\n     */\n    excludeFromOutsideClick?: HTMLElement[];\n}\n\nexport interface OverlayEventArgs extends IBaseEventArgs {\n    /** Id of the overlay generated with `attach()` method */\n    id: string;\n    /** Available when `Type<T>` is provided to the `attach()` method and allows access to the created Component instance */\n    componentRef?: ComponentRef<any>;\n    /** Will provide the elementRef of the markup that will be displayed in the overlay */\n    elementRef?: ElementRef<any>;\n    /** Will provide the overlay settings which will be used when the component is attached */\n    settings?: OverlaySettings;\n    /** Will provide the original keyboard event if closed from ESC or click */\n    event?: Event;\n}\n\nexport interface OverlayCancelableEventArgs extends OverlayEventArgs, CancelableEventArgs {\n}\n\nexport interface OverlayClosingEventArgs extends OverlayEventArgs, CancelableBrowserEventArgs {\n}\n\nexport interface OverlayAnimationEventArgs extends IBaseEventArgs {\n    /** Id of the overlay generated with `attach()` method */\n    id: string;\n    /** Animation player that will play the animation */\n    animationPlayer: AnimationPlayer;\n    /** Type of animation to be played. It should be either 'open' or 'close' */\n    animationType: 'open' | 'close';\n}\n\nexport interface Size {\n    /** Gets or sets the horizontal component of Size */\n    width: number;\n\n    /** Gets or sets the vertical component of Size */\n    height: number;\n}\n\n/** @hidden */\nexport interface OverlayInfo {\n    id?: string;\n    visible?: boolean;\n    detached?: boolean;\n    elementRef?: ElementRef;\n    componentRef?: ComponentRef<any>;\n    settings?: OverlaySettings;\n    initialSize?: Size;\n    hook?: HTMLElement;\n    openAnimationPlayer?: AnimationPlayer;\n    // calling animation.destroy in detach fires animation.done. This should not happen\n    // this is why we should trace if animation ever started\n    openAnimationDetaching?: boolean;\n    closeAnimationPlayer?: AnimationPlayer;\n    // calling animation.destroy in detach fires animation.done. This should not happen\n    // this is why we should trace if animation ever started\n    closeAnimationDetaching?: boolean;\n    ngZone: NgZone;\n    transformX?: number;\n    transformY?: number;\n    event?: Event;\n    wrapperElement?: HTMLElement;\n    size?: string\n}\n\n/** @hidden */\nexport interface ConnectedFit {\n    contentElementRect?: Partial<DOMRect>;\n    targetRect?: Partial<DOMRect>;\n    viewPortRect?: Partial<DOMRect>;\n    fitHorizontal?: OutOfViewPort;\n    fitVertical?: OutOfViewPort;\n    left?: number;\n    right?: number;\n    top?: number;\n    bottom?: number;\n    horizontalOffset?: number;\n    verticalOffset?: number;\n}\n\nexport interface OverlayCreateSettings extends OverlaySettings {\n    /**\n     * An `Injector` instance to add in the created component ref's injectors tree.\n     */\n    injector?: Injector\n}\n\n/** @hidden @internal */\nexport class Util {\n    /**\n     * Calculates the rectangle of target for provided overlay settings. Defaults to 0,0,0,0,0,0 rectangle\n     * if no target is provided\n     *\n     * @param settings Overlay settings for which to calculate target rectangle\n     */\n    public static getTargetRect(target?: Point | HTMLElement): Partial<DOMRect> {\n        let targetRect: Partial<DOMRect> = {\n            bottom: 0,\n            height: 0,\n            left: 0,\n            right: 0,\n            top: 0,\n            width: 0\n        };\n        if (target instanceof HTMLElement) {\n            targetRect = (target as HTMLElement).getBoundingClientRect();\n        } else if (target instanceof Point) {\n            const targetPoint = target as Point;\n            targetRect = {\n                bottom: targetPoint.y,\n                height: 0,\n                left: targetPoint.x,\n                right: targetPoint.x,\n                top: targetPoint.y,\n                width: 0\n            };\n        }\n        return targetRect;\n    }\n\n    public static getViewportRect(document: Document): Partial<DOMRect> {\n        const width = document.documentElement.clientWidth;\n        const height = document.documentElement.clientHeight;\n        const scrollPosition = Util.getViewportScrollPosition(document);\n\n        return {\n            top: scrollPosition.y,\n            left: scrollPosition.x,\n            right: scrollPosition.x + width,\n            bottom: scrollPosition.y + height,\n            width,\n            height,\n        };\n    }\n\n    public static getViewportScrollPosition(document: Document): Point {\n        const documentElement = document.documentElement;\n        const documentRect = documentElement.getBoundingClientRect();\n\n        const horizontalScrollPosition =\n            -documentRect.left || document.body.scrollLeft || window.scrollX || documentElement.scrollLeft || 0;\n        const verticalScrollPosition = -documentRect.top || document.body.scrollTop || window.scrollY || documentElement.scrollTop || 0;\n\n        return new Point(horizontalScrollPosition, verticalScrollPosition);\n    }\n\n    public static cloneInstance(object) {\n        const clonedObj = Object.assign(Object.create(Object.getPrototypeOf(object)), object);\n        clonedObj.settings = cloneValue(clonedObj.settings);\n        return clonedObj;\n    }\n\n    /**\n     * Gets horizontal offset by position settings `offset`.\n     */\n    public static getHorizontalOffset(settings: PositionSettings): number {\n        if (settings.offset == null) {\n            return 0;\n        }\n\n        if (\n            settings.horizontalDirection === HorizontalAlignment.Left &&\n            settings.horizontalStartPoint === HorizontalAlignment.Left\n        ) {\n            return -settings.offset;\n        } else if (\n            settings.horizontalDirection === HorizontalAlignment.Right &&\n            settings.horizontalStartPoint === HorizontalAlignment.Right\n        ) {\n            return settings.offset;\n        }\n\n        return 0;\n    }\n\n    /**\n     * Gets vertical offset by position settings `offset`.\n     */\n    public static getVerticalOffset(settings: PositionSettings): number {\n        if (settings.offset == null) {\n            return 0;\n        }\n\n        if (\n            settings.verticalDirection === VerticalAlignment.Top &&\n            settings.verticalStartPoint === VerticalAlignment.Top\n        ) {\n            return -settings.offset;\n        } else if (\n            settings.verticalDirection === VerticalAlignment.Bottom &&\n            settings.verticalStartPoint === VerticalAlignment.Bottom\n        ) {\n            return settings.offset;\n        }\n\n        return 0;\n    }\n    /**\n     * Sets up IntersectionObserver for a target element and provides position update callbacks\n     * @param element The element to observe\n     * @param doc The document context\n     * @param onPositionUpdate Callback function to reposition the overlay\n     */\n    public static setupIntersectionObserver(\n        element: HTMLElement | null,\n        doc: Document | null,\n        onPositionUpdate: () => void\n    ): IntersectionObserver | null {\n        const intersectionObserver = getIntersectionObserver();\n        if (!intersectionObserver) {\n            return null;\n        }\n        if (!element || !doc) {\n            return null;\n        }\n        const rect = element.getBoundingClientRect();\n        const viewPortRect = Util.getViewportRect(doc);\n        const rootMargin = {\n            top: -Math.abs(rect.top),\n            right: -Math.abs(viewPortRect.width - rect.right),\n            bottom: -Math.abs(viewPortRect.height - rect.bottom),\n            left: -Math.abs(rect.left),\n        };\n        const options = {\n            rootMargin: `${rootMargin.top}px ${rootMargin.right}px ${rootMargin.bottom}px ${rootMargin.left}px`,\n            threshold: Array.from({ length: 1001 }, (_, i) => i / 1000), // Thresholds from 0 to 1 with step of 0.001\n            root: doc\n        };\n        const io = new intersectionObserver((_e) => {\n            onPositionUpdate();\n        }, options);\n        io.observe(element);\n        return io;\n    }\n}\n","import { scaleInVerTop, scaleOutVerTop } from 'igniteui-angular/animations';\nimport { ConnectedFit } from '../utilities';\nimport {\n  HorizontalAlignment,\n  Point,\n  PositionSettings,\n  Size,\n  Util,\n  VerticalAlignment\n} from './../utilities';\nimport { IPositionStrategy } from './IPositionStrategy';\n\n/**\n * Positions the element based on the directions and start point passed in trough PositionSettings.\n * It is possible to either pass a start point or an HTMLElement as a positioning base.\n */\nexport class ConnectedPositioningStrategy implements IPositionStrategy {\n  /**\n   * PositionSettings to use when position the component in the overlay\n   */\n  public settings: PositionSettings;\n\n  private _defaultSettings: PositionSettings = {\n    horizontalDirection: HorizontalAlignment.Right,\n    verticalDirection: VerticalAlignment.Bottom,\n    horizontalStartPoint: HorizontalAlignment.Left,\n    verticalStartPoint: VerticalAlignment.Bottom,\n    openAnimation: scaleInVerTop,\n    closeAnimation: scaleOutVerTop,\n    minSize: { width: 0, height: 0 }\n  };\n\n  constructor(settings?: PositionSettings) {\n    this.settings = Object.assign({}, this._defaultSettings, settings);\n  }\n\n  /**\n   * Position the element based on the PositionStrategy implementing this interface.\n   *\n   * @param contentElement The HTML element to be positioned\n   * @param size Size of the element\n   * @param document reference to the Document object\n   * @param initialCall should be true if this is the initial call to the method\n   * @param target attaching target for the component to show\n   * ```typescript\n   * settings.positionStrategy.position(content, size, document, true);\n   * ```\n   */\n  public position(contentElement: HTMLElement, size: Size, document?: Document, initialCall?: boolean, target?: Point | HTMLElement): void {\n    const rects = this.calculateElementRectangles(contentElement, target);\n    this.setStyle(contentElement, rects.targetRect, rects.elementRect, {});\n  }\n\n  /**\n   * Creates clone of this position strategy\n   * @returns clone of this position strategy\n   */\n  public clone(): IPositionStrategy {\n    return Util.cloneInstance(this);\n  }\n\n  /**\n   * Obtains the DomRect objects for the required elements - target and element to position\n   *\n   * @returns target and element DomRect objects\n   */\n   protected calculateElementRectangles(contentElement, target: Point | HTMLElement):\n   { targetRect: Partial<DOMRect>; elementRect: Partial<DOMRect> } {\n    return {\n      targetRect: Util.getTargetRect(target),\n      elementRect: contentElement.getBoundingClientRect() as DOMRect\n    };\n  }\n\n  /**\n   * Get element horizontal and vertical offsets by connectedFit\n   * or `this.settings` if connectedFit offset is not defined.\n   *\n   * @param connectedFit\n   * @returns horizontalOffset and verticalOffset\n   */\n  protected getElementOffsets(connectedFit: ConnectedFit): { horizontalOffset: number; verticalOffset: number } {\n    return {\n        horizontalOffset: connectedFit.horizontalOffset ?? Util.getHorizontalOffset(this.settings),\n        verticalOffset: connectedFit.verticalOffset ?? Util.getVerticalOffset(this.settings)\n    }\n  }\n\n  /**\n   * Sets element's style which effectively positions provided element according\n   * to provided position settings\n   *\n   * @param element Element to position\n   * @param targetRect Bounding rectangle of strategy target\n   * @param elementRect Bounding rectangle of the element\n   */\n  protected setStyle(element: HTMLElement, targetRect: Partial<DOMRect>, elementRect: Partial<DOMRect>, connectedFit: ConnectedFit) {\n    const { horizontalOffset, verticalOffset } = this.getElementOffsets(connectedFit);\n\n    const startPoint: Point = {\n      x: targetRect.right + targetRect.width * this.settings.horizontalStartPoint + horizontalOffset,\n      y: targetRect.bottom + targetRect.height * this.settings.verticalStartPoint + verticalOffset\n    };\n    const wrapperRect: ClientRect = element.parentElement.getBoundingClientRect();\n\n    //  clean up styles - if auto position strategy is chosen we may pass here several times\n    element.style.right = '';\n    element.style.left = '';\n    element.style.bottom = '';\n    element.style.top = '';\n\n    switch (this.settings.horizontalDirection) {\n      case HorizontalAlignment.Left:\n        element.style.right = `${Math.round(wrapperRect.right - startPoint.x)}px`;\n        break;\n      case HorizontalAlignment.Center:\n        element.style.left = `${Math.round(startPoint.x - wrapperRect.left - elementRect.width / 2)}px`;\n        break;\n      case HorizontalAlignment.Right:\n        element.style.left = `${Math.round(startPoint.x - wrapperRect.left)}px`;\n        break;\n    }\n\n    switch (this.settings.verticalDirection) {\n      case VerticalAlignment.Top:\n        element.style.bottom = `${Math.round(wrapperRect.bottom - startPoint.y)}px`;\n        break;\n      case VerticalAlignment.Middle:\n        element.style.top = `${Math.round(startPoint.y - wrapperRect.top - elementRect.height / 2)}px`;\n        break;\n      case VerticalAlignment.Bottom:\n        element.style.top = `${Math.round(startPoint.y - wrapperRect.top)}px`;\n        break;\n    }\n  }\n}\n","import { ConnectedFit, HorizontalAlignment, Point, PositionSettings, Size, Util, VerticalAlignment } from '../utilities';\nimport { ConnectedPositioningStrategy } from './connected-positioning-strategy';\n\nexport abstract class BaseFitPositionStrategy extends ConnectedPositioningStrategy {\n    protected _initialSize: Size;\n    protected _initialSettings: PositionSettings;\n\n    /**\n     * Position the element based on the PositionStrategy implementing this interface.\n     *\n     * @param contentElement The HTML element to be positioned\n     * @param size Size of the element\n     * @param document reference to the Document object\n     * @param initialCall should be true if this is the initial call to the method\n     * @param target attaching target for the component to show\n     * ```typescript\n     * settings.positionStrategy.position(content, size, document, true);\n     * ```\n     */\n    public override position(\n        contentElement: HTMLElement, size: Size, document?: Document, initialCall?: boolean, target?: Point | HTMLElement): void {\n        const rects = super.calculateElementRectangles(contentElement, target);\n        const connectedFit: ConnectedFit = {};\n        if (initialCall) {\n            connectedFit.targetRect = rects.targetRect;\n            connectedFit.contentElementRect = rects.elementRect;\n            this._initialSettings = this._initialSettings || Object.assign({}, this.settings);\n            this.settings = Object.assign({}, this._initialSettings);\n            connectedFit.viewPortRect = Util.getViewportRect(document);\n            this.updateViewPortFit(connectedFit);\n            if (this.shouldFitInViewPort(connectedFit)) {\n                this.fitInViewport(contentElement, connectedFit);\n            }\n        }\n        this.setStyle(contentElement, rects.targetRect, rects.elementRect, connectedFit);\n    }\n\n    /**\n     * Checks if element can fit in viewport and updates provided connectedFit\n     * with the result\n     *\n     * @param connectedFit connectedFit to update\n     */\n    protected updateViewPortFit(connectedFit: ConnectedFit) {\n        const { horizontalOffset, verticalOffset } = super.getElementOffsets(connectedFit);\n\n        connectedFit.left = this.calculateLeft(\n            connectedFit.targetRect,\n            connectedFit.contentElementRect,\n            this.settings.horizontalStartPoint,\n            this.settings.horizontalDirection,\n            horizontalOffset);\n        connectedFit.right = connectedFit.left + connectedFit.contentElementRect.width;\n        connectedFit.fitHorizontal = {\n            back: Math.round(connectedFit.left),\n            forward: Math.round(connectedFit.viewPortRect.width - connectedFit.right)\n        };\n\n        connectedFit.top = this.calculateTop(\n            connectedFit.targetRect,\n            connectedFit.contentElementRect,\n            this.settings.verticalStartPoint,\n            this.settings.verticalDirection,\n            verticalOffset);\n        connectedFit.bottom = connectedFit.top + connectedFit.contentElementRect.height;\n        connectedFit.fitVertical = {\n            back: Math.round(connectedFit.top),\n            forward: Math.round(connectedFit.viewPortRect.height - connectedFit.bottom)\n        };\n    }\n\n    /**\n     * Calculates the position of the left border of the element if it gets positioned\n     * with provided start point and direction\n     *\n     * @param targetRect Rectangle of the target where element is attached\n     * @param elementRect Rectangle of the element\n     * @param startPoint Start point of the target\n     * @param direction Direction in which to show the element\n     */\n    protected calculateLeft(\n        targetRect: Partial<DOMRect>,\n        elementRect: Partial<DOMRect>,\n        startPoint: HorizontalAlignment,\n        direction: HorizontalAlignment,\n        offset?: number): number {\n        return targetRect.right + targetRect.width * startPoint + elementRect.width * direction + offset;\n    }\n\n    /**\n     * Calculates the position of the top border of the element if it gets positioned\n     * with provided position settings related to the target\n     *\n     * @param targetRect Rectangle of the target where element is attached\n     * @param elementRect Rectangle of the element\n     * @param startPoint Start point of the target\n     * @param direction Direction in which to show the element\n     */\n    protected calculateTop(\n        targetRect: Partial<DOMRect>,\n        elementRect: Partial<DOMRect>,\n        startPoint: VerticalAlignment,\n        direction: VerticalAlignment,\n        offset?: number): number {\n        return targetRect.bottom + targetRect.height * startPoint + elementRect.height * direction + offset;\n    }\n\n    /**\n     * Returns whether the element should fit in viewport\n     *\n     * @param connectedFit connectedFit object containing all necessary parameters\n     */\n    protected shouldFitInViewPort(connectedFit: ConnectedFit) {\n        return connectedFit.fitHorizontal.back < 0 || connectedFit.fitHorizontal.forward < 0 ||\n            connectedFit.fitVertical.back < 0 || connectedFit.fitVertical.forward < 0;\n    }\n\n    /**\n     * Fits the element into viewport according to the position settings\n     *\n     * @param element element to fit in viewport\n     * @param connectedFit connectedFit object containing all necessary parameters\n     */\n    protected abstract fitInViewport(\n        element: HTMLElement,\n        connectedFit: ConnectedFit);\n}\n","import { AnimationReferenceMetadata } from '@angular/animations';\nimport { ConnectedFit, HorizontalAlignment, VerticalAlignment } from './../utilities';\nimport { BaseFitPositionStrategy } from './base-fit-position-strategy';\nimport { AnimationUtil } from 'igniteui-angular/animations';\n\n/**\n * Positions the element as in **Connected** positioning strategy and re-positions the element in\n * the view port (calculating a different start point) in case the element is partially getting out of view\n */\nexport class AutoPositionStrategy extends BaseFitPositionStrategy {\n\n    /**\n     * Fits the element into viewport according to the position settings\n     *\n     * @param element element to fit in viewport\n     * @param connectedFit connectedFit object containing all necessary parameters\n     */\n    protected fitInViewport(element: HTMLElement, connectedFit: ConnectedFit) {\n        const transformString: string[] = [];\n        if (connectedFit.fitHorizontal.back < 0 || connectedFit.fitHorizontal.forward < 0) {\n            if (this.canFlipHorizontal(connectedFit)) {\n                this.flipHorizontal();\n                this.flipAnimation(FlipDirection.Horizontal);\n            } else {\n                const horizontalPush = this.horizontalPush(connectedFit);\n                transformString.push(`translateX(${horizontalPush}px)`);\n            }\n        }\n\n        if (connectedFit.fitVertical.back < 0 || connectedFit.fitVertical.forward < 0) {\n            if (this.canFlipVertical(connectedFit)) {\n                this.flipVertical();\n                this.flipAnimation(FlipDirection.Vertical);\n            } else {\n                const verticalPush = this.verticalPush(connectedFit);\n                transformString.push(`translateY(${verticalPush}px)`);\n            }\n        }\n\n        element.style.transform = transformString.join(' ').trim();\n    }\n\n    /**\n     * Checks if element can be flipped without get off the viewport\n     *\n     * @param connectedFit connectedFit object containing all necessary parameters\n     * @returns true if element can be flipped and stain in viewport\n     */\n    private canFlipHorizontal(connectedFit: ConnectedFit): boolean {\n        //  HorizontalAlignment can be Left = -1; Center = -0.5 or Right = 0.\n        //  To virtually flip direction and start point (both are HorizontalAlignment) we can do this:\n        //  flippedAlignment = (-1) * (HorizontalAlignment + 1)\n        //  this way:\n        //  (-1) * (Left + 1) = 0 = Right\n        //  (-1) * (Center + 1) = -0.5 = Center\n        //  (-1) * (Right + 1) = -1 = Left\n        const flippedStartPoint = (-1) * (this.settings.horizontalStartPoint + 1);\n        const flippedDirection = (-1) * (this.settings.horizontalDirection + 1);\n\n        const leftBorder = this.calculateLeft(\n            connectedFit.targetRect, connectedFit.contentElementRect, flippedStartPoint, flippedDirection, 0);\n        const rightBorder = leftBorder + connectedFit.contentElementRect.width;\n        return 0 < leftBorder && rightBorder < connectedFit.viewPortRect.width;\n    }\n\n    /**\n     * Checks if element can be flipped without get off the viewport\n     *\n     * @param connectedFit connectedFit object containing all necessary parameters\n     * @returns true if element can be flipped and stain in viewport\n     */\n    private canFlipVertical(connectedFit: ConnectedFit): boolean {\n        const flippedStartPoint = (-1) * (this.settings.verticalStartPoint + 1);\n        const flippedDirection = (-1) * (this.settings.verticalDirection + 1);\n\n        const topBorder = this.calculateTop(\n            connectedFit.targetRect, connectedFit.contentElementRect, flippedStartPoint, flippedDirection, 0);\n        const bottomBorder = topBorder + connectedFit.contentElementRect.height;\n        return 0 < topBorder && bottomBorder < connectedFit.viewPortRect.height;\n    }\n\n    /**\n     * Flips direction and start point of the position settings\n     */\n    private flipHorizontal() {\n        switch (this.settings.horizontalDirection) {\n            case HorizontalAlignment.Left:\n                this.settings.horizontalDirection = HorizontalAlignment.Right;\n                break;\n            case HorizontalAlignment.Right:\n                this.settings.horizontalDirection = HorizontalAlignment.Left;\n                break;\n        }\n        switch (this.settings.horizontalStartPoint) {\n            case HorizontalAlignment.Left:\n                this.settings.horizontalStartPoint = HorizontalAlignment.Right;\n                break;\n            case HorizontalAlignment.Right:\n                this.settings.horizontalStartPoint = HorizontalAlignment.Left;\n                break;\n        }\n    }\n\n    /**\n     * Flips direction and start point of the position settings\n     */\n    private flipVertical() {\n        switch (this.settings.verticalDirection) {\n            case VerticalAlignment.Top:\n                this.settings.verticalDirection = VerticalAlignment.Bottom;\n                break;\n            case VerticalAlignment.Bottom:\n                this.settings.verticalDirection = VerticalAlignment.Top;\n                break;\n        }\n        switch (this.settings.verticalStartPoint) {\n            case VerticalAlignment.Top:\n                this.settings.verticalStartPoint = VerticalAlignment.Bottom;\n                break;\n            case VerticalAlignment.Bottom:\n                this.settings.verticalStartPoint = VerticalAlignment.Top;\n                break;\n        }\n    }\n\n    /**\n     * Calculates necessary horizontal push according to provided connectedFit\n     *\n     * @param connectedFit connectedFit object containing all necessary parameters\n     * @returns amount of necessary translation which will push the element into viewport\n     */\n    private horizontalPush(connectedFit: ConnectedFit): number {\n        const leftExtend = connectedFit.left;\n        const rightExtend = connectedFit.right - connectedFit.viewPortRect.width;\n        //  if leftExtend < 0 overlay goes beyond left end of the screen. We should push it back with exactly\n        //  as much as it is beyond the screen.\n        //  if rightExtend > 0 overlay goes beyond right end of the screen. We should push it back with the\n        //  extend but with amount not bigger than what left between left border of screen and left border of\n        //  overlay, e.g. leftExtend\n        if (leftExtend < 0) {\n            return Math.abs(leftExtend);\n        } else if (rightExtend > 0) {\n            return - Math.min(rightExtend, leftExtend);\n        } else {\n            return 0;\n        }\n    }\n\n    /**\n     * Calculates necessary vertical push according to provided connectedFit\n     *\n     * @param connectedFit connectedFit object containing all necessary parameters\n     * @returns amount of necessary translation which will push the element into viewport\n     */\n    private verticalPush(connectedFit: ConnectedFit): number {\n        const topExtend = connectedFit.top;\n        const bottomExtend = connectedFit.bottom - connectedFit.viewPortRect.height;\n        if (topExtend < 0) {\n            return Math.abs(topExtend);\n        } else if (bottomExtend > 0) {\n            return - Math.min(bottomExtend, topExtend);\n        } else {\n            return 0;\n        }\n    }\n\n    /**\n     * Changes open and close animation with reverse animation if one exists\n     *\n     * @param flipDirection direction for which to change the animations\n     */\n    private flipAnimation(flipDirection: FlipDirection): void {\n        if (this.settings.openAnimation) {\n            this.settings.openAnimation = this.updateAnimation(this.settings.openAnimation, flipDirection);\n        }\n        if (this.settings.closeAnimation) {\n            this.settings.closeAnimation = this.updateAnimation(this.settings.closeAnimation, flipDirection);\n        }\n    }\n\n    /**\n     * Tries to find the reverse animation according to provided direction\n     *\n     * @param animation animation to update\n     * @param direction required animation direction\n     * @returns reverse animation in given direction if one exists\n     */\n    private updateAnimation(animation: AnimationReferenceMetadata, direction: FlipDirection): AnimationReferenceMetadata {\n        switch (direction) {\n            case FlipDirection.Horizontal:\n                if (AnimationUtil.instance().isHorizontalAnimation(animation)) {\n                    return AnimationUtil.instance().reverseAnimationResolver(animation);\n                }\n                break;\n            case FlipDirection.Vertical:\n                if (AnimationUtil.instance().isVerticalAnimation(animation)) {\n                    return AnimationUtil.instance().reverseAnimationResolver(animation);\n                }\n                break;\n        }\n\n        return animation;\n    }\n}\n\nenum FlipDirection {\n    Horizontal,\n    Vertical\n}\n","import { fadeIn, fadeOut } from 'igniteui-angular/animations';\nimport { HorizontalAlignment, PositionSettings, Util, VerticalAlignment } from './../utilities';\nimport { IPositionStrategy } from './IPositionStrategy';\n\n/**\n * Positions the element based on the directions passed in trough PositionSettings.\n * These are Top/Middle/Bottom for verticalDirection and Left/Center/Right for horizontalDirection\n */\nexport class GlobalPositionStrategy implements IPositionStrategy {\n    /**\n     * PositionSettings to use when position the component in the overlay\n     */\n    public settings: PositionSettings;\n\n    protected _defaultSettings: PositionSettings = {\n        horizontalDirection: HorizontalAlignment.Center,\n        verticalDirection: VerticalAlignment.Middle,\n        horizontalStartPoint: HorizontalAlignment.Center,\n        verticalStartPoint: VerticalAlignment.Middle,\n        openAnimation: fadeIn,\n        closeAnimation: fadeOut,\n        minSize: { width: 0, height: 0 }\n    };\n\n    constructor(settings?: PositionSettings) {\n        this.settings = Object.assign({}, this._defaultSettings, settings);\n    }\n\n    /**\n     * Position the element based on the PositionStrategy implementing this interface.\n     *\n     * @param contentElement The HTML element to be positioned\n     * @param size Size of the element\n     * @param document reference to the Document object\n     * @param initialCall should be true if this is the initial call to the method\n     * @param target attaching target for the component to show\n     * ```typescript\n     * settings.positionStrategy.position(content, size, document, true);\n     * ```\n     */\n    public position(contentElement: HTMLElement): void {\n        contentElement.classList.add('igx-overlay__content--relative');\n        contentElement.parentElement.classList.add('igx-overlay__wrapper--flex');\n        this.setPosition(contentElement);\n    }\n\n    /**\n     * Clone the strategy instance.\n     * ```typescript\n     * settings.positionStrategy.clone();\n     * ```\n     */\n    public clone(): IPositionStrategy {\n        return Util.cloneInstance(this);\n    }\n\n    protected setPosition(contentElement: HTMLElement) {\n        switch (this.settings.horizontalDirection) {\n            case HorizontalAlignment.Left:\n                contentElement.parentElement.style.justifyContent = 'flex-start';\n                break;\n            case HorizontalAlignment.Center:\n                contentElement.parentElement.style.justifyContent = 'center';\n                break;\n            case HorizontalAlignment.Right:\n                contentElement.parentElement.style.justifyContent = 'flex-end';\n                break;\n            default:\n                break;\n        }\n\n        switch (this.settings.verticalDirection) {\n            case VerticalAlignment.Top:\n                contentElement.parentElement.style.alignItems = 'flex-start';\n                break;\n            case VerticalAlignment.Middle:\n                contentElement.parentElement.style.alignItems = 'center';\n                break;\n            case VerticalAlignment.Bottom:\n                contentElement.parentElement.style.alignItems = 'flex-end';\n                break;\n            default:\n                break;\n        }\n    }\n}\n","import { PositionSettings, Util } from '../utilities';\nimport { GlobalPositionStrategy } from './global-position-strategy';\n\n/**\n * Positions the element inside the containing outlet based on the directions passed in trough PositionSettings.\n * These are Top/Middle/Bottom for verticalDirection and Left/Center/Right for horizontalDirection\n */\nexport class ContainerPositionStrategy extends GlobalPositionStrategy {\n    private io: IntersectionObserver | null = null;\n    constructor(settings?: PositionSettings) {\n        super(settings);\n    }\n\n    /**\n     * Position the element based on the PositionStrategy implementing this interface.\n     */\n    public override position(contentElement: HTMLElement): void {\n        // Set up intersection observer\n        this.io?.disconnect();\n        const outletElement = contentElement.parentElement.parentElement;\n        this.io = Util.setupIntersectionObserver(\n            outletElement,\n            contentElement.ownerDocument,\n            () => this.updatePosition(contentElement)\n        );\n        this.internalPosition(contentElement);\n    }\n\n    /**\n     * Disposes the observer and cleans up references.\n     */\n    public dispose(): void {\n        this.io?.disconnect();\n        this.io = null;\n    }\n\n    private internalPosition(contentElement: HTMLElement): void {\n        contentElement.classList.add('igx-overlay__content--relative');\n        contentElement.parentElement.classList.add('igx-overlay__wrapper--flex-container');\n        this.setPosition(contentElement);\n        this.updatePosition(contentElement);\n    }\n\n    private updatePosition(contentElement: HTMLElement): void {\n        // TODO: consider using new anchor() CSS function when it becomes more widely supported: https://caniuse.com/mdn-css_properties_anchor\n        const parentRect = contentElement.parentElement.parentElement.getBoundingClientRect();\n        contentElement.parentElement.style.width = `${parentRect.width}px`;\n        contentElement.parentElement.style.height = `${parentRect.height}px`;\n        contentElement.parentElement.style.top = `${parentRect.top}px`;\n        contentElement.parentElement.style.left = `${parentRect.left}px`;\n    }\n}\n","import { ConnectedFit, HorizontalAlignment, VerticalAlignment } from '../utilities';\nimport { BaseFitPositionStrategy } from './base-fit-position-strategy';\n\n/**\n * Positions the element as in **Connected** positioning strategy and resize the element\n * to fit in the view port in case the element is partially getting out of view\n */\nexport class ElasticPositionStrategy extends BaseFitPositionStrategy {\n    /**\n     * Fits the element into viewport according to the position settings\n     *\n     * @param element element to fit in viewport\n     * @param connectedFit connectedFit object containing all necessary parameters\n     */\n    protected fitInViewport(element: HTMLElement, connectedFit: ConnectedFit) {\n        element.classList.add('igx-overlay__content--elastic');\n        const transformString: string[] = [];\n        if (connectedFit.fitHorizontal.back < 0 || connectedFit.fitHorizontal.forward < 0) {\n            const maxReduction = Math.max(0, connectedFit.contentElementRect.width - this.settings.minSize.width);\n            const leftExtend = Math.max(0, -connectedFit.fitHorizontal.back);\n            const rightExtend = Math.max(0, -connectedFit.fitHorizontal.forward);\n            const reduction = Math.min(maxReduction, leftExtend + rightExtend);\n            element.style.width = `${connectedFit.contentElementRect.width - reduction}px`;\n\n            //  if direction is center and element goes off the screen in left direction we should push the\n            //  element to the right. Prevents left still going out of view when normally positioned\n            if (this.settings.horizontalDirection === HorizontalAlignment.Center) {\n                //  the amount of translation depends on whether element goes off the screen to the left,\n                //  to the right or in both directions, as well as how much it goes of the screen and finally\n                //  on the minSize. The translation should be proportional between left and right extend\n                //  taken from the reduction\n                const translation = leftExtend * reduction / (leftExtend + rightExtend);\n                if (translation > 0) {\n                    transformString.push(`translateX(${translation}px)`);\n                }\n            }\n        }\n\n        if (connectedFit.fitVertical.back < 0 || connectedFit.fitVertical.forward < 0) {\n            const maxReduction = Math.max(0, connectedFit.contentElementRect.height - this.settings.minSize.height);\n            const topExtend = Math.max(0, -connectedFit.fitVertical.back);\n            const bottomExtend = Math.max(0, -connectedFit.fitVertical.forward);\n            const reduction = Math.min(maxReduction, topExtend + bottomExtend);\n            element.style.height = `${connectedFit.contentElementRect.height - reduction}px`;\n\n            //  if direction is middle and element goes off the screen in top direction we should push the\n            //  element to the bottom. Prevents top still going out of view when normally positioned\n            if (this.settings.verticalDirection === VerticalAlignment.Middle) {\n                //  the amount of translation depends on whether element goes off the screen to the top,\n                //  to the bottom or in both directions, as well as how much it goes of the screen and finally\n                //  on the minSize. The translation should be proportional between top and bottom extend\n                //  taken from the reduction\n                const translation = topExtend * reduction / (topExtend + bottomExtend);\n                if (translation > 0) {\n                    transformString.push(`translateY(${translation}px)`);\n                }\n            }\n        }\n        element.style.transform = transformString.join(' ').trim();\n    }\n}\n","import { IScrollStrategy } from './IScrollStrategy';\nimport { IgxOverlayService } from '../overlay';\n\nexport abstract class ScrollStrategy implements IScrollStrategy {\n    /**\n     * Initializes the strategy. Should be called once\n     *\n     * @param document reference to Document object.\n     * @param overlayService IgxOverlay service to use in this strategy.\n     * @param id Unique id for this strategy.\n     * ```typescript\n     * settings.scrollStrategy.initialize(document, overlay, id);\n     * ```\n     */\n    public abstract initialize(document: Document, overlayService: IgxOverlayService, id: string);\n\n    /**\n     * Attaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.attach();\n     * ```\n     */\n    public abstract attach(): void;\n\n    /**\n     * Detaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.detach();\n     * ```\n     */\n    public abstract detach(): void;\n}\n","import { ScrollStrategy } from './scroll-strategy';\n\n/**\n * Empty scroll strategy. Does nothing.\n */\nexport class NoOpScrollStrategy extends ScrollStrategy {\n    constructor() {\n        super();\n    }\n    /**\n     * Initializes the strategy. Should be called once\n     */\n    public initialize() { }\n\n    /**\n     * Detaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.detach();\n     * ```\n     */\n    public attach(): void { }\n\n    /**\n     * Detaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.detach();\n     * ```\n     */\n    public detach(): void { }\n}\n","import { AnimationReferenceMetadata } from '@angular/animations';\nimport { ApplicationRef, ComponentRef, createComponent, ElementRef, EventEmitter, Injectable, Injector, NgZone, OnDestroy, Type, ViewContainerRef, DOCUMENT, inject } from '@angular/core';\nimport { fromEvent, Subject, Subscription } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { fadeIn, fadeOut, IAnimationParams, scaleInHorLeft, scaleInHorRight, scaleInVerBottom, scaleInVerTop, scaleOutHorLeft, scaleOutHorRight, scaleOutVerBottom, scaleOutVerTop, slideInBottom, slideInTop, slideOutBottom, slideOutTop } from 'igniteui-angular/animations';\nimport { PlatformUtil } from '../../core/utils';\nimport { IgxOverlayOutletDirective } from './utilities';\nimport { IgxAngularAnimationService } from '../animation/angular-animation-service';\nimport { AnimationService } from '../animation/animation';\nimport { AutoPositionStrategy } from './position/auto-position-strategy';\nimport { ConnectedPositioningStrategy } from './position/connected-positioning-strategy';\nimport { ContainerPositionStrategy } from './position/container-position-strategy';\nimport { ElasticPositionStrategy } from './position/elastic-position-strategy';\nimport { GlobalPositionStrategy } from './position/global-position-strategy';\nimport { IPositionStrategy } from './position/IPositionStrategy';\nimport { NoOpScrollStrategy } from './scroll/NoOpScrollStrategy';\nimport {\n    AbsolutePosition,\n    HorizontalAlignment,\n    OffsetMode,\n    OverlayAnimationEventArgs,\n    OverlayCancelableEventArgs,\n    OverlayClosingEventArgs,\n    OverlayCreateSettings,\n    OverlayEventArgs,\n    OverlayInfo,\n    OverlaySettings,\n    Point,\n    PositionSettings,\n    RelativePosition,\n    RelativePositionStrategy,\n    VerticalAlignment\n} from './utilities';\n\n/**\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/overlay-main)\n * The overlay service allows users to show components on overlay div above all other elements in the page.\n */\n@Injectable({ providedIn: 'root' })\nexport class IgxOverlayService implements OnDestroy {\n    private _appRef = inject(ApplicationRef);\n    private document = inject(DOCUMENT);\n    private _zone = inject(NgZone);\n    protected platformUtil = inject(PlatformUtil);\n    private animationService = inject<AnimationService>(IgxAngularAnimationService);\n\n    /**\n     * Emitted just before the overlay content starts to open.\n     * ```typescript\n     * opening(event: OverlayCancelableEventArgs){\n     *     const opening = event;\n     * }\n     * ```\n     */\n    public opening = new EventEmitter<OverlayCancelableEventArgs>();\n\n    /**\n     * Emitted after the overlay content is opened and all animations are finished.\n     * ```typescript\n     * opened(event: OverlayEventArgs){\n     *     const opened = event;\n     * }\n     * ```\n     */\n    public opened = new EventEmitter<OverlayEventArgs>();\n\n    /**\n     * Emitted just before the overlay content starts to close.\n     * ```typescript\n     * closing(event: OverlayCancelableEventArgs){\n     *     const closing = event;\n     * }\n     * ```\n     */\n    public closing = new EventEmitter<OverlayClosingEventArgs>();\n\n    /**\n     * Emitted after the overlay content is closed and all animations are finished.\n     * ```typescript\n     * closed(event: OverlayEventArgs){\n     *     const closed = event;\n     * }\n     * ```\n     */\n    public closed = new EventEmitter<OverlayEventArgs>();\n\n    /**\n     * Emitted before the content is appended to the overlay.\n     * ```typescript\n     * contentAppending(event: OverlayEventArgs){\n     *     const contentAppending = event;\n     * }\n     * ```\n     */\n    public contentAppending = new EventEmitter<OverlayEventArgs>();\n\n    /**\n     * Emitted after the content is appended to the overlay, and before animations are started.\n     * ```typescript\n     * contentAppended(event: OverlayEventArgs){\n     *     const contentAppended = event;\n     * }\n     * ```\n     */\n    public contentAppended = new EventEmitter<OverlayEventArgs>();\n\n    /**\n     * Emitted just before the overlay animation start.\n     * ```typescript\n     * animationStarting(event: OverlayAnimationEventArgs){\n     *     const animationStarting = event;\n     * }\n     * ```\n     */\n    public animationStarting = new EventEmitter<OverlayAnimationEventArgs>();\n\n    private _componentId = 0;\n    private _overlayInfos: OverlayInfo[] = [];\n    private _overlayElement: HTMLElement;\n    private _document: Document;\n    private _keyPressEventListener: Subscription;\n    private destroy$ = new Subject<boolean>();\n    private _cursorStyleIsSet = false;\n    private _cursorOriginalValue: string;\n\n    private _defaultSettings: OverlaySettings = {\n        excludeFromOutsideClick: [],\n        positionStrategy: new GlobalPositionStrategy(),\n        scrollStrategy: new NoOpScrollStrategy(),\n        modal: true,\n        closeOnOutsideClick: true,\n        closeOnEscape: false\n    };\n\n    constructor() {\n        this._document = this.document;\n    }\n\n    /**\n     * Creates overlay settings with global or container position strategy and preset position settings\n     *\n     * @param position Preset position settings. Default position is 'center'\n     * @param outlet The outlet container to attach the overlay to\n     * @returns Non-modal overlay settings based on Global or Container position strategy and the provided position.\n     */\n    public static createAbsoluteOverlaySettings(\n        position?: AbsolutePosition, outlet?: IgxOverlayOutletDirective | ElementRef): OverlaySettings {\n        const positionSettings = this.createAbsolutePositionSettings(position);\n        const strategy = outlet ? new ContainerPositionStrategy(positionSettings) : new GlobalPositionStrategy(positionSettings);\n        const overlaySettings: OverlaySettings = {\n            positionStrategy: strategy,\n            scrollStrategy: new NoOpScrollStrategy(),\n            modal: false,\n            closeOnOutsideClick: true,\n            outlet\n        };\n        return overlaySettings;\n    }\n\n    /**\n     * Creates overlay settings with auto, connected or elastic position strategy and preset position settings\n     *\n     * @param target Attaching target for the component to show\n     * @param strategy The relative position strategy to be applied to the overlay settings. Default is Auto positioning strategy.\n     * @param position Preset position settings. By default the element is positioned below the target, left aligned.\n     * @returns Non-modal overlay settings based on the provided target, strategy and position.\n     */\n    public static createRelativeOverlaySettings(\n        target: Point | HTMLElement,\n        position?: RelativePosition,\n        strategy?: RelativePositionStrategy):\n        OverlaySettings {\n        const positionSettings = this.createRelativePositionSettings(position);\n        const overlaySettings: OverlaySettings = {\n            target,\n            positionStrategy: this.createPositionStrategy(strategy, positionSettings),\n            scrollStrategy: new NoOpScrollStrategy(),\n            modal: false,\n            closeOnOutsideClick: true\n        };\n        return overlaySettings;\n    }\n\n    private static createAbsolutePositionSettings(position: AbsolutePosition): PositionSettings {\n        let positionSettings: PositionSettings;\n        switch (position) {\n            case AbsolutePosition.Bottom:\n                positionSettings = {\n                    horizontalDirection: HorizontalAlignment.Center,\n                    verticalDirection: VerticalAlignment.Bottom,\n                    openAnimation: slideInBottom,\n                    closeAnimation: slideOutBottom\n                };\n                break;\n            case AbsolutePosition.Top:\n                positionSettings = {\n                    horizontalDirection: HorizontalAlignment.Center,\n                    verticalDirection: VerticalAlignment.Top,\n                    openAnimation: slideInTop,\n                    closeAnimation: slideOutTop\n                };\n                break;\n            case AbsolutePosition.Center:\n            default:\n                positionSettings = {\n                    horizontalDirection: HorizontalAlignment.Center,\n                    verticalDirection: VerticalAlignment.Middle,\n                    openAnimation: fadeIn,\n                    closeAnimation: fadeOut\n                };\n        }\n        return positionSettings;\n    }\n\n    private static createRelativePositionSettings(position: RelativePosition): PositionSettings {\n        let positionSettings: PositionSettings;\n        switch (position) {\n            case RelativePosition.Above:\n                positionSettings = {\n                    horizontalStartPoint: HorizontalAlignment.Center,\n                    verticalStartPoint: VerticalAlignment.Top,\n                    horizontalDirection: HorizontalAlignment.Center,\n                    verticalDirection: VerticalAlignment.Top,\n                    openAnimation: scaleInVerBottom,\n                    closeAnimation: scaleOutVerBottom,\n                };\n                break;\n            case RelativePosition.Below:\n                positionSettings = {\n                    horizontalStartPoint: HorizontalAlignment.Center,\n                    verticalStartPoint: VerticalAlignment.Bottom,\n                    horizontalDirection: HorizontalAlignment.Center,\n                    verticalDirection: VerticalAlignment.Bottom,\n                    openAnimation: scaleInVerTop,\n                    closeAnimation: scaleOutVerTop\n                };\n                break;\n            case RelativePosition.After:\n                positionSettings = {\n                    horizontalStartPoint: HorizontalAlignment.Right,\n                    verticalStartPoint: VerticalAlignment.Middle,\n                    horizontalDirection: HorizontalAlignment.Right,\n                    verticalDirection: VerticalAlignment.Middle,\n                    openAnimation: scaleInHorLeft,\n                    closeAnimation: scaleOutHorLeft\n                };\n                break;\n            case RelativePosition.Before:\n                positionSettings = {\n                    horizontalStartPoint: HorizontalAlignment.Left,\n                    verticalStartPoint: VerticalAlignment.Middle,\n                    horizontalDirection: HorizontalAlignment.Left,\n                    verticalDirection: VerticalAlignment.Middle,\n                    openAnimation: scaleInHorRight,\n                    closeAnimation: scaleOutHorRight\n                };\n                break;\n            case RelativePosition.Default:\n            default:\n                positionSettings = {\n                    horizontalStartPoint: HorizontalAlignment.Left,\n                    verticalStartPoint: VerticalAlignment.Bottom,\n                    horizontalDirection: HorizontalAlignment.Right,\n                    verticalDirection: VerticalAlignment.Bottom,\n                    openAnimation: scaleInVerTop,\n                    closeAnimation: scaleOutVerTop,\n                };\n                break;\n        }\n        return positionSettings;\n    }\n\n    private static createPositionStrategy(strategy: RelativePositionStrategy, positionSettings: PositionSettings): IPositionStrategy {\n        switch (strategy) {\n            case RelativePositionStrategy.Connected:\n                return new ConnectedPositioningStrategy(positionSettings);\n            case RelativePositionStrategy.Elastic:\n                return new ElasticPositionStrategy(positionSettings);\n            case RelativePositionStrategy.Auto:\n            default:\n                return new AutoPositionStrategy(positionSettings);\n        }\n    }\n\n    /**\n     * Generates Id. Provide this Id when call `show(id)` method\n     *\n     * @param component ElementRef to show in overlay\n     * @param settings (optional): Display settings for the overlay, such as positioning and scroll/close behavior.\n     * @returns Id of the created overlay. Valid until `detach` is called.\n     */\n    public attach(element: ElementRef, settings?: OverlaySettings): string;\n    /**\n     * Generates Id. Provide this Id when call `show(id)` method\n     *\n     * Note created instance is in root scope, prefer the `viewContainerRef` overload when local injection context is needed.\n     *\n     * @param component Component Type to show in overlay\n     * @param settings (optional): Create settings for the overlay, such as positioning and scroll/close behavior.\n     * Includes also an optional `Injector` to add to the created dynamic component's injectors.\n     * @returns Id of the created overlay. Valid until `detach` is called.\n     */\n    public attach(component: Type<any>, settings?: OverlayCreateSettings): string;\n    // TODO: change third parameter to OverlayCreateSettings and allow passing of Injector and so on.\n    /**\n     * Generates an Id. Provide this Id when calling the `show(id)` method\n     *\n     * @param component Component Type to show in overlay\n     * @param viewContainerRef Reference to the container where created component's host view will be inserted\n     * @param settings (optional): Display settings for the overlay, such as positioning and scroll/close behavior.\n     */\n    public attach(component: Type<any>, viewContainerRef: ViewContainerRef, settings?: OverlaySettings): string;\n    public attach(\n        componentOrElement: ElementRef | Type<any>,\n        viewContainerRefOrSettings?: ViewContainerRef | OverlayCreateSettings,\n        settings?: OverlaySettings): string {\n        const info: OverlayInfo = this.getOverlayInfo(componentOrElement, viewContainerRefOrSettings, settings);\n\n        if (!info) {\n            console.warn('Overlay was not able to attach provided component!');\n            return null;\n        }\n\n        info.id = (this._componentId++).toString();\n        info.visible = false;\n        // Emit the contentAppending event before appending the content\n        const eventArgs = { id: info.id, elementRef: info.elementRef, componentRef: info.componentRef, settings: info.settings };\n        this.contentAppending.emit(eventArgs);\n        // Append the content to the overlay\n        info.settings = eventArgs.settings;\n        this._overlayInfos.push(info);\n        info.hook = this.placeElementHook(info.elementRef.nativeElement);\n        const elementRect = info.elementRef.nativeElement.getBoundingClientRect();\n        info.initialSize = { width: elementRect.width, height: elementRect.height };\n        // Get the size before moving the container into the overlay so that it does not forget about inherited styles.\n        this.getComponentSize(info);\n        this.moveElementToOverlay(info);\n        // Update the container size after moving if there is size.\n        if (info.size) {\n            info.elementRef.nativeElement.parentElement.style.setProperty('--ig-size', info.size);\n        }\n        this.contentAppended.emit({ id: info.id, componentRef: info.componentRef });\n        info.settings.scrollStrategy.initialize(this._document, this, info.id);\n        info.settings.scrollStrategy.attach();\n        this.addOutsideClickListener(info);\n        this.addResizeHandler();\n        this.addCloseOnEscapeListener(info);\n        this.buildAnimationPlayers(info);\n        return info.id;\n    }\n\n    /**\n     * Remove overlay with the provided id.\n     *\n     * @param id Id of the overlay to remove\n     * ```typescript\n     * this.overlay.detach(id);\n     * ```\n     */\n    public detach(id: string) {\n        const info: OverlayInfo = this.getOverlayById(id);\n\n        if (!info) {\n            console.warn('igxOverlay.detach was called with wrong id: ', id);\n            return;\n        }\n        info.detached = true;\n        this.finishAnimations(info);\n        info.settings.scrollStrategy.detach();\n        // Dispose position strategy if it has a dispose method\n        if (typeof (info.settings.positionStrategy as any).dispose === 'function') {\n            (info.settings.positionStrategy as any).dispose();\n        }\n        this.removeOutsideClickListener(info);\n        this.removeResizeHandler();\n        this.cleanUp(info);\n    }\n\n    /**\n     * Remove all the overlays.\n     * ```typescript\n     * this.overlay.detachAll();\n     * ```\n     */\n    public detachAll() {\n        for (let i = this._overlayInfos.length; i--;) {\n            this.detach(this._overlayInfos[i].id);\n        }\n    }\n\n    /**\n     * Shows the overlay for provided id.\n     *\n     * @param id Id to show overlay for\n     * @param settings Display settings for the overlay, such as positioning and scroll/close behavior.\n     */\n    public show(id: string, settings?: OverlaySettings): void {\n        const info: OverlayInfo = this.getOverlayById(id);\n        if (!info) {\n            console.warn('igxOverlay.show was called with wrong id: ', id);\n            return;\n        }\n        const eventArgs: OverlayCancelableEventArgs = { id, componentRef: info.componentRef, cancel: false };\n        this.opening.emit(eventArgs);\n        if (eventArgs.cancel) {\n            return;\n        }\n        if (settings) {\n            const newScrollStrategy = settings.scrollStrategy && info.settings.scrollStrategy !== settings.scrollStrategy;\n            if (newScrollStrategy && info.settings.scrollStrategy) {\n                info.settings.scrollStrategy.detach();\n            }\n\n            settings.positionStrategy ??= info.settings.positionStrategy;\n            settings.scrollStrategy ??= info.settings.scrollStrategy;\n            info.settings = { ...info.settings, ...settings };\n\n            if (newScrollStrategy) {\n                info.settings.scrollStrategy.initialize(this._document, this, info.id);\n                info.settings.scrollStrategy.attach();\n            }\n        }\n        this.updateSize(info);\n        const openAnimation = info.settings.positionStrategy.settings.openAnimation;\n        const closeAnimation = info.settings.positionStrategy.settings.closeAnimation;\n        // Show the overlay using Popover API BEFORE positioning\n        // This ensures the element is in the top layer when position calculations happen\n        if (info.wrapperElement?.isConnected && typeof info.wrapperElement.showPopover === 'function') {\n            try {\n                info.wrapperElement.showPopover();\n            } catch (_) {\n                // Popover API call failed, element may already be showing\n            }\n        }\n        info.settings.positionStrategy.position(\n            info.elementRef.nativeElement.parentElement,\n            { width: info.initialSize.width, height: info.initialSize.height },\n            this._document,\n            true,\n            info.settings.target);\n        if (openAnimation !== info.settings.positionStrategy.settings.openAnimation ||\n            closeAnimation !== info.settings.positionStrategy.settings.closeAnimation){\n                this.buildAnimationPlayers(info);\n            }\n        this.addModalClasses(info);\n        if (info.settings.positionStrategy.settings.openAnimation) {\n            // TODO: should we build players again. This was already done in attach!!!\n            // this.buildAnimationPlayers(info);\n            this.playOpenAnimation(info);\n        } else {\n            //  to eliminate flickering show the element just before opened fires\n            info.wrapperElement.style.visibility = '';\n            info.visible = true;\n            this.opened.emit({ id: info.id, componentRef: info.componentRef });\n        }\n    }\n\n    /**\n     * Hides the component with the ID provided as a parameter.\n     * ```typescript\n     * this.overlay.hide(id);\n     * ```\n     */\n    public hide(id: string, event?: Event) {\n        this._hide(id, event);\n    }\n\n    /**\n     * Hides all the components and the overlay.\n     * ```typescript\n     * this.overlay.hideAll();\n     * ```\n     */\n    public hideAll() {\n        for (let i = this._overlayInfos.length; i--;) {\n            this.hide(this._overlayInfos[i].id);\n        }\n    }\n\n    /**\n     * Repositions the component with ID provided as a parameter.\n     *\n     * @param id Id to reposition overlay for\n     * ```typescript\n     * this.overlay.reposition(id);\n     * ```\n     */\n    public reposition(id: string) {\n        const overlayInfo = this.getOverlayById(id);\n        if (!overlayInfo || !overlayInfo.settings) {\n            console.warn('Wrong id provided in overlay.reposition method. Id: ', id);\n            return;\n        }\n        if (!overlayInfo.visible) {\n            return;\n        }\n        const contentElement = overlayInfo.elementRef.nativeElement.parentElement;\n        const contentElementRect = contentElement.getBoundingClientRect();\n        overlayInfo.settings.positionStrategy.position(\n            contentElement,\n            {\n                width: contentElementRect.width,\n                height: contentElementRect.height\n            },\n            this._document,\n            false,\n            overlayInfo.settings.target);\n    }\n\n    /**\n     * Offsets the content along the corresponding axis by the provided amount with optional offsetMode that determines whether to add (by default) or set the offset values\n     *\n     * @param id Id to offset overlay for\n     * @param deltaX Amount of offset in horizontal direction\n     * @param deltaY Amount of offset in vertical direction\n     * @param offsetMode Determines whether to add (by default) or set the offset values with OffsetMode.Add and OffsetMode.Set\n     * ```typescript\n     * this.overlay.setOffset(id, deltaX, deltaY, offsetMode);\n     * ```\n     */\n    public setOffset(id: string, deltaX: number, deltaY: number, offsetMode?: OffsetMode) {\n        const info: OverlayInfo = this.getOverlayById(id);\n\n        if (!info) {\n            return;\n        }\n\n        switch (offsetMode) {\n            case OffsetMode.Set:\n                info.transformX = deltaX;\n                info.transformY = deltaY;\n                break;\n            case OffsetMode.Add:\n            default:\n                info.transformX += deltaX;\n                info.transformY += deltaY;\n                break;\n        }\n\n        const transformX = info.transformX;\n        const transformY = info.transformY;\n\n        const translate = `translate(${transformX}px, ${transformY}px)`;\n        info.elementRef.nativeElement.parentElement.style.transform = translate;\n    }\n\n    /** @hidden */\n    public repositionAll = () => {\n        for (let i = this._overlayInfos.length; i--;) {\n            this.reposition(this._overlayInfos[i].id);\n        }\n    };\n\n    /** @hidden */\n    public ngOnDestroy(): void {\n        this.detachAll();\n        this.removeCloseOnEscapeListener();\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /** @hidden @internal */\n    public getOverlayById(id: string): OverlayInfo {\n        if (!id) {\n            return null;\n        }\n        const info = this._overlayInfos.find(e => e.id === id);\n        return info;\n    }\n\n    private _hide(id: string, event?: Event) {\n        const info: OverlayInfo = this.getOverlayById(id);\n        if (!info) {\n            console.warn('igxOverlay.hide was called with wrong id: ', id);\n            return;\n        }\n        const eventArgs: OverlayClosingEventArgs = { id, componentRef: info.componentRef, cancel: false, event };\n        this.closing.emit(eventArgs);\n        if (eventArgs.cancel) {\n            return;\n        }\n        this.removeModalClasses(info);\n        if (info.settings.positionStrategy.settings.closeAnimation) {\n            this.playCloseAnimation(info, event);\n        } else {\n            this.closeDone(info);\n        }\n    }\n\n    /**\n     * Creates overlayInfo. Sets the info's `elementRef`, `componentRef`and `settings`. Also\n     * initialize info's `ngZone`, `transformX` and `transformY`.\n     * @param component ElementRef or Type. If type is provided dynamic component will be created\n     * @param viewContainerRefOrSettings (optional): If ElementRef is provided for `component` this\n     * parameter is OverlaySettings. Otherwise it could be ViewContainerRef or OverlayCreateSettings and will be\n     * used when dynamic component is created.\n     * @param settings (optional): OverlaySettings when `ViewContainerRef` is provided.\n     * @returns OverlayInfo\n     */\n    private getOverlayInfo(\n        component: ElementRef | Type<any>,\n        viewContainerRefOrSettings?: ViewContainerRef | OverlayCreateSettings,\n        settings?: OverlaySettings): OverlayInfo | null {\n        const info: OverlayInfo = { ngZone: this._zone, transformX: 0, transformY: 0 };\n        let overlaySettings = settings;\n        if (component instanceof ElementRef) {\n            info.elementRef = component;\n            overlaySettings = viewContainerRefOrSettings as OverlaySettings;\n        } else {\n            let dynamicComponent: ComponentRef<any>;\n            if (viewContainerRefOrSettings instanceof ViewContainerRef) {\n                const viewContainerRef = viewContainerRefOrSettings as ViewContainerRef;\n                dynamicComponent = viewContainerRef.createComponent(component);\n            } else {\n                const environmentInjector = this._appRef.injector;\n                const createSettings = viewContainerRefOrSettings as OverlayCreateSettings | undefined;\n                let elementInjector: Injector;\n                if (createSettings) {\n                    ({ injector: elementInjector, ...overlaySettings } = createSettings);\n                }\n                dynamicComponent = createComponent(component, { environmentInjector, elementInjector });\n                this._appRef.attachView(dynamicComponent.hostView);\n            }\n            if (dynamicComponent.onDestroy) {\n                dynamicComponent.onDestroy(() => {\n                    if (!info.detached && this._overlayInfos.indexOf(info) !== -1) {\n                        this.detach(info.id);\n                    }\n                })\n            }\n\n            // If the element is newly created from a Component, it is wrapped in 'ng-component' tag - we do not want that.\n            const element = dynamicComponent.location.nativeElement;\n            info.elementRef = { nativeElement: element };\n            info.componentRef = dynamicComponent;\n        }\n        info.settings = Object.assign({}, this._defaultSettings, overlaySettings);\n        return info;\n    }\n\n    private placeElementHook(element: HTMLElement): HTMLElement {\n        if (!element.parentElement) {\n            return null;\n        }\n        const hook = this._document.createElement('div');\n        hook.style.display = 'none';\n        element.parentElement.insertBefore(hook, element);\n        return hook;\n    }\n\n    private moveElementToOverlay(info: OverlayInfo) {\n        info.wrapperElement = this.getWrapperElement();\n        const contentElement = this.getContentElement(info.wrapperElement, info.settings.modal);\n        this.getOverlayElement(info).appendChild(info.wrapperElement);\n        contentElement.appendChild(info.elementRef.nativeElement);\n    }\n\n    private getWrapperElement(): HTMLElement {\n        const wrapper: HTMLElement = this._document.createElement('div');\n        wrapper.classList.add('igx-overlay__wrapper');\n        // Use Popover API to place element in top layer, eliminating need for z-index\n        wrapper.setAttribute('popover', 'manual');\n        return wrapper;\n    }\n\n    private getContentElement(wrapperElement: HTMLElement, modal: boolean): HTMLElement {\n        const content: HTMLElement = this._document.createElement('div');\n        if (modal) {\n            content.classList.add('igx-overlay__content--modal');\n            content.addEventListener('click', (ev: Event) => {\n                ev.stopPropagation();\n            });\n        } else {\n            content.classList.add('igx-overlay__content');\n        }\n        content.addEventListener('scroll', (ev: Event) => {\n            ev.stopPropagation();\n        });\n\n        //  hide element to eliminate flickering. Show the element exactly before animation starts\n        wrapperElement.style.visibility = 'hidden';\n        wrapperElement.appendChild(content);\n        return content;\n    }\n\n    private getOverlayElement(info: OverlayInfo): HTMLElement {\n        if (info.settings.outlet) {\n            return info.settings.outlet.nativeElement || info.settings.outlet;\n        }\n        if (!this._overlayElement) {\n            this._overlayElement = this._document.createElement('div');\n            this._overlayElement.classList.add('igx-overlay');\n            this._document.body.appendChild(this._overlayElement);\n        }\n        return this._overlayElement;\n    }\n\n    private updateSize(info: OverlayInfo) {\n        if (info.componentRef) {\n            //  if we are positioning component this is first time it gets visible\n            //  and we can finally get its size\n            info.componentRef.changeDetectorRef.detectChanges();\n            info.initialSize = info.elementRef.nativeElement.getBoundingClientRect();\n        }\n\n        // set content div width only if element to show has width\n        if (info.initialSize.width !== 0) {\n            info.elementRef.nativeElement.parentElement.style.width = info.initialSize.width + 'px';\n        }\n    }\n\n    private closeDone(info: OverlayInfo) {\n        info.visible = false;\n        if (info.wrapperElement) {\n            // to eliminate flickering show the element just before animation start\n            info.wrapperElement.style.visibility = 'hidden';\n            // Hide from popover top layer if element is connected, showing, and API is available\n            if (info.wrapperElement.isConnected &&\n                typeof info.wrapperElement.hidePopover === 'function' &&\n                info.wrapperElement.matches(':popover-open')) {\n                try {\n                    info.wrapperElement.hidePopover();\n                } catch (_) {\n                    // Hide failed, element may not be in popover state\n                }\n            }\n        }\n        if (!info.closeAnimationDetaching) {\n            this.closed.emit({ id: info.id, componentRef: info.componentRef, event: info.event });\n        }\n        delete info.event;\n    }\n\n    private cleanUp(info: OverlayInfo) {\n        const child: HTMLElement = info.elementRef.nativeElement;\n        const outlet = this.getOverlayElement(info);\n        // if same element is shown in other overlay outlet will not contain\n        // the element and we should not remove it form outlet\n        if (outlet.contains(child)) {\n            outlet.removeChild(child.parentNode.parentNode);\n        }\n        if (info.componentRef) {\n            this._appRef.detachView(info.componentRef.hostView);\n            info.componentRef.destroy();\n            delete info.componentRef;\n        }\n        if (info.hook) {\n            info.hook.parentElement.insertBefore(info.elementRef.nativeElement, info.hook);\n            info.hook.parentElement.removeChild(info.hook);\n            delete info.hook;\n        }\n\n        const index = this._overlayInfos.indexOf(info);\n        this._overlayInfos.splice(index, 1);\n\n        // this._overlayElement.parentElement check just for tests that manually delete the element\n        if (this._overlayInfos.length === 0) {\n            if (this._overlayElement && this._overlayElement.parentElement) {\n                this._overlayElement.parentElement.removeChild(this._overlayElement);\n                this._overlayElement = null;\n            }\n            this.removeCloseOnEscapeListener();\n        }\n\n        // clean all the resources attached to info\n        delete info.elementRef;\n        delete info.settings;\n        delete info.initialSize;\n        info.openAnimationDetaching = true;\n        info.openAnimationPlayer?.destroy();\n        delete info.openAnimationPlayer;\n        info.closeAnimationDetaching = true;\n        info.closeAnimationPlayer?.destroy();\n        delete info.closeAnimationPlayer;\n        delete info.ngZone;\n        delete info.wrapperElement;\n        info = null;\n    }\n\n    private playOpenAnimation(info: OverlayInfo) {\n        //  if there is opening animation already started do nothing\n        if (info.openAnimationPlayer?.hasStarted()) {\n            return;\n        }\n        if (info.closeAnimationPlayer?.hasStarted()) {\n            const position = info.closeAnimationPlayer.position;\n            info.closeAnimationPlayer.reset();\n            info.openAnimationPlayer.init();\n            info.openAnimationPlayer.position = 1 - position;\n        }\n        this.animationStarting.emit({ id: info.id, animationPlayer: info.openAnimationPlayer, animationType: 'open' });\n\n        //  to eliminate flickering show the element just before animation start\n        info.wrapperElement.style.visibility = '';\n        info.visible = true;\n        info.openAnimationPlayer.play();\n    }\n\n    private playCloseAnimation(info: OverlayInfo, event?: Event) {\n        //  if there is closing animation already started do nothing\n        if (info.closeAnimationPlayer?.hasStarted()) {\n            return;\n        }\n        if (info.openAnimationPlayer?.hasStarted()) {\n            const position = info.openAnimationPlayer.position;\n            info.openAnimationPlayer.reset();\n            info.closeAnimationPlayer.init();\n            info.closeAnimationPlayer.position = 1 - position;\n        }\n        this.animationStarting.emit({ id: info.id, animationPlayer: info.closeAnimationPlayer, animationType: 'close' });\n        info.event = event;\n        info.closeAnimationPlayer.play();\n    }\n\n    //  TODO: check if applyAnimationParams will work with complex animations\n    private applyAnimationParams(wrapperElement: HTMLElement, animationOptions: AnimationReferenceMetadata) {\n        if (!animationOptions) {\n            wrapperElement.style.transitionDuration = '0ms';\n            return;\n        }\n        if (!animationOptions.options || !animationOptions.options.params) {\n            return;\n        }\n        const params = animationOptions.options.params as IAnimationParams;\n        if (params.duration) {\n            wrapperElement.style.transitionDuration = params.duration;\n        }\n        if (params.easing) {\n            wrapperElement.style.transitionTimingFunction = params.easing;\n        }\n    }\n\n    private documentClicked = (ev: MouseEvent) => {\n        //  if we get to modal overlay just return - we should not close anything under it\n        //  if we get to non-modal overlay do the next:\n        //   1. Check it has close on outside click. If not go on to next overlay;\n        //   2. If true check if click is on the element. If it is on the element we have closed\n        //  already all previous non-modal with close on outside click elements, so we return. If\n        //  not close the overlay and check next\n        for (let i = this._overlayInfos.length; i--;) {\n            const info = this._overlayInfos[i];\n            if (info.settings.modal) {\n                return;\n            }\n            if (info.settings.closeOnOutsideClick) {\n                const target = ev.composed ? ev.composedPath()[0] : ev.target;\n                const overlayElement = info.elementRef.nativeElement;\n                // check if the click is on the overlay element or on an element from the exclusion list, and if so do not close the overlay\n                const excludeElements = info.settings.excludeFromOutsideClick ?\n                    [...info.settings.excludeFromOutsideClick, overlayElement] : [overlayElement];\n                const isInsideClick: boolean = excludeElements.some(e => e.contains(target as Node));\n                if (isInsideClick) {\n                    return;\n                    //  if the click is outside click, but close animation has started do nothing\n                } else if (!(info.closeAnimationPlayer?.hasStarted())) {\n                    this._hide(info.id, ev);\n                }\n            }\n        }\n    };\n\n    private addOutsideClickListener(info: OverlayInfo) {\n        if (info.settings.closeOnOutsideClick) {\n            if (info.settings.modal) {\n                fromEvent(info.elementRef.nativeElement.parentElement.parentElement, 'click')\n                    .pipe(takeUntil(this.destroy$))\n                    .subscribe((e: Event) => this._hide(info.id, e));\n            } else if (\n                //  if all overlays minus closing overlays equals one add the handler\n                this._overlayInfos.filter(x => x.settings.closeOnOutsideClick && !x.settings.modal).length -\n                this._overlayInfos.filter(x => x.settings.closeOnOutsideClick && !x.settings.modal &&\n                    x.closeAnimationPlayer?.hasStarted()).length === 1) {\n\n                // click event is not fired on iOS. To make element \"clickable\" we are\n                // setting the cursor to pointer\n                if (this.platformUtil.isIOS && !this._cursorStyleIsSet) {\n                    this._cursorOriginalValue = this._document.body.style.cursor;\n                    this._document.body.style.cursor = 'pointer';\n                    this._cursorStyleIsSet = true;\n                }\n                this._document.addEventListener('click', this.documentClicked, true);\n            }\n        }\n    }\n\n    private removeOutsideClickListener(info: OverlayInfo) {\n        if (info.settings.modal === false) {\n            let shouldRemoveClickEventListener = true;\n            this._overlayInfos.forEach(o => {\n                if (o.settings.modal === false && o.id !== info.id) {\n                    shouldRemoveClickEventListener = false;\n                }\n            });\n            if (shouldRemoveClickEventListener) {\n                if (this._cursorStyleIsSet) {\n                    this._document.body.style.cursor = this._cursorOriginalValue;\n                    this._cursorOriginalValue = '';\n                    this._cursorStyleIsSet = false;\n                }\n                this._document.removeEventListener('click', this.documentClicked, true);\n            }\n        }\n    }\n\n    private addResizeHandler() {\n        const closingOverlaysCount =\n            this._overlayInfos\n                .filter(o => o.closeAnimationPlayer?.hasStarted())\n                .length;\n        if (this._overlayInfos.length - closingOverlaysCount === 1) {\n            this._document.defaultView.addEventListener('resize', this.repositionAll);\n        }\n    }\n\n    private removeResizeHandler() {\n        const closingOverlaysCount =\n            this._overlayInfos\n                .filter(o => o.closeAnimationPlayer?.hasStarted())\n                .length;\n        if (this._overlayInfos.length - closingOverlaysCount === 1) {\n            this._document.defaultView.removeEventListener('resize', this.repositionAll);\n        }\n    }\n\n    private addCloseOnEscapeListener(info: OverlayInfo) {\n        if (info.settings.closeOnEscape && !this._keyPressEventListener) {\n            this._keyPressEventListener = fromEvent(this._document, 'keydown').pipe(\n                filter((ev: KeyboardEvent) => ev.key === 'Escape' || ev.key === 'Esc')\n            ).subscribe((ev) => {\n                const visibleOverlays = this._overlayInfos.filter(o => o.visible);\n                if (visibleOverlays.length < 1) {\n                    return;\n                }\n                const targetOverlayInfo = visibleOverlays[visibleOverlays.length - 1];\n                if (targetOverlayInfo.visible && targetOverlayInfo.settings.closeOnEscape) {\n                    this.hide(targetOverlayInfo.id, ev);\n                }\n            });\n        }\n    }\n\n    private removeCloseOnEscapeListener() {\n        if (this._keyPressEventListener) {\n            this._keyPressEventListener.unsubscribe();\n            this._keyPressEventListener = null;\n        }\n    }\n\n    private addModalClasses(info: OverlayInfo) {\n        if (info.settings.modal) {\n            const wrapperElement = info.elementRef.nativeElement.parentElement.parentElement;\n            wrapperElement.classList.remove('igx-overlay__wrapper');\n            this.applyAnimationParams(wrapperElement, info.settings.positionStrategy.settings.openAnimation);\n            requestAnimationFrame(() => {\n                wrapperElement.classList.add('igx-overlay__wrapper--modal');\n            });\n        }\n    }\n\n    private removeModalClasses(info: OverlayInfo) {\n        if (info.settings.modal) {\n            const wrapperElement = info.elementRef.nativeElement.parentElement.parentElement;\n            this.applyAnimationParams(wrapperElement, info.settings.positionStrategy.settings.closeAnimation);\n            wrapperElement.classList.remove('igx-overlay__wrapper--modal');\n            wrapperElement.classList.add('igx-overlay__wrapper');\n        }\n    }\n\n    private buildAnimationPlayers(info: OverlayInfo) {\n        if (info.settings.positionStrategy.settings.openAnimation) {\n            info.openAnimationPlayer = this.animationService\n                .buildAnimation(info.settings.positionStrategy.settings.openAnimation, info.elementRef.nativeElement);\n            info.openAnimationPlayer.animationEnd\n                .pipe(takeUntil(this.destroy$))\n                .subscribe(() => this.openAnimationDone(info));\n        }\n        if (info.settings.positionStrategy.settings.closeAnimation) {\n            info.closeAnimationPlayer = this.animationService\n                .buildAnimation(info.settings.positionStrategy.settings.closeAnimation, info.elementRef.nativeElement);\n            info.closeAnimationPlayer.animationEnd\n                .pipe(takeUntil(this.destroy$))\n                .subscribe(() => this.closeAnimationDone(info));\n        }\n    }\n\n    private openAnimationDone(info: OverlayInfo) {\n        if (!info.openAnimationDetaching) {\n            this.opened.emit({ id: info.id, componentRef: info.componentRef });\n        }\n        if (info.openAnimationPlayer) {\n            info.openAnimationPlayer.reset();\n        }\n        if (info.closeAnimationPlayer?.hasStarted()) {\n            info.closeAnimationPlayer.reset();\n        }\n    }\n\n    private closeAnimationDone(info: OverlayInfo) {\n        if (info.closeAnimationPlayer) {\n            info.closeAnimationPlayer.reset();\n        }\n        if (info.openAnimationPlayer?.hasStarted()) {\n            info.openAnimationPlayer.reset();\n        }\n        this.closeDone(info);\n    }\n\n    private finishAnimations(info: OverlayInfo) {\n        // // TODO: should we emit here opened or closed events\n        if (info.openAnimationPlayer?.hasStarted()) {\n            info.openAnimationPlayer.finish();\n        }\n        if (info.closeAnimationPlayer?.hasStarted()) {\n            info.closeAnimationPlayer.finish();\n        }\n    }\n\n    private getComponentSize(info: OverlayInfo) {\n        if (info.elementRef?.nativeElement instanceof Element) {\n            const styles = this._document.defaultView.getComputedStyle(info.elementRef.nativeElement);\n            const componentSize = styles.getPropertyValue('--component-size');\n            const globalSize = styles.getPropertyValue('--ig-size');\n            const size = componentSize || globalSize;\n            info.size = size;\n        }\n    }\n}\n","// Export position strategies\nexport * from './IPositionStrategy';\nexport * from './base-fit-position-strategy';\nexport * from './global-position-strategy';\nexport * from './container-position-strategy';\nexport * from './connected-positioning-strategy';\nexport * from './auto-position-strategy';\nexport * from './elastic-position-strategy';\n","import { NgZone } from '@angular/core';\nimport { IgxOverlayService } from '../overlay';\nimport { ScrollStrategy } from './scroll-strategy';\n\n/**\n * On scroll reposition the overlay content.\n */\nexport class AbsoluteScrollStrategy extends ScrollStrategy {\n    private _initialized = false;\n    private _document: Document;\n    private _overlayService: IgxOverlayService;\n    private _id: string;\n    private _scrollContainer: HTMLElement;\n    private _zone: NgZone;\n\n    constructor(scrollContainer?: HTMLElement) {\n        super();\n        this._scrollContainer = scrollContainer;\n    }\n\n    /**\n     * Initializes the strategy. Should be called once\n     *\n     * @param document reference to Document object.\n     * @param overlayService IgxOverlay service to use in this strategy.\n     * @param id Unique id for this strategy.\n     * ```typescript\n     * settings.scrollStrategy.initialize(document, overlay, id);\n     * ```\n     */\n    public initialize(document: Document, overlayService: IgxOverlayService, id: string) {\n        if (this._initialized) {\n            return;\n        }\n        this._overlayService = overlayService;\n        this._id = id;\n        this._document = document;\n        this._zone = overlayService.getOverlayById(id).ngZone;\n        this._initialized = true;\n    }\n\n    /**\n     * Attaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.attach();\n     * ```\n     */\n    public attach(): void {\n        if (this._zone) {\n            this._zone.runOutsideAngular(() => {\n                this.addScrollEventListener();\n            });\n        } else {\n            this.addScrollEventListener();\n        }\n    }\n\n    /**\n     * Detaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.detach();\n     * ```\n     */\n    public detach(): void {\n        if (this._scrollContainer) {\n            this._scrollContainer.removeEventListener('scroll', this.onScroll, true);\n        } else {\n            // Tired of this thing throwing every other time. Fix it ffs!\n            this._document?.removeEventListener('scroll', this.onScroll, true);\n        }\n\n        this._initialized = false;\n    }\n\n    private addScrollEventListener() {\n        if (this._scrollContainer) {\n            this._scrollContainer.addEventListener('scroll', this.onScroll, true);\n        } else {\n            this._document.addEventListener('scroll', this.onScroll, true);\n        }\n    }\n\n    private onScroll = (e: Event) => {\n        const overlayInfo = this._overlayService.getOverlayById(this._id);\n        if (!overlayInfo) {\n            return;\n        }\n        if (!overlayInfo.elementRef.nativeElement.contains(e.target)) {\n            this._overlayService.reposition(this._id);\n        }\n    };\n}\n","import { ScrollStrategy } from './scroll-strategy';\n\n/**\n * Prevents scrolling while the overlay content is shown.\n */\nexport class BlockScrollStrategy extends ScrollStrategy {\n    private _initialized = false;\n    private _document: Document;\n    private _initialScrollTop: number;\n    private _initialScrollLeft: number;\n    private _sourceElement: Element;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Initializes the strategy. Should be called once\n     *\n     */\n    public initialize(document: Document) {\n        if (this._initialized) {\n            return;\n        }\n\n        this._document = document;\n        this._initialized = true;\n    }\n\n    /**\n     * Attaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.attach();\n     * ```\n     */\n    public attach(): void {\n        this._document.addEventListener('scroll', this.onScroll, true);\n    }\n\n    /**\n     * Detaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.detach();\n     * ```\n     */\n    public detach(): void {\n        this._document.removeEventListener('scroll', this.onScroll, true);\n        this._sourceElement = null;\n        this._initialScrollTop = 0;\n        this._initialScrollLeft = 0;\n        this._initialized = false;\n    }\n\n    private onScroll = (ev: Event) => {\n        ev.preventDefault();\n        if (!this._sourceElement || this._sourceElement !== ev.target) {\n            this._sourceElement = ev.target as Element;\n            this._initialScrollTop = this._sourceElement.scrollTop;\n            this._initialScrollLeft = this._sourceElement.scrollLeft;\n        }\n\n        this._sourceElement.scrollTop = this._initialScrollTop;\n        this._sourceElement.scrollLeft = this._initialScrollLeft;\n    };\n}\n","import { IgxOverlayService } from '../overlay';\nimport { OverlayInfo } from '../utilities';\nimport { ScrollStrategy } from './scroll-strategy';\n\n/**\n * Uses a tolerance and closes the shown component upon scrolling if the tolerance is exceeded\n */\nexport class CloseScrollStrategy extends ScrollStrategy {\n    private _document: Document;\n    private _overlayService: IgxOverlayService;\n    private _id: string;\n    private initialScrollTop: number;\n    private initialScrollLeft: number;\n    private _threshold: number;\n    private _initialized = false;\n    private _sourceElement: Element;\n    private _scrollContainer: HTMLElement;\n    private _overlayInfo: OverlayInfo;\n\n    constructor(scrollContainer?: HTMLElement) {\n        super();\n        this._scrollContainer = scrollContainer;\n        this._threshold = 10;\n    }\n\n    /**\n     * Initializes the strategy. Should be called once\n     *\n     * @param document reference to Document object.\n     * @param overlayService IgxOverlay service to use in this strategy.\n     * @param id Unique id for this strategy.\n     * ```typescript\n     * settings.scrollStrategy.initialize(document, overlay, id);\n     * ```\n     */\n    public initialize(document: Document, overlayService: IgxOverlayService, id: string) {\n        if (this._initialized) {\n            return;\n        }\n        this._overlayService = overlayService;\n        this._id = id;\n        this._document = document;\n        this._initialized = true;\n        this._overlayInfo = overlayService.getOverlayById(id);\n    }\n\n    /**\n     * Attaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.attach();\n     * ```\n     */\n    public attach(): void {\n        if (this._scrollContainer) {\n            this._scrollContainer.addEventListener('scroll', this.onScroll);\n            this._sourceElement = this._scrollContainer;\n        } else {\n            this._document.addEventListener('scroll', this.onScroll, true);\n        }\n    }\n\n    /**\n     * Detaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.detach();\n     * ```\n     */\n    public detach(): void {\n        // TODO: check why event listener removes only on first call and remains on each next!!!\n        if (this._scrollContainer) {\n            this._scrollContainer.removeEventListener('scroll', this.onScroll);\n        } else {\n            this._document.removeEventListener('scroll', this.onScroll, true);\n        }\n        this._sourceElement = null;\n        this._initialized = false;\n    }\n\n    private onScroll = (ev: Event) => {\n        if (!this._sourceElement) {\n            this._sourceElement = ev.target as any;\n            this.initialScrollTop = this._sourceElement.scrollTop;\n            this.initialScrollLeft = this._sourceElement.scrollLeft;\n        }\n\n        if (this._overlayInfo.elementRef.nativeElement.contains(this._sourceElement)) {\n            return;\n        }\n        if (Math.abs(this._sourceElement.scrollTop - this.initialScrollTop) > this._threshold ||\n            Math.abs(this._sourceElement.scrollLeft - this.initialScrollLeft) > this._threshold) {\n            this._overlayService.hide(this._id);\n        }\n    };\n}\n","// Export scroll strategies\nexport * from './scroll-strategy';\nexport * from './IScrollStrategy';\nexport * from './absolute-scroll-strategy';\nexport * from './block-scroll-strategy';\nexport * from './close-scroll-strategy';\nexport * from './NoOpScrollStrategy';\nexport * from './close-scroll-strategy';\n\n","import { TransactionService, Transaction, State, StateUpdateEvent, TransactionType } from './transaction';\nimport { EventEmitter } from '@angular/core';\nimport { isObject, mergeObjects } from '../../core/utils';\nimport { DefaultDataCloneStrategy, IDataCloneStrategy } from '../../data-operations/data-clone-strategy';\n\nexport class IgxBaseTransactionService<T extends Transaction, S extends State> implements TransactionService<T, S> {\n    /**\n     * Gets/Sets the data clone strategy used to clone data\n     */\n    public get cloneStrategy(): IDataCloneStrategy {\n        return this._cloneStrategy;\n    }\n\n    public set cloneStrategy(strategy: IDataCloneStrategy) {\n        if (strategy) {\n            this._cloneStrategy = strategy;\n        }\n    }\n\n    /**\n     * @returns if there are any transactions in the Redo stack\n     */\n    public get canRedo(): boolean {\n        return false;\n    }\n\n    /**\n     * @returns if there are any transactions in the Undo stack\n     */\n    public get canUndo(): boolean {\n        return false;\n    }\n\n    /**\n     * Returns whether transaction is enabled for this service\n     */\n    public get enabled(): boolean {\n        return this._isPending;\n    }\n\n    /**\n     * Event fired when transaction state has changed - add transaction, commit all transactions, undo and redo\n     */\n    public onStateUpdate = new EventEmitter<StateUpdateEvent>();\n\n    protected _isPending = false;\n    protected _pendingTransactions: T[] = [];\n    protected _pendingStates: Map<any, S> = new Map();\n    private _cloneStrategy: IDataCloneStrategy = new DefaultDataCloneStrategy();\n\n    /**\n     * Adds provided  transaction with recordRef if any\n     *\n     * @param transaction Transaction to be added\n     * @param recordRef Reference to the value of the record in the data source related to the changed item\n     */\n    public add(transaction: T, recordRef?: any): void {\n        if (this._isPending) {\n            this.updateState(this._pendingStates, transaction, recordRef);\n            this._pendingTransactions.push(transaction);\n        }\n    }\n\n    /**\n     * Returns all recorded transactions in chronological order\n     *\n     * @param id Optional record id to get transactions for\n     * @returns All transaction in the service or for the specified record\n     */\n    public getTransactionLog(_id?: any): T[] {\n        return [];\n    }\n\n    /**\n     * Remove the last transaction if any\n     */\n    public undo(): void { }\n\n     /**\n      * Applies the last undone transaction if any\n      */\n    public redo(): void { }\n\n    /**\n     * Returns aggregated changes from all transactions\n     *\n     * @param mergeChanges If set to true will merge each state's value over relate recordRef\n     * and will record resulting value in the related transaction\n     * @returns Collection of aggregated transactions for each changed record\n     */\n    public getAggregatedChanges(mergeChanges: boolean): T[] {\n        const result: T[] = [];\n        this._pendingStates.forEach((state: S, key: any) => {\n            const value = mergeChanges ? this.getAggregatedValue(key, mergeChanges) : state.value;\n            result.push({ id: key, newValue: value, type: state.type } as T);\n        });\n        return result;\n    }\n\n    /**\n     * Returns the state of the record with provided id\n     *\n     * @param id The id of the record\n     * @param pending Should get pending state\n     * @returns State of the record if any\n     */\n    public getState(id: any): S {\n        return this._pendingStates.get(id);\n    }\n\n    /**\n     * Returns value of the required id including all uncommitted changes\n     *\n     * @param id The id of the record to return value for\n     * @param mergeChanges If set to true will merge state's value over relate recordRef\n     * and will return merged value\n     * @returns Value with changes or **null**\n     */\n    public getAggregatedValue(id: any, mergeChanges: boolean): any {\n        const state = this._pendingStates.get(id);\n        if (!state) {\n            return null;\n        }\n        if (mergeChanges && state.recordRef) {\n            return this.updateValue(state);\n        }\n        return state.value;\n    }\n\n    /**\n     * Applies all transactions over the provided data\n     *\n     * @param data Data source to update\n     * @param id Optional record id to commit transactions for\n     */\n    public commit(_data: any[], _id?: any): void { }\n\n    /**\n     * Clears all transactions\n     *\n     * @param id Optional record id to clear transactions for\n     */\n    public clear(_id?: any): void {\n        this._pendingStates.clear();\n        this._pendingTransactions = [];\n    }\n\n    /**\n     * Starts pending transactions. All transactions passed after call to startPending\n     * will not be added to transaction log\n     */\n    public startPending(): void {\n        this._isPending = true;\n    }\n\n    /**\n     * Clears all pending transactions and aggregated pending state. If commit is set to true\n     * commits pending states as single transaction\n     *\n     * @param commit Should commit the pending states\n     */\n    public endPending(_commit: boolean): void {\n        this._isPending = false;\n        this._pendingStates.clear();\n        this._pendingTransactions = [];\n    }\n\n\n    /**\n     * Updates the provided states collection according to passed transaction and recordRef\n     *\n     * @param states States collection to apply the update to\n     * @param transaction Transaction to apply to the current state\n     * @param recordRef Reference to the value of the record in data source, if any, where transaction should be applied\n     */\n    protected updateState(states: Map<any, S>, transaction: T, recordRef?: any): void {\n        let state = states.get(transaction.id);\n        if (state) {\n            if (isObject(state.value)) {\n                mergeObjects(state.value, transaction.newValue);\n            } else {\n                state.value = transaction.newValue;\n            }\n        } else {\n            state = { value: this.cloneStrategy.clone(transaction.newValue), recordRef, type: transaction.type } as S;\n            states.set(transaction.id, state);\n        }\n\n        this.cleanState(transaction.id, states);\n    }\n\n    /**\n     * Updates the recordRef of the provided state with all the changes in the state. Accepts primitive and object value types\n     *\n     * @param state State to update value for\n     * @returns updated value including all the changes in provided state\n     */\n    protected updateValue(state: S) {\n        return this.mergeValues(state.recordRef, state.value);\n    }\n\n    /**\n     * Merges second values in first value and the result in empty object. If values are primitive type\n     * returns second value if exists, or first value.\n     *\n     * @param first Value to merge into\n     * @param second Value to merge\n     */\n    protected mergeValues<U>(first: U, second: U): U {\n        if (isObject(first) || isObject(second)) {\n            return mergeObjects(this.cloneStrategy.clone(first), second);\n        } else {\n            return second ? second : first;\n        }\n    }\n\n    /**\n     * Compares the state with recordRef and clears all duplicated values. If any state ends as\n     * empty object removes it from states.\n     *\n     * @param state State to clean\n     */\n    protected cleanState(id: any, states: Map<any, S>): void {\n        const state = states.get(id);\n        //  do nothing if\n        //  there is no state, or\n        //  there is no state value (e.g. DELETED transaction), or\n        //  there is no recordRef (e.g. ADDED transaction)\n        if (state && state.value && state.recordRef) {\n            //  if state's value is object compare each key with the ones in recordRef\n            //  if values in any key are the same delete it from state's value\n            //  if state's value is not object, simply compare with recordRef and remove\n            //  the state if they are equal\n            if (isObject(state.recordRef)) {\n                for (const key of Object.keys(state.value)) {\n                    if (JSON.stringify(state.recordRef[key]) === JSON.stringify(state.value[key])) {\n                        delete state.value[key];\n                    }\n                }\n\n                //  if state's value is empty remove the state from the states, only if state is not DELETE type\n                if (state.type !== TransactionType.DELETE && Object.keys(state.value).length === 0) {\n                    states.delete(id);\n                }\n            } else {\n                if (state.recordRef === state.value) {\n                    states.delete(id);\n                }\n            }\n        }\n    }\n}\n","import { Transaction, State, TransactionType, TransactionEventOrigin, Action } from './transaction';\nimport { IgxBaseTransactionService } from './base-transaction';\nimport { isObject, mergeObjects } from '../../core/utils';\n\nexport class IgxTransactionService<T extends Transaction, S extends State> extends IgxBaseTransactionService<T, S> {\n\n    protected _transactions: T[] = [];\n    protected _redoStack: Action<T>[][] = [];\n    protected _undoStack: Action<T>[][] = [];\n    protected _states: Map<any, S> = new Map();\n\n    /**\n     * @returns if there are any transactions in the Undo stack\n     */\n    public override get canUndo(): boolean {\n        return this._undoStack.length > 0;\n    }\n\n    /**\n     * @returns if there are any transactions in the Redo stack\n     */\n    public override get canRedo(): boolean {\n        return this._redoStack.length > 0;\n    }\n\n    /**\n     * Adds provided  transaction with recordRef if any\n     *\n     * @param transaction Transaction to be added\n     * @param recordRef Reference to the value of the record in the data source related to the changed item\n     */\n    public override add(transaction: T, recordRef?: any): void {\n        const states = this._isPending ? this._pendingStates : this._states;\n        this.verifyAddedTransaction(states, transaction, recordRef);\n        this.addTransaction(transaction, states, recordRef);\n    }\n\n    /**\n     * Returns all recorded transactions in chronological order\n     *\n     * @param id Optional record id to get transactions for\n     * @returns All transaction in the service or for the specified record\n     */\n    public override getTransactionLog(id?: any): T[] {\n        if (id !== undefined) {\n            return this._transactions.filter(t => t.id === id);\n        }\n        return [...this._transactions];\n    }\n\n    /**\n     * Returns aggregated changes from all transactions\n     *\n     * @param mergeChanges If set to true will merge each state's value over relate recordRef\n     * and will record resulting value in the related transaction\n     * @returns Collection of aggregated transactions for each changed record\n     */\n    public override getAggregatedChanges(mergeChanges: boolean): T[] {\n        const result: T[] = [];\n        this._states.forEach((state: S, key: any) => {\n            const value = mergeChanges ? this.mergeValues(state.recordRef, state.value) : state.value;\n            result.push({ id: key, newValue: value, type: state.type } as T);\n        });\n        return result;\n    }\n\n    /**\n     * Returns the state of the record with provided id\n     *\n     * @param id The id of the record\n     * @param pending Should get pending state\n     * @returns State of the record if any\n     */\n    public override getState(id: any, pending = false): S {\n        return pending ? this._pendingStates.get(id) : this._states.get(id);\n    }\n\n    /**\n     * Returns whether transaction is enabled for this service\n     */\n    public override get enabled(): boolean {\n        return true;\n    }\n\n    /**\n     * Returns value of the required id including all uncommitted changes\n     *\n     * @param id The id of the record to return value for\n     * @param mergeChanges If set to true will merge state's value over relate recordRef\n     * and will return merged value\n     * @returns Value with changes or **null**\n     */\n    public override getAggregatedValue(id: any, mergeChanges: boolean): any {\n        const state = this._states.get(id);\n        const pendingState = super.getState(id);\n\n        //  if there is no state and there is no pending state return null\n        if (!state && !pendingState) {\n            return null;\n        }\n\n        const pendingChange = super.getAggregatedValue(id, false);\n        const change = state && state.value;\n        let aggregatedValue = this.mergeValues(change, pendingChange);\n        if (mergeChanges) {\n            const originalValue = state ? state.recordRef : pendingState.recordRef;\n            aggregatedValue = this.mergeValues(originalValue, aggregatedValue);\n        }\n        return aggregatedValue;\n    }\n\n    /**\n     * Clears all pending transactions and aggregated pending state. If commit is set to true\n     * commits pending states as single transaction\n     *\n     * @param commit Should commit the pending states\n     */\n    public override endPending(commit: boolean): void {\n        this._isPending = false;\n        if (commit) {\n            const actions: Action<T>[] = [];\n            // don't use addTransaction due to custom undo handling\n            for (const transaction of this._pendingTransactions) {\n                const pendingState = this._pendingStates.get(transaction.id);\n                this._transactions.push(transaction);\n                this.updateState(this._states, transaction, pendingState.recordRef);\n                actions.push({ transaction, recordRef: pendingState.recordRef });\n            }\n\n            this._undoStack.push(actions);\n            this._redoStack = [];\n\n            this.onStateUpdate.emit({ origin: TransactionEventOrigin.END, actions });\n        }\n        super.endPending(commit);\n    }\n\n    /**\n     * Applies all transactions over the provided data\n     *\n     * @param data Data source to update\n     * @param id Optional record id to commit transactions for\n     */\n    public override commit(data: any[], id?: any): void {\n        if (id !== undefined) {\n            const state = this.getState(id);\n            if (state) {\n                this.updateRecord(data, state);\n            }\n        } else {\n            this._states.forEach((s: S) => {\n                this.updateRecord(data, s);\n            });\n        }\n        this.clear(id);\n    }\n\n    /**\n     * Clears all transactions\n     *\n     * @param id Optional record id to clear transactions for\n     */\n    public override clear(id?: any): void {\n        if (id !== undefined) {\n            this._transactions = this._transactions.filter(t => t.id !== id);\n            this._states.delete(id);\n            //  Undo stack is an array of actions. Each action is array of transaction like objects\n            //  We are going trough all the actions. For each action we are filtering out transactions\n            //  with provided id. Finally if any action ends up as empty array we are removing it from\n            //  undo stack\n            this._undoStack = this._undoStack.map(a => a.filter(t => t.transaction.id !== id)).filter(a => a.length > 0);\n        } else {\n            this._transactions = [];\n            this._states.clear();\n            this._undoStack = [];\n        }\n        this._redoStack = [];\n        this.onStateUpdate.emit({ origin: TransactionEventOrigin.CLEAR, actions: [] });\n    }\n\n    /**\n     * Remove the last transaction if any\n     */\n    public override undo(): void {\n        if (this._undoStack.length <= 0) {\n            return;\n        }\n\n        const lastActions: Action<T>[] = this._undoStack.pop();\n        this._transactions.splice(this._transactions.length - lastActions.length);\n        this._redoStack.push(lastActions);\n\n        this._states.clear();\n        for (const currentActions of this._undoStack) {\n            for (const transaction of currentActions) {\n                this.updateState(this._states, transaction.transaction, transaction.recordRef);\n            }\n        }\n\n        this.onStateUpdate.emit({ origin: TransactionEventOrigin.UNDO, actions: lastActions });\n    }\n\n    /**\n     * Applies the last undone transaction if any\n     */\n    public override redo(): void {\n        if (this._redoStack.length > 0) {\n            const actions: Action<T>[] = this._redoStack.pop();\n            for (const action of actions) {\n                this.updateState(this._states, action.transaction, action.recordRef);\n                this._transactions.push(action.transaction);\n            }\n\n            this._undoStack.push(actions);\n            this.onStateUpdate.emit({ origin: TransactionEventOrigin.REDO, actions });\n        }\n    }\n\n    protected addTransaction(transaction: T, states: Map<any, S>, recordRef?: any) {\n        this.updateState(states, transaction, recordRef);\n\n        const transactions = this._isPending ? this._pendingTransactions : this._transactions;\n        transactions.push(transaction);\n\n        if (!this._isPending) {\n            const actions = [{ transaction, recordRef }];\n            this._undoStack.push(actions);\n            this._redoStack = [];\n            this.onStateUpdate.emit({ origin: TransactionEventOrigin.ADD, actions });\n        }\n    }\n\n    /**\n     * Verifies if the passed transaction is correct. If not throws an exception.\n     *\n     * @param transaction Transaction to be verified\n     */\n    protected verifyAddedTransaction(states: Map<any, S>, transaction: T, recordRef?: any): void {\n        const state = states.get(transaction.id);\n        switch (transaction.type) {\n            case TransactionType.ADD:\n                if (state) {\n                    //  cannot add same item twice\n                    throw new Error(`Cannot add this transaction. Transaction with id: ${transaction.id} has been already added.`);\n                }\n                break;\n            case TransactionType.DELETE:\n            case TransactionType.UPDATE:\n                if (state && state.type === TransactionType.DELETE) {\n                    //  cannot delete or update deleted items\n                    throw new Error(`Cannot add this transaction. Transaction with id: ${transaction.id} has been already deleted.`);\n                }\n                if (!state && !recordRef && !this._isPending) {\n                    //  cannot initially add transaction or delete item with no recordRef\n                    throw new Error(`Cannot add this transaction. This is first transaction of type ${transaction.type} ` +\n                        `for id ${transaction.id}. For first transaction of this type recordRef is mandatory.`);\n                }\n                break;\n        }\n    }\n\n    /**\n     * Updates the provided states collection according to passed transaction and recordRef\n     *\n     * @param states States collection to apply the update to\n     * @param transaction Transaction to apply to the current state\n     * @param recordRef Reference to the value of the record in data source, if any, where transaction should be applied\n     */\n    protected override updateState(states: Map<any, S>, transaction: T, recordRef?: any): void {\n        let state = states.get(transaction.id);\n        //  if TransactionType is ADD simply add transaction to states;\n        //  if TransactionType is DELETE:\n        //    - if there is state with this id of type ADD remove it from the states;\n        //    - if there is state with this id of type UPDATE change its type to DELETE;\n        //    - if there is no state with this id add transaction to states;\n        //  if TransactionType is UPDATE:\n        //    - if there is state with this id of type ADD merge new value and state recordRef into state new value\n        //    - if there is state with this id of type UPDATE merge new value into state new value\n        //    - if there is state with this id and state type is DELETE change its type to UPDATE\n        //    - if there is no state with this id add transaction to states;\n        if (state) {\n            switch (transaction.type) {\n                case TransactionType.DELETE:\n                    if (state.type === TransactionType.ADD) {\n                        states.delete(transaction.id);\n                    } else if (state.type === TransactionType.UPDATE) {\n                        state.value = transaction.newValue;\n                        state.type = TransactionType.DELETE;\n                    }\n                    break;\n                case TransactionType.UPDATE:\n                    if (isObject(state.value)) {\n                        if (state.type === TransactionType.ADD) {\n                            state.value = this.mergeValues(state.value, transaction.newValue);\n                        }\n                        if (state.type === TransactionType.UPDATE) {\n                            mergeObjects(state.value, transaction.newValue);\n                        }\n                    } else {\n                        state.value = transaction.newValue;\n                    }\n            }\n        } else {\n            state = { value: this.cloneStrategy.clone(transaction.newValue), recordRef, type: transaction.type } as S;\n            states.set(transaction.id, state);\n        }\n\n        this.cleanState(transaction.id, states);\n    }\n\n    /**\n     * Updates state related record in the provided data\n     *\n     * @param data Data source to update\n     * @param state State to update data from\n     */\n    protected updateRecord(data: any[], state: S) {\n        const index = data.findIndex(i => JSON.stringify(i) === JSON.stringify(state.recordRef || {}));\n        switch (state.type) {\n            case TransactionType.ADD:\n                data.push(state.value);\n                break;\n            case TransactionType.DELETE:\n                if (0 <= index && index < data.length) {\n                    data.splice(index, 1);\n                }\n                break;\n            case TransactionType.UPDATE:\n                if (0 <= index && index < data.length) {\n                    data[index] = this.updateValue(state);\n                }\n                break;\n        }\n    }\n}\n","import { HierarchicalTransaction, HierarchicalState, TransactionType } from './transaction';\nimport { IgxTransactionService } from './igx-transaction';\nimport { DataUtil } from '../../data-operations/data-util';\nimport { HierarchicalTransactionService } from './hierarchical-transaction';\n\n/** @experimental @hidden */\nexport class IgxHierarchicalTransactionService<T extends HierarchicalTransaction, S extends HierarchicalState>\n    extends IgxTransactionService<T, S> implements HierarchicalTransactionService<T, S> {\n\n    public override getAggregatedChanges(mergeChanges: boolean): T[] {\n        const result: T[] = [];\n        this._states.forEach((state: S, key: any) => {\n            const value = mergeChanges ? this.mergeValues(state.recordRef, state.value) : this.cloneStrategy.clone(state.value);\n            this.clearArraysFromObject(value);\n            result.push({ id: key, path: state.path, newValue: value, type: state.type } as T);\n        });\n        return result;\n    }\n\n    public override commit(data: any[], primaryKeyOrId?: any, childDataKey?: any, id?: any): void {\n        if (childDataKey !== undefined) {\n            let transactions = this.getAggregatedChanges(true);\n            if (id !== undefined) {\n                transactions = transactions.filter(t => t.id === id);\n            }\n            DataUtil.mergeHierarchicalTransactions(data, transactions, childDataKey, primaryKeyOrId, this.cloneStrategy, true);\n            this.clear(id);\n        } else {\n            super.commit(data, primaryKeyOrId);\n        }\n    }\n\n    protected override updateState(states: Map<any, S>, transaction: T, recordRef?: any): void {\n        super.updateState(states, transaction, recordRef);\n\n        //  if transaction has no path, e.g. flat data source, get out\n        if (!transaction.path) {\n            return;\n        }\n\n        const currentState = states.get(transaction.id);\n        if (currentState) {\n            currentState.path = transaction.path;\n        }\n\n        //  if transaction has path, Hierarchical data source, and it is DELETE\n        //  type transaction for all child rows remove ADD states and update\n        //  transaction type and value of UPDATE states\n        if (transaction.type === TransactionType.DELETE) {\n            states.forEach((v: S, k: any) => {\n                if (v.path && v.path.indexOf(transaction.id) !== -1) {\n                    switch (v.type) {\n                        case TransactionType.ADD:\n                            states.delete(k);\n                            break;\n                        case TransactionType.UPDATE:\n                            states.get(k).type = TransactionType.DELETE;\n                            states.get(k).value = null;\n                    }\n                }\n            });\n        }\n    }\n\n    //  TODO: remove this method. Force cloning to strip child arrays when needed instead\n    private clearArraysFromObject(obj: any) {\n        if (obj) {\n            for (const prop of Object.keys(obj)) {\n                if (Array.isArray(obj[prop])) {\n                    delete obj[prop];\n                }\n            }\n        }\n    }\n}\n\n","import { Injectable } from '@angular/core';\nimport { IgxBaseTransactionService } from './base-transaction';\nimport { HierarchicalTransactionService } from './hierarchical-transaction';\nimport { IgxHierarchicalTransactionService } from './igx-hierarchical-transaction';\nimport { IgxTransactionService } from './igx-transaction';\nimport { HierarchicalState, HierarchicalTransaction, State, Transaction, TransactionService } from './transaction';\n\n/**\n * The type of the transaction that should be provided.\n * When batchEditing is disabled, `None` is provided.\n * When enabled - `Base` is provided.\n * An enum instead of a boolean value leaves room for extra scenarios in the future.\n */\nexport const enum TRANSACTION_TYPE {\n    'None' = 'None',\n    'Base' = 'Base'\n}\n\n/**\n * Factory service for instantiating TransactionServices\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class IgxFlatTransactionFactory {\n\n    /**\n     * Creates a new Transaction service instance depending on the specified type.\n     *\n     * @param type The type of the transaction\n     * @returns a new instance of TransactionService<Transaction, State>\n     */\n    public create(type: TRANSACTION_TYPE): TransactionService<Transaction, State> {\n        switch (type) {\n            case (TRANSACTION_TYPE.Base):\n                return new IgxTransactionService();\n            default:\n                return new IgxBaseTransactionService();\n        }\n    }\n}\n\n/**\n * Factory service for instantiating HierarchicalTransactionServices\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class IgxHierarchicalTransactionFactory extends IgxFlatTransactionFactory {\n\n    /**\n     * Creates a new HierarchialTransaction service instance depending on the specified type.\n     *\n     * @param type The type of the transaction\n     * @returns a new instance of HierarchialTransaction<HierarchialTransaction, HierarchialState>\n     */\n    public override create(type: TRANSACTION_TYPE): HierarchicalTransactionService<HierarchicalTransaction, HierarchicalState> {\n        switch (type) {\n            case (TRANSACTION_TYPE.Base):\n                return new IgxHierarchicalTransactionService();\n            default:\n                return new IgxBaseTransactionService();\n        }\n    }\n}\n","import { inject, InjectionToken, DOCUMENT } from \"@angular/core\";\nimport { BehaviorSubject } from \"rxjs\";\n\nexport class ThemeToken {\n    private document = inject(DOCUMENT);\n    public subject: BehaviorSubject<IgxTheme>;\n\n    constructor(private t?: IgxTheme) {\n        const globalTheme = globalThis.window\n            ?.getComputedStyle(this.document.body)\n            .getPropertyValue(\"--ig-theme\")\n            .trim() || 'material' as IgxTheme;\n\n        const _theme = t ?? globalTheme as IgxTheme;\n        this.subject = new BehaviorSubject(_theme);\n    }\n\n    public onChange(callback: (theme: IgxTheme) => void) {\n        return this.subject.subscribe(callback);\n    }\n\n    public set(theme: IgxTheme) {\n        this.subject.next(theme);\n    }\n\n    public get theme() {\n        return this.subject.getValue();\n    }\n\n    public get preferToken() {\n        return !!this.t;\n    }\n}\n\nexport const THEME_TOKEN = new InjectionToken<ThemeToken>('ThemeToken', {\n    providedIn: 'root',\n    factory: () => new ThemeToken()\n});\n\nconst Theme = {\n    Material: \"material\",\n    Fluent: \"fluent\",\n    Bootstrap: \"bootstrap\",\n    IndigoDesign: \"indigo\",\n} as const;\n\n/**\n * Determines the component theme.\n */\nexport type IgxTheme = (typeof Theme)[keyof typeof Theme];\n","// Export services\nexport * from './animation/angular-animation-player';\nexport * from './animation/angular-animation-service';\nexport * from './animation/animation';\nexport { Direction as ɵDirection, DIR_DOCUMENT as ɵDIR_DOCUMENT, IgxDirectionality as ɵIgxDirectionality } from './direction/directionality';\nexport * from './overlay/overlay';\nexport * from './overlay/position';\nexport * from './overlay/scroll';\nexport {\n    AbsolutePosition, ConnectedFit, HorizontalAlignment, OffsetMode, OverlayAnimationEventArgs, OverlayCancelableEventArgs, OverlayClosingEventArgs,\n    OverlayCreateSettings, OverlayEventArgs, OverlaySettings, Point, PositionSettings, RelativePosition, RelativePositionStrategy, Size, VerticalAlignment, Util,\n    IgxOverlayOutletDirective\n} from './overlay/utilities';\nexport * from './transaction/base-transaction';\nexport * from './transaction/hierarchical-transaction';\nexport * from './transaction/igx-hierarchical-transaction';\nexport * from './transaction/igx-transaction';\nexport * from './transaction/transaction';\nexport * from './transaction/transaction-factory.service';\nexport * from './theme/theme.token';\n\n","/* eslint-disable no-console */\nimport { inject, Injectable, NgZone, isDevMode } from '@angular/core';\n\n\ninterface igcPerformance {\n    startMeasure: typeof startMeasure;\n    getMeasures: typeof getMeasures;\n    clearMeasures: typeof clearMeasures,\n    clearAll: typeof clearAll\n}\n\ndeclare global {\n    var $$igcPerformance: igcPerformance;\n}\n\nfunction isInstrumented(): boolean {\n    return globalThis.performance && performance.measure && isDevMode();\n}\n\nfunction instrumentGlobalHelpers(): void {\n    if (!isInstrumented() || Object.hasOwn(globalThis, '$$igcPerformance')) {\n        return;\n    }\n\n    globalThis.$$igcPerformance = {\n        startMeasure,\n        getMeasures,\n        clearMeasures,\n        clearAll,\n    };\n\n    console.debug('Performance helper functions attached @ `global.$$igcPerformance`');\n\n}\n\nexport function startMeasure(name: string, withLogging = false) {\n    if (!isInstrumented()) return () => { };\n\n    const startMark = `${name}:start`;\n    const endMark = `${name}:end`;\n\n    performance.mark(startMark);\n\n    return () => {\n        performance.mark(endMark);\n        performance.measure(name, startMark, endMark);\n        if (withLogging) {\n            const entry = performance.getEntriesByName(name).at(-1);\n            console.debug(`Performance Measure : ${entry.name} - Duration: ${entry.duration.toFixed(2)}ms`);\n        }\n    };\n}\n\nexport function getMeasures(name?: string): PerformanceEntryList {\n    return name ? performance.getEntriesByName(name) : performance.getEntriesByType('measure');\n}\n\nexport function clearMeasures(name?: string, withLogging = false): void {\n    performance.clearMeasures(name);\n    if (withLogging) {\n        console.debug(name ? 'Cleared all measures of type `${name}`' : 'Cleared all custom measures');\n    }\n}\n\nexport function clearAll(withLogging = false): void {\n    performance.clearMarks();\n    clearMeasures();\n    if (withLogging) {\n        console.debug('Cleared all marks and custom measures');\n    }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class PerformanceService {\n    private readonly _ngZone = inject(NgZone);\n    private _logEnabled = false;\n\n    constructor() {\n        instrumentGlobalHelpers();\n    }\n\n    public setLogEnabled(state: boolean): void {\n        this._logEnabled = state;\n    }\n\n    public start(name: string) {\n        return startMeasure(name, this._logEnabled);\n    }\n\n    public getMeasures(name?: string): PerformanceEntryList {\n        return getMeasures(name);\n    }\n\n    public clearMeasures(name?: string): void {\n        clearMeasures(name, this._logEnabled);\n    }\n\n    public clearAll(): void {\n        clearAll(this._logEnabled);\n    }\n\n    public attachObserver(options?: PerformanceObserverInit) {\n        if (!isInstrumented()) return;\n        let observer: PerformanceObserver;\n\n        options = options ?? { entryTypes: ['event', 'long-animation-frame', 'longtask', 'taskattribution'] };\n\n        this._ngZone.runOutsideAngular(() => {\n            observer = new PerformanceObserver((list) => {\n                if (this._logEnabled) {\n                    for (const entry of list.getEntries()) {\n                        console.debug(`Performance Entry: ${entry.name} (${entry.entryType}) - Duration: ${entry.duration.toFixed(2)}ms`);\n                    }\n                }\n            });\n\n            observer.observe(options);\n        });\n\n        return () => {\n            observer.disconnect();\n        };\n    }\n}\n","import { IDatePickerResourceStrings } from './date-picker-resources';\nimport { IDateRangePickerResourceStrings } from './date-range-picker-resources';\nimport { IGridResourceStrings } from './grid-resources';\nimport { ITimePickerResourceStrings } from './time-picker-resources';\nimport { IPaginatorResourceStrings } from './paginator-resources';\nimport { ICarouselResourceStrings } from './carousel-resources';\nimport { IChipResourceStrings } from './chip-resources';\nimport { IListResourceStrings } from './list-resources';\nimport { ICalendarResourceStrings } from './calendar-resources';\nimport { IInputResourceStrings } from './input-resources';\nimport { ITreeResourceStrings } from './tree-resources';\nimport { IActionStripResourceStrings } from './action-strip-resources';\nimport { IQueryBuilderResourceStrings } from './query-builder-resources';\nimport { IComboResourceStrings } from './combo-resources';\nimport { IBannerResourceStrings } from './banner-resources';\nimport {\n    IResourceChangeEventArgs,\n    IResourceStrings as IResourceStringsCore,\n    getI18nManager\n} from 'igniteui-i18n-core';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { DestroyRef, ɵR3Injector as R3Injector } from '@angular/core';\n\nexport const DEFAULT_LOCALE = 'en-US';\n\nexport interface IResourceStrings extends IGridResourceStrings, ITimePickerResourceStrings, ICalendarResourceStrings,\n    ICarouselResourceStrings, IChipResourceStrings, IComboResourceStrings, IInputResourceStrings, IDatePickerResourceStrings,\n    IDateRangePickerResourceStrings, IListResourceStrings, IPaginatorResourceStrings, ITreeResourceStrings,\n    IActionStripResourceStrings, IQueryBuilderResourceStrings, IBannerResourceStrings { }\n\n\nfunction igxRegisterI18n(resourceStrings: IResourceStrings, locale: string) {\n    // Remove `igx_` prefix for compatibility with older versions.\n    const genericResourceStrings: IResourceStringsCore = {};\n    for (const key of Object.keys(resourceStrings)) {\n        let stringKey = key;\n        if (stringKey.startsWith(\"igx_\")) {\n            stringKey = stringKey.replace(\"igx_\", \"\");\n        }\n        genericResourceStrings[stringKey] = resourceStrings[key];\n    }\n    getI18nManager().registerI18n(genericResourceStrings, locale);\n}\n\n/** Get current resource strings based on default. Result is truncated result, containing only relevant locale strings. */\nexport function getCurrentResourceStrings<T>(defaultEN: T, init = true, locale?: string) {\n    const resourceStrings = getI18nManager().getCurrentResourceStrings(locale);\n    const resourceStringsKeys = Object.keys(resourceStrings);\n    const normalizedResourceStrings: T = {} as T;\n    const newResourceStrings: T = {} as T;\n\n    // Append back `igx_` prefix for compatibility with older versions.\n    const igxResourceStringKeys = Object.keys(defaultEN);\n    for (const igxKey of igxResourceStringKeys) {\n        let coreKey = igxKey;\n        if (coreKey.startsWith(\"igx_\")) {\n            coreKey = coreKey.replace(\"igx_\", \"\");\n        }\n        if (resourceStringsKeys.includes(coreKey)) {\n            normalizedResourceStrings[igxKey] = resourceStrings[coreKey];\n        } else {\n            normalizedResourceStrings[igxKey] = defaultEN[igxKey];\n            newResourceStrings[coreKey] = defaultEN[igxKey];\n        }\n    }\n\n    if (init) {\n        // Register only new resources. We don't want to accidentally override any default set by user.\n        getI18nManager().registerI18n(newResourceStrings, getI18nManager().defaultLocale);\n    }\n\n    return normalizedResourceStrings;\n}\n\n/**\n * Bind to the i18n manager's onResourceChange event\n * @param destroyObj Object responsible for signaling destruction of the handling object\n * @param context Reference to the object's this context\n */\nexport function onResourceChangeHandle(destroyObj: Subject<any> | DestroyRef, callback: (event?: CustomEvent<IResourceChangeEventArgs>) => void, context: any) {\n    const onResourceChangeHandler = callback.bind(context);\n    getI18nManager().addEventListener(\"onResourceChange\", onResourceChangeHandler);\n\n    // Handle removal of listener on context destroy\n    const removeHandler = () => {\n        getI18nManager().removeEventListener(\"onResourceChange\", onResourceChangeHandler);\n    }\n    if (destroyObj instanceof DestroyRef || destroyObj instanceof R3Injector) {\n        // R3Injector is for tests only\n        destroyObj.onDestroy(() => removeHandler());\n    } else if (destroyObj) {\n        destroyObj.subscribe({\n            complete: () => removeHandler()\n        });\n    }\n}\n\n/**\n * Change resource strings for all components globally. The locale is not taken into account and this method should be called when the locale is changed.\n * Note: Legacy method. We suggest using the new `registerI18n` and `setCurrentI18n` methods exposed.\n */\nexport function changei18n(resourceStrings: IResourceStrings) {\n    // Register to current locale, since the user might have already set `lang` tag on root html.\n    igxRegisterI18n(resourceStrings, getI18nManager().currentLocale);\n}\n\n/**\n * Set the current locale of all Ignite UI components.\n * @param locale The name of the locale. A string based on the BCP 47 language tag, that Intl supports.\n */\nexport function registerI18n(resourceStrings: IResourceStrings, locale: string) {\n    igxRegisterI18n(resourceStrings, locale);\n}\n","import {\n    getNumberFormatter,\n    getDateFormatter\n} from 'igniteui-i18n-core';\nimport { BaseFormatter, I18N_FORMATTER } from './formatter-base';\nimport { Provider } from '@angular/core';\n\n/** Set up provider for Ignite UI components to use Intl formatting, replacing the default Angular's one. */\nexport function provideIgniteIntl() {\n    const providers: Provider[] = [{provide: I18N_FORMATTER, useValue: new IntlFormatter()}];\n    return providers;\n}\n\nexport class IntlFormatter extends BaseFormatter {\n    public override verifyLocale(locale: string): string {\n        try {\n            // Any angular method should work.\n            return Intl.getCanonicalLocales(locale)[0];\n        } catch {\n            return undefined;\n        }\n    }\n\n    public override formatDate(value: Date | string | number | null | undefined, format: string, locale: string, timezone?: string): string {\n        if (value === null || value === undefined || value === '') {\n            return '';\n        }\n        if (typeof value === \"string\" || typeof value === \"number\") {\n            value = getDateFormatter().createDateFromValue(value);\n        }\n        const formatOptions = this.getFormatOptions(format);\n        if (!formatOptions && format) {\n            return getDateFormatter().formatDateCustomFormat(value, format, { locale, timezone });\n        }\n\n        const options: Intl.DateTimeFormatOptions = {\n            ...formatOptions,\n            timeZone: timezone\n        };\n        return getDateFormatter().formatDateTime(value, locale, options);\n    }\n\n    public override formatNumber(value: number | string | null | undefined, locale?: string, digitsInfo?: string): string {\n        return this.formatNumberGeneric(value, \"decimal\", locale, digitsInfo);\n    }\n\n    public override formatPercent(value: number | string | null | undefined, locale?: string, digitsInfo?: string) {\n        return this.formatNumberGeneric(value, \"percent\", locale, digitsInfo);\n    }\n\n    public override formatCurrency(value: number | string | null | undefined, locale?: string, display?: 'code' | 'symbol' | 'symbol-narrow' | string, currencyCode?: string, digitsInfo?: string): string {\n        return this.formatNumberGeneric(value, \"currency\", locale, digitsInfo, currencyCode, display);\n    }\n\n    public override getCurrencyCode(_locale: string, overrideCode?: string): string {\n        return overrideCode ?? 'USD';\n    }\n\n    public override getCurrencySymbol(currencyCode: string, locale?: string, currencyDisplay: keyof Intl.NumberFormatOptionsCurrencyDisplayRegistry = \"symbol\"): string {\n        return getNumberFormatter().getCurrencySymbol(currencyCode, locale, currencyDisplay);\n    }\n\n    public override getLocaleFirstDayOfWeek(locale?: string): number {\n        return getDateFormatter().getFirstDayOfWeek(locale);\n    }\n\n    private parseDigitsInfo(value?: string) {\n        let minIntegerDigits = undefined, minFractionDigits = undefined, maxFractionDigits = undefined;\n        if (value) {\n            const parts = value.split(\"-\");\n            const innerParts = parts[0].split(\".\");\n            if (innerParts.length > 0) {\n                minIntegerDigits = parseInt(innerParts[0]);\n            }\n            if (innerParts.length == 2) {\n                minFractionDigits = parseInt(innerParts[1]);\n            }\n            if (parts.length == 2) {\n                maxFractionDigits = parseInt(parts[1]);\n            }\n        }\n        return { minIntegerDigits, minFractionDigits, maxFractionDigits };\n    }\n\n    private formatNumberGeneric(value: number | string | null | undefined, style?: 'decimal' | 'percent' | 'currency', locale?: string, digitsInfo?: string, currencyCode?: string, display?: 'code' | 'symbol' | 'symbol-narrow' | string): string {\n        if (value === null || value === undefined || value === '') {\n            return '';\n        }\n        if (typeof value === \"string\") {\n            value = parseFloat(value);\n        }\n        const parsedDigitsInfo = this.parseDigitsInfo(digitsInfo);\n        let currencyDisplay: keyof Intl.NumberFormatOptionsCurrencyDisplayRegistry;\n        if (display !== 'code' && display !== 'symbol' && display !== 'symbol-narrow' && display !== 'narrowSymbol' && display !== \"name\") {\n            currencyDisplay = 'symbol';\n        } else if (display === 'symbol-narrow') {\n            currencyDisplay = 'narrowSymbol';\n        } else {\n            currencyDisplay = display || undefined;\n        }\n        const options: Intl.NumberFormatOptions = {\n            style: style,\n            currency: currencyCode,\n            currencyDisplay: currencyDisplay,\n            minimumIntegerDigits: parsedDigitsInfo.minIntegerDigits,\n            minimumFractionDigits: parsedDigitsInfo.minFractionDigits,\n            maximumFractionDigits: parsedDigitsInfo.maxFractionDigits\n        };\n        return getNumberFormatter().formatNumber(value, locale, options);\n    }\n}\n","import {\n    type IActionStripResourceStrings as IAActionStripResourceStrings,\n    type PrefixedResourceStrings,\n    ActionStripResourceStringsEN as AActionStripResourceStrings,\n    IGX_PREFIX,\n    prefixResource\n} from 'igniteui-i18n-core';\n\nexport type IActionStripResourceStrings = PrefixedResourceStrings<IAActionStripResourceStrings, typeof IGX_PREFIX>;\n\nexport const ActionStripResourceStringsEN: IActionStripResourceStrings = prefixResource(IGX_PREFIX, AActionStripResourceStrings);\n","import {\n    type IBannerResourceStrings as IABannerResourceStrings,\n    type PrefixedResourceStrings,\n    BannerResourceStringsEN as ABannerResourceStrings,\n    IGX_PREFIX,\n    prefixResource\n} from 'igniteui-i18n-core';\n\nexport type IBannerResourceStrings = PrefixedResourceStrings<IABannerResourceStrings, typeof IGX_PREFIX>;\n\nexport const BannerResourceStringsEN: IBannerResourceStrings = prefixResource(IGX_PREFIX, ABannerResourceStrings);\n","import {\n    type ICalendarResourceStrings as IACalendarResourceStrings,\n    CalendarResourceStringsEN as ACalendarResourceStrings,\n    type PrefixedResourceStrings,\n    IGX_PREFIX,\n    prefixResource\n} from 'igniteui-i18n-core';\n\nexport type ICalendarResourceStrings = PrefixedResourceStrings<IACalendarResourceStrings, typeof IGX_PREFIX>;\n\nexport const CalendarResourceStringsEN: ICalendarResourceStrings = prefixResource(IGX_PREFIX, ACalendarResourceStrings);\n","import {\n    type ICarouselResourceStrings as IACarouselResourceStrings,\n    CarouselResourceStringsEN as ACarouselResourceStrings,\n    type PrefixedResourceStrings,\n    IGX_PREFIX,\n    prefixResource\n} from 'igniteui-i18n-core';\n\nexport type ICarouselResourceStrings = PrefixedResourceStrings<IACarouselResourceStrings, typeof IGX_PREFIX>;\n\nexport const CarouselResourceStringsEN: ICarouselResourceStrings = prefixResource(IGX_PREFIX, ACarouselResourceStrings);\n","import {\n    type IChipResourceStrings as IAChipResourceStrings,\n    type PrefixedResourceStrings,\n    ChipResourceStringsEN as AChipResourceStrings,\n    IGX_PREFIX,\n    prefixResource\n} from 'igniteui-i18n-core';\n\nexport type IChipResourceStrings = PrefixedResourceStrings<IAChipResourceStrings, typeof IGX_PREFIX>;\n\nexport const ChipResourceStringsEN: IChipResourceStrings = prefixResource(IGX_PREFIX, AChipResourceStrings);\n","import {\n    type IComboResourceStrings as IAComboResourceStrings,\n    type PrefixedResourceStrings,\n    ComboResourceStringsEN as AComboResourceStrings,\n    IGX_PREFIX,\n    prefixResource\n} from 'igniteui-i18n-core';\n\nexport type IComboResourceStrings = PrefixedResourceStrings<IAComboResourceStrings, typeof IGX_PREFIX>;\n\nexport const ComboResourceStringsEN: IComboResourceStrings = prefixResource(IGX_PREFIX, AComboResourceStrings);\n","import {\n    type IDatePickerResourceStrings as IADatePickerResourceStrings,\n    type PrefixedResourceStrings,\n    DatePickerResourceStringsEN as ADatePickerResourceStrings,\n    IGX_PREFIX,\n    prefixResource\n} from 'igniteui-i18n-core';\n\nexport type IDatePickerResourceStrings = PrefixedResourceStrings<IADatePickerResourceStrings, typeof IGX_PREFIX>;\n\nexport const DatePickerResourceStringsEN: IDatePickerResourceStrings = prefixResource(IGX_PREFIX, ADatePickerResourceStrings);\n","import {\n    type IDateRangePickerResourceStrings as IADateRangePickerResourceStrings,\n    type PrefixedResourceStrings,\n    DateRangePickerResourceStringsEN as ADateRangePickerResourceStrings,\n    IGX_PREFIX,\n    prefixResource\n} from 'igniteui-i18n-core';\n\nexport type IDateRangePickerResourceStrings = PrefixedResourceStrings<IADateRangePickerResourceStrings, typeof IGX_PREFIX>;\n\nexport const DateRangePickerResourceStringsEN: IDateRangePickerResourceStrings = prefixResource(IGX_PREFIX, ADateRangePickerResourceStrings);\n","import {\n    type IGridResourceStrings as IAGridResourceStrings,\n    type PrefixedResourceStrings,\n    GridResourceStringsEN as AGridResourceStrings,\n    IGX_PREFIX,\n    prefixResource\n} from 'igniteui-i18n-core';\n\nexport type IGridResourceStrings = PrefixedResourceStrings<IAGridResourceStrings, typeof IGX_PREFIX>;\n\nexport const GridResourceStringsEN: IGridResourceStrings = prefixResource(IGX_PREFIX, AGridResourceStrings);\n","import { FileInputResourceStringsEN } from 'igniteui-i18n-core';\n\nexport interface IInputResourceStrings {\n    igx_input_upload_button?: string;\n    igx_input_file_placeholder?: string;\n};\n\nexport const InputResourceStringsEN: IInputResourceStrings = {\n    igx_input_upload_button: FileInputResourceStringsEN.file_input_upload_button,\n    igx_input_file_placeholder: FileInputResourceStringsEN.file_input_placeholder\n};\n","import {\n    type IListResourceStrings as IAListResourceStrings,\n    type PrefixedResourceStrings,\n    ListResourceStringsEN as AListResourceStrings,\n    IGX_PREFIX,\n    prefixResource\n} from 'igniteui-i18n-core';\n\nexport type IListResourceStrings = PrefixedResourceStrings<IAListResourceStrings, typeof IGX_PREFIX>;\n\nexport const ListResourceStringsEN: IListResourceStrings = prefixResource(IGX_PREFIX, AListResourceStrings);\n","import {\n    type IPaginatorResourceStrings as IAPaginatorResourceStrings,\n    type PrefixedResourceStrings,\n    IGX_PREFIX,\n    PaginatorResourceStringsEN as APaginatorResourceStrings,\n    prefixResource\n} from 'igniteui-i18n-core';\n\nexport type IPaginatorResourceStrings = PrefixedResourceStrings<IAPaginatorResourceStrings, typeof IGX_PREFIX>;\n\nexport const PaginatorResourceStringsEN: IPaginatorResourceStrings = prefixResource(IGX_PREFIX, APaginatorResourceStrings);\n","import {\n    type IQueryBuilderResourceStrings as IAQueryBuilderResourceStrings,\n    type PrefixedResourceStrings,\n    IGX_PREFIX,\n    QueryBuilderResourceStringsEN as AQueryBuilderResourceStrings,\n    prefixResource\n} from 'igniteui-i18n-core';\n\nexport type IQueryBuilderResourceStrings = PrefixedResourceStrings<IAQueryBuilderResourceStrings, typeof IGX_PREFIX>;\n\nexport const QueryBuilderResourceStringsEN: IQueryBuilderResourceStrings = prefixResource(IGX_PREFIX, AQueryBuilderResourceStrings);\n","import {\n    type ITimePickerResourceStrings as IATimePickerResourceStrings,\n    type PrefixedResourceStrings,\n    IGX_PREFIX,\n    TimePickerResourceStringsEN as ATimePickerResourceStrings,\n    prefixResource\n} from 'igniteui-i18n-core';\n\nexport type ITimePickerResourceStrings = PrefixedResourceStrings<IATimePickerResourceStrings, typeof IGX_PREFIX>;\n\nexport const TimePickerResourceStringsEN: ITimePickerResourceStrings = prefixResource(IGX_PREFIX, ATimePickerResourceStrings);\n","import {\n    type ITreeResourceStrings as IATreeResourceStrings,\n    type PrefixedResourceStrings,\n    IGX_PREFIX,\n    TreeResourceStringsEN as ATreeResourceStrings,\n    prefixResource\n} from 'igniteui-i18n-core';\n\nexport type ITreeResourceStrings = PrefixedResourceStrings<IATreeResourceStrings, typeof IGX_PREFIX>;\n\nexport const TreeResourceStringsEN: ITreeResourceStrings = prefixResource(IGX_PREFIX, ATreeResourceStrings);\n","/**\n * Global type augmentations for IgniteUI Angular\n */\n\ndeclare global {\n    interface GlobalEventHandlersEventMap {\n        'keydown.enter': KeyboardEvent;\n        'keydown.escape': KeyboardEvent;\n        'keydown.tab': KeyboardEvent;\n        'keydown.arrowup': KeyboardEvent;\n        'keydown.arrowdown': KeyboardEvent;\n        'keydown.arrowleft': KeyboardEvent;\n        'keydown.arrowright': KeyboardEvent;\n        'keydown.shift.tab': KeyboardEvent;\n        'keydown.alt.arrowup': KeyboardEvent;\n        'keydown.alt.arrowdown': KeyboardEvent;\n        'keydown.pageup': KeyboardEvent;\n        'keydown.pagedown': KeyboardEvent;\n        'keydown.home': KeyboardEvent;\n        'keydown.end': KeyboardEvent;\n        'keydown.space': KeyboardEvent;\n        'igcChange': CustomEvent;\n    }\n}\n\n// This export is needed to make this file a module\nexport {};","// Core utilities\nexport * from './core/navigation';\nexport * from './core/dates';\nexport { WEEKDAYS, Size as ɵSize } from './core/enums';\nexport * from './core/utils';\nexport * from './core/types';\nexport * from './core/selection';\nexport * from './core/edit-provider';\nexport * from './core/touch';\nexport * from './core/touch-annotations';\n\n// Grid actions tokens\nexport * from './grid-column-actions/token';\n\n// Date common\nexport * from './date-common/public_api';\n\n// Data operations\nexport * from './data-operations/data-clone-strategy';\nexport * from './data-operations/filtering-expression.interface';\nexport * from './data-operations/filtering-expressions-tree';\nexport * from './data-operations/filtering-condition';\nexport * from './data-operations/filtering-state.interface';\nexport * from './data-operations/filtering-strategy';\nexport * from './data-operations/tree-grid-filtering-strategy';\nexport * from './data-operations/merge-strategy';\nexport * from './data-operations/expressions-tree-util';\nexport * from './data-operations/groupby-expand-state.interface';\nexport * from './data-operations/groupby-record.interface';\nexport * from './data-operations/groupby-state.interface';\nexport * from './data-operations/grouping-result.interface';\nexport * from './data-operations/grouping-expression.interface';\nexport * from './data-operations/sorting-strategy';\nexport * from './data-operations/grid-sorting-strategy';\nexport * from './data-operations/paging-state.interface';\nexport * from './data-operations/data-util';\nexport * from './data-operations/grid-types';\nexport * from './data-operations/operations';\nexport * from './data-operations/pipes';\n\n// Services\nexport * from './services/public_api';\n\n// Performance service\nexport * from './performance.service';\n\n// i18n\nexport { setCurrentI18n } from 'igniteui-i18n-core';\nexport { IResourceStrings, changei18n, registerI18n } from './core/i18n/resources';\nexport { provideIgniteIntl } from './core/i18n/formatters/formatter-intl';\nexport * from './core/i18n/formatters/formatter-base';\nexport * from './core/i18n/formatters/formatter-intl';\nexport * from './core/i18n/action-strip-resources';\nexport * from './core/i18n/banner-resources';\nexport * from './core/i18n/calendar-resources';\nexport * from './core/i18n/carousel-resources';\nexport * from './core/i18n/chip-resources';\nexport * from './core/i18n/combo-resources';\nexport * from './core/i18n/date-picker-resources';\nexport * from './core/i18n/date-range-picker-resources';\nexport * from './core/i18n/grid-resources';\nexport * from './core/i18n/input-resources';\nexport * from './core/i18n/list-resources';\nexport * from './core/i18n/paginator-resources';\nexport * from './core/i18n/query-builder-resources';\nexport * from './core/i18n/resources';\nexport * from './core/i18n/time-picker-resources';\nexport * from './core/i18n/tree-resources';\n\n// Types\nexport * from './core/global-types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["getDOM","ngGetLocaleFirstDayOfWeek","ngFormatDate","ngFormatNumber","ngFormatPercent","ngGetCurrencySymbol","R3Injector","AActionStripResourceStrings","ABannerResourceStrings","ACalendarResourceStrings","ACarouselResourceStrings","AChipResourceStrings","AComboResourceStrings","ADatePickerResourceStrings","ADateRangePickerResourceStrings","AGridResourceStrings","AListResourceStrings","APaginatorResourceStrings","AQueryBuilderResourceStrings","ATimePickerResourceStrings","ATreeResourceStrings"],"mappings":"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"}