igniteui-angular 21.0.4 → 21.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/igniteui-angular-accordion.mjs +7 -7
- package/fesm2022/igniteui-angular-action-strip.mjs +11 -10
- package/fesm2022/igniteui-angular-action-strip.mjs.map +1 -1
- package/fesm2022/igniteui-angular-avatar.mjs +7 -7
- package/fesm2022/igniteui-angular-badge.mjs +7 -7
- package/fesm2022/igniteui-angular-banner.mjs +10 -10
- package/fesm2022/igniteui-angular-bottom-nav.mjs +22 -22
- package/fesm2022/igniteui-angular-button-group.mjs +7 -7
- package/fesm2022/igniteui-angular-calendar.mjs +61 -61
- package/fesm2022/igniteui-angular-card.mjs +31 -31
- package/fesm2022/igniteui-angular-carousel.mjs +25 -25
- package/fesm2022/igniteui-angular-chat-extras.mjs +6 -6
- package/fesm2022/igniteui-angular-chat.mjs +18 -18
- package/fesm2022/igniteui-angular-chat.mjs.map +1 -1
- package/fesm2022/igniteui-angular-checkbox.mjs +7 -7
- package/fesm2022/igniteui-angular-chips.mjs +10 -10
- package/fesm2022/igniteui-angular-combo.mjs +52 -52
- package/fesm2022/igniteui-angular-core.mjs +56 -52
- package/fesm2022/igniteui-angular-core.mjs.map +1 -1
- package/fesm2022/igniteui-angular-date-picker.mjs +38 -38
- package/fesm2022/igniteui-angular-dialog.mjs +13 -13
- package/fesm2022/igniteui-angular-directives.mjs +198 -194
- package/fesm2022/igniteui-angular-directives.mjs.map +1 -1
- package/fesm2022/igniteui-angular-drop-down.mjs +29 -29
- package/fesm2022/igniteui-angular-expansion-panel.mjs +28 -28
- package/fesm2022/igniteui-angular-grids-core.mjs +554 -474
- package/fesm2022/igniteui-angular-grids-core.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-grid.mjs +53 -48
- package/fesm2022/igniteui-angular-grids-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs +53 -39
- package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-pivot-grid.mjs +82 -79
- package/fesm2022/igniteui-angular-grids-pivot-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-tree-grid.mjs +57 -57
- package/fesm2022/igniteui-angular-grids-tree-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-icon.mjs +10 -10
- package/fesm2022/igniteui-angular-input-group.mjs +26 -26
- package/fesm2022/igniteui-angular-input-group.mjs.map +1 -1
- package/fesm2022/igniteui-angular-list.mjs +40 -40
- package/fesm2022/igniteui-angular-navbar.mjs +13 -13
- package/fesm2022/igniteui-angular-navigation-drawer.mjs +16 -16
- package/fesm2022/igniteui-angular-paginator.mjs +19 -19
- package/fesm2022/igniteui-angular-progressbar.mjs +19 -19
- package/fesm2022/igniteui-angular-query-builder.mjs +22 -22
- package/fesm2022/igniteui-angular-radio.mjs +12 -12
- package/fesm2022/igniteui-angular-radio.mjs.map +1 -1
- package/fesm2022/igniteui-angular-select.mjs +25 -25
- package/fesm2022/igniteui-angular-simple-combo.mjs +7 -7
- package/fesm2022/igniteui-angular-slider.mjs +28 -28
- package/fesm2022/igniteui-angular-snackbar.mjs +7 -7
- package/fesm2022/igniteui-angular-splitter.mjs +14 -14
- package/fesm2022/igniteui-angular-splitter.mjs.map +1 -1
- package/fesm2022/igniteui-angular-stepper.mjs +34 -34
- package/fesm2022/igniteui-angular-switch.mjs +7 -7
- package/fesm2022/igniteui-angular-tabs.mjs +34 -34
- package/fesm2022/igniteui-angular-time-picker.mjs +19 -19
- package/fesm2022/igniteui-angular-toast.mjs +7 -7
- package/fesm2022/igniteui-angular-tree.mjs +28 -28
- package/lib/core/styles/components/chip/_chip-theme.scss +28 -29
- package/lib/core/styles/components/grid/_excel-filtering-theme.scss +14 -11
- package/lib/core/styles/components/navbar/_navbar-theme.scss +7 -1
- package/package.json +3 -3
- package/schematics/tsconfig.tsbuildinfo +1 -1
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
- package/types/igniteui-angular-directives.d.ts +0 -3
- package/types/igniteui-angular-grids-core.d.ts +4 -5
- package/types/igniteui-angular-grids-hierarchical-grid.d.ts +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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/setImmediate.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/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/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/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","/* Copyright (c) 2014-2020 Denis Pushkarev\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE\n */\n\n// Note: Originally copied from core-js-pure package and modified. (https://github.com/zloirock/core-js)\n\nconst queue = {};\nlet counter = 0;\nlet eventListenerAdded = false;\n\ndeclare global {\n interface Window {\n setImmediate: any;\n clearImmediate: any;\n }\n}\n\nconst run = (id) => {\n if (queue.hasOwnProperty(id)) {\n const fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nconst listener = (event) => run(event.data);\n\n// Use function instead of arrow function to workaround an issue in codesandbox\nexport function setImmediate(cb: () => void, ...args) {\n if (window.setImmediate) {\n return window.setImmediate(cb);\n }\n\n if (!eventListenerAdded) {\n eventListenerAdded = true;\n window.addEventListener('message', listener, false);\n }\n\n queue[++counter] = () => {\n cb.apply(undefined, args);\n };\n\n const windowLocation = window.location;\n window.postMessage(counter + '', windowLocation.protocol + '//' + windowLocation.host);\n\n return counter;\n}\n\nexport function clearImmediate(id: any) {\n if (window.clearImmediate) {\n return window.clearImmediate(id);\n }\n\n delete queue[id];\n}\n","import { CurrencyPipe, formatDate as _formatDate, isPlatformBrowser } from '@angular/common';\nimport { Injectable, InjectionToken, PLATFORM_ID, inject } from '@angular/core';\nimport { mergeWith } from 'lodash-es';\nimport { NEVER, Observable } from 'rxjs';\nimport { setImmediate } from './setImmediate';\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 HORIZONTAL_NAV_KEYS = new Set(['arrowleft', 'left', 'arrowright', 'right', 'home', 'end']);\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]);\nexport const ACCORDION_NAVIGATION_KEYS = new Set('up down arrowup arrowdown home end'.split(' '));\nexport const ROW_EXPAND_KEYS = new Set('right down arrowright arrowdown'.split(' '));\nexport const ROW_COLLAPSE_KEYS = new Set('left up arrowleft arrowup'.split(' '));\nexport const ROW_ADD_KEYS = new Set(['+', 'add', '≠', '±', '=']);\nexport const SUPPORTED_KEYS = new Set([...Array.from(NAVIGATION_KEYS),\n...Array.from(ROW_ADD_KEYS), 'enter', 'f2', 'escape', 'esc', 'pagedown', 'pageup']);\nexport const HEADER_KEYS = new Set([...Array.from(NAVIGATION_KEYS), 'escape', 'esc', 'l',\n /** This symbol corresponds to the Alt + L combination under MAC. */\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 yieldingLoop = (count: number, chunkSize: number, callback: (index: number) => void, done: () => void) => {\n let i = 0;\n const chunk = () => {\n const end = Math.min(i + chunkSize, count);\n for (; i < end; ++i) {\n callback(i);\n }\n if (i < count) {\n setImmediate(chunk);\n } else {\n done();\n }\n };\n chunk();\n};\n\nexport const isConstructor = (ref: any) => typeof ref === 'function' && Boolean(ref.prototype) && Boolean(ref.prototype.constructor);\n\n/**\n * Similar to Angular's formatDate. However it will not throw on `undefined | null | ''` instead\n * coalescing to an empty string.\n */\nexport const formatDate = (value: string | number | Date, format: string, locale: string, timezone?: string): string => {\n if (value === null || value === undefined || value === '') {\n return '';\n }\n return _formatDate(value, format, locale, timezone);\n};\n\nexport const formatCurrency = new CurrencyPipe(undefined).transform;\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 /**\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 { formatDate, FormatWidth, getLocaleDateFormat } from '@angular/common';\nimport { ValidationErrors } from '@angular/forms';\nimport { isDate } from '../../core/utils';\nimport { GridColumnDataType } from '../../data-operations/grid-types';\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 public static readonly DEFAULT_INPUT_FORMAT = 'MM/dd/yyyy';\n public static readonly DEFAULT_TIME_INPUT_FORMAT = 'hh:mm tt';\n private static readonly SEPARATOR = 'literal';\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, locale?: string): DatePartInfo[] {\n const format = mask || DateTimeUtil.getDefaultInputFormat(locale);\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, dataType: GridColumnDataType = GridColumnDataType.Date): string {\n locale = locale || DateTimeUtil.DEFAULT_LOCALE;\n if (!Intl || !Intl.DateTimeFormat || !Intl.DateTimeFormat.prototype.formatToParts) {\n // TODO: fallback with Intl.format for IE?\n return DateTimeUtil.DEFAULT_INPUT_FORMAT;\n }\n const parts = DateTimeUtil.getDefaultLocaleMask(locale, dataType);\n parts.forEach(p => {\n if (p.type !== DatePart.Year && p.type !== DateTimeUtil.SEPARATOR && p.type !== DatePart.AmPm) {\n p.formatType = FormatDesc.TwoDigits;\n }\n });\n\n return DateTimeUtil.getMask(parts);\n }\n\n /** Tries to format a date using Angular's DatePipe. Fallbacks to `Intl` if no locale settings have been loaded. */\n public static formatDate(value: number | Date, format: string, locale: string, timezone?: string): string {\n let formattedDate: string;\n try {\n formattedDate = formatDate(value, format, locale, timezone).normalize(\"NFKD\");\n } catch {\n DateTimeUtil.logMissingLocaleSettings(locale);\n const formatter = new Intl.DateTimeFormat(locale);\n formattedDate = formatter.format(value);\n }\n\n return formattedDate;\n }\n\n /**\n * Returns the date format based on a provided locale.\n * Supports Angular's DatePipe format options such as `shortDate`, `longDate`.\n */\n public static getLocaleDateFormat(locale: string, displayFormat?: string): string {\n const formatKeys = Object.keys(FormatWidth) as (keyof FormatWidth)[];\n const targetKey = formatKeys.find(k => k.toLowerCase() === displayFormat?.toLowerCase().replace('date', ''));\n if (!targetKey) {\n // if displayFormat is not shortDate, longDate, etc.\n // or if it is not set by the user\n return displayFormat;\n }\n let format: string;\n try {\n format = getLocaleDateFormat(locale, FormatWidth[targetKey]);\n } catch {\n DateTimeUtil.logMissingLocaleSettings(locale);\n format = DateTimeUtil.getDefaultInputFormat(locale);\n }\n\n return format;\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): boolean {\n const dateParts = DateTimeUtil.parseDateTimeFormat(inputFormat);\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 = 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, format: string): string {\n let resultFormat = '';\n if (!format) {\n return resultFormat;\n }\n if (predefinedNumericFormats.has(format)) {\n resultFormat = DateTimeUtil.getLocaleInputFormatFromParts(locale, predefinedNumericFormats.get(format));\n\n } else if (DateTimeUtil.isFormatNumeric(locale, format)) {\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, 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 const formatter = new Intl.DateTimeFormat(locale, options);\n const dateStruct = DateTimeUtil.getDateStructFromParts(formatter.formatToParts(new Date()), formatter);\n DateTimeUtil.fillDatePartsPositions(dateStruct);\n return DateTimeUtil.getMask(dateStruct);\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 getMask(dateStruct: any[]): string {\n const mask = [];\n for (const part of dateStruct) {\n if (part.formatType === FormatDesc.Numeric) {\n switch (part.type) {\n case DateParts.Day:\n mask.push('d');\n break;\n case DateParts.Month:\n mask.push('M');\n break;\n case DateParts.Year:\n mask.push('yyyy');\n break;\n case DateParts.Hour:\n mask.push(part.hour12 ? 'h' : 'H');\n break;\n case DateParts.Minute:\n mask.push('m');\n break;\n case DateParts.Second:\n mask.push('s');\n break;\n }\n } else if (part.formatType === FormatDesc.TwoDigits) {\n switch (part.type) {\n case DateParts.Day:\n mask.push('dd');\n break;\n case DateParts.Month:\n mask.push('MM');\n break;\n case DateParts.Year:\n mask.push('yy');\n break;\n case DateParts.Hour:\n mask.push(part.hour12 ? 'hh' : 'HH');\n break;\n case DateParts.Minute:\n mask.push('mm');\n break;\n case DateParts.Second:\n mask.push('ss');\n break;\n }\n }\n\n if (part.type === DateParts.AmPm) {\n mask.push('tt');\n }\n\n if (part.type === DateTimeUtil.SEPARATOR) {\n mask.push(part.value);\n }\n }\n\n return mask.join('');\n }\n\n private static logMissingLocaleSettings(locale: string): void {\n console.warn(`Missing locale data for the locale ${locale}. Please refer to https://angular.io/guide/i18n#i18n-pipes`);\n console.warn('Using default browser locale settings.');\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) {\n const dateOptions = {\n day: FormatDesc.TwoDigits,\n month: FormatDesc.TwoDigits,\n year: FormatDesc.Numeric\n };\n const timeOptions = {\n hour: FormatDesc.TwoDigits,\n minute: FormatDesc.TwoDigits\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: FormatDesc.TwoDigits\n };\n default:\n return { };\n }\n }\n\n private static getDefaultLocaleMask(locale: string, dataType: GridColumnDataType = GridColumnDataType.Date) {\n const options = DateTimeUtil.getFormatOptions(dataType);\n const formatter = new Intl.DateTimeFormat(locale, options);\n const formatToParts = formatter.formatToParts(new Date());\n const dateStruct = DateTimeUtil.getDateStructFromParts(formatToParts, formatter);\n DateTimeUtil.fillDatePartsPositions(dateStruct);\n return dateStruct;\n }\n\n private static getDateStructFromParts(parts: Intl.DateTimeFormatPart[], formatter: Intl.DateTimeFormat): any[] {\n const dateStruct = [];\n for (const part of parts) {\n if (part.type === DateTimeUtil.SEPARATOR) {\n dateStruct.push({\n type: DateTimeUtil.SEPARATOR,\n value: part.value\n });\n } else {\n dateStruct.push({\n type: part.type\n });\n }\n }\n const formatterOptions = formatter.resolvedOptions();\n for (const part of dateStruct) {\n switch (part.type) {\n case DateParts.Day: {\n part.formatType = formatterOptions.day;\n break;\n }\n case DateParts.Month: {\n part.formatType = formatterOptions.month;\n break;\n }\n case DateParts.Year: {\n part.formatType = formatterOptions.year;\n break;\n }\n case DateParts.Hour: {\n part.formatType = formatterOptions.hour;\n if (formatterOptions.hour12) {\n part.hour12 = true;\n }\n break;\n }\n case DateParts.Minute: {\n part.formatType = formatterOptions.minute;\n break;\n }\n case DateParts.Second: {\n part.formatType = formatterOptions.second;\n break;\n }\n case DateParts.AmPm: {\n part.formatType = formatterOptions.dayPeriod;\n break;\n }\n }\n }\n return dateStruct;\n }\n\n private static fillDatePartsPositions(dateArray: any[]): void {\n let currentPos = 0;\n\n for (const part of dateArray) {\n // Day|Month|Hour|Minute|Second|AmPm part positions\n if (part.type === DateParts.Day || part.type === DateParts.Month ||\n part.type === DateParts.Hour || part.type === DateParts.Minute || part.type === DateParts.Second ||\n part.type === DateParts.AmPm\n ) {\n // Offset 2 positions for number\n part.position = [currentPos, currentPos + 2];\n currentPos += 2;\n } else if (part.type === DateParts.Year) {\n // Year part positions\n switch (part.formatType) {\n case FormatDesc.Numeric: {\n // Offset 4 positions for full year\n part.position = [currentPos, currentPos + 4];\n currentPos += 4;\n break;\n }\n case FormatDesc.TwoDigits: {\n // Offset 2 positions for short year\n part.position = [currentPos, currentPos + 2];\n currentPos += 2;\n break;\n }\n }\n } else if (part.type === DateTimeUtil.SEPARATOR) {\n // Separator positions\n part.position = [currentPos, currentPos + 1];\n currentPos++;\n }\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.floor((this.timestamp - firstWeekStart.timestamp) / millisecondsInDay);\n return Math.floor(daysSinceFirstWeek / 7) + 1;\n } else {\n const daysSinceYearStart = Math.floor((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.floor((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';\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 = new Intl.DateTimeFormat(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/**\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 */\nfunction 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/**\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\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 ) {\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))) {\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\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\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, formatDate, formatCurrency, 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 { formatNumber, formatPercent, getLocaleCurrencyCode } from '@angular/common';\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\n switch (column.dataType) {\n case GridColumnDataType.Date:\n case GridColumnDataType.DateTime:\n case GridColumnDataType.Time:\n return formatDate(value, format, locale, timezone);\n case GridColumnDataType.Currency:\n return formatCurrency(value, currencyCode || getLocaleCurrencyCode(locale), display, digitsInfo, locale);\n case GridColumnDataType.Number:\n return formatNumber(value, locale, digitsInfo);\n case GridColumnDataType.Percent:\n return 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 { 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 * 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 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\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 } 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 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 contentElement.classList.add('igx-overlay__content--relative');\n contentElement.parentElement.classList.add('igx-overlay__wrapper--flex-container');\n this.setPosition(contentElement);\n }\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 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 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 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 }\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","export interface IActionStripResourceStrings {\n igx_action_strip_button_more_title?: string;\n}\n\nexport const ActionStripResourceStringsEN: IActionStripResourceStrings = {\n igx_action_strip_button_more_title: 'More'\n};\n","export interface IBannerResourceStrings {\n igx_banner_button_dismiss?: string;\n}\n\nexport const BannerResourceStringsEN: IBannerResourceStrings = {\n igx_banner_button_dismiss: 'Dismiss'\n};\n","export interface ICalendarResourceStrings {\n igx_calendar_previous_month?: string;\n igx_calendar_next_month?: string;\n igx_calendar_previous_year?: string;\n igx_calendar_next_year?: string;\n igx_calendar_previous_years?: string;\n igx_calendar_next_years?: string;\n igx_calendar_select_date?: string;\n igx_calendar_select_month?: string;\n igx_calendar_select_year?: string;\n igx_calendar_range_start?: string;\n igx_calendar_range_end?: string;\n igx_calendar_range_label_start?: string;\n igx_calendar_range_label_end?: string;\n igx_calendar_range_placeholder?: string;\n igx_calendar_selected_month_is?: string;\n igx_calendar_first_picker_of?: string;\n igx_calendar_multi_selection?: string;\n igx_calendar_range_selection?: string;\n igx_calendar_single_selection?: string;\n igx_calendar_singular_multi_selection?: string;\n igx_calendar_singular_range_selection?: string;\n igx_calendar_singular_single_selection?: string;\n}\n\nexport const CalendarResourceStringsEN: ICalendarResourceStrings = {\n igx_calendar_previous_month: 'Previous Month',\n igx_calendar_next_month: 'Next Month',\n igx_calendar_previous_year: 'Previous Year',\n igx_calendar_next_year: 'Next Year',\n igx_calendar_previous_years: 'Previous {0} Years',\n igx_calendar_next_years: 'Next {0} Years',\n igx_calendar_select_date: 'Select Date',\n igx_calendar_select_month: 'Select Month',\n igx_calendar_select_year: 'Select Year',\n igx_calendar_range_start: 'Range start',\n igx_calendar_range_end: 'Range end',\n igx_calendar_range_label_start: 'Start',\n igx_calendar_range_label_end: 'End',\n igx_calendar_range_placeholder: 'Select Range',\n igx_calendar_selected_month_is: 'Selected month is ',\n igx_calendar_first_picker_of: 'First picker of {0} starts from',\n igx_calendar_multi_selection: 'Multi selection calendar with {0} date pickers',\n igx_calendar_range_selection: 'Range selection calendar with {0} date pickers',\n igx_calendar_single_selection: 'Calendar with {0} date pickers',\n igx_calendar_singular_multi_selection: 'Multi selection calendar',\n igx_calendar_singular_range_selection: 'Range selection calendar',\n igx_calendar_singular_single_selection: 'Calendar',\n};\n","export interface ICarouselResourceStrings {\n igx_carousel_of?: string;\n igx_carousel_slide?: string;\n igx_carousel_previous_slide?: string;\n igx_carousel_next_slide?: string;\n}\n\nexport const CarouselResourceStringsEN: ICarouselResourceStrings = {\n igx_carousel_of: 'of',\n igx_carousel_slide: 'slide',\n igx_carousel_previous_slide: 'previous slide',\n igx_carousel_next_slide: 'next slide'\n};\n","export interface IChipResourceStrings {\n igx_chip_remove?: string;\n igx_chip_select?: string;\n}\n\nexport const ChipResourceStringsEN: IChipResourceStrings = {\n igx_chip_remove: 'remove chip',\n igx_chip_select: 'select chip'\n};\n","export interface IComboResourceStrings {\n igx_combo_empty_message?: string;\n igx_combo_filter_search_placeholder?: string;\n igx_combo_addCustomValues_placeholder?: string;\n igx_combo_clearItems_placeholder?: string;\n igx_combo_aria_label_options?: string;\n igx_combo_aria_label_no_options?: string;\n}\n\nexport const ComboResourceStringsEN: IComboResourceStrings = {\n igx_combo_empty_message: 'The list is empty',\n igx_combo_filter_search_placeholder: 'Enter a Search Term',\n igx_combo_addCustomValues_placeholder: 'Add Item',\n igx_combo_clearItems_placeholder: 'Clear Selection',\n igx_combo_aria_label_options: 'Selected options',\n igx_combo_aria_label_no_options: 'No options selected'\n};\n","export interface IDatePickerResourceStrings {\n igx_date_picker_change_date?: string;\n igx_date_picker_choose_date?: string;\n}\n\nexport const DatePickerResourceStringsEN: IDatePickerResourceStrings = {\n igx_date_picker_change_date: 'Change Date',\n igx_date_picker_choose_date: 'Choose Date'\n};\n","export interface IDateRangePickerResourceStrings {\n igx_date_range_picker_date_separator?: string;\n igx_date_range_picker_done_button?: string;\n igx_date_range_picker_cancel_button?: string;\n igx_date_range_picker_last7Days?: string;\n igx_date_range_picker_currentMonth?: string;\n igx_date_range_picker_last30Days?: string;\n igx_date_range_picker_yearToDate?: string;\n}\n\nexport const DateRangePickerResourceStringsEN: IDateRangePickerResourceStrings = {\n igx_date_range_picker_date_separator: 'to',\n igx_date_range_picker_done_button: 'Done',\n igx_date_range_picker_cancel_button: 'Cancel',\n igx_date_range_picker_last7Days: 'Last 7 Days',\n igx_date_range_picker_currentMonth: 'Current Month',\n igx_date_range_picker_last30Days: 'Last 30 Days',\n igx_date_range_picker_yearToDate: 'Year to Date',\n};\n","export interface IGridResourceStrings {\n igx_grid_groupByArea_message?: string;\n igx_grid_groupByArea_select_message?: string;\n igx_grid_groupByArea_deselect_message?: string;\n igx_grid_emptyFilteredGrid_message?: string;\n igx_grid_emptyGrid_message?: string;\n igx_grid_filter?: string;\n igx_grid_filter_row_close?: string;\n igx_grid_filter_row_reset?: string;\n igx_grid_filter_row_placeholder?: string;\n igx_grid_filter_row_boolean_placeholder?: string;\n igx_grid_filter_row_date_placeholder?: string;\n igx_grid_filter_row_time_placeholder?: string;\n igx_grid_filter_operator_and?: string;\n igx_grid_complex_filter?: string;\n igx_grid_filter_operator_or?: string;\n igx_grid_filter_contains?: string;\n igx_grid_filter_doesNotContain?: string;\n igx_grid_filter_startsWith?: string;\n igx_grid_filter_endsWith?: string;\n igx_grid_filter_equals?: string;\n igx_grid_filter_doesNotEqual?: string;\n igx_grid_filter_empty?: string;\n igx_grid_filter_notEmpty?: string;\n igx_grid_filter_null?: string;\n igx_grid_filter_notNull?: string;\n igx_grid_filter_before?: string;\n igx_grid_filter_after?: string;\n igx_grid_filter_at?: string;\n igx_grid_filter_not_at?: string;\n igx_grid_filter_at_before?: string;\n igx_grid_filter_at_after?: string;\n igx_grid_filter_today?: string;\n igx_grid_filter_yesterday?: string;\n igx_grid_filter_thisMonth?: string;\n igx_grid_filter_lastMonth?: string;\n igx_grid_filter_nextMonth?: string;\n igx_grid_filter_thisYear?: string;\n igx_grid_filter_lastYear?: string;\n igx_grid_filter_nextYear?: string;\n igx_grid_filter_greaterThan?: string;\n igx_grid_filter_lessThan?: string;\n igx_grid_filter_greaterThanOrEqualTo?: string;\n igx_grid_filter_lessThanOrEqualTo?: string;\n igx_grid_filter_true?: string;\n igx_grid_filter_false?: string;\n igx_grid_filter_all?: string;\n igx_grid_filter_in?: string;\n igx_grid_filter_notIn?: string;\n igx_grid_filter_condition_placeholder?: string;\n igx_grid_summary_count?: string;\n igx_grid_summary_min?: string;\n igx_grid_summary_max?: string;\n igx_grid_summary_sum?: string;\n igx_grid_summary_average?: string;\n igx_grid_summary_earliest?: string;\n igx_grid_summary_latest?: string;\n igx_grid_excel_filter_moving_left?: string;\n igx_grid_excel_filter_moving_left_short?: string;\n igx_grid_excel_filter_moving_right?: string;\n igx_grid_excel_filter_moving_right_short?: string;\n igx_grid_excel_filter_moving_header?: string;\n igx_grid_excel_filter_sorting_asc?: string;\n igx_grid_excel_filter_sorting_asc_short?: string;\n igx_grid_excel_filter_sorting_desc?: string;\n igx_grid_excel_filter_sorting_desc_short?: string;\n igx_grid_excel_filter_sorting_header?: string;\n igx_grid_excel_filter_clear?: string;\n igx_grid_excel_custom_dialog_add?: string;\n igx_grid_excel_custom_dialog_clear?: string;\n igx_grid_excel_custom_dialog_header?: string;\n igx_grid_excel_cancel?: string;\n igx_grid_excel_apply?: string;\n igx_grid_excel_search_placeholder?: string;\n igx_grid_excel_select_all?: string;\n igx_grid_excel_select_all_search_results?: string;\n igx_grid_excel_add_to_filter?: string;\n igx_grid_excel_blanks?: string;\n igx_grid_excel_hide?: string;\n igx_grid_excel_show?: string;\n igx_grid_excel_pin?: string;\n igx_grid_excel_unpin?: string;\n igx_grid_excel_select?: string;\n igx_grid_excel_deselect?: string;\n igx_grid_excel_text_filter?: string;\n igx_grid_excel_number_filter?: string;\n igx_grid_excel_date_filter?: string;\n igx_grid_excel_boolean_filter?: string;\n igx_grid_excel_currency_filter?: string;\n igx_grid_excel_custom_filter?: string;\n igx_grid_excel_no_matches?: string;\n igx_grid_excel_matches_count?: string;\n igx_grid_advanced_filter_title?: string;\n igx_grid_advanced_filter_from_label?: string;\n igx_grid_advanced_filter_and_group?: string;\n igx_grid_advanced_filter_or_group?: string;\n igx_grid_advanced_filter_end_group?: string;\n igx_grid_advanced_filter_create_and_group?: string;\n igx_grid_advanced_filter_create_or_group?: string;\n igx_grid_advanced_filter_and_label?: string;\n igx_grid_advanced_filter_or_label?: string;\n igx_grid_advanced_filter_add_condition?: string;\n igx_grid_advanced_filter_add_condition_root?: string;\n igx_grid_advanced_filter_add_group?: string;\n igx_grid_advanced_filter_add_group_root?: string;\n igx_grid_advanced_filter_ungroup?: string;\n igx_grid_advanced_filter_delete?: string;\n igx_grid_advanced_filter_delete_filters?: string;\n igx_grid_advanced_filter_initial_text?: string;\n igx_grid_advanced_filter_column_placeholder?: string;\n igx_grid_advanced_filter_value_placeholder?: string;\n igx_grid_advanced_filter_query_value_placeholder?: string;\n igx_grid_advanced_filter_switch_group?: string;\n igx_grid_advanced_filter_dialog_title? : string;\n igx_grid_advanced_filter_dialog_message? : string;\n igx_grid_advanced_filter_dialog_checkbox_text? : string;\n igx_grid_advanced_filter_drop_ghost_text?: string;\n igx_grid_advanced_filter_select_entity?: string;\n igx_grid_advanced_filter_select_return_field_single?: string;\n igx_grid_pinned_row_indicator?: string;\n igx_grid_hiding_check_all_label?: string;\n igx_grid_hiding_uncheck_all_label?: string;\n igx_grid_pinning_check_all_label?: string;\n igx_grid_pinning_uncheck_all_label?: string;\n igx_grid_row_edit_btn_done?: string;\n igx_grid_row_edit_btn_cancel?: string;\n igx_grid_row_edit_text?: string;\n igx_grid_toolbar_actions_filter_prompt?: string;\n igx_grid_toolbar_pinning_button_tooltip?: string;\n igx_grid_toolbar_hiding_button_tooltip?: string;\n igx_grid_toolbar_pinning_title?: string;\n igx_grid_toolbar_hiding_title?: string;\n igx_grid_toolbar_advanced_filtering_button_tooltip?: string;\n igx_grid_toolbar_advanced_filtering_button_label?: string;\n igx_grid_toolbar_exporter_button_tooltip?: string;\n igx_grid_toolbar_exporter_button_label?: string;\n igx_grid_toolbar_exporter_excel_entry_text?: string;\n igx_grid_toolbar_exporter_csv_entry_text?: string;\n igx_grid_toolbar_exporter_pdf_entry_text?: string;\n igx_grid_snackbar_addrow_label?: string;\n igx_grid_snackbar_addrow_actiontext?: string;\n igx_grid_actions_edit_label?: string;\n igx_grid_actions_add_label?: string;\n igx_grid_add_row_label?: string;\n igx_grid_actions_add_child_label?: string;\n igx_grid_actions_delete_label?: string;\n igx_grid_actions_pin_label?: string;\n igx_grid_actions_unpin_label?: string;\n igx_grid_actions_jumpUp_label?: string;\n igx_grid_actions_jumpDown_label?: string;\n igx_grid_pivot_date_dimension_total?: string;\n igx_grid_pivot_aggregate_count?: string;\n igx_grid_pivot_aggregate_min?: string;\n igx_grid_pivot_aggregate_max?: string;\n igx_grid_pivot_aggregate_sum?: string;\n igx_grid_pivot_aggregate_avg?: string;\n igx_grid_pivot_aggregate_date_latest?: string;\n igx_grid_pivot_aggregate_date_earliest?: string;\n igx_grid_pivot_aggregate_time_latest?: string;\n igx_grid_pivot_aggregate_time_earliest?: string;\n igx_grid_pivot_empty_row_drop_area?: string;\n igx_grid_pivot_empty_column_drop_area?: string;\n igx_grid_pivot_empty_filter_drop_area?: string;\n igx_grid_pivot_empty_value_drop_area?: string;\n igx_grid_pivot_row_drop_chip?: string;\n igx_grid_pivot_column_drop_chip?: string;\n igx_grid_pivot_filter_drop_chip?: string;\n igx_grid_pivot_value_drop_chip?: string;\n igx_grid_pivot_empty_message?: string;\n igx_grid_pivot_selector_filters?: string;\n igx_grid_pivot_selector_rows?: string;\n igx_grid_pivot_selector_columns?: string;\n igx_grid_pivot_selector_values?: string;\n igx_grid_pivot_selector_panel_empty?: string;\n igx_grid_required_validation_error?: string;\n igx_grid_min_validation_error?: string;\n igx_grid_max_validation_error?: string;\n igx_grid_min_length_validation_error?: string;\n igx_grid_max_length_validation_error?: string;\n igx_grid_email_validation_error?: string;\n igx_grid_pattern_validation_error?: string;\n}\n\nexport const GridResourceStringsEN: IGridResourceStrings = {\n igx_grid_groupByArea_message: 'Drag a column header and drop it here to group by that column.',\n igx_grid_groupByArea_select_message: 'Select all rows in the group with field name {0} and value {1}.',\n igx_grid_groupByArea_deselect_message: 'Deselect all rows in the group with field name {0} and value {1}.',\n igx_grid_emptyFilteredGrid_message: 'No records found.',\n igx_grid_emptyGrid_message: 'Grid has no data.',\n igx_grid_filter: 'Filter',\n igx_grid_filter_row_close: 'Close',\n igx_grid_filter_row_reset: 'Reset',\n igx_grid_filter_row_placeholder: 'Add filter value',\n igx_grid_filter_row_boolean_placeholder: 'All',\n igx_grid_filter_row_date_placeholder: 'Pick up date',\n igx_grid_filter_row_time_placeholder: 'Pick up time',\n igx_grid_filter_operator_and: 'And',\n igx_grid_filter_operator_or: 'Or',\n igx_grid_complex_filter: 'Complex Filter',\n igx_grid_filter_contains: 'Contains',\n igx_grid_filter_doesNotContain: 'Does Not Contain',\n igx_grid_filter_startsWith: 'Starts With',\n igx_grid_filter_endsWith: 'Ends With',\n igx_grid_filter_equals: 'Equals',\n igx_grid_filter_doesNotEqual: 'Does Not Equal',\n igx_grid_filter_empty: 'Empty',\n igx_grid_filter_notEmpty: 'Not Empty',\n igx_grid_filter_null: 'Null',\n igx_grid_filter_notNull: 'Not Null',\n igx_grid_filter_before: 'Before',\n igx_grid_filter_after: 'After',\n igx_grid_filter_at: 'At',\n igx_grid_filter_not_at: 'Not At',\n igx_grid_filter_at_before: 'At or Before',\n igx_grid_filter_at_after: 'At or After',\n igx_grid_filter_today: 'Today',\n igx_grid_filter_yesterday: 'Yesterday',\n igx_grid_filter_thisMonth: 'This Month',\n igx_grid_filter_lastMonth: 'Last Month',\n igx_grid_filter_nextMonth: 'Next Month',\n igx_grid_filter_thisYear: 'This Year',\n igx_grid_filter_lastYear: 'Last Year',\n igx_grid_filter_nextYear: 'Next Year',\n igx_grid_filter_greaterThan: 'Greater Than',\n igx_grid_filter_lessThan: 'Less Than',\n igx_grid_filter_greaterThanOrEqualTo: 'Greater Than Or Equal To',\n igx_grid_filter_lessThanOrEqualTo: 'Less Than Or Equal To',\n igx_grid_filter_true: 'True',\n igx_grid_filter_false: 'False',\n igx_grid_filter_all: 'All',\n igx_grid_filter_condition_placeholder: 'Select filter',\n igx_grid_filter_in: 'In',\n igx_grid_filter_notIn: 'Not In',\n igx_grid_summary_count: 'Count',\n igx_grid_summary_min: 'Min',\n igx_grid_summary_max: 'Max',\n igx_grid_summary_sum: 'Sum',\n igx_grid_summary_average: 'Avg',\n igx_grid_summary_earliest: 'Earliest',\n igx_grid_summary_latest: 'Latest',\n igx_grid_excel_filter_moving_left: 'move left',\n igx_grid_excel_filter_moving_left_short: 'left',\n igx_grid_excel_filter_moving_right: 'move right',\n igx_grid_excel_filter_moving_right_short: 'right',\n igx_grid_excel_filter_moving_header: 'move',\n igx_grid_excel_filter_sorting_asc: 'ascending',\n igx_grid_excel_filter_sorting_asc_short: 'asc',\n igx_grid_excel_filter_sorting_desc: 'descending',\n igx_grid_excel_filter_sorting_desc_short: 'desc',\n igx_grid_excel_filter_sorting_header: 'sort',\n igx_grid_excel_filter_clear: 'Clear column filters',\n igx_grid_excel_custom_dialog_add: 'add filter',\n igx_grid_excel_custom_dialog_clear: 'Clear filter',\n igx_grid_excel_custom_dialog_header: 'Custom auto-filter on column: ',\n igx_grid_excel_cancel: 'Cancel',\n igx_grid_excel_apply: 'Apply',\n igx_grid_excel_search_placeholder: 'Search',\n igx_grid_excel_select_all: 'Select All',\n igx_grid_excel_select_all_search_results: 'Select all search results',\n igx_grid_excel_add_to_filter: 'Add current selection to filter',\n igx_grid_excel_blanks: '(Blanks)',\n igx_grid_excel_hide: 'Hide column',\n igx_grid_excel_show: 'Show column',\n igx_grid_excel_pin: 'Pin column',\n igx_grid_excel_unpin: 'Unpin column',\n igx_grid_excel_select: 'Select column',\n igx_grid_excel_deselect: 'Deselect column',\n igx_grid_excel_text_filter: 'Text filter',\n igx_grid_excel_number_filter: 'Number filter',\n igx_grid_excel_date_filter: 'Date filter',\n igx_grid_excel_boolean_filter: 'Boolean filter',\n igx_grid_excel_currency_filter: 'Currency filter',\n igx_grid_excel_custom_filter: 'Custom filter...',\n igx_grid_excel_no_matches: 'No matches',\n igx_grid_excel_matches_count: '{0} matches.',\n igx_grid_advanced_filter_title: 'Advanced Filtering',\n igx_grid_advanced_filter_from_label: 'From',\n igx_grid_advanced_filter_and_group: '\"And\" Group',\n igx_grid_advanced_filter_or_group: '\"Or\" Group',\n igx_grid_advanced_filter_end_group: 'End Group',\n igx_grid_advanced_filter_create_and_group: 'Create \"And\" Group',\n igx_grid_advanced_filter_create_or_group: 'Create \"Or\" Group',\n igx_grid_advanced_filter_and_label: 'and',\n igx_grid_advanced_filter_or_label: 'or',\n igx_grid_advanced_filter_switch_group: 'Switch to {0}',\n igx_grid_advanced_filter_add_condition: 'Add condition',\n igx_grid_advanced_filter_add_group: 'Add group',\n igx_grid_advanced_filter_add_condition_root: 'Condition',\n igx_grid_advanced_filter_add_group_root: 'Group',\n igx_grid_advanced_filter_ungroup: 'Ungroup',\n igx_grid_advanced_filter_delete: 'Delete',\n igx_grid_advanced_filter_delete_filters: 'Delete filters',\n igx_grid_advanced_filter_initial_text: 'Start with creating a group of conditions linked with \"And\" or \"Or\"',\n igx_grid_advanced_filter_column_placeholder: 'Select column',\n igx_grid_advanced_filter_value_placeholder: 'Value',\n igx_grid_advanced_filter_query_value_placeholder: 'Sub-query results',\n igx_grid_advanced_filter_select_entity: 'Select entity',\n igx_grid_advanced_filter_select_return_field_single: 'Select return field',\n igx_grid_advanced_filter_dialog_title: 'Confirmation',\n igx_grid_advanced_filter_dialog_message: 'By changing the entity, you will lose your current settings. Are you sure you want to do that?',\n igx_grid_advanced_filter_dialog_checkbox_text: 'Do not show this dialog again',\n igx_grid_advanced_filter_drop_ghost_text: 'Drop here to insert',\n igx_grid_pinned_row_indicator: 'Pinned',\n igx_grid_hiding_check_all_label: 'Show All',\n igx_grid_hiding_uncheck_all_label: 'Hide All',\n igx_grid_pinning_check_all_label: 'Pin All',\n igx_grid_pinning_uncheck_all_label: 'Unpin All',\n igx_grid_row_edit_btn_done: 'Done',\n igx_grid_row_edit_btn_cancel: 'Cancel',\n igx_grid_row_edit_text: 'You have {0} changes in this row and {1} hidden columns',\n igx_grid_toolbar_actions_filter_prompt: 'Filter columns list ...',\n igx_grid_toolbar_pinning_button_tooltip: 'Open column pinning dropdown',\n igx_grid_toolbar_hiding_button_tooltip: 'Open column hiding dropdown',\n igx_grid_toolbar_pinning_title: 'Pinned columns',\n igx_grid_toolbar_hiding_title: 'Visible columns',\n igx_grid_toolbar_advanced_filtering_button_tooltip: 'Open advanced filtering dialog',\n igx_grid_toolbar_advanced_filtering_button_label: 'Advanced filtering',\n igx_grid_toolbar_exporter_button_tooltip: 'Open exporter dropdown',\n igx_grid_toolbar_exporter_button_label: 'Export',\n igx_grid_toolbar_exporter_excel_entry_text: 'Export to Excel',\n igx_grid_toolbar_exporter_csv_entry_text: 'Export to CSV',\n igx_grid_toolbar_exporter_pdf_entry_text: 'Export to PDF',\n igx_grid_snackbar_addrow_label: 'Row added',\n igx_grid_snackbar_addrow_actiontext: 'SHOW',\n igx_grid_actions_edit_label: 'Edit',\n igx_grid_actions_add_label: 'Add',\n igx_grid_add_row_label: 'ADD ROW',\n igx_grid_actions_add_child_label: 'Add Child',\n igx_grid_actions_delete_label: 'Delete',\n igx_grid_actions_pin_label: 'Pin',\n igx_grid_actions_unpin_label: 'Unpin',\n igx_grid_actions_jumpUp_label: 'Jump up',\n igx_grid_actions_jumpDown_label: 'Jump down',\n igx_grid_pivot_date_dimension_total: 'All Periods',\n igx_grid_pivot_aggregate_count: 'Count',\n igx_grid_pivot_aggregate_min: 'Minimum',\n igx_grid_pivot_aggregate_max: 'Maximum',\n igx_grid_pivot_aggregate_sum: 'Sum',\n igx_grid_pivot_aggregate_avg: 'Average',\n igx_grid_pivot_aggregate_date_latest: 'Latest Date',\n igx_grid_pivot_aggregate_date_earliest: 'Earliest Date',\n igx_grid_pivot_aggregate_time_latest: 'Latest Time',\n igx_grid_pivot_aggregate_time_earliest: 'Earliest Time',\n igx_grid_pivot_empty_row_drop_area: 'Drop Row Fields here.',\n igx_grid_pivot_empty_column_drop_area: 'Drop Column Fields here.',\n igx_grid_pivot_empty_filter_drop_area: 'Drop Filter Fields here.',\n igx_grid_pivot_empty_value_drop_area: 'Drop Value Fields here.',\n igx_grid_pivot_row_drop_chip: 'Drop here to use as row',\n igx_grid_pivot_column_drop_chip: 'Drop here to use as column',\n igx_grid_pivot_filter_drop_chip: 'Drop here to use as filter',\n igx_grid_pivot_value_drop_chip: 'Drop here to use as value',\n igx_grid_pivot_empty_message: 'Pivot grid has no dimensions and values.',\n igx_grid_pivot_selector_filters: 'Filters',\n igx_grid_pivot_selector_rows: 'Rows',\n igx_grid_pivot_selector_columns: 'Columns',\n igx_grid_pivot_selector_values: 'Values',\n igx_grid_pivot_selector_panel_empty: 'Drop Items Here',\n igx_grid_required_validation_error: 'This field is required',\n igx_grid_min_validation_error: 'A value of at least {0} should be entered',\n igx_grid_max_validation_error: 'A value no more than {0} should be entered',\n igx_grid_min_length_validation_error: 'Entry should be at least {0} character(s) long',\n igx_grid_max_length_validation_error: 'Entry should be no more than {0} character(s) long',\n igx_grid_email_validation_error: 'A valid email address should be entered',\n igx_grid_pattern_validation_error: 'Entry does not match the required pattern'\n};\n","export 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: 'Browse',\n igx_input_file_placeholder: 'No file chosen',\n};\n","export interface IListResourceStrings {\n igx_list_no_items?: string;\n igx_list_loading?: string;\n}\n\nexport const ListResourceStringsEN: IListResourceStrings = {\n igx_list_no_items: 'There are no items in the list.',\n igx_list_loading: 'Loading data from the server...'\n};\n","export interface IPaginatorResourceStrings {\n igx_paginator_label?: string;\n igx_paginator_pager_text?: string;\n igx_paginator_first_page_button_text?: string;\n igx_paginator_previous_page_button_text?: string;\n igx_paginator_last_page_button_text?: string;\n igx_paginator_next_page_button_text?: string;\n}\n\nexport const PaginatorResourceStringsEN: IPaginatorResourceStrings = {\n igx_paginator_label: 'Items per page',\n igx_paginator_pager_text: 'of',\n igx_paginator_first_page_button_text: 'Go to first page',\n igx_paginator_previous_page_button_text: 'Previous page',\n igx_paginator_last_page_button_text: 'Go to last page',\n igx_paginator_next_page_button_text: 'Next page',\n};\n","export interface IQueryBuilderResourceStrings {\n igx_query_builder_date_placeholder?: string;\n igx_query_builder_time_placeholder?: string;\n igx_query_builder_datetime_placeholder?: string;\n igx_query_builder_filter_operator_and?: string;\n igx_query_builder_filter_operator_or?: string;\n igx_query_builder_filter_contains?: string;\n igx_query_builder_filter_doesNotContain?: string;\n igx_query_builder_filter_startsWith?: string;\n igx_query_builder_filter_endsWith?: string;\n igx_query_builder_filter_equals?: string;\n igx_query_builder_filter_doesNotEqual?: string;\n igx_query_builder_filter_empty?: string;\n igx_query_builder_filter_notEmpty?: string;\n igx_query_builder_filter_null?: string;\n igx_query_builder_filter_notNull?: string;\n igx_query_builder_filter_in?: string;\n igx_query_builder_filter_notIn?: string;\n igx_query_builder_filter_before?: string;\n igx_query_builder_filter_after?: string;\n igx_query_builder_filter_at?: string;\n igx_query_builder_filter_not_at?: string;\n igx_query_builder_filter_at_before?: string;\n igx_query_builder_filter_at_after?: string;\n igx_query_builder_filter_today?: string;\n igx_query_builder_filter_yesterday?: string;\n igx_query_builder_filter_thisMonth?: string;\n igx_query_builder_filter_lastMonth?: string;\n igx_query_builder_filter_nextMonth?: string;\n igx_query_builder_filter_thisYear?: string;\n igx_query_builder_filter_lastYear?: string;\n igx_query_builder_filter_nextYear?: string;\n igx_query_builder_filter_greaterThan?: string;\n igx_query_builder_filter_lessThan?: string;\n igx_query_builder_filter_greaterThanOrEqualTo?: string;\n igx_query_builder_filter_lessThanOrEqualTo?: string;\n igx_query_builder_filter_true?: string;\n igx_query_builder_filter_false?: string;\n igx_query_builder_filter_all?: string;\n igx_query_builder_from_label?: string;\n igx_query_builder_select_label?: string;\n igx_query_builder_where_label?: string;\n igx_query_builder_and_group?: string;\n igx_query_builder_or_group?: string;\n igx_query_builder_end_group?: string;\n igx_query_builder_and_label?: string;\n igx_query_builder_or_label?: string;\n igx_query_builder_switch_group?: string;\n igx_query_builder_add_condition?: string;\n igx_query_builder_add_group?: string;\n igx_query_builder_add_condition_root?: string;\n igx_query_builder_add_group_root?: string;\n igx_query_builder_ungroup?: string;\n igx_query_builder_delete?: string;\n igx_query_builder_delete_filters?: string;\n igx_query_builder_initial_text?: string;\n igx_query_builder_column_placeholder?: string;\n igx_query_builder_condition_placeholder?: string;\n igx_query_builder_value_placeholder?: string;\n igx_query_builder_query_value_placeholder?: string;\n igx_query_builder_all_fields?: string;\n igx_query_builder_details?: string;\n igx_query_builder_search?: string;\n igx_query_builder_select_all?: string;\n igx_query_builder_select_entity?: string;\n igx_query_builder_select_return_field_single?: string;\n igx_query_builder_select_return_fields?: string;\n igx_query_builder_dialog_title?: string;\n igx_query_builder_dialog_message?: string;\n igx_query_builder_dialog_checkbox_text?: string;\n igx_query_builder_dialog_cancel?: string;\n igx_query_builder_dialog_confirm?: string;\n igx_query_builder_drop_ghost_text?: string;\n}\n\nexport const QueryBuilderResourceStringsEN: IQueryBuilderResourceStrings = {\n igx_query_builder_date_placeholder: 'Select date',\n igx_query_builder_time_placeholder: 'Select time',\n igx_query_builder_datetime_placeholder: 'Select date & time',\n igx_query_builder_filter_operator_and: 'And',\n igx_query_builder_filter_operator_or: 'Or',\n igx_query_builder_filter_contains: 'Contains',\n igx_query_builder_filter_doesNotContain: 'Does Not Contain',\n igx_query_builder_filter_startsWith: 'Starts With',\n igx_query_builder_filter_endsWith: 'Ends With',\n igx_query_builder_filter_equals: 'Equals',\n igx_query_builder_filter_doesNotEqual: 'Does Not Equal',\n igx_query_builder_filter_empty: 'Empty',\n igx_query_builder_filter_notEmpty: 'Not Empty',\n igx_query_builder_filter_null: 'Null',\n igx_query_builder_filter_notNull: 'Not Null',\n igx_query_builder_filter_in: 'In',\n igx_query_builder_filter_notIn: 'Not In',\n igx_query_builder_filter_before: 'Before',\n igx_query_builder_filter_after: 'After',\n igx_query_builder_filter_at: 'At',\n igx_query_builder_filter_not_at: 'Not At',\n igx_query_builder_filter_at_before: 'At or Before',\n igx_query_builder_filter_at_after: 'At or After',\n igx_query_builder_filter_today: 'Today',\n igx_query_builder_filter_yesterday: 'Yesterday',\n igx_query_builder_filter_thisMonth: 'This Month',\n igx_query_builder_filter_lastMonth: 'Last Month',\n igx_query_builder_filter_nextMonth: 'Next Month',\n igx_query_builder_filter_thisYear: 'This Year',\n igx_query_builder_filter_lastYear: 'Last Year',\n igx_query_builder_filter_nextYear: 'Next Year',\n igx_query_builder_filter_greaterThan: 'Greater Than',\n igx_query_builder_filter_lessThan: 'Less Than',\n igx_query_builder_filter_greaterThanOrEqualTo: 'Greater Than Or Equal To',\n igx_query_builder_filter_lessThanOrEqualTo: 'Less Than Or Equal To',\n igx_query_builder_filter_true: 'True',\n igx_query_builder_filter_false: 'False',\n igx_query_builder_filter_all: 'All',\n igx_query_builder_from_label: 'From',\n igx_query_builder_select_label: 'Select',\n igx_query_builder_where_label: 'Where',\n igx_query_builder_and_group: '\"And\" Group',\n igx_query_builder_or_group: '\"Or\" Group',\n igx_query_builder_end_group: 'End Group',\n igx_query_builder_and_label: 'and',\n igx_query_builder_or_label: 'or',\n igx_query_builder_switch_group: 'Switch to {0}',\n igx_query_builder_add_condition: 'Add condition',\n igx_query_builder_add_group: 'Add group',\n igx_query_builder_add_condition_root: 'Condition',\n igx_query_builder_add_group_root: 'Group',\n igx_query_builder_ungroup: 'Ungroup',\n igx_query_builder_delete: 'Delete',\n igx_query_builder_delete_filters: 'Delete filters',\n igx_query_builder_initial_text: 'Start with creating a group of conditions linked with \"And\" or \"Or\"',\n igx_query_builder_column_placeholder: 'Select column',\n igx_query_builder_condition_placeholder: 'Select filter',\n igx_query_builder_value_placeholder: 'Value',\n igx_query_builder_query_value_placeholder: 'Sub-query results',\n igx_query_builder_all_fields: 'All fields',\n igx_query_builder_details: 'Details',\n igx_query_builder_search: 'Search',\n igx_query_builder_select_all: 'Select All',\n igx_query_builder_select_entity: 'Select entity',\n igx_query_builder_select_return_field_single: 'Select return field',\n igx_query_builder_select_return_fields: 'Select return fields',\n igx_query_builder_dialog_title: 'Confirmation',\n igx_query_builder_dialog_message: 'By changing the entity, you will lose your current settings. Are you sure you want to do that?',\n igx_query_builder_dialog_checkbox_text: 'Do not show this dialog again',\n igx_query_builder_dialog_cancel: 'Cancel',\n igx_query_builder_dialog_confirm: 'Confirm',\n igx_query_builder_drop_ghost_text: 'Drop here to insert'\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';\n\nexport interface IResourceStrings extends IGridResourceStrings, ITimePickerResourceStrings, ICalendarResourceStrings,\n ICarouselResourceStrings, IChipResourceStrings, IComboResourceStrings, IInputResourceStrings, IDatePickerResourceStrings,\n IDateRangePickerResourceStrings, IListResourceStrings, IPaginatorResourceStrings, ITreeResourceStrings,\n IActionStripResourceStrings, IQueryBuilderResourceStrings, IBannerResourceStrings { }\n\nexport class igxI18N {\n private static _instance: igxI18N;\n\n private _currentResourceStrings: IResourceStrings = { };\n\n private constructor() { }\n\n public static instance() {\n return this._instance || (this._instance = new this());\n }\n\n /**\n * Changes the resource strings for all components in the application\n * ```\n * @param resourceStrings to be applied\n */\n public changei18n(resourceStrings: IResourceStrings) {\n for (const key of Object.keys(resourceStrings)) {\n this._currentResourceStrings[key] = resourceStrings[key];\n }\n }\n\n public getCurrentResourceStrings(en: IResourceStrings): IResourceStrings {\n for (const key of Object.keys(en)) {\n if (!this._currentResourceStrings[key]) {\n this._currentResourceStrings[key] = en[key];\n }\n }\n return this._currentResourceStrings;\n }\n}\n\nexport function getCurrentResourceStrings(en: IResourceStrings) {\n return igxI18N.instance().getCurrentResourceStrings(en);\n}\n\nexport function changei18n(resourceStrings: IResourceStrings) {\n igxI18N.instance().changei18n(resourceStrings);\n}\n","export interface ITimePickerResourceStrings {\n igx_time_picker_ok?: string;\n igx_time_picker_cancel?: string;\n igx_time_picker_change_time?: string;\n igx_time_picker_choose_time?: string;\n}\n\nexport const TimePickerResourceStringsEN: ITimePickerResourceStrings = {\n igx_time_picker_ok: 'OK',\n igx_time_picker_cancel: 'Cancel',\n igx_time_picker_change_time: 'Change Time',\n igx_time_picker_choose_time: 'Choose Time'\n};\n","export interface ITreeResourceStrings {\n igx_expand?: string;\n igx_collapse?: string;\n}\n\nexport const TreeResourceStringsEN: ITreeResourceStrings = {\n igx_expand: 'Expand',\n igx_collapse: 'Collapse',\n};\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';\n\n// Services\nexport * from './services/public_api';\n\n// Performance service\nexport * from './performance.service';\n\n// i18n\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":["_formatDate","getDOM","formatDate"],"mappings":"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"}
|
|
1
|
+
{"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/setImmediate.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/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/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/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","/* Copyright (c) 2014-2020 Denis Pushkarev\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE\n */\n\n// Note: Originally copied from core-js-pure package and modified. (https://github.com/zloirock/core-js)\n\nconst queue = {};\nlet counter = 0;\nlet eventListenerAdded = false;\n\ndeclare global {\n interface Window {\n setImmediate: any;\n clearImmediate: any;\n }\n}\n\nconst run = (id) => {\n if (queue.hasOwnProperty(id)) {\n const fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nconst listener = (event) => run(event.data);\n\n// Use function instead of arrow function to workaround an issue in codesandbox\nexport function setImmediate(cb: () => void, ...args) {\n if (window.setImmediate) {\n return window.setImmediate(cb);\n }\n\n if (!eventListenerAdded) {\n eventListenerAdded = true;\n window.addEventListener('message', listener, false);\n }\n\n queue[++counter] = () => {\n cb.apply(undefined, args);\n };\n\n const windowLocation = window.location;\n window.postMessage(counter + '', windowLocation.protocol + '//' + windowLocation.host);\n\n return counter;\n}\n\nexport function clearImmediate(id: any) {\n if (window.clearImmediate) {\n return window.clearImmediate(id);\n }\n\n delete queue[id];\n}\n","import { CurrencyPipe, formatDate as _formatDate, isPlatformBrowser } from '@angular/common';\nimport { Injectable, InjectionToken, PLATFORM_ID, inject } from '@angular/core';\nimport { mergeWith } from 'lodash-es';\nimport { NEVER, Observable } from 'rxjs';\nimport { setImmediate } from './setImmediate';\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 HORIZONTAL_NAV_KEYS = new Set(['arrowleft', 'left', 'arrowright', 'right', 'home', 'end']);\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]);\nexport const ACCORDION_NAVIGATION_KEYS = new Set('up down arrowup arrowdown home end'.split(' '));\nexport const ROW_EXPAND_KEYS = new Set('right down arrowright arrowdown'.split(' '));\nexport const ROW_COLLAPSE_KEYS = new Set('left up arrowleft arrowup'.split(' '));\nexport const ROW_ADD_KEYS = new Set(['+', 'add', '≠', '±', '=']);\nexport const SUPPORTED_KEYS = new Set([...Array.from(NAVIGATION_KEYS),\n...Array.from(ROW_ADD_KEYS), 'enter', 'f2', 'escape', 'esc', 'pagedown', 'pageup']);\nexport const HEADER_KEYS = new Set([...Array.from(NAVIGATION_KEYS), 'escape', 'esc', 'l',\n /** This symbol corresponds to the Alt + L combination under MAC. */\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 yieldingLoop = (count: number, chunkSize: number, callback: (index: number) => void, done: () => void) => {\n let i = 0;\n const chunk = () => {\n const end = Math.min(i + chunkSize, count);\n for (; i < end; ++i) {\n callback(i);\n }\n if (i < count) {\n setImmediate(chunk);\n } else {\n done();\n }\n };\n chunk();\n};\n\nexport const isConstructor = (ref: any) => typeof ref === 'function' && Boolean(ref.prototype) && Boolean(ref.prototype.constructor);\n\n/**\n * Similar to Angular's formatDate. However it will not throw on `undefined | null | ''` instead\n * coalescing to an empty string.\n */\nexport const formatDate = (value: string | number | Date, format: string, locale: string, timezone?: string): string => {\n if (value === null || value === undefined || value === '') {\n return '';\n }\n return _formatDate(value, format, locale, timezone);\n};\n\nexport const formatCurrency = new CurrencyPipe(undefined).transform;\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 /**\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 { formatDate, FormatWidth, getLocaleDateFormat } from '@angular/common';\nimport { ValidationErrors } from '@angular/forms';\nimport { isDate } from '../../core/utils';\nimport { GridColumnDataType } from '../../data-operations/grid-types';\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 public static readonly DEFAULT_INPUT_FORMAT = 'MM/dd/yyyy';\n public static readonly DEFAULT_TIME_INPUT_FORMAT = 'hh:mm tt';\n private static readonly SEPARATOR = 'literal';\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, locale?: string): DatePartInfo[] {\n const format = mask || DateTimeUtil.getDefaultInputFormat(locale);\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, dataType: GridColumnDataType = GridColumnDataType.Date): string {\n locale = locale || DateTimeUtil.DEFAULT_LOCALE;\n if (!Intl || !Intl.DateTimeFormat || !Intl.DateTimeFormat.prototype.formatToParts) {\n // TODO: fallback with Intl.format for IE?\n return DateTimeUtil.DEFAULT_INPUT_FORMAT;\n }\n const parts = DateTimeUtil.getDefaultLocaleMask(locale, dataType);\n parts.forEach(p => {\n if (p.type !== DatePart.Year && p.type !== DateTimeUtil.SEPARATOR && p.type !== DatePart.AmPm) {\n p.formatType = FormatDesc.TwoDigits;\n }\n });\n\n return DateTimeUtil.getMask(parts);\n }\n\n /** Tries to format a date using Angular's DatePipe. Fallbacks to `Intl` if no locale settings have been loaded. */\n public static formatDate(value: number | Date, format: string, locale: string, timezone?: string): string {\n let formattedDate: string;\n try {\n formattedDate = formatDate(value, format, locale, timezone).normalize(\"NFKD\");\n } catch {\n DateTimeUtil.logMissingLocaleSettings(locale);\n const formatter = new Intl.DateTimeFormat(locale);\n formattedDate = formatter.format(value);\n }\n\n return formattedDate;\n }\n\n /**\n * Returns the date format based on a provided locale.\n * Supports Angular's DatePipe format options such as `shortDate`, `longDate`.\n */\n public static getLocaleDateFormat(locale: string, displayFormat?: string): string {\n const formatKeys = Object.keys(FormatWidth) as (keyof FormatWidth)[];\n const targetKey = formatKeys.find(k => k.toLowerCase() === displayFormat?.toLowerCase().replace('date', ''));\n if (!targetKey) {\n // if displayFormat is not shortDate, longDate, etc.\n // or if it is not set by the user\n return displayFormat;\n }\n let format: string;\n try {\n format = getLocaleDateFormat(locale, FormatWidth[targetKey]);\n } catch {\n DateTimeUtil.logMissingLocaleSettings(locale);\n format = DateTimeUtil.getDefaultInputFormat(locale);\n }\n\n return format;\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): boolean {\n const dateParts = DateTimeUtil.parseDateTimeFormat(inputFormat);\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 = 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, format: string): string {\n let resultFormat = '';\n if (!format) {\n return resultFormat;\n }\n if (predefinedNumericFormats.has(format)) {\n resultFormat = DateTimeUtil.getLocaleInputFormatFromParts(locale, predefinedNumericFormats.get(format));\n\n } else if (DateTimeUtil.isFormatNumeric(locale, format)) {\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, 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 const formatter = new Intl.DateTimeFormat(locale, options);\n const dateStruct = DateTimeUtil.getDateStructFromParts(formatter.formatToParts(new Date()), formatter);\n DateTimeUtil.fillDatePartsPositions(dateStruct);\n return DateTimeUtil.getMask(dateStruct);\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 getMask(dateStruct: any[]): string {\n const mask = [];\n for (const part of dateStruct) {\n if (part.formatType === FormatDesc.Numeric) {\n switch (part.type) {\n case DateParts.Day:\n mask.push('d');\n break;\n case DateParts.Month:\n mask.push('M');\n break;\n case DateParts.Year:\n mask.push('yyyy');\n break;\n case DateParts.Hour:\n mask.push(part.hour12 ? 'h' : 'H');\n break;\n case DateParts.Minute:\n mask.push('m');\n break;\n case DateParts.Second:\n mask.push('s');\n break;\n }\n } else if (part.formatType === FormatDesc.TwoDigits) {\n switch (part.type) {\n case DateParts.Day:\n mask.push('dd');\n break;\n case DateParts.Month:\n mask.push('MM');\n break;\n case DateParts.Year:\n mask.push('yy');\n break;\n case DateParts.Hour:\n mask.push(part.hour12 ? 'hh' : 'HH');\n break;\n case DateParts.Minute:\n mask.push('mm');\n break;\n case DateParts.Second:\n mask.push('ss');\n break;\n }\n }\n\n if (part.type === DateParts.AmPm) {\n mask.push('tt');\n }\n\n if (part.type === DateTimeUtil.SEPARATOR) {\n mask.push(part.value);\n }\n }\n\n return mask.join('');\n }\n\n private static logMissingLocaleSettings(locale: string): void {\n console.warn(`Missing locale data for the locale ${locale}. Please refer to https://angular.io/guide/i18n#i18n-pipes`);\n console.warn('Using default browser locale settings.');\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) {\n const dateOptions = {\n day: FormatDesc.TwoDigits,\n month: FormatDesc.TwoDigits,\n year: FormatDesc.Numeric\n };\n const timeOptions = {\n hour: FormatDesc.TwoDigits,\n minute: FormatDesc.TwoDigits\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: FormatDesc.TwoDigits\n };\n default:\n return { };\n }\n }\n\n private static getDefaultLocaleMask(locale: string, dataType: GridColumnDataType = GridColumnDataType.Date) {\n const options = DateTimeUtil.getFormatOptions(dataType);\n const formatter = new Intl.DateTimeFormat(locale, options);\n const formatToParts = formatter.formatToParts(new Date());\n const dateStruct = DateTimeUtil.getDateStructFromParts(formatToParts, formatter);\n DateTimeUtil.fillDatePartsPositions(dateStruct);\n return dateStruct;\n }\n\n private static getDateStructFromParts(parts: Intl.DateTimeFormatPart[], formatter: Intl.DateTimeFormat): any[] {\n const dateStruct = [];\n for (const part of parts) {\n if (part.type === DateTimeUtil.SEPARATOR) {\n dateStruct.push({\n type: DateTimeUtil.SEPARATOR,\n value: part.value\n });\n } else {\n dateStruct.push({\n type: part.type\n });\n }\n }\n const formatterOptions = formatter.resolvedOptions();\n for (const part of dateStruct) {\n switch (part.type) {\n case DateParts.Day: {\n part.formatType = formatterOptions.day;\n break;\n }\n case DateParts.Month: {\n part.formatType = formatterOptions.month;\n break;\n }\n case DateParts.Year: {\n part.formatType = formatterOptions.year;\n break;\n }\n case DateParts.Hour: {\n part.formatType = formatterOptions.hour;\n if (formatterOptions.hour12) {\n part.hour12 = true;\n }\n break;\n }\n case DateParts.Minute: {\n part.formatType = formatterOptions.minute;\n break;\n }\n case DateParts.Second: {\n part.formatType = formatterOptions.second;\n break;\n }\n case DateParts.AmPm: {\n part.formatType = formatterOptions.dayPeriod;\n break;\n }\n }\n }\n return dateStruct;\n }\n\n private static fillDatePartsPositions(dateArray: any[]): void {\n let currentPos = 0;\n\n for (const part of dateArray) {\n // Day|Month|Hour|Minute|Second|AmPm part positions\n if (part.type === DateParts.Day || part.type === DateParts.Month ||\n part.type === DateParts.Hour || part.type === DateParts.Minute || part.type === DateParts.Second ||\n part.type === DateParts.AmPm\n ) {\n // Offset 2 positions for number\n part.position = [currentPos, currentPos + 2];\n currentPos += 2;\n } else if (part.type === DateParts.Year) {\n // Year part positions\n switch (part.formatType) {\n case FormatDesc.Numeric: {\n // Offset 4 positions for full year\n part.position = [currentPos, currentPos + 4];\n currentPos += 4;\n break;\n }\n case FormatDesc.TwoDigits: {\n // Offset 2 positions for short year\n part.position = [currentPos, currentPos + 2];\n currentPos += 2;\n break;\n }\n }\n } else if (part.type === DateTimeUtil.SEPARATOR) {\n // Separator positions\n part.position = [currentPos, currentPos + 1];\n currentPos++;\n }\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';\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 = new Intl.DateTimeFormat(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/**\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 */\nfunction 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 ) {\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, formatDate, formatCurrency, 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 { formatNumber, formatPercent, getLocaleCurrencyCode } from '@angular/common';\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\n switch (column.dataType) {\n case GridColumnDataType.Date:\n case GridColumnDataType.DateTime:\n case GridColumnDataType.Time:\n return formatDate(value, format, locale, timezone);\n case GridColumnDataType.Currency:\n return formatCurrency(value, currencyCode || getLocaleCurrencyCode(locale), display, digitsInfo, locale);\n case GridColumnDataType.Number:\n return formatNumber(value, locale, digitsInfo);\n case GridColumnDataType.Percent:\n return 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 { 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 * 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\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 } 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 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 contentElement.classList.add('igx-overlay__content--relative');\n contentElement.parentElement.classList.add('igx-overlay__wrapper--flex-container');\n this.setPosition(contentElement);\n }\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 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 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 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 }\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","export interface IActionStripResourceStrings {\n igx_action_strip_button_more_title?: string;\n}\n\nexport const ActionStripResourceStringsEN: IActionStripResourceStrings = {\n igx_action_strip_button_more_title: 'More'\n};\n","export interface IBannerResourceStrings {\n igx_banner_button_dismiss?: string;\n}\n\nexport const BannerResourceStringsEN: IBannerResourceStrings = {\n igx_banner_button_dismiss: 'Dismiss'\n};\n","export interface ICalendarResourceStrings {\n igx_calendar_previous_month?: string;\n igx_calendar_next_month?: string;\n igx_calendar_previous_year?: string;\n igx_calendar_next_year?: string;\n igx_calendar_previous_years?: string;\n igx_calendar_next_years?: string;\n igx_calendar_select_date?: string;\n igx_calendar_select_month?: string;\n igx_calendar_select_year?: string;\n igx_calendar_range_start?: string;\n igx_calendar_range_end?: string;\n igx_calendar_range_label_start?: string;\n igx_calendar_range_label_end?: string;\n igx_calendar_range_placeholder?: string;\n igx_calendar_selected_month_is?: string;\n igx_calendar_first_picker_of?: string;\n igx_calendar_multi_selection?: string;\n igx_calendar_range_selection?: string;\n igx_calendar_single_selection?: string;\n igx_calendar_singular_multi_selection?: string;\n igx_calendar_singular_range_selection?: string;\n igx_calendar_singular_single_selection?: string;\n}\n\nexport const CalendarResourceStringsEN: ICalendarResourceStrings = {\n igx_calendar_previous_month: 'Previous Month',\n igx_calendar_next_month: 'Next Month',\n igx_calendar_previous_year: 'Previous Year',\n igx_calendar_next_year: 'Next Year',\n igx_calendar_previous_years: 'Previous {0} Years',\n igx_calendar_next_years: 'Next {0} Years',\n igx_calendar_select_date: 'Select Date',\n igx_calendar_select_month: 'Select Month',\n igx_calendar_select_year: 'Select Year',\n igx_calendar_range_start: 'Range start',\n igx_calendar_range_end: 'Range end',\n igx_calendar_range_label_start: 'Start',\n igx_calendar_range_label_end: 'End',\n igx_calendar_range_placeholder: 'Select Range',\n igx_calendar_selected_month_is: 'Selected month is ',\n igx_calendar_first_picker_of: 'First picker of {0} starts from',\n igx_calendar_multi_selection: 'Multi selection calendar with {0} date pickers',\n igx_calendar_range_selection: 'Range selection calendar with {0} date pickers',\n igx_calendar_single_selection: 'Calendar with {0} date pickers',\n igx_calendar_singular_multi_selection: 'Multi selection calendar',\n igx_calendar_singular_range_selection: 'Range selection calendar',\n igx_calendar_singular_single_selection: 'Calendar',\n};\n","export interface ICarouselResourceStrings {\n igx_carousel_of?: string;\n igx_carousel_slide?: string;\n igx_carousel_previous_slide?: string;\n igx_carousel_next_slide?: string;\n}\n\nexport const CarouselResourceStringsEN: ICarouselResourceStrings = {\n igx_carousel_of: 'of',\n igx_carousel_slide: 'slide',\n igx_carousel_previous_slide: 'previous slide',\n igx_carousel_next_slide: 'next slide'\n};\n","export interface IChipResourceStrings {\n igx_chip_remove?: string;\n igx_chip_select?: string;\n}\n\nexport const ChipResourceStringsEN: IChipResourceStrings = {\n igx_chip_remove: 'remove chip',\n igx_chip_select: 'select chip'\n};\n","export interface IComboResourceStrings {\n igx_combo_empty_message?: string;\n igx_combo_filter_search_placeholder?: string;\n igx_combo_addCustomValues_placeholder?: string;\n igx_combo_clearItems_placeholder?: string;\n igx_combo_aria_label_options?: string;\n igx_combo_aria_label_no_options?: string;\n}\n\nexport const ComboResourceStringsEN: IComboResourceStrings = {\n igx_combo_empty_message: 'The list is empty',\n igx_combo_filter_search_placeholder: 'Enter a Search Term',\n igx_combo_addCustomValues_placeholder: 'Add Item',\n igx_combo_clearItems_placeholder: 'Clear Selection',\n igx_combo_aria_label_options: 'Selected options',\n igx_combo_aria_label_no_options: 'No options selected'\n};\n","export interface IDatePickerResourceStrings {\n igx_date_picker_change_date?: string;\n igx_date_picker_choose_date?: string;\n}\n\nexport const DatePickerResourceStringsEN: IDatePickerResourceStrings = {\n igx_date_picker_change_date: 'Change Date',\n igx_date_picker_choose_date: 'Choose Date'\n};\n","export interface IDateRangePickerResourceStrings {\n igx_date_range_picker_date_separator?: string;\n igx_date_range_picker_done_button?: string;\n igx_date_range_picker_cancel_button?: string;\n igx_date_range_picker_last7Days?: string;\n igx_date_range_picker_currentMonth?: string;\n igx_date_range_picker_last30Days?: string;\n igx_date_range_picker_yearToDate?: string;\n}\n\nexport const DateRangePickerResourceStringsEN: IDateRangePickerResourceStrings = {\n igx_date_range_picker_date_separator: 'to',\n igx_date_range_picker_done_button: 'Done',\n igx_date_range_picker_cancel_button: 'Cancel',\n igx_date_range_picker_last7Days: 'Last 7 Days',\n igx_date_range_picker_currentMonth: 'Current Month',\n igx_date_range_picker_last30Days: 'Last 30 Days',\n igx_date_range_picker_yearToDate: 'Year to Date',\n};\n","export interface IGridResourceStrings {\n igx_grid_groupByArea_message?: string;\n igx_grid_groupByArea_select_message?: string;\n igx_grid_groupByArea_deselect_message?: string;\n igx_grid_emptyFilteredGrid_message?: string;\n igx_grid_emptyGrid_message?: string;\n igx_grid_filter?: string;\n igx_grid_filter_row_close?: string;\n igx_grid_filter_row_reset?: string;\n igx_grid_filter_row_placeholder?: string;\n igx_grid_filter_row_boolean_placeholder?: string;\n igx_grid_filter_row_date_placeholder?: string;\n igx_grid_filter_row_time_placeholder?: string;\n igx_grid_filter_operator_and?: string;\n igx_grid_complex_filter?: string;\n igx_grid_filter_operator_or?: string;\n igx_grid_filter_contains?: string;\n igx_grid_filter_doesNotContain?: string;\n igx_grid_filter_startsWith?: string;\n igx_grid_filter_endsWith?: string;\n igx_grid_filter_equals?: string;\n igx_grid_filter_doesNotEqual?: string;\n igx_grid_filter_empty?: string;\n igx_grid_filter_notEmpty?: string;\n igx_grid_filter_null?: string;\n igx_grid_filter_notNull?: string;\n igx_grid_filter_before?: string;\n igx_grid_filter_after?: string;\n igx_grid_filter_at?: string;\n igx_grid_filter_not_at?: string;\n igx_grid_filter_at_before?: string;\n igx_grid_filter_at_after?: string;\n igx_grid_filter_today?: string;\n igx_grid_filter_yesterday?: string;\n igx_grid_filter_thisMonth?: string;\n igx_grid_filter_lastMonth?: string;\n igx_grid_filter_nextMonth?: string;\n igx_grid_filter_thisYear?: string;\n igx_grid_filter_lastYear?: string;\n igx_grid_filter_nextYear?: string;\n igx_grid_filter_greaterThan?: string;\n igx_grid_filter_lessThan?: string;\n igx_grid_filter_greaterThanOrEqualTo?: string;\n igx_grid_filter_lessThanOrEqualTo?: string;\n igx_grid_filter_true?: string;\n igx_grid_filter_false?: string;\n igx_grid_filter_all?: string;\n igx_grid_filter_in?: string;\n igx_grid_filter_notIn?: string;\n igx_grid_filter_condition_placeholder?: string;\n igx_grid_summary_count?: string;\n igx_grid_summary_min?: string;\n igx_grid_summary_max?: string;\n igx_grid_summary_sum?: string;\n igx_grid_summary_average?: string;\n igx_grid_summary_earliest?: string;\n igx_grid_summary_latest?: string;\n igx_grid_excel_filter_moving_left?: string;\n igx_grid_excel_filter_moving_left_short?: string;\n igx_grid_excel_filter_moving_right?: string;\n igx_grid_excel_filter_moving_right_short?: string;\n igx_grid_excel_filter_moving_header?: string;\n igx_grid_excel_filter_sorting_asc?: string;\n igx_grid_excel_filter_sorting_asc_short?: string;\n igx_grid_excel_filter_sorting_desc?: string;\n igx_grid_excel_filter_sorting_desc_short?: string;\n igx_grid_excel_filter_sorting_header?: string;\n igx_grid_excel_filter_clear?: string;\n igx_grid_excel_custom_dialog_add?: string;\n igx_grid_excel_custom_dialog_clear?: string;\n igx_grid_excel_custom_dialog_header?: string;\n igx_grid_excel_cancel?: string;\n igx_grid_excel_apply?: string;\n igx_grid_excel_search_placeholder?: string;\n igx_grid_excel_select_all?: string;\n igx_grid_excel_select_all_search_results?: string;\n igx_grid_excel_add_to_filter?: string;\n igx_grid_excel_blanks?: string;\n igx_grid_excel_hide?: string;\n igx_grid_excel_show?: string;\n igx_grid_excel_pin?: string;\n igx_grid_excel_unpin?: string;\n igx_grid_excel_select?: string;\n igx_grid_excel_deselect?: string;\n igx_grid_excel_text_filter?: string;\n igx_grid_excel_number_filter?: string;\n igx_grid_excel_date_filter?: string;\n igx_grid_excel_boolean_filter?: string;\n igx_grid_excel_currency_filter?: string;\n igx_grid_excel_custom_filter?: string;\n igx_grid_excel_no_matches?: string;\n igx_grid_excel_matches_count?: string;\n igx_grid_advanced_filter_title?: string;\n igx_grid_advanced_filter_from_label?: string;\n igx_grid_advanced_filter_and_group?: string;\n igx_grid_advanced_filter_or_group?: string;\n igx_grid_advanced_filter_end_group?: string;\n igx_grid_advanced_filter_create_and_group?: string;\n igx_grid_advanced_filter_create_or_group?: string;\n igx_grid_advanced_filter_and_label?: string;\n igx_grid_advanced_filter_or_label?: string;\n igx_grid_advanced_filter_add_condition?: string;\n igx_grid_advanced_filter_add_condition_root?: string;\n igx_grid_advanced_filter_add_group?: string;\n igx_grid_advanced_filter_add_group_root?: string;\n igx_grid_advanced_filter_ungroup?: string;\n igx_grid_advanced_filter_delete?: string;\n igx_grid_advanced_filter_delete_filters?: string;\n igx_grid_advanced_filter_initial_text?: string;\n igx_grid_advanced_filter_column_placeholder?: string;\n igx_grid_advanced_filter_value_placeholder?: string;\n igx_grid_advanced_filter_query_value_placeholder?: string;\n igx_grid_advanced_filter_switch_group?: string;\n igx_grid_advanced_filter_dialog_title? : string;\n igx_grid_advanced_filter_dialog_message? : string;\n igx_grid_advanced_filter_dialog_checkbox_text? : string;\n igx_grid_advanced_filter_drop_ghost_text?: string;\n igx_grid_advanced_filter_select_entity?: string;\n igx_grid_advanced_filter_select_return_field_single?: string;\n igx_grid_pinned_row_indicator?: string;\n igx_grid_hiding_check_all_label?: string;\n igx_grid_hiding_uncheck_all_label?: string;\n igx_grid_pinning_check_all_label?: string;\n igx_grid_pinning_uncheck_all_label?: string;\n igx_grid_row_edit_btn_done?: string;\n igx_grid_row_edit_btn_cancel?: string;\n igx_grid_row_edit_text?: string;\n igx_grid_toolbar_actions_filter_prompt?: string;\n igx_grid_toolbar_pinning_button_tooltip?: string;\n igx_grid_toolbar_hiding_button_tooltip?: string;\n igx_grid_toolbar_pinning_title?: string;\n igx_grid_toolbar_hiding_title?: string;\n igx_grid_toolbar_advanced_filtering_button_tooltip?: string;\n igx_grid_toolbar_advanced_filtering_button_label?: string;\n igx_grid_toolbar_exporter_button_tooltip?: string;\n igx_grid_toolbar_exporter_button_label?: string;\n igx_grid_toolbar_exporter_excel_entry_text?: string;\n igx_grid_toolbar_exporter_csv_entry_text?: string;\n igx_grid_toolbar_exporter_pdf_entry_text?: string;\n igx_grid_snackbar_addrow_label?: string;\n igx_grid_snackbar_addrow_actiontext?: string;\n igx_grid_actions_edit_label?: string;\n igx_grid_actions_add_label?: string;\n igx_grid_add_row_label?: string;\n igx_grid_actions_add_child_label?: string;\n igx_grid_actions_delete_label?: string;\n igx_grid_actions_pin_label?: string;\n igx_grid_actions_unpin_label?: string;\n igx_grid_actions_jumpUp_label?: string;\n igx_grid_actions_jumpDown_label?: string;\n igx_grid_pivot_date_dimension_total?: string;\n igx_grid_pivot_aggregate_count?: string;\n igx_grid_pivot_aggregate_min?: string;\n igx_grid_pivot_aggregate_max?: string;\n igx_grid_pivot_aggregate_sum?: string;\n igx_grid_pivot_aggregate_avg?: string;\n igx_grid_pivot_aggregate_date_latest?: string;\n igx_grid_pivot_aggregate_date_earliest?: string;\n igx_grid_pivot_aggregate_time_latest?: string;\n igx_grid_pivot_aggregate_time_earliest?: string;\n igx_grid_pivot_empty_row_drop_area?: string;\n igx_grid_pivot_empty_column_drop_area?: string;\n igx_grid_pivot_empty_filter_drop_area?: string;\n igx_grid_pivot_empty_value_drop_area?: string;\n igx_grid_pivot_row_drop_chip?: string;\n igx_grid_pivot_column_drop_chip?: string;\n igx_grid_pivot_filter_drop_chip?: string;\n igx_grid_pivot_value_drop_chip?: string;\n igx_grid_pivot_empty_message?: string;\n igx_grid_pivot_selector_filters?: string;\n igx_grid_pivot_selector_rows?: string;\n igx_grid_pivot_selector_columns?: string;\n igx_grid_pivot_selector_values?: string;\n igx_grid_pivot_selector_panel_empty?: string;\n igx_grid_required_validation_error?: string;\n igx_grid_min_validation_error?: string;\n igx_grid_max_validation_error?: string;\n igx_grid_min_length_validation_error?: string;\n igx_grid_max_length_validation_error?: string;\n igx_grid_email_validation_error?: string;\n igx_grid_pattern_validation_error?: string;\n}\n\nexport const GridResourceStringsEN: IGridResourceStrings = {\n igx_grid_groupByArea_message: 'Drag a column header and drop it here to group by that column.',\n igx_grid_groupByArea_select_message: 'Select all rows in the group with field name {0} and value {1}.',\n igx_grid_groupByArea_deselect_message: 'Deselect all rows in the group with field name {0} and value {1}.',\n igx_grid_emptyFilteredGrid_message: 'No records found.',\n igx_grid_emptyGrid_message: 'Grid has no data.',\n igx_grid_filter: 'Filter',\n igx_grid_filter_row_close: 'Close',\n igx_grid_filter_row_reset: 'Reset',\n igx_grid_filter_row_placeholder: 'Add filter value',\n igx_grid_filter_row_boolean_placeholder: 'All',\n igx_grid_filter_row_date_placeholder: 'Pick up date',\n igx_grid_filter_row_time_placeholder: 'Pick up time',\n igx_grid_filter_operator_and: 'And',\n igx_grid_filter_operator_or: 'Or',\n igx_grid_complex_filter: 'Complex Filter',\n igx_grid_filter_contains: 'Contains',\n igx_grid_filter_doesNotContain: 'Does Not Contain',\n igx_grid_filter_startsWith: 'Starts With',\n igx_grid_filter_endsWith: 'Ends With',\n igx_grid_filter_equals: 'Equals',\n igx_grid_filter_doesNotEqual: 'Does Not Equal',\n igx_grid_filter_empty: 'Empty',\n igx_grid_filter_notEmpty: 'Not Empty',\n igx_grid_filter_null: 'Null',\n igx_grid_filter_notNull: 'Not Null',\n igx_grid_filter_before: 'Before',\n igx_grid_filter_after: 'After',\n igx_grid_filter_at: 'At',\n igx_grid_filter_not_at: 'Not At',\n igx_grid_filter_at_before: 'At or Before',\n igx_grid_filter_at_after: 'At or After',\n igx_grid_filter_today: 'Today',\n igx_grid_filter_yesterday: 'Yesterday',\n igx_grid_filter_thisMonth: 'This Month',\n igx_grid_filter_lastMonth: 'Last Month',\n igx_grid_filter_nextMonth: 'Next Month',\n igx_grid_filter_thisYear: 'This Year',\n igx_grid_filter_lastYear: 'Last Year',\n igx_grid_filter_nextYear: 'Next Year',\n igx_grid_filter_greaterThan: 'Greater Than',\n igx_grid_filter_lessThan: 'Less Than',\n igx_grid_filter_greaterThanOrEqualTo: 'Greater Than Or Equal To',\n igx_grid_filter_lessThanOrEqualTo: 'Less Than Or Equal To',\n igx_grid_filter_true: 'True',\n igx_grid_filter_false: 'False',\n igx_grid_filter_all: 'All',\n igx_grid_filter_condition_placeholder: 'Select filter',\n igx_grid_filter_in: 'In',\n igx_grid_filter_notIn: 'Not In',\n igx_grid_summary_count: 'Count',\n igx_grid_summary_min: 'Min',\n igx_grid_summary_max: 'Max',\n igx_grid_summary_sum: 'Sum',\n igx_grid_summary_average: 'Avg',\n igx_grid_summary_earliest: 'Earliest',\n igx_grid_summary_latest: 'Latest',\n igx_grid_excel_filter_moving_left: 'move left',\n igx_grid_excel_filter_moving_left_short: 'left',\n igx_grid_excel_filter_moving_right: 'move right',\n igx_grid_excel_filter_moving_right_short: 'right',\n igx_grid_excel_filter_moving_header: 'move',\n igx_grid_excel_filter_sorting_asc: 'ascending',\n igx_grid_excel_filter_sorting_asc_short: 'asc',\n igx_grid_excel_filter_sorting_desc: 'descending',\n igx_grid_excel_filter_sorting_desc_short: 'desc',\n igx_grid_excel_filter_sorting_header: 'sort',\n igx_grid_excel_filter_clear: 'Clear column filters',\n igx_grid_excel_custom_dialog_add: 'add filter',\n igx_grid_excel_custom_dialog_clear: 'Clear filter',\n igx_grid_excel_custom_dialog_header: 'Custom auto-filter on column: ',\n igx_grid_excel_cancel: 'Cancel',\n igx_grid_excel_apply: 'Apply',\n igx_grid_excel_search_placeholder: 'Search',\n igx_grid_excel_select_all: 'Select All',\n igx_grid_excel_select_all_search_results: 'Select all search results',\n igx_grid_excel_add_to_filter: 'Add current selection to filter',\n igx_grid_excel_blanks: '(Blanks)',\n igx_grid_excel_hide: 'Hide column',\n igx_grid_excel_show: 'Show column',\n igx_grid_excel_pin: 'Pin column',\n igx_grid_excel_unpin: 'Unpin column',\n igx_grid_excel_select: 'Select column',\n igx_grid_excel_deselect: 'Deselect column',\n igx_grid_excel_text_filter: 'Text filter',\n igx_grid_excel_number_filter: 'Number filter',\n igx_grid_excel_date_filter: 'Date filter',\n igx_grid_excel_boolean_filter: 'Boolean filter',\n igx_grid_excel_currency_filter: 'Currency filter',\n igx_grid_excel_custom_filter: 'Custom filter...',\n igx_grid_excel_no_matches: 'No matches',\n igx_grid_excel_matches_count: '{0} matches.',\n igx_grid_advanced_filter_title: 'Advanced Filtering',\n igx_grid_advanced_filter_from_label: 'From',\n igx_grid_advanced_filter_and_group: '\"And\" Group',\n igx_grid_advanced_filter_or_group: '\"Or\" Group',\n igx_grid_advanced_filter_end_group: 'End Group',\n igx_grid_advanced_filter_create_and_group: 'Create \"And\" Group',\n igx_grid_advanced_filter_create_or_group: 'Create \"Or\" Group',\n igx_grid_advanced_filter_and_label: 'and',\n igx_grid_advanced_filter_or_label: 'or',\n igx_grid_advanced_filter_switch_group: 'Switch to {0}',\n igx_grid_advanced_filter_add_condition: 'Add condition',\n igx_grid_advanced_filter_add_group: 'Add group',\n igx_grid_advanced_filter_add_condition_root: 'Condition',\n igx_grid_advanced_filter_add_group_root: 'Group',\n igx_grid_advanced_filter_ungroup: 'Ungroup',\n igx_grid_advanced_filter_delete: 'Delete',\n igx_grid_advanced_filter_delete_filters: 'Delete filters',\n igx_grid_advanced_filter_initial_text: 'Start with creating a group of conditions linked with \"And\" or \"Or\"',\n igx_grid_advanced_filter_column_placeholder: 'Select column',\n igx_grid_advanced_filter_value_placeholder: 'Value',\n igx_grid_advanced_filter_query_value_placeholder: 'Sub-query results',\n igx_grid_advanced_filter_select_entity: 'Select entity',\n igx_grid_advanced_filter_select_return_field_single: 'Select return field',\n igx_grid_advanced_filter_dialog_title: 'Confirmation',\n igx_grid_advanced_filter_dialog_message: 'By changing the entity, you will lose your current settings. Are you sure you want to do that?',\n igx_grid_advanced_filter_dialog_checkbox_text: 'Do not show this dialog again',\n igx_grid_advanced_filter_drop_ghost_text: 'Drop here to insert',\n igx_grid_pinned_row_indicator: 'Pinned',\n igx_grid_hiding_check_all_label: 'Show All',\n igx_grid_hiding_uncheck_all_label: 'Hide All',\n igx_grid_pinning_check_all_label: 'Pin All',\n igx_grid_pinning_uncheck_all_label: 'Unpin All',\n igx_grid_row_edit_btn_done: 'Done',\n igx_grid_row_edit_btn_cancel: 'Cancel',\n igx_grid_row_edit_text: 'You have {0} changes in this row and {1} hidden columns',\n igx_grid_toolbar_actions_filter_prompt: 'Filter columns list ...',\n igx_grid_toolbar_pinning_button_tooltip: 'Open column pinning dropdown',\n igx_grid_toolbar_hiding_button_tooltip: 'Open column hiding dropdown',\n igx_grid_toolbar_pinning_title: 'Pinned columns',\n igx_grid_toolbar_hiding_title: 'Visible columns',\n igx_grid_toolbar_advanced_filtering_button_tooltip: 'Open advanced filtering dialog',\n igx_grid_toolbar_advanced_filtering_button_label: 'Advanced filtering',\n igx_grid_toolbar_exporter_button_tooltip: 'Open exporter dropdown',\n igx_grid_toolbar_exporter_button_label: 'Export',\n igx_grid_toolbar_exporter_excel_entry_text: 'Export to Excel',\n igx_grid_toolbar_exporter_csv_entry_text: 'Export to CSV',\n igx_grid_toolbar_exporter_pdf_entry_text: 'Export to PDF',\n igx_grid_snackbar_addrow_label: 'Row added',\n igx_grid_snackbar_addrow_actiontext: 'SHOW',\n igx_grid_actions_edit_label: 'Edit',\n igx_grid_actions_add_label: 'Add',\n igx_grid_add_row_label: 'ADD ROW',\n igx_grid_actions_add_child_label: 'Add Child',\n igx_grid_actions_delete_label: 'Delete',\n igx_grid_actions_pin_label: 'Pin',\n igx_grid_actions_unpin_label: 'Unpin',\n igx_grid_actions_jumpUp_label: 'Jump up',\n igx_grid_actions_jumpDown_label: 'Jump down',\n igx_grid_pivot_date_dimension_total: 'All Periods',\n igx_grid_pivot_aggregate_count: 'Count',\n igx_grid_pivot_aggregate_min: 'Minimum',\n igx_grid_pivot_aggregate_max: 'Maximum',\n igx_grid_pivot_aggregate_sum: 'Sum',\n igx_grid_pivot_aggregate_avg: 'Average',\n igx_grid_pivot_aggregate_date_latest: 'Latest Date',\n igx_grid_pivot_aggregate_date_earliest: 'Earliest Date',\n igx_grid_pivot_aggregate_time_latest: 'Latest Time',\n igx_grid_pivot_aggregate_time_earliest: 'Earliest Time',\n igx_grid_pivot_empty_row_drop_area: 'Drop Row Fields here.',\n igx_grid_pivot_empty_column_drop_area: 'Drop Column Fields here.',\n igx_grid_pivot_empty_filter_drop_area: 'Drop Filter Fields here.',\n igx_grid_pivot_empty_value_drop_area: 'Drop Value Fields here.',\n igx_grid_pivot_row_drop_chip: 'Drop here to use as row',\n igx_grid_pivot_column_drop_chip: 'Drop here to use as column',\n igx_grid_pivot_filter_drop_chip: 'Drop here to use as filter',\n igx_grid_pivot_value_drop_chip: 'Drop here to use as value',\n igx_grid_pivot_empty_message: 'Pivot grid has no dimensions and values.',\n igx_grid_pivot_selector_filters: 'Filters',\n igx_grid_pivot_selector_rows: 'Rows',\n igx_grid_pivot_selector_columns: 'Columns',\n igx_grid_pivot_selector_values: 'Values',\n igx_grid_pivot_selector_panel_empty: 'Drop Items Here',\n igx_grid_required_validation_error: 'This field is required',\n igx_grid_min_validation_error: 'A value of at least {0} should be entered',\n igx_grid_max_validation_error: 'A value no more than {0} should be entered',\n igx_grid_min_length_validation_error: 'Entry should be at least {0} character(s) long',\n igx_grid_max_length_validation_error: 'Entry should be no more than {0} character(s) long',\n igx_grid_email_validation_error: 'A valid email address should be entered',\n igx_grid_pattern_validation_error: 'Entry does not match the required pattern'\n};\n","export 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: 'Browse',\n igx_input_file_placeholder: 'No file chosen',\n};\n","export interface IListResourceStrings {\n igx_list_no_items?: string;\n igx_list_loading?: string;\n}\n\nexport const ListResourceStringsEN: IListResourceStrings = {\n igx_list_no_items: 'There are no items in the list.',\n igx_list_loading: 'Loading data from the server...'\n};\n","export interface IPaginatorResourceStrings {\n igx_paginator_label?: string;\n igx_paginator_pager_text?: string;\n igx_paginator_first_page_button_text?: string;\n igx_paginator_previous_page_button_text?: string;\n igx_paginator_last_page_button_text?: string;\n igx_paginator_next_page_button_text?: string;\n}\n\nexport const PaginatorResourceStringsEN: IPaginatorResourceStrings = {\n igx_paginator_label: 'Items per page',\n igx_paginator_pager_text: 'of',\n igx_paginator_first_page_button_text: 'Go to first page',\n igx_paginator_previous_page_button_text: 'Previous page',\n igx_paginator_last_page_button_text: 'Go to last page',\n igx_paginator_next_page_button_text: 'Next page',\n};\n","export interface IQueryBuilderResourceStrings {\n igx_query_builder_date_placeholder?: string;\n igx_query_builder_time_placeholder?: string;\n igx_query_builder_datetime_placeholder?: string;\n igx_query_builder_filter_operator_and?: string;\n igx_query_builder_filter_operator_or?: string;\n igx_query_builder_filter_contains?: string;\n igx_query_builder_filter_doesNotContain?: string;\n igx_query_builder_filter_startsWith?: string;\n igx_query_builder_filter_endsWith?: string;\n igx_query_builder_filter_equals?: string;\n igx_query_builder_filter_doesNotEqual?: string;\n igx_query_builder_filter_empty?: string;\n igx_query_builder_filter_notEmpty?: string;\n igx_query_builder_filter_null?: string;\n igx_query_builder_filter_notNull?: string;\n igx_query_builder_filter_in?: string;\n igx_query_builder_filter_notIn?: string;\n igx_query_builder_filter_before?: string;\n igx_query_builder_filter_after?: string;\n igx_query_builder_filter_at?: string;\n igx_query_builder_filter_not_at?: string;\n igx_query_builder_filter_at_before?: string;\n igx_query_builder_filter_at_after?: string;\n igx_query_builder_filter_today?: string;\n igx_query_builder_filter_yesterday?: string;\n igx_query_builder_filter_thisMonth?: string;\n igx_query_builder_filter_lastMonth?: string;\n igx_query_builder_filter_nextMonth?: string;\n igx_query_builder_filter_thisYear?: string;\n igx_query_builder_filter_lastYear?: string;\n igx_query_builder_filter_nextYear?: string;\n igx_query_builder_filter_greaterThan?: string;\n igx_query_builder_filter_lessThan?: string;\n igx_query_builder_filter_greaterThanOrEqualTo?: string;\n igx_query_builder_filter_lessThanOrEqualTo?: string;\n igx_query_builder_filter_true?: string;\n igx_query_builder_filter_false?: string;\n igx_query_builder_filter_all?: string;\n igx_query_builder_from_label?: string;\n igx_query_builder_select_label?: string;\n igx_query_builder_where_label?: string;\n igx_query_builder_and_group?: string;\n igx_query_builder_or_group?: string;\n igx_query_builder_end_group?: string;\n igx_query_builder_and_label?: string;\n igx_query_builder_or_label?: string;\n igx_query_builder_switch_group?: string;\n igx_query_builder_add_condition?: string;\n igx_query_builder_add_group?: string;\n igx_query_builder_add_condition_root?: string;\n igx_query_builder_add_group_root?: string;\n igx_query_builder_ungroup?: string;\n igx_query_builder_delete?: string;\n igx_query_builder_delete_filters?: string;\n igx_query_builder_initial_text?: string;\n igx_query_builder_column_placeholder?: string;\n igx_query_builder_condition_placeholder?: string;\n igx_query_builder_value_placeholder?: string;\n igx_query_builder_query_value_placeholder?: string;\n igx_query_builder_all_fields?: string;\n igx_query_builder_details?: string;\n igx_query_builder_search?: string;\n igx_query_builder_select_all?: string;\n igx_query_builder_select_entity?: string;\n igx_query_builder_select_return_field_single?: string;\n igx_query_builder_select_return_fields?: string;\n igx_query_builder_dialog_title?: string;\n igx_query_builder_dialog_message?: string;\n igx_query_builder_dialog_checkbox_text?: string;\n igx_query_builder_dialog_cancel?: string;\n igx_query_builder_dialog_confirm?: string;\n igx_query_builder_drop_ghost_text?: string;\n}\n\nexport const QueryBuilderResourceStringsEN: IQueryBuilderResourceStrings = {\n igx_query_builder_date_placeholder: 'Select date',\n igx_query_builder_time_placeholder: 'Select time',\n igx_query_builder_datetime_placeholder: 'Select date & time',\n igx_query_builder_filter_operator_and: 'And',\n igx_query_builder_filter_operator_or: 'Or',\n igx_query_builder_filter_contains: 'Contains',\n igx_query_builder_filter_doesNotContain: 'Does Not Contain',\n igx_query_builder_filter_startsWith: 'Starts With',\n igx_query_builder_filter_endsWith: 'Ends With',\n igx_query_builder_filter_equals: 'Equals',\n igx_query_builder_filter_doesNotEqual: 'Does Not Equal',\n igx_query_builder_filter_empty: 'Empty',\n igx_query_builder_filter_notEmpty: 'Not Empty',\n igx_query_builder_filter_null: 'Null',\n igx_query_builder_filter_notNull: 'Not Null',\n igx_query_builder_filter_in: 'In',\n igx_query_builder_filter_notIn: 'Not In',\n igx_query_builder_filter_before: 'Before',\n igx_query_builder_filter_after: 'After',\n igx_query_builder_filter_at: 'At',\n igx_query_builder_filter_not_at: 'Not At',\n igx_query_builder_filter_at_before: 'At or Before',\n igx_query_builder_filter_at_after: 'At or After',\n igx_query_builder_filter_today: 'Today',\n igx_query_builder_filter_yesterday: 'Yesterday',\n igx_query_builder_filter_thisMonth: 'This Month',\n igx_query_builder_filter_lastMonth: 'Last Month',\n igx_query_builder_filter_nextMonth: 'Next Month',\n igx_query_builder_filter_thisYear: 'This Year',\n igx_query_builder_filter_lastYear: 'Last Year',\n igx_query_builder_filter_nextYear: 'Next Year',\n igx_query_builder_filter_greaterThan: 'Greater Than',\n igx_query_builder_filter_lessThan: 'Less Than',\n igx_query_builder_filter_greaterThanOrEqualTo: 'Greater Than Or Equal To',\n igx_query_builder_filter_lessThanOrEqualTo: 'Less Than Or Equal To',\n igx_query_builder_filter_true: 'True',\n igx_query_builder_filter_false: 'False',\n igx_query_builder_filter_all: 'All',\n igx_query_builder_from_label: 'From',\n igx_query_builder_select_label: 'Select',\n igx_query_builder_where_label: 'Where',\n igx_query_builder_and_group: '\"And\" Group',\n igx_query_builder_or_group: '\"Or\" Group',\n igx_query_builder_end_group: 'End Group',\n igx_query_builder_and_label: 'and',\n igx_query_builder_or_label: 'or',\n igx_query_builder_switch_group: 'Switch to {0}',\n igx_query_builder_add_condition: 'Add condition',\n igx_query_builder_add_group: 'Add group',\n igx_query_builder_add_condition_root: 'Condition',\n igx_query_builder_add_group_root: 'Group',\n igx_query_builder_ungroup: 'Ungroup',\n igx_query_builder_delete: 'Delete',\n igx_query_builder_delete_filters: 'Delete filters',\n igx_query_builder_initial_text: 'Start with creating a group of conditions linked with \"And\" or \"Or\"',\n igx_query_builder_column_placeholder: 'Select column',\n igx_query_builder_condition_placeholder: 'Select filter',\n igx_query_builder_value_placeholder: 'Value',\n igx_query_builder_query_value_placeholder: 'Sub-query results',\n igx_query_builder_all_fields: 'All fields',\n igx_query_builder_details: 'Details',\n igx_query_builder_search: 'Search',\n igx_query_builder_select_all: 'Select All',\n igx_query_builder_select_entity: 'Select entity',\n igx_query_builder_select_return_field_single: 'Select return field',\n igx_query_builder_select_return_fields: 'Select return fields',\n igx_query_builder_dialog_title: 'Confirmation',\n igx_query_builder_dialog_message: 'By changing the entity, you will lose your current settings. Are you sure you want to do that?',\n igx_query_builder_dialog_checkbox_text: 'Do not show this dialog again',\n igx_query_builder_dialog_cancel: 'Cancel',\n igx_query_builder_dialog_confirm: 'Confirm',\n igx_query_builder_drop_ghost_text: 'Drop here to insert'\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';\n\nexport interface IResourceStrings extends IGridResourceStrings, ITimePickerResourceStrings, ICalendarResourceStrings,\n ICarouselResourceStrings, IChipResourceStrings, IComboResourceStrings, IInputResourceStrings, IDatePickerResourceStrings,\n IDateRangePickerResourceStrings, IListResourceStrings, IPaginatorResourceStrings, ITreeResourceStrings,\n IActionStripResourceStrings, IQueryBuilderResourceStrings, IBannerResourceStrings { }\n\nexport class igxI18N {\n private static _instance: igxI18N;\n\n private _currentResourceStrings: IResourceStrings = { };\n\n private constructor() { }\n\n public static instance() {\n return this._instance || (this._instance = new this());\n }\n\n /**\n * Changes the resource strings for all components in the application\n * ```\n * @param resourceStrings to be applied\n */\n public changei18n(resourceStrings: IResourceStrings) {\n for (const key of Object.keys(resourceStrings)) {\n this._currentResourceStrings[key] = resourceStrings[key];\n }\n }\n\n public getCurrentResourceStrings(en: IResourceStrings): IResourceStrings {\n for (const key of Object.keys(en)) {\n if (!this._currentResourceStrings[key]) {\n this._currentResourceStrings[key] = en[key];\n }\n }\n return this._currentResourceStrings;\n }\n}\n\nexport function getCurrentResourceStrings(en: IResourceStrings) {\n return igxI18N.instance().getCurrentResourceStrings(en);\n}\n\nexport function changei18n(resourceStrings: IResourceStrings) {\n igxI18N.instance().changei18n(resourceStrings);\n}\n","export interface ITimePickerResourceStrings {\n igx_time_picker_ok?: string;\n igx_time_picker_cancel?: string;\n igx_time_picker_change_time?: string;\n igx_time_picker_choose_time?: string;\n}\n\nexport const TimePickerResourceStringsEN: ITimePickerResourceStrings = {\n igx_time_picker_ok: 'OK',\n igx_time_picker_cancel: 'Cancel',\n igx_time_picker_change_time: 'Change Time',\n igx_time_picker_choose_time: 'Choose Time'\n};\n","export interface ITreeResourceStrings {\n igx_expand?: string;\n igx_collapse?: string;\n}\n\nexport const TreeResourceStringsEN: ITreeResourceStrings = {\n igx_expand: 'Expand',\n igx_collapse: 'Collapse',\n};\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';\n\n// Services\nexport * from './services/public_api';\n\n// Performance service\nexport * from './performance.service';\n\n// i18n\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":["_formatDate","getDOM","formatDate"],"mappings":"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"}
|