{"version":3,"file":"igniteui-angular-query-builder.mjs","sources":["../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder-header.component.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder-header.component.html","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder.common.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder-drag.service.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder-tree.component.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder-tree.component.html","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder.directives.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder.component.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder.component.html","../../../projects/igniteui-angular/query-builder/src/query-builder/public_api.ts","../../../projects/igniteui-angular/query-builder/src/query-builder/query-builder.module.ts","../../../projects/igniteui-angular/query-builder/src/igniteui-angular-query-builder.ts"],"sourcesContent":["import { Component, DestroyRef, HostBinding, inject, Input } from '@angular/core';\nimport { IQueryBuilderResourceStrings, QueryBuilderResourceStringsEN } from 'igniteui-angular/core';\nimport { getCurrentResourceStrings, onResourceChangeHandle } from 'igniteui-angular/core';\n\n/* wcElementTag: igc-query-builder-header */\n/* blazorElement */\n/* jsonAPIManageItemInMarkup */\n/* jsonAPIManageCollectionInMarkup */\n/* blazorIndirectRender */\n/* singleInstanceIdentifier */\n/* contentParent: QueryBuilder */\n/**\n* @igxParent IgxQueryBuilderComponent\n*/\n@Component({\n    selector: 'igx-query-builder-header',\n    templateUrl: 'query-builder-header.component.html'\n})\nexport class IgxQueryBuilderHeaderComponent {\n\n    private _destroyRef = inject(DestroyRef);\n    private _resourceStrings: IQueryBuilderResourceStrings = null;\n    private _defaultResourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class') public get getClass() {\n        return 'igx-query-builder__header';\n    }\n\n    /**\n     * Sets the title of the `IgxQueryBuilderHeaderComponent`.\n     *\n     * @example\n     * ```html\n     * <igx-query-builder-header title=\"Sample Query Builder\"></igx-query-builder-header>\n     * ```\n     */\n    @Input()\n    public title: string;\n\n    /**\n     * Show/hide the legend.\n     *\n     * @example\n     * ```html\n     * <igx-query-builder-header [showLegend]=\"false\"></igx-query-builder-header>\n     * ```\n     * @deprecated in version 19.1.0.\n     */\n    @Input()\n    public showLegend = true;\n\n    /**\n     * Sets the resource strings.\n     * By default it uses EN resources.\n     *\n     * @deprecated in version 19.1.0.\n     */\n    @Input()\n    public set resourceStrings(value: IQueryBuilderResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * Returns the resource strings.\n     */\n    public get resourceStrings(): IQueryBuilderResourceStrings {\n        return this._resourceStrings || this._defaultResourceStrings;\n    }\n\n    constructor() {\n        onResourceChangeHandle(this._destroyRef, () => {\n            this._defaultResourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN, false);\n        }, this);\n    }\n}\n","<div class=\"igx-query-builder__title\">{{ title }}</div>\n<ng-content></ng-content>\n","import { Pipe, PipeTransform, TemplateRef } from '@angular/core';\nimport { FieldType, FilteringLogic, IFilteringExpression } from 'igniteui-angular/core';\n\n@Pipe({\n    name: 'fieldFormatter',\n    standalone: true\n})\nexport class IgxFieldFormatterPipe implements PipeTransform {\n\n    public transform(value: any, formatter: (v: any, data: any, fieldData?: any) => any, rowData: any, fieldData?: any) {\n        return formatter(value, rowData, fieldData);\n    }\n}\n\n/**\n * @hidden @internal\n */\nexport class ExpressionItem {\n    public parent: ExpressionGroupItem;\n    public expanded: boolean;\n    constructor(parent?: ExpressionGroupItem) {\n        this.parent = parent;\n    }\n}\n\n/**\n * @hidden @internal\n */\nexport class ExpressionGroupItem extends ExpressionItem {\n    public operator: FilteringLogic;\n    public children: ExpressionItem[];\n    constructor(operator: FilteringLogic, parent?: ExpressionGroupItem) {\n        super(parent);\n        this.operator = operator;\n        this.children = [];\n    }\n}\n\n/**\n * @hidden @internal\n */\nexport class ExpressionOperandItem extends ExpressionItem {\n    public expression: IFilteringExpression;\n    public inEditMode: boolean;\n    public inAddMode: boolean;\n    public hovered: boolean;\n    public focused: boolean;\n    public fieldLabel: string;\n    constructor(expression: IFilteringExpression, parent: ExpressionGroupItem) {\n        super(parent);\n        this.expression = expression;\n    }\n}\n\nconst IGX_QUERY_BUILDER = 'igx-query-builder';\nconst IGX_FILTER_TREE = 'igx-filter-tree';\n\n/**\n * @hidden @internal\n */\nexport const QueryBuilderSelectors = {\n    DRAG_INDICATOR: 'igx-drag-indicator',\n    CHIP_GHOST: 'igx-chip__ghost',\n\n    DROP_DOWN_LIST_SCROLL: 'igx-drop-down__list-scroll',\n    DROP_DOWN_ITEM_DISABLED: 'igx-drop-down__item--disabled',\n\n    FILTER_TREE: IGX_FILTER_TREE,\n    FILTER_TREE_EXPRESSION_CONTEXT_MENU: IGX_FILTER_TREE + '__expression-context-menu',\n    FILTER_TREE_EXPRESSION_ITEM: IGX_FILTER_TREE + '__expression-item',\n    FILTER_TREE_EXPRESSION_ITEM_DROP_GHOST: IGX_FILTER_TREE + '__expression-item-drop-ghost',\n    FILTER_TREE_EXPRESSION_ITEM_KEYBOARD_GHOST: IGX_FILTER_TREE + '__expression-item-keyboard-ghost',\n    FILTER_TREE_EXPRESSION_ITEM_GHOST: IGX_FILTER_TREE + '__expression-item-ghost',\n    FILTER_TREE_EXPRESSION_SECTION: IGX_FILTER_TREE + '__expression-section',\n\n    FILTER_TREE_LINE_AND: IGX_FILTER_TREE + '__line--and',\n    FILTER_TREE_LINE_OR: IGX_FILTER_TREE + '__line--or',\n    FILTER_TREE_SUBQUERY: IGX_FILTER_TREE + '__subquery',\n\n    QUERY_BUILDER: IGX_QUERY_BUILDER,\n    QUERY_BUILDER_BODY: IGX_QUERY_BUILDER + '__main',\n    QUERY_BUILDER_HEADER: IGX_QUERY_BUILDER + '__header',\n    QUERY_BUILDER_TREE: IGX_QUERY_BUILDER + '-tree',\n}\n\nexport interface IgxQueryBuilderSearchValueContext {\n    $implicit: any;\n    selectedField: FieldType;\n    selectedCondition: string;\n    /* blazorSuppress */\n    defaultSearchValueTemplate: TemplateRef<any>;\n}\n","import { filter, fromEvent, sampleTime, Subscription } from 'rxjs';\nimport { IgxQueryBuilderTreeComponent } from './query-builder-tree.component';\nimport { ElementRef, Injectable } from '@angular/core';\nimport { ExpressionGroupItem, ExpressionItem, ExpressionOperandItem, QueryBuilderSelectors } from './query-builder.common';\nimport { IgxChipComponent } from 'igniteui-angular/chips';\n\nconst DEFAULT_SET_Z_INDEX_DELAY = 10;\nconst Z_INDEX_TO_SET = 10010; //overlay z-index is 10005\n\n/** @hidden @internal */\n@Injectable()\nexport class IgxQueryBuilderDragService {\n\n    /** The ExpressionItem that's actually the drop ghost's content */\n    public dropGhostExpression: ExpressionItem;\n    public isKeyboardDrag: boolean;\n    private _queryBuilderTreeComponent: IgxQueryBuilderTreeComponent;\n    private _queryBuilderTreeComponentElRef: ElementRef;\n    private _sourceExpressionItem: ExpressionItem;\n    private _sourceElement: HTMLElement;\n    private _targetExpressionItem: ExpressionItem;\n    private _dropUnder: boolean;\n    private _ghostChipMousemoveSubscription$: Subscription;\n    private _keyboardSubscription$: Subscription;\n    private _keyDragCurrentIndex: number = 0;\n    private _keyDragInitialIndex: number = 0;\n    private _isKeyDragsFirstMove: boolean = true;\n    /** Stores a flat ordered list of possible drop locations as Tuple <[targetExpression, dropUnder]>, while performing the keyboard drag&drop */\n    private _possibleDropLocations: Array<[ExpressionItem, boolean]>;\n    private _timeoutId: any;\n\n\n    /** Get the dragged ghost as a HTMLElement*/\n    private get getDragGhostElement(): HTMLElement {\n        return (document.querySelector(`.${QueryBuilderSelectors.CHIP_GHOST}[ghostclass=\"${QueryBuilderSelectors.CHIP_GHOST}\"]`) as HTMLElement);\n    }\n\n    /** Get the drop ghost chip component */\n    private get getDropGhostElement(): IgxChipComponent {\n        return this._queryBuilderTreeComponent.expressionsChips.find(x => x.data === this.dropGhostExpression);\n    }\n\n    private get getMainExpressionTree(): HTMLElement {\n        return this._queryBuilderTreeComponentElRef.nativeElement.querySelector(`.${QueryBuilderSelectors.FILTER_TREE}`);\n    }\n\n\n    public register(tree: IgxQueryBuilderTreeComponent, el: ElementRef) {\n        this._queryBuilderTreeComponent = tree;\n        this._queryBuilderTreeComponentElRef = el;\n    }\n\n    /** When chip is picked up for dragging\n     *\n     * @param sourceDragElement The HTML element of the chip that's been dragged\n     * @param sourceExpressionItem The expressionItem of the chip that's been dragged\n     * @param isKeyboardDrag If it's a mouse drag or keyboard reorder\n     *\n    */\n    public onMoveStart(sourceDragElement: HTMLElement, sourceExpressionItem: ExpressionItem, isKeyboardDrag: boolean): void {\n        this.resetDragAndDrop(true);\n        this._queryBuilderTreeComponent._expressionTreeCopy = this._queryBuilderTreeComponent._expressionTree;\n        this.isKeyboardDrag = isKeyboardDrag;\n        this._sourceExpressionItem = sourceExpressionItem;\n        this._sourceElement = sourceDragElement;\n\n        this.listenToKeyboard();\n\n        if (!this.isKeyboardDrag) {\n            this._sourceElement.style.display = 'none';\n            this.setDragGhostZIndex();\n        }\n    }\n\n    /** When dragged chip is let go outside a proper drop zone */\n    public onMoveEnd(): void {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n\n        if (this.dropGhostExpression) {\n            //If there is a ghost chip presented to the user, execute drop\n            this.onChipDropped();\n        } else {\n            this.resetDragAndDrop(true);\n        }\n\n        this._ghostChipMousemoveSubscription$?.unsubscribe();\n        this._keyboardSubscription$?.unsubscribe();\n    }\n\n    /** When mouse drag enters a chip's area\n     * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n     * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n    */\n    public onChipEnter(targetDragElement: HTMLElement, targetExpressionItem: ExpressionItem) {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n\n        //If entering the one that's been picked up don't do any thing\n        if (targetExpressionItem === this.dropGhostExpression) {\n            return;\n        }\n\n        //Simulate leaving the last entered chip in case of no Leave event triggered due to the artificial drop zone of a north positioned ghost chip\n        if (this._targetExpressionItem) {\n            this.resetDragAndDrop(false);\n        }\n\n        this._targetExpressionItem = targetExpressionItem;\n\n        //Determine the middle point of the chip.\n        const appendUnder = this.ghostInLowerPart(targetDragElement);\n\n        this.renderDropGhostChip(appendUnder);\n    }\n\n    /** When mouse drag moves in a div's drop area\n     * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n     * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n    */\n    public onDivOver(targetDragElement: HTMLElement, targetExpressionItem: ExpressionItem) {\n        if (this._targetExpressionItem === targetExpressionItem) {\n            this.onChipOver(targetDragElement)\n        } else {\n            this.onChipEnter(targetDragElement, targetExpressionItem);\n        }\n    }\n\n    /** When mouse drag moves in a chip's drop area\n     * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n    */\n    public onChipOver(targetDragElement: HTMLElement): void {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n\n        //Determine the middle point of the chip.\n        const appendUnder = this.ghostInLowerPart(targetDragElement);\n\n        this.renderDropGhostChip(appendUnder);\n    }\n\n    /** When mouse drag leaves a chip's drop area */\n    public onChipLeave() {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n\n        //if the drag ghost is on the drop ghost row don't trigger leave\n        if (this.dragGhostIsOnDropGhostRow()) {\n            return;\n        }\n\n        if (this._targetExpressionItem) {\n            this.resetDragAndDrop(false)\n        }\n    }\n\n    /** When dragged chip is let go in div's drop area\n     * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n    */\n    public onDivDropped(targetExpressionItem: ExpressionItem) {\n        if (targetExpressionItem !== this._sourceExpressionItem) {\n            this.onChipDropped();\n        }\n    }\n\n    /** When dragged chip is let go in chip's drop area */\n    public onChipDropped() {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n\n        //Determine which chip to be focused after drop completes\n        const [dropLocationIndex, _] = this.countChipsBeforeDropLocation(this._queryBuilderTreeComponent.rootGroup);\n\n        //Delete from old place\n        this._queryBuilderTreeComponent.deleteItem(this._sourceExpressionItem);\n        this.dropGhostExpression = null;\n\n        this._queryBuilderTreeComponent.focusChipAfterDrag(dropLocationIndex);\n\n        this.resetDragAndDrop(true);\n\n        this._queryBuilderTreeComponent.exitEditAddMode();\n    }\n\n    /** When mouse drag moves in a AND/OR drop area\n     * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n     * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n    */\n    public onGroupRootOver(targetDragElement: HTMLElement, targetExpressionItem: ExpressionGroupItem) {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n\n        let newTargetExpressionItem;\n\n        if (this.ghostInLowerPart(targetDragElement) || !targetExpressionItem.parent) {\n            //if ghost is in lower part of the AND/OR (or it's the main group) => drop as first child of that group\n            //accounting for the fact that the drop ghost might already be there as first child\n            if (targetExpressionItem.children[0] !== this.dropGhostExpression) {\n                newTargetExpressionItem = targetExpressionItem.children[0];\n            } else {\n                newTargetExpressionItem = targetExpressionItem.children[1];\n            }\n        } else {\n            //if ghost is in upper part => drop before the group starts\n            newTargetExpressionItem = targetExpressionItem;\n        }\n\n        if (this._targetExpressionItem !== newTargetExpressionItem) {\n            this.resetDragAndDrop(false);\n            this._targetExpressionItem = newTargetExpressionItem;\n            this.renderDropGhostChip(false);\n        }\n    }\n\n    /** When mouse drag moves in 'Add condition' button's drop area\n     * @param addConditionElement The Add condition button HTML Element\n     * @param rootGroup The root group of the query tree\n    */\n    public onAddConditionEnter(addConditionElement: HTMLElement, rootGroup: ExpressionGroupItem) {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n        const lastElement = addConditionElement.parentElement.previousElementSibling.lastElementChild;\n\n        //simulate entering in the lower part of the last chip/group\n        this.onChipEnter(lastElement as HTMLElement, rootGroup.children[rootGroup.children.length - 1]);\n    }\n\n    /** When chip's drag indicator is focused\n     *\n     * @param sourceDragElement The HTML element of the chip that's been dragged\n     * @param sourceExpressionItem The expressionItem of the chip that's been dragged\n     *\n    */\n    public onChipDragIndicatorFocus(sourceDragElement: HTMLElement, sourceExpressionItem: ExpressionItem) {\n        //if drag is not underway, already\n        if (!this.getDropGhostElement) {\n            this.onMoveStart(sourceDragElement, sourceExpressionItem, true);\n        }\n    }\n\n    /** When chip's drag indicator looses focus*/\n    public onChipDragIndicatorFocusOut() {\n        if (this._sourceElement?.style?.display !== 'none') {\n            this.resetDragAndDrop(true);\n            this._keyboardSubscription$?.unsubscribe();\n        }\n    }\n\n    /** Upon blurring the tree, if Keyboard drag is underway and the next active item is not the drop ghost's drag indicator icon, cancel the drag&drop procedure*/\n    public onDragFocusOut() {\n        if (this.isKeyboardDrag && this.getDropGhostElement) {\n            //have to wait a tick because upon blur, the next activeElement is always body, right before the next element gains focus\n            setTimeout(() => {\n                if (document.activeElement.className.indexOf(QueryBuilderSelectors.DRAG_INDICATOR) === -1) {\n                    this.resetDragAndDrop(true);\n                    this._keyboardSubscription$?.unsubscribe();\n                }\n            }, 0);\n        }\n    }\n\n    /** Checks if the dragged ghost is horizontally on the same line with the drop ghost*/\n    private dragGhostIsOnDropGhostRow() {\n        const dragGhostBounds = this.getDragGhostElement.getBoundingClientRect();\n\n        const dropGhostBounds = this.getDropGhostElement?.nativeElement?.parentElement.getBoundingClientRect();\n\n        if (!dragGhostBounds || !dropGhostBounds) {\n            return false;\n        }\n\n        const tolerance = dragGhostBounds.bottom - dragGhostBounds.top;\n\n        return !(dragGhostBounds.bottom < dropGhostBounds.top - tolerance || dragGhostBounds.top > dropGhostBounds.bottom + tolerance);\n    }\n\n    /** Checks if the dragged ghost is north or south of a target element's center*/\n    private ghostInLowerPart(ofElement: HTMLElement) {\n        const ghostBounds = this.getDragGhostElement.getBoundingClientRect();\n        const targetBounds = ofElement.getBoundingClientRect();\n\n        return ((ghostBounds.top + ghostBounds.bottom) / 2) >= ((targetBounds.top + targetBounds.bottom) / 2);\n    }\n\n    /** Make a copy of the _sourceExpressionItem's chip and paste it in the tree north or south of the _targetExpressionItem's chip */\n    private renderDropGhostChip(appendUnder: boolean): void {\n        if (appendUnder !== this._dropUnder || this.isKeyboardDrag) {\n            this.clearDropGhost();\n\n            //Copy dragged chip\n            const dragCopy = { ...this._sourceExpressionItem };\n            dragCopy.parent = this._targetExpressionItem.parent;\n            this.dropGhostExpression = dragCopy;\n\n            //Paste chip\n            this._dropUnder = appendUnder;\n            const pasteIndex = this._targetExpressionItem.parent.children.indexOf(this._targetExpressionItem);\n            this._targetExpressionItem.parent.children.splice(pasteIndex + (this._dropUnder ? 1 : 0), 0, dragCopy);\n        }\n\n        //Put focus on the drag icon of the ghost while performing keyboard drag\n        if (this.isKeyboardDrag) {\n            setTimeout(() => { // this will make the execution after the drop ghost is rendered\n                const dropGhostDragIndicator = this.getDropGhostElement?.nativeElement?.querySelector(`.${QueryBuilderSelectors.DRAG_INDICATOR}`) as HTMLElement;\n                if (dropGhostDragIndicator) {\n                    dropGhostDragIndicator.focus();\n                }\n            }, 0);\n        }\n\n        //Attach a mousemove event listener (if not already in place) to the dragged ghost (if present)\n        if (!this.isKeyboardDrag && this.getDragGhostElement && (!this._ghostChipMousemoveSubscription$ || this._ghostChipMousemoveSubscription$?.closed === true)) {\n            const mouseMoves = fromEvent<MouseEvent>(this.getDragGhostElement, 'mousemove');\n\n            //When mouse moves and there is a drop ghost => trigger onChipLeave to check if the drop ghost has to be removed\n            //effectively solving the case when mouse leaves the QB and a drop ghost is still in place\n            this._ghostChipMousemoveSubscription$ = mouseMoves.pipe(sampleTime(100)).subscribe(() => {\n                if (this.getDropGhostElement) {\n                    this.onChipLeave();\n                }\n            });\n        }\n\n        this.setDragCursor('grab');\n    }\n\n    /** Set the cursor when dragging a ghost*/\n    private setDragCursor(cursor: string) {\n        if (this.getDragGhostElement) {\n            this.getDragGhostElement.style.cursor = cursor;\n        }\n    }\n\n    /** Removes the drop ghost expression from the tree and it's chip effectively  */\n    private clearDropGhost() {\n        if (this.dropGhostExpression) {\n            const children = this.dropGhostExpression.parent.children;\n            const delIndex = children.indexOf(this.dropGhostExpression);\n            children.splice(delIndex, 1);\n            this.dropGhostExpression = null;\n        }\n    }\n\n    /** Reset Drag&Drop vars. Optionally the drag source vars too*/\n    private resetDragAndDrop(clearDragged: boolean) {\n        this._targetExpressionItem = null;\n        this._dropUnder = null;\n        this.clearDropGhost();\n        this._keyDragInitialIndex = 0;\n        this._keyDragCurrentIndex = 0;\n        this._possibleDropLocations = null;\n        this._isKeyDragsFirstMove = true;\n        this.setDragCursor('no-drop');\n\n        if (this._queryBuilderTreeComponent._expressionTreeCopy) {\n            this._queryBuilderTreeComponent._expressionTree = this._queryBuilderTreeComponent._expressionTreeCopy;\n        }\n\n        if ((clearDragged || this.isKeyboardDrag) && this._sourceElement) {\n            this._sourceElement.style.display = '';\n        }\n\n        if (clearDragged) {\n            this._queryBuilderTreeComponent._expressionTreeCopy = null;\n            this._sourceExpressionItem = null;\n            this._sourceElement = null;\n        }\n    }\n\n    /** Start listening for drag and drop specific keys */\n    private listenToKeyboard() {\n        this._keyboardSubscription$?.unsubscribe();\n        this._keyboardSubscription$ = fromEvent<KeyboardEvent>(this.getMainExpressionTree, 'keydown')\n            .pipe(filter(e => ['ArrowUp', 'ArrowDown', 'Enter', 'Space', 'Escape', 'Tab'].includes(e.key)))\n            // .pipe(tap(e => {\n            //     //Inhibit Tabs if keyboard drag is underway (don't allow to loose focus of the drop ghost's drag indicator)\n            //     if (e.key === 'Tab' && this.getDropGhostElement) {\n            //         e.preventDefault();\n            //     }\n            // }))\n            .pipe(filter(event => !event.repeat))\n            .subscribe(e => {\n                if (e.key === 'Escape') {\n                    //TODO cancel mouse drag once it's implemented in igx-chip draggable\n                    this.resetDragAndDrop(false);\n                    //Regain focus on the drag icon after keyboard drag cancel\n                    if (this.isKeyboardDrag) {\n                        (this._sourceElement.firstElementChild.firstElementChild.firstElementChild.firstElementChild as HTMLElement).focus();\n                    }\n                } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n                    this.arrowDrag(e.key);\n                } else if (e.key === 'Enter' || e.key === 'Space') {\n                    //this.platform.isActivationKey(eventArgs) Maybe use this rather that Enter/Space?\n                    this.onChipDropped();\n                    this._keyboardSubscription$.unsubscribe();\n                }\n            });\n    }\n\n    /** Perform up/down movement of drop ghost along the expression tree*/\n    private arrowDrag(key: string) {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n\n        const rootGroup = this._queryBuilderTreeComponent.rootGroup;\n\n        if (this._isKeyDragsFirstMove) {\n            this._possibleDropLocations = this.getPossibleDropLocations(rootGroup, true);\n            this._keyDragInitialIndex = this._possibleDropLocations.findIndex(e => e[0] === this._sourceExpressionItem && e[1] === true);\n            this._keyDragCurrentIndex = this._keyDragInitialIndex;\n            if (this._keyDragInitialIndex === -1) {\n                console.error(\"Dragged expression not found\");\n            }\n            this._sourceElement.style.display = 'none';\n        }\n\n        let newKeyIndexOffset = this._keyDragCurrentIndex;\n        if (key === 'ArrowUp') {\n            //decrease index capped at top of tree\n            newKeyIndexOffset && newKeyIndexOffset--;\n        } else if (key === 'ArrowDown') {\n            //increase index capped at bottom of tree\n            newKeyIndexOffset < this._possibleDropLocations.length - 1 && newKeyIndexOffset++;\n        } else {\n            console.error('wrong key');\n            return;\n        }\n\n        //if drop location has no change\n        if (newKeyIndexOffset !== this._keyDragCurrentIndex || this._isKeyDragsFirstMove) {\n            this._keyDragCurrentIndex = newKeyIndexOffset;\n\n            const newDropTarget = this._possibleDropLocations[this._keyDragCurrentIndex];\n            this._targetExpressionItem = newDropTarget[0]\n\n            this.renderDropGhostChip(newDropTarget[1]);\n\n            //Situations when drop ghost hasn't really moved, run one more time\n            if (this._keyDragCurrentIndex === this._keyDragInitialIndex ||\n                (this._isKeyDragsFirstMove && this._keyDragCurrentIndex === this._keyDragInitialIndex - 1)) {\n                this._isKeyDragsFirstMove = false;\n                this.arrowDrag(key);\n            }\n\n            this._isKeyDragsFirstMove = false;\n        }\n\n        return;\n    }\n\n    /** Produces a flat ordered list of possible drop locations as Tuple <[targetExpression, dropUnder]>, while performing the keyboard drag&drop */\n    private getPossibleDropLocations(group: ExpressionGroupItem, isRoot: boolean): Array<[ExpressionItem, boolean]> {\n        const result = new Array() as Array<[ExpressionItem, boolean]>;\n\n        //Add dropZone under AND/OR (as first child of group)\n        result.push([(group as ExpressionGroupItem).children[0], false]);\n\n        for (let i = 0; i < group.children.length; i++) {\n            if (group.children[i] instanceof ExpressionGroupItem) {\n                result.push(...this.getPossibleDropLocations(group.children[i] as ExpressionGroupItem, false));\n            } else {\n                result.push([group.children[i], true]);\n            }\n        }\n\n        //Add dropZone under the whole group\n        if (!isRoot) {\n            result.push([group, true]);\n        }\n\n        return result;\n    }\n\n    /** Counts how many chips will be in the tree (from top to bottom) before the dropped one */\n    private countChipsBeforeDropLocation(group: ExpressionGroupItem): [number, boolean] {\n        let count = 0, totalCount = 0, targetReached = false;\n\n        for (let i = 0; i < group.children.length; i++) {\n            const child = group.children[i];\n\n            if (targetReached) {\n                break;\n            }\n\n            if (child instanceof ExpressionGroupItem) {\n                if (child === this._targetExpressionItem) {\n                    if (this._dropUnder) {\n                        [count] = this.countChipsBeforeDropLocation(child as ExpressionGroupItem);\n                        totalCount += count;\n                    }\n                    targetReached = true;\n                } else {\n                    [count, targetReached] = this.countChipsBeforeDropLocation(child as ExpressionGroupItem);\n                    totalCount += count;\n                }\n            } else {\n                if (child !== this._sourceExpressionItem && //not the hidden source chip\n                    child !== this.dropGhostExpression && //not the drop ghost\n                    !((child as ExpressionOperandItem).inEditMode && this._queryBuilderTreeComponent.operandCanBeCommitted() !== true) //not a chip in edit mode that will be discarded\n                ) {\n                    totalCount++;\n                }\n\n                if (child === this._targetExpressionItem) {\n                    targetReached = true;\n                    if (!this._dropUnder &&\n                        !((child as ExpressionOperandItem).inEditMode && this._queryBuilderTreeComponent.operandCanBeCommitted() !== true)) {\n                        totalCount--;\n                    }\n                }\n            }\n        }\n\n        totalCount === -1 && totalCount++;\n\n        return [totalCount, targetReached];\n    }\n\n    /** Sets the z-index of the drag ghost with a little delay, since we don't have access to ghostCreated() but we know it's executed right after moveStart() */\n    private setDragGhostZIndex() {\n        if (this._timeoutId) {\n            clearTimeout(this._timeoutId);\n        }\n\n        this._timeoutId = setTimeout(() => {\n            if (this.getDragGhostElement?.style) {\n                this.getDragGhostElement.style.zIndex = `${Z_INDEX_TO_SET}`;\n            }\n        }, DEFAULT_SET_Z_INDEX_DELAY);\n    }\n}\n","import { AfterViewInit, EventEmitter, LOCALE_ID, Output, TemplateRef, inject } from '@angular/core';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\n\nimport {\n    Component, Input, ViewChild, ChangeDetectorRef, ViewChildren, QueryList, ElementRef, OnDestroy, HostBinding\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { IgxChipComponent } from 'igniteui-angular/chips';\nimport {\n    IQueryBuilderResourceStrings,\n    QueryBuilderResourceStringsEN,\n    PlatformUtil,\n    trackByIdentity,\n    GridColumnDataType,\n    DataUtil,\n    IgxBooleanFilteringOperand,\n    IgxDateFilteringOperand,\n    IgxDateTimeFilteringOperand,\n    IgxNumberFilteringOperand,\n    IgxStringFilteringOperand,\n    IgxTimeFilteringOperand,\n    FilteringLogic,\n    IFilteringExpression,\n    FilteringExpressionsTree,\n    IExpressionTree,\n    IFilteringExpressionsTree,\n    FieldType,\n    EntityType,\n    HorizontalAlignment,\n    OverlaySettings,\n    VerticalAlignment,\n    AbsoluteScrollStrategy,\n    AutoPositionStrategy,\n    CloseScrollStrategy,\n    ConnectedPositioningStrategy,\n    IgxPickerToggleComponent,\n    IgxPickerClearComponent,\n    getCurrentResourceStrings,\n    DEFAULT_LOCALE,\n    onResourceChangeHandle,\n    IgxDateFormatterPipe,\n    isTree,\n    IgxOverlayOutletDirective\n} from 'igniteui-angular/core';\nimport { IgxDatePickerComponent } from 'igniteui-angular/date-picker';\n\nimport {\n    IgxButtonDirective,\n    IgxDateTimeEditorDirective,\n    IgxIconButtonDirective,\n    IgxTooltipDirective,\n    IgxTooltipTargetDirective,\n    IgxDragIgnoreDirective,\n    IgxDropDirective\n} from 'igniteui-angular/directives';\nimport { IgxSelectComponent } from 'igniteui-angular/select';\nimport { IgxTimePickerComponent } from 'igniteui-angular/time-picker';\nimport { IgxInputGroupComponent, IgxInputDirective, IgxPrefixDirective } from 'igniteui-angular/input-group';\nimport { IgxSelectItemComponent } from 'igniteui-angular/select';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IComboSelectionChangingEventArgs, IgxComboComponent, IgxComboHeaderDirective } from 'igniteui-angular/combo';\nimport { IgxCheckboxComponent, IChangeCheckboxEventArgs } from 'igniteui-angular/checkbox';\nimport { IgxDialogComponent } from 'igniteui-angular/dialog';\nimport {\n    ISelectionEventArgs,\n    IgxDropDownComponent,\n    IgxDropDownItemComponent,\n    IgxDropDownItemNavigationDirective\n} from 'igniteui-angular/drop-down';\nimport { IgxQueryBuilderSearchValueTemplateDirective } from './query-builder.directives';\nimport { IgxQueryBuilderComponent } from './query-builder.component';\nimport { IgxQueryBuilderDragService } from './query-builder-drag.service';\nimport { ExpressionGroupItem, ExpressionItem, ExpressionOperandItem, IgxFieldFormatterPipe, IgxQueryBuilderSearchValueContext } from './query-builder.common';\nimport { getCurrentI18n, IResourceChangeEventArgs } from 'igniteui-i18n-core';\n\nconst DEFAULT_PIPE_DATE_FORMAT = 'mediumDate';\nconst DEFAULT_PIPE_TIME_FORMAT = 'mediumTime';\nconst DEFAULT_PIPE_DATE_TIME_FORMAT = 'medium';\nconst DEFAULT_PIPE_DIGITS_INFO = '1.0-3';\nconst DEFAULT_CHIP_FOCUS_DELAY = 50;\n\n/** @hidden */\n@Component({\n    selector: 'igx-query-builder-tree',\n    templateUrl: './query-builder-tree.component.html',\n    host: { 'class': 'igx-query-builder-tree' },\n    imports: [\n        IgxDateFormatterPipe,\n        FormsModule,\n        IgxButtonDirective,\n        IgxCheckboxComponent,\n        IgxChipComponent,\n        IgxComboComponent,\n        IgxComboHeaderDirective,\n        IgxDatePickerComponent,\n        IgxDateTimeEditorDirective,\n        IgxDialogComponent,\n        IgxDragIgnoreDirective,\n        IgxDropDirective,\n        IgxDropDownComponent,\n        IgxDropDownItemComponent,\n        IgxDropDownItemNavigationDirective,\n        IgxFieldFormatterPipe,\n        IgxIconButtonDirective,\n        IgxIconComponent,\n        IgxInputDirective,\n        IgxInputGroupComponent,\n        IgxOverlayOutletDirective,\n        IgxPickerClearComponent,\n        IgxPickerToggleComponent,\n        IgxPrefixDirective,\n        IgxSelectComponent,\n        IgxSelectItemComponent,\n        IgxTimePickerComponent,\n        IgxTooltipDirective,\n        IgxTooltipTargetDirective,\n        NgClass,\n        NgTemplateOutlet\n    ],\n    providers: [\n        IgxQueryBuilderDragService\n    ],\n})\nexport class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {\n    public cdr = inject(ChangeDetectorRef);\n    public dragService = inject(IgxQueryBuilderDragService);\n    protected platform = inject(PlatformUtil);\n    private elRef = inject(ElementRef);\n    protected _localeId = inject(LOCALE_ID);\n\n    /**\n     * @hidden @internal\n     */\n    public _expressionTree: IExpressionTree;\n\n    /**\n     * @hidden @internal\n     */\n    public _expressionTreeCopy: IExpressionTree;\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class') public get getClass() {\n        return `igx-query-builder-tree--level-${this.level}`;\n    }\n\n    /**\n     * Sets/gets the entities.\n     */\n    @Input()\n    public entities: EntityType[];\n\n    /**\n     * Sets/gets the parent query builder component.\n     */\n    @Input()\n    public queryBuilder: IgxQueryBuilderComponent;\n\n    /**\n     * Sets/gets the search value template.\n     */\n    @Input()\n    public searchValueTemplate: TemplateRef<IgxQueryBuilderSearchValueContext> = null;\n\n    /**\n    * Returns the parent expression operand.\n    */\n    @Input()\n    public get parentExpression(): ExpressionOperandItem {\n        return this._parentExpression;\n    }\n\n    /**\n     * Sets the parent expression operand.\n     */\n    public set parentExpression(value: ExpressionOperandItem) {\n        this._parentExpression = value;\n    }\n\n    /**\n    * Returns the fields.\n    */\n    public get fields(): FieldType[] {\n        if (!this._fields && this.isAdvancedFiltering()) {\n            this._fields = this.entities[0].fields;\n        }\n\n        return this._fields;\n    }\n\n    /**\n     * Sets the fields.\n     */\n    @Input()\n    public set fields(fields: FieldType[]) {\n        this._fields = fields;\n\n        this._fields = this._fields?.map(f => ({...f, filters: this.getFilters(f), pipeArgs: this.getPipeArgs(f) }));\n\n        if (!this._fields && this.isAdvancedFiltering()) {\n            this._fields = this.entities[0].fields;\n        }\n    }\n\n    /**\n    * Returns the expression tree.\n    */\n    public get expressionTree(): IExpressionTree {\n        return this._expressionTree;\n    }\n\n    /**\n     * Sets the expression tree.\n     */\n    @Input()\n    public set expressionTree(expressionTree: IExpressionTree) {\n        this._expressionTree = expressionTree;\n        if (!expressionTree) {\n            this._selectedEntity = this.isAdvancedFiltering() && this.entities.length === 1 ? this.entities[0] : null;\n            this._selectedReturnFields = this._selectedEntity ? this._selectedEntity.fields?.map(f => f.field) : [];\n        }\n\n        if (!this._preventInit) {\n            this.init();\n        }\n    }\n\n    /**\n     * Gets the `locale` of the query builder.\n     * If not set, defaults to application's locale.\n     */\n    @Input()\n    public get locale(): string {\n        return this._locale || this._defaultLocale;\n    }\n\n    /**\n     * Sets the `locale` of the query builder.\n     * Expects a valid BCP 47 language tag.\n     */\n    public set locale(value: string) {\n        this._locale = value;\n        this._defaultResourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN, false, this._locale);\n    }\n\n    /**\n     * Sets the resource strings.\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: IQueryBuilderResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * Returns the resource strings.\n     */\n    public get resourceStrings(): IQueryBuilderResourceStrings {\n        return this._resourceStrings || this._defaultResourceStrings;\n    }\n\n    /**\n     * Gets/sets the expected return field.\n     */\n    @Input() public expectedReturnField: string = null;\n\n    /**\n     * Event fired as the expression tree is changed.\n     */\n    @Output()\n    public expressionTreeChange = new EventEmitter<IExpressionTree>();\n\n    /**\n     * Event fired if a nested query builder tree is being edited.\n     */\n    @Output()\n    public inEditModeChange = new EventEmitter<ExpressionOperandItem>();\n\n    @ViewChild('entitySelect', { read: IgxSelectComponent })\n    protected entitySelect: IgxSelectComponent;\n\n    @ViewChild('editingInputs', { read: ElementRef })\n    private editingInputs: ElementRef;\n\n    @ViewChild('returnFieldsCombo', { read: IgxComboComponent })\n    private returnFieldsCombo: IgxComboComponent;\n\n    @ViewChild('returnFieldSelect', { read: IgxSelectComponent })\n    protected returnFieldSelect: IgxSelectComponent;\n\n    @ViewChild('fieldSelect', { read: IgxSelectComponent })\n    private fieldSelect: IgxSelectComponent;\n\n    @ViewChild('conditionSelect', { read: IgxSelectComponent })\n    private conditionSelect: IgxSelectComponent;\n\n    @ViewChild('searchValueInput', { read: ElementRef })\n    private searchValueInput: ElementRef;\n\n    @ViewChild('picker')\n    private picker: IgxDatePickerComponent | IgxTimePickerComponent;\n\n    @ViewChild('addRootAndGroupButton', { read: ElementRef })\n    private addRootAndGroupButton: ElementRef;\n\n    @ViewChild('addConditionButton', { read: ElementRef })\n    private addConditionButton: ElementRef;\n\n    @ViewChild('entityChangeDialog', { read: IgxDialogComponent })\n    private entityChangeDialog: IgxDialogComponent;\n\n    @ViewChild('addOptionsDropDown', { read: IgxDropDownComponent })\n    private addExpressionItemDropDown: IgxDropDownComponent;\n\n    @ViewChild('groupContextMenuDropDown', { read: IgxDropDownComponent })\n    private groupContextMenuDropDown: IgxDropDownComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChildren(IgxChipComponent, { read: IgxChipComponent })\n    public expressionsChips: QueryList<IgxChipComponent>;\n\n    @ViewChild('editingInputsContainer', { read: ElementRef })\n    protected set editingInputsContainer(value: ElementRef) {\n        if ((value && !this._editingInputsContainer) ||\n            (value && this._editingInputsContainer && this._editingInputsContainer.nativeElement !== value.nativeElement)) {\n            requestAnimationFrame(() => {\n                this.scrollElementIntoView(value.nativeElement);\n            });\n        }\n\n        this._editingInputsContainer = value;\n    }\n\n    /** @hidden */\n    protected get editingInputsContainer(): ElementRef {\n        return this._editingInputsContainer;\n    }\n\n    @ViewChild('currentGroupButtonsContainer', { read: ElementRef })\n    protected set currentGroupButtonsContainer(value: ElementRef) {\n        if ((value && !this._currentGroupButtonsContainer) ||\n            (value && this._currentGroupButtonsContainer && this._currentGroupButtonsContainer.nativeElement !== value.nativeElement)) {\n            requestAnimationFrame(() => {\n                this.scrollElementIntoView(value.nativeElement);\n            });\n        }\n\n        this._currentGroupButtonsContainer = value;\n    }\n\n    /** @hidden */\n    protected get currentGroupButtonsContainer(): ElementRef {\n        return this._currentGroupButtonsContainer;\n    }\n\n    @ViewChild('expressionsContainer')\n    private expressionsContainer: ElementRef;\n\n    @ViewChild('overlayOutlet', { read: IgxOverlayOutletDirective, static: true })\n    private overlayOutlet: IgxOverlayOutletDirective;\n\n    @ViewChildren(IgxQueryBuilderTreeComponent)\n    private innerQueries: QueryList<IgxQueryBuilderTreeComponent>;\n\n    /**\n     * @hidden @internal\n     */\n    public innerQueryNewExpressionTree: IExpressionTree;\n\n    /**\n     * @hidden @internal\n     */\n    public rootGroup: ExpressionGroupItem;\n\n    /**\n     * @hidden @internal\n     */\n    public selectedExpressions: ExpressionOperandItem[] = [];\n\n    /**\n     * @hidden @internal\n     */\n    public currentGroup: ExpressionGroupItem;\n\n    /**\n     * @hidden @internal\n     */\n    public contextualGroup: ExpressionGroupItem;\n\n    /**\n     * @hidden @internal\n     */\n    public filteringLogics;\n\n    /**\n     * @hidden @internal\n     */\n    public selectedCondition: string;\n\n    /**\n     * @hidden @internal\n     */\n    public searchValue: { value: any } = { value: null };\n\n    /**\n     * @hidden @internal\n     */\n    public pickerOutlet: IgxOverlayOutletDirective | ElementRef;\n\n    /**\n     * @hidden @internal\n     */\n    public prevFocusedExpression: ExpressionOperandItem;\n\n    /**\n     * @hidden @internal\n     */\n    public initialOperator = 0;\n\n    /**\n     * @hidden @internal\n     */\n    public returnFieldSelectOverlaySettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: true\n    };\n\n    /**\n     * @hidden @internal\n     */\n    public entitySelectOverlaySettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: true\n    };\n\n    /**\n     * @hidden @internal\n     */\n    public fieldSelectOverlaySettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: true\n    };\n\n    /**\n     * @hidden @internal\n     */\n    public conditionSelectOverlaySettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: true\n    };\n\n    /**\n     * @hidden @internal\n     */\n    public addExpressionDropDownOverlaySettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: true\n    };\n\n    /**\n     * @hidden @internal\n     */\n    public groupContextMenuDropDownOverlaySettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: true\n    };\n\n    private destroy$ = new Subject<any>();\n    private _timeoutId: any;\n    private _lastFocusedChipIndex: number;\n    private _focusDelay = DEFAULT_CHIP_FOCUS_DELAY;\n    private _parentExpression: ExpressionOperandItem;\n    private _selectedEntity: EntityType;\n    private _selectedReturnFields: string | string[];\n    private _selectedField: FieldType;\n    private _editingInputsContainer: ElementRef;\n    private _currentGroupButtonsContainer: ElementRef;\n    private _addModeExpression: ExpressionOperandItem;\n    private _editedExpression: ExpressionOperandItem;\n    private _preventInit = false;\n    private _prevFocusedContainer: ElementRef;\n    private _expandedExpressions: IFilteringExpression[] = [];\n    private _fields: FieldType[];\n    private _locale;\n    private _defaultLocale;\n    private _entityNewValue: EntityType;\n    private _resourceStrings = null;\n    private _defaultResourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);\n\n    /**\n     * Returns if the select entity dropdown at the root level is disabled after the initial selection.\n     */\n    public get disableEntityChange(): boolean {\n\n        return !this.parentExpression && this.selectedEntity ? this.queryBuilder.disableEntityChange : false;\n    }\n\n    /**\n     * Returns if the fields combo at the root level is disabled.\n     */\n    public get disableReturnFieldsChange(): boolean {\n\n        return !this.selectedEntity || this.queryBuilder.disableReturnFieldsChange;\n    }\n\n    /**\n     * Returns the current level.\n     */\n    public get level(): number {\n        let parent = this.elRef.nativeElement.parentElement;\n        let _level = 0;\n        while (parent) {\n            if (parent.localName === 'igx-query-builder-tree') {\n                _level++;\n            }\n            parent = parent.parentElement;\n        }\n        return _level;\n    }\n\n    private _positionSettings = {\n        horizontalStartPoint: HorizontalAlignment.Right,\n        verticalStartPoint: VerticalAlignment.Top\n    };\n\n    private _overlaySettings: OverlaySettings = {\n        closeOnOutsideClick: false,\n        modal: false,\n        positionStrategy: new ConnectedPositioningStrategy(this._positionSettings),\n        scrollStrategy: new CloseScrollStrategy()\n    };\n\n    /** @hidden */\n    protected isAdvancedFiltering(): boolean {\n        return (this.entities?.length === 1 && !this.entities[0]?.name) ||\n            this.entities?.find(e => e.childEntities?.length > 0) !== undefined ||\n            (this.entities?.length > 0 && this.queryBuilder?.entities?.length > 0 && this.entities !== this.queryBuilder?.entities);\n    }\n\n    /** @hidden */\n    protected isHierarchicalNestedQuery(): boolean {\n        return this.queryBuilder.entities !== this.entities\n    }\n\n    /** @hidden */\n    protected isSearchValueInputDisabled(): boolean {\n        return !this.selectedField ||\n            !this.selectedCondition ||\n            (this.selectedField &&\n                (this.selectedField.filters.condition(this.selectedCondition).isUnary ||\n                    this.selectedField.filters.condition(this.selectedCondition).isNestedQuery));\n    }\n\n    constructor() {\n        this.initLocale();\n        this.dragService.register(this, this.elRef);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngAfterViewInit(): void {\n        this._overlaySettings.outlet = this.overlayOutlet;\n        this.entitySelectOverlaySettings.outlet = this.overlayOutlet;\n        this.fieldSelectOverlaySettings.outlet = this.overlayOutlet;\n        this.conditionSelectOverlaySettings.outlet = this.overlayOutlet;\n        this.returnFieldSelectOverlaySettings.outlet = this.overlayOutlet;\n        this.addExpressionDropDownOverlaySettings.outlet = this.overlayOutlet;\n        this.groupContextMenuDropDownOverlaySettings.outlet = this.overlayOutlet;\n\n        if (this.isAdvancedFiltering() && this.entities?.length === 1) {\n            this.selectedEntity = this.entities[0].name;\n            if (this._selectedEntity.fields.find(f => f.field === this.expectedReturnField)) {\n                this._selectedReturnFields = [this.expectedReturnField];\n            }\n        }\n\n        // Trigger additional change detection cycle\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public set selectedEntity(value: string) {\n        this._selectedEntity = this.entities?.find(el => el.name === value);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get selectedEntity(): EntityType {\n        return this._selectedEntity;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onEntitySelectChanging(event: ISelectionEventArgs) {\n        event.cancel = true;\n        this._entityNewValue = event.newSelection.value;\n        if (event.oldSelection.value && this.queryBuilder.showEntityChangeDialog) {\n            this.entityChangeDialog.open();\n        } else {\n            this.onEntityChangeConfirm();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public onShowEntityChangeDialogChange(eventArgs: IChangeCheckboxEventArgs) {\n        this.queryBuilder.showEntityChangeDialog = !eventArgs.checked;\n    }\n\n    /**\n     * @hidden\n     */\n    public onEntityChangeCancel() {\n        this.entityChangeDialog.close();\n        this.entitySelect.close();\n        this._entityNewValue = null;\n    }\n\n    /**\n     * @hidden\n     */\n    public onEntityChangeConfirm() {\n        if (this._parentExpression) {\n            this._expressionTree = this.createExpressionTreeFromGroupItem(this.createExpressionGroupItem(this._expressionTree));\n        }\n\n        this._selectedEntity = this._entityNewValue;\n        if (!this._selectedEntity.fields) {\n            this._selectedEntity.fields = [];\n        }\n        this.fields = this._entityNewValue ? this._entityNewValue.fields : [];\n\n        if (this._selectedEntity.fields.find(f => f.field === this.expectedReturnField)) {\n            this._selectedReturnFields = [this.expectedReturnField];\n        } else {\n            this._selectedReturnFields = this.parentExpression ? [] : this._entityNewValue.fields?.map(f => f.field);\n        }\n\n        if (this._expressionTree) {\n            this._expressionTree.entity = this._entityNewValue.name;\n\n            const returnFields = Array.isArray(this._selectedReturnFields) ? this._selectedReturnFields : [this._selectedReturnFields];\n            this._expressionTree.returnFields = this.fields.length === returnFields.length ? ['*'] : returnFields;\n\n            this._expressionTree.filteringOperands = [];\n\n            this._editedExpression = null;\n            if (!this.parentExpression) {\n                this.expressionTreeChange.emit(this._expressionTree);\n            }\n\n            this.rootGroup = null;\n            this.currentGroup = this.rootGroup;\n        }\n\n        this._selectedField = null;\n        this.selectedCondition = null;\n        this.searchValue.value = null;\n\n        this.entityChangeDialog.close();\n        this.entitySelect.close();\n\n        this._entityNewValue = null;\n        this.innerQueryNewExpressionTree = null;\n\n        this.initExpressionTree(this._selectedEntity.name, this.selectedReturnFields);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public set selectedReturnFields(value: string[]) {\n        if (this._selectedReturnFields !== value) {\n            this._selectedReturnFields = value;\n\n            if (this._expressionTree && !this.parentExpression) {\n                this._expressionTree.returnFields = value.length === this.fields.length ? ['*'] : value;\n                this.expressionTreeChange.emit(this._expressionTree);\n            }\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get selectedReturnFields(): string[] {\n        if (typeof this._selectedReturnFields == 'string') {\n            return [this._selectedReturnFields];\n        }\n        return this._selectedReturnFields;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public set selectedField(value: FieldType) {\n        const oldValue = this._selectedField;\n\n        if (this._selectedField !== value) {\n            this._selectedField = value;\n            if (this._selectedField && !this._selectedField.dataType) {\n                this._selectedField.filters = this.getFilters(this._selectedField);\n            }\n\n            this.selectDefaultCondition();\n            if (oldValue && this._selectedField && this._selectedField.dataType !== oldValue.dataType) {\n                this.searchValue.value = null;\n                this.cdr.detectChanges();\n            }\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get selectedField(): FieldType {\n        return this._selectedField;\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public setPickerOutlet(outlet?: IgxOverlayOutletDirective | ElementRef) {\n        this.pickerOutlet = outlet;\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public get isContextMenuVisible(): boolean {\n        return !this.groupContextMenuDropDown.collapsed;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get hasEditedExpression(): boolean {\n        return this._editedExpression !== undefined && this._editedExpression !== null;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public addCondition(parent: ExpressionGroupItem, afterExpression?: ExpressionOperandItem, isUIInteraction?: boolean) {\n        this.cancelOperandAdd();\n\n        const operandItem = new ExpressionOperandItem({\n            fieldName: null,\n            condition: null,\n            conditionName: null,\n            ignoreCase: true,\n            searchVal: null\n        }, parent);\n\n        const groupItem = new ExpressionGroupItem(this.getOperator(null) ?? FilteringLogic.And, parent);\n        this.contextualGroup = groupItem;\n        this.initialOperator = null;\n\n        this._lastFocusedChipIndex = this._lastFocusedChipIndex === undefined ? -1 : this._lastFocusedChipIndex;\n\n        if (parent) {\n            if (afterExpression) {\n                const index = parent.children.indexOf(afterExpression);\n                parent.children.splice(index + 1, 0, operandItem);\n            } else {\n                parent.children.push(operandItem);\n            }\n            this._lastFocusedChipIndex++;\n        } else {\n            this.rootGroup = groupItem;\n            operandItem.parent = groupItem;\n            this.rootGroup.children.push(operandItem);\n            this._lastFocusedChipIndex = 0;\n        }\n\n        this._focusDelay = 250;\n\n        if (isUIInteraction && !afterExpression) {\n            this._lastFocusedChipIndex = this.expressionsChips.length;\n            this._focusDelay = DEFAULT_CHIP_FOCUS_DELAY;\n        }\n\n        this.enterExpressionEdit(operandItem);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public addReverseGroup(parent?: ExpressionGroupItem, afterExpression?: ExpressionItem) {\n        parent = parent ?? this.rootGroup;\n\n        if (parent.operator === FilteringLogic.And) {\n            this.addGroup(FilteringLogic.Or, parent, afterExpression);\n        } else {\n            this.addGroup(FilteringLogic.And, parent, afterExpression);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public endGroup(groupItem: ExpressionGroupItem) {\n        this.currentGroup = groupItem.parent;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public commitExpression() {\n        this.commitOperandEdit();\n        this.focusEditedExpressionChip();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public discardExpression(expressionItem?: ExpressionOperandItem) {\n        this.cancelOperandEdit();\n        if (expressionItem && expressionItem.expression.fieldName) {\n            this.focusEditedExpressionChip();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public commitOperandEdit() {\n        const actualSearchValue = this.searchValue.value;\n        if (this._editedExpression) {\n            this._editedExpression.expression.fieldName = this.selectedField.field;\n            this._editedExpression.expression.condition = this.selectedField.filters.condition(this.selectedCondition);\n            this._editedExpression.expression.conditionName = this.selectedCondition;\n            this._editedExpression.expression.searchVal = DataUtil.parseValue(this.selectedField.dataType, actualSearchValue) || actualSearchValue;\n            this._editedExpression.fieldLabel = this.selectedField.label\n                ? this.selectedField.label\n                : this.selectedField.header\n                    ? this.selectedField.header\n                    : this.selectedField.field;\n\n            const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0]\n            if (innerQuery && this.selectedField?.filters?.condition(this.selectedCondition)?.isNestedQuery) {\n                innerQuery.exitEditAddMode();\n                this._editedExpression.expression.searchTree = this.getExpressionTreeCopy(innerQuery.expressionTree);\n                const returnFields = innerQuery.selectedReturnFields.length > 0 ?\n                                        innerQuery.selectedReturnFields :\n                                        [innerQuery.fields[0].field];\n                this._editedExpression.expression.searchTree.returnFields = returnFields;\n            } else {\n                this._editedExpression.expression.searchTree = null;\n            }\n            this.innerQueryNewExpressionTree = null;\n\n            if (this.selectedField.filters.condition(this.selectedCondition)?.isUnary || this.selectedField.filters.condition(this.selectedCondition)?.isNestedQuery) {\n                this._editedExpression.expression.searchVal = null;\n            }\n\n            this._editedExpression.inEditMode = false;\n            this._editedExpression = null;\n        }\n\n        if (this.selectedReturnFields.length === 0) {\n            this.selectedReturnFields = this.fields.map(f => f.field);\n        }\n\n        this._expressionTree = this.createExpressionTreeFromGroupItem(this.rootGroup, this.selectedEntity?.name, this.selectedReturnFields);\n        if (!this.parentExpression) {\n            this.expressionTreeChange.emit(this._expressionTree);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public cancelOperandAdd() {\n        if (this._addModeExpression) {\n            this._addModeExpression.inAddMode = false;\n            this._addModeExpression = null;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public deleteItem = (expressionItem: ExpressionItem, skipEmit: boolean = false) => {\n        if (!expressionItem.parent) {\n            this.rootGroup = null;\n            this.currentGroup = null;\n            //this._expressionTree = null;\n            return;\n        }\n\n        if (expressionItem === this.currentGroup) {\n            this.currentGroup = this.currentGroup.parent;\n        }\n\n        const children = expressionItem.parent.children;\n        const index = children.indexOf(expressionItem);\n        children.splice(index, 1);\n        const entity = this.expressionTree ? this.expressionTree.entity : null;\n        const returnFields = this.expressionTree ? this.expressionTree.returnFields : null;\n        this._expressionTree = this.createExpressionTreeFromGroupItem(this.rootGroup, entity, returnFields); // TODO: don't recreate if not necessary\n\n        if (!children.length) {\n            this.deleteItem(expressionItem.parent, true);\n        }\n\n        if (!this.parentExpression && !skipEmit) {\n            this.expressionTreeChange.emit(this._expressionTree);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public cancelOperandEdit() {\n        if (this.innerQueries) {\n            const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n            if (innerQuery) {\n                if (innerQuery._editedExpression) {\n                    innerQuery.cancelOperandEdit();\n                }\n\n                innerQuery.expressionTree = this.getExpressionTreeCopy(this._editedExpression.expression.searchTree);\n                this.innerQueryNewExpressionTree = null;\n            }\n        }\n\n        if (this._editedExpression) {\n            this._editedExpression.inEditMode = false;\n\n            if (!this._editedExpression.expression.fieldName) {\n                this.deleteItem(this._editedExpression);\n            }\n\n            this._editedExpression = null;\n        }\n\n        if (!this.expressionTree && this.contextualGroup) {\n            this.initialOperator = this.contextualGroup.operator;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public operandCanBeCommitted(): boolean {\n        const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n        return this.selectedField && this.selectedCondition &&\n            (\n                (\n                    ((!Array.isArray(this.searchValue.value) && !!this.searchValue.value) || (Array.isArray(this.searchValue.value) && this.searchValue.value.length !== 0)) &&\n                    !(this.selectedField?.filters?.condition(this.selectedCondition)?.isNestedQuery)\n                ) ||\n                (\n                    this.selectedField?.filters?.condition(this.selectedCondition)?.isNestedQuery && innerQuery && !!innerQuery.expressionTree && innerQuery.selectedReturnFields?.length > 0\n                ) ||\n                this.selectedField.filters.condition(this.selectedCondition)?.isUnary\n            );\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public canCommitCurrentState(): boolean {\n        const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n        if (innerQuery) {\n            return this.selectedReturnFields?.length > 0 && innerQuery.canCommitCurrentState();\n        } else {\n            return this.selectedReturnFields?.length > 0 &&\n                (\n                    (!this._editedExpression) || // no edited expr\n                    (this._editedExpression && !this.selectedField) || // empty edited expr\n                    (this._editedExpression && this.operandCanBeCommitted() === true) // valid edited expr\n                );\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public commitCurrentState(): void {\n        const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n        if (innerQuery) {\n            innerQuery.commitCurrentState();\n        }\n\n        if (this._editedExpression) {\n            if (this.selectedField) {\n                this.commitOperandEdit();\n            } else {\n                this.deleteItem(this._editedExpression);\n                this._editedExpression = null;\n            }\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public exitEditAddMode(shouldPreventInit = false) {\n        if (!this._editedExpression) {\n            return;\n        }\n\n        this.exitOperandEdit();\n        this.cancelOperandAdd();\n\n        if (shouldPreventInit) {\n            this._preventInit = true;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public exitOperandEdit() {\n        if (!this._editedExpression) {\n            return;\n        }\n\n        if (this.operandCanBeCommitted()) {\n            this.commitOperandEdit();\n        } else {\n            this.cancelOperandEdit();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isExpressionGroup(expression: ExpressionItem): boolean {\n        return expression instanceof ExpressionGroupItem;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onExpressionFocus(expressionItem: ExpressionOperandItem) {\n        if (this.prevFocusedExpression) {\n            this.prevFocusedExpression.focused = false;\n        }\n        expressionItem.focused = true;\n        this.prevFocusedExpression = expressionItem;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onExpressionBlur(event, expressionItem: ExpressionOperandItem) {\n        if (this._prevFocusedContainer && this._prevFocusedContainer !== event.target.closest('.igx-filter-tree__expression-item')) {\n            expressionItem.focused = false;\n        }\n        this._prevFocusedContainer = event.target.closest('.igx-filter-tree__expression-item');\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onChipRemove(expressionItem: ExpressionItem) {\n        this.exitEditAddMode();\n        this.deleteItem(expressionItem);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public focusChipAfterDrag = (index: number) => {\n        this._lastFocusedChipIndex = index;\n        this.focusEditedExpressionChip();\n    }\n    /**\n     * @hidden @internal\n     */\n    public addExpressionBlur() {\n        if (this.prevFocusedExpression) {\n            this.prevFocusedExpression.focused = false;\n        }\n        if (this.addExpressionItemDropDown && !this.addExpressionItemDropDown.collapsed) {\n            this.addExpressionItemDropDown.close();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onChipClick(expressionItem: ExpressionOperandItem, chip: IgxChipComponent) {\n        this.enterExpressionEdit(expressionItem, chip);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public enterExpressionEdit(expressionItem: ExpressionOperandItem, chip?: IgxChipComponent) {\n        this.exitEditAddMode(true);\n        this.cdr.detectChanges();\n        this._lastFocusedChipIndex = chip ? this.expressionsChips.toArray().findIndex(expr => expr === chip) : this._lastFocusedChipIndex;\n        this.enterEditMode(expressionItem);\n    }\n\n\n    /**\n     * @hidden @internal\n     */\n    public clickExpressionAdd(targetButton: HTMLElement, chip: IgxChipComponent) {\n        this.exitEditAddMode(true);\n        this.cdr.detectChanges();\n        this._lastFocusedChipIndex = this.expressionsChips.toArray().findIndex(expr => expr === chip);\n        this.openExpressionAddDialog(targetButton);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public openExpressionAddDialog(targetButton: HTMLElement) {\n        this.addExpressionDropDownOverlaySettings.target = targetButton;\n        this.addExpressionDropDownOverlaySettings.positionStrategy = new ConnectedPositioningStrategy({\n            horizontalDirection: HorizontalAlignment.Right,\n            horizontalStartPoint: HorizontalAlignment.Left,\n            verticalStartPoint: VerticalAlignment.Bottom\n        });\n\n        this.addExpressionItemDropDown.open(this.addExpressionDropDownOverlaySettings);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public enterExpressionAdd(event: ISelectionEventArgs, expressionItem: ExpressionOperandItem) {\n        if (this._addModeExpression) {\n            this._addModeExpression.inAddMode = false;\n        }\n\n        if (this.parentExpression) {\n            this.inEditModeChange.emit(this.parentExpression);\n        }\n\n        const parent = expressionItem.parent ?? this.rootGroup;\n        requestAnimationFrame(() => {\n            if (event.newSelection.value === 'addCondition') {\n                this.addCondition(parent, expressionItem);\n            } else if (event.newSelection.value === 'addGroup') {\n                this.addReverseGroup(parent, expressionItem);\n            }\n            expressionItem.inAddMode = true;\n            this._addModeExpression = expressionItem;\n        })\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public enterEditMode(expressionItem: ExpressionOperandItem) {\n        if (this._editedExpression) {\n            this._editedExpression.inEditMode = false;\n        }\n\n        if (this.parentExpression) {\n            this.inEditModeChange.emit(this.parentExpression);\n        }\n\n        expressionItem.hovered = false;\n        this.fields = this.selectedEntity ? this.selectedEntity.fields : null;\n        this.selectedField =\n            expressionItem.expression.fieldName ?\n                this.fields?.find(field => field.field === expressionItem.expression.fieldName)\n                : null;\n        this.selectedCondition =\n            expressionItem.expression.condition ?\n                expressionItem.expression.condition.name :\n                null;\n        this.searchValue.value = expressionItem.expression.searchVal instanceof Set ?\n            Array.from(expressionItem.expression.searchVal) :\n            expressionItem.expression.searchVal;\n\n        expressionItem.inEditMode = true;\n        this._editedExpression = expressionItem;\n        this.cdr.detectChanges();\n\n        this.entitySelectOverlaySettings.target = this.entitySelect.getEditElement();\n        this.entitySelectOverlaySettings.excludeFromOutsideClick = [this.entitySelect.getEditElement() as HTMLElement];\n        this.entitySelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n\n        if (this.returnFieldSelect) {\n            this.returnFieldSelectOverlaySettings.target = this.returnFieldSelect.getEditElement();\n            this.returnFieldSelectOverlaySettings.excludeFromOutsideClick = [this.returnFieldSelect.getEditElement() as HTMLElement];\n            this.returnFieldSelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n        }\n        if (this.fieldSelect) {\n            this.fieldSelectOverlaySettings.target = this.fieldSelect.getEditElement();\n            this.fieldSelectOverlaySettings.excludeFromOutsideClick = [this.fieldSelect.getEditElement() as HTMLElement];\n            this.fieldSelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n        }\n        if (this.conditionSelect) {\n            this.conditionSelectOverlaySettings.target = this.conditionSelect.getEditElement();\n            this.conditionSelectOverlaySettings.excludeFromOutsideClick = [this.conditionSelect.getEditElement() as HTMLElement];\n            this.conditionSelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n        }\n\n        if (!this.selectedField) {\n            this.fieldSelect.input.nativeElement.focus();\n        } else if (this.selectedField.filters.condition(this.selectedCondition)?.isUnary) {\n            this.conditionSelect?.input.nativeElement.focus();\n        } else {\n            const input = this.searchValueInput?.nativeElement || this.picker?.getEditElement();\n            input?.focus();\n        }\n\n        (this.editingInputs?.nativeElement.parentElement as HTMLElement)?.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onConditionSelectChanging(event: ISelectionEventArgs) {\n        event.cancel = true;\n        this.selectedCondition = event.newSelection.value;\n        this.conditionSelect.close();\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onKeyDown(eventArgs: KeyboardEvent) {\n        eventArgs.stopPropagation();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onGroupClick(groupContextMenuDropDown: any, targetButton: HTMLButtonElement, groupItem: ExpressionGroupItem) {\n        this.exitEditAddMode();\n        this.cdr.detectChanges();\n\n        this.groupContextMenuDropDown = groupContextMenuDropDown;\n        this.groupContextMenuDropDownOverlaySettings.target = targetButton;\n        this.groupContextMenuDropDownOverlaySettings.positionStrategy = new ConnectedPositioningStrategy({\n            horizontalDirection: HorizontalAlignment.Right,\n            horizontalStartPoint: HorizontalAlignment.Left,\n            verticalStartPoint: VerticalAlignment.Bottom\n        });\n\n        if (groupContextMenuDropDown.collapsed) {\n            this.contextualGroup = groupItem;\n            groupContextMenuDropDown.open(this.groupContextMenuDropDownOverlaySettings);\n        } else {\n            groupContextMenuDropDown.close();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getOperator(expressionItem: any) {\n        // if (!expressionItem && !this.expressionTree && !this.initialOperator) {\n        //     this.initialOperator = 0;\n        // }\n\n        const operator = expressionItem ?\n            expressionItem.operator :\n            this.expressionTree ?\n                this.expressionTree.operator :\n                this.initialOperator;\n        return operator;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getSwitchGroupText(expressionItem: any) {\n        const operator = this.getOperator(expressionItem);\n        const condition = operator === FilteringLogic.Or ? this.resourceStrings.igx_query_builder_and_label : this.resourceStrings.igx_query_builder_or_label\n        return this.resourceStrings.igx_query_builder_switch_group.replace('{0}', condition.toUpperCase());\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onGroupContextMenuDropDownSelectionChanging(event: ISelectionEventArgs) {\n        event.cancel = true;\n\n        if (event.newSelection.value === 'switchCondition') {\n            const newOperator = (!this.expressionTree ? this.initialOperator : (this.contextualGroup ?? this._expressionTree).operator) === 0 ? 1 : 0;\n            this.selectFilteringLogic(newOperator);\n        } else if (event.newSelection.value === 'ungroup') {\n            this.ungroup();\n        }\n\n        this.groupContextMenuDropDown.close();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ungroup() {\n        const selectedGroup = this.contextualGroup;\n        const parent = selectedGroup.parent;\n        if (parent) {\n            const index = parent.children.indexOf(selectedGroup);\n            parent.children.splice(index, 1, ...selectedGroup.children);\n\n            for (const expr of selectedGroup.children) {\n                expr.parent = parent;\n            }\n        }\n        this.commitOperandEdit();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public selectFilteringLogic(index: number) {\n        if (!this.expressionTree) {\n            this.initialOperator = index;\n            return;\n        }\n\n        if (this.contextualGroup) {\n            this.contextualGroup.operator = index as FilteringLogic;\n            this.commitOperandEdit();\n        } else if (this.expressionTree) {\n            this._expressionTree.operator = index as FilteringLogic;\n        }\n\n        this.initialOperator = null;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getConditionFriendlyName(name: string): string {\n        // As we have an 'In' condition already used in ESF to search in a Set, we add the 'Query' suffix to the newly introduced nested query condition names.\n        // So instead of in/notIn we end up with 'inQuery'/'notInQuery', hence removing the suffix from the friendly name.\n        return this.resourceStrings[`igx_query_builder_filter_${name?.replace('Query', '')}`] || name;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isDate(value: any) {\n        return value instanceof Date;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public invokeClick(eventArgs: KeyboardEvent) {\n        if (!this.dragService.dropGhostExpression && this.platform.isActivationKey(eventArgs)) {\n            eventArgs.preventDefault();\n            (eventArgs.currentTarget as HTMLElement).click();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public openPicker(args: KeyboardEvent) {\n        if (this.platform.isActivationKey(args)) {\n            args.preventDefault();\n            this.picker.open();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onOutletPointerDown(event) {\n        // This prevents closing the select's dropdown when clicking the scroll\n        event.preventDefault();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getConditionList(): string[] {\n        if (!this.selectedField) return [];\n\n        if (!this.selectedField.filters) {\n            this.selectedField.filters = this.getFilters(this.selectedField);\n        }\n\n        if ((this.isAdvancedFiltering() && !this.entities[0].childEntities) ||\n            (this.isHierarchicalNestedQuery() && this.selectedEntity.name && !this.selectedEntity.childEntities)) {\n            return this.selectedField.filters.conditionList();\n        }\n\n        return this.selectedField.filters.extendedConditionList();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getFormatter(field: string) {\n        return this.fields?.find(el => el.field === field)?.formatter;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getFormat(field: string) {\n        return this.fields?.find(el => el.field === field).pipeArgs.format;\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public setAddButtonFocus() {\n        if (this.addRootAndGroupButton) {\n            this.addRootAndGroupButton.nativeElement.focus();\n        } else if (this.addConditionButton) {\n            this.addConditionButton.nativeElement.focus();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public context(expression: ExpressionItem, afterExpression?: ExpressionItem) {\n        return {\n            $implicit: expression,\n            afterExpression\n        };\n    }\n\n    public formatReturnFields(innerTree: IFilteringExpressionsTree) {\n        const returnFields = innerTree.returnFields;\n        let text = returnFields.join(', ');\n        const innerTreeEntity = this.entities?.find(el => el.name === innerTree.entity);\n        if (returnFields.length === innerTreeEntity?.fields.length) {\n            text = this.resourceStrings.igx_query_builder_all_fields;\n        } else {\n            text = returnFields.join(', ');\n            text = text.length > 25 ? text.substring(0, 25) + ' ...' : text;\n        }\n        return text;\n    }\n\n    public isInEditMode(): boolean {\n        return !this.parentExpression || (this.parentExpression && this.parentExpression.inEditMode);\n    }\n\n    public onInEditModeChanged(expressionItem: ExpressionOperandItem) {\n        if (!expressionItem.inEditMode) {\n            this.enterExpressionEdit(expressionItem);\n        }\n    }\n\n    public getExpressionTreeCopy(expressionTree: IExpressionTree, shouldAssignInnerQueryExprTree?: boolean): IExpressionTree {\n        if (!expressionTree) {\n            return null;\n        }\n\n        const exprTreeCopy = new FilteringExpressionsTree(expressionTree.operator, expressionTree.fieldName, expressionTree.entity, expressionTree.returnFields);\n        exprTreeCopy.filteringOperands = [];\n\n        expressionTree.filteringOperands.forEach(o => isTree(o) ? exprTreeCopy.filteringOperands.push(this.getExpressionTreeCopy(o)) : exprTreeCopy.filteringOperands.push(o));\n\n        if (!this.innerQueryNewExpressionTree && shouldAssignInnerQueryExprTree) {\n            this.innerQueryNewExpressionTree = exprTreeCopy;\n        }\n\n        return exprTreeCopy;\n    }\n\n    public onSelectAllClicked() {\n        if (\n            (this._selectedReturnFields.length > 0 && this._selectedReturnFields.length < this._selectedEntity.fields.length) ||\n            this._selectedReturnFields.length == this._selectedEntity.fields.length\n        ) {\n            this.returnFieldsCombo.deselectAllItems();\n        } else {\n            this.returnFieldsCombo.selectAllItems();\n        }\n    }\n\n    public onReturnFieldSelectChanging(event: IComboSelectionChangingEventArgs | ISelectionEventArgs) {\n        let newSelection = [];\n        if (Array.isArray(event.newSelection)) {\n            newSelection = event.newSelection.map(item => item.field)\n        } else {\n            newSelection.push(event.newSelection.value);\n            this._selectedReturnFields = newSelection;\n        }\n\n        this.initExpressionTree(this.selectedEntity.name, newSelection);\n    }\n\n    public initExpressionTree(selectedEntityName: string, selectedReturnFields: string[]) {\n        if (!this._expressionTree) {\n            this._expressionTree = this.createExpressionTreeFromGroupItem(new ExpressionGroupItem(FilteringLogic.And, this.rootGroup), selectedEntityName, selectedReturnFields);\n        }\n\n        if (!this.parentExpression) {\n            this.expressionTreeChange.emit(this._expressionTree);\n        }\n    }\n\n    public getSearchValueTemplateContext(defaultSearchValueTemplate): IgxQueryBuilderSearchValueContext {\n        const ctx = {\n            $implicit: this.searchValue,\n            selectedField: this.selectedField,\n            selectedCondition: this.selectedCondition,\n            defaultSearchValueTemplate: defaultSearchValueTemplate\n        };\n        return ctx;\n    }\n\n    private getPipeArgs(field: FieldType) {\n        let pipeArgs = {...field.pipeArgs};\n        if (!pipeArgs) {\n            pipeArgs = { digitsInfo: DEFAULT_PIPE_DIGITS_INFO };\n        }\n\n        if (!pipeArgs.format) {\n            pipeArgs.format = field.dataType === GridColumnDataType.Time ?\n                DEFAULT_PIPE_TIME_FORMAT : field.dataType === GridColumnDataType.DateTime ?\n                    DEFAULT_PIPE_DATE_TIME_FORMAT : DEFAULT_PIPE_DATE_FORMAT;\n        }\n\n        return pipeArgs;\n    }\n\n    private selectDefaultCondition() {\n        if (this.selectedField && this.selectedField.filters) {\n            this.selectedCondition = this.selectedField.filters.conditionList().indexOf('equals') >= 0 ? 'equals' : this.selectedField.filters.conditionList()[0];\n        }\n    }\n\n    private getFilters(field: FieldType) {\n        if (!field.filters) {\n            switch (field.dataType) {\n                case GridColumnDataType.Boolean:\n                    return IgxBooleanFilteringOperand.instance();\n                case GridColumnDataType.Number:\n                case GridColumnDataType.Currency:\n                case GridColumnDataType.Percent:\n                    return IgxNumberFilteringOperand.instance();\n                case GridColumnDataType.Date:\n                    return IgxDateFilteringOperand.instance();\n                case GridColumnDataType.Time:\n                    return IgxTimeFilteringOperand.instance();\n                case GridColumnDataType.DateTime:\n                    return IgxDateTimeFilteringOperand.instance();\n                case GridColumnDataType.String:\n                default:\n                    return IgxStringFilteringOperand.instance();\n            }\n        } else {\n            return field.filters;\n        }\n    }\n\n\n    private addGroup(operator: FilteringLogic, parent?: ExpressionGroupItem, afterExpression?: ExpressionItem) {\n        this.cancelOperandAdd();\n\n        const groupItem = new ExpressionGroupItem(operator, parent);\n\n        if (parent) {\n            if (afterExpression) {\n                const index = parent.children.indexOf(afterExpression);\n                parent.children.splice(index + 1, 0, groupItem);\n            } else {\n                parent.children.push(groupItem);\n            }\n        } else {\n            this.rootGroup = groupItem;\n        }\n\n        this.addCondition(groupItem);\n        this.currentGroup = groupItem;\n    }\n\n    private createExpressionGroupItem(expressionTree: IExpressionTree, parent?: ExpressionGroupItem, entityName?: string): ExpressionGroupItem {\n        let groupItem: ExpressionGroupItem;\n        if (expressionTree) {\n            groupItem = new ExpressionGroupItem(expressionTree.operator, parent);\n            if (!expressionTree.filteringOperands) {\n                return groupItem;\n            }\n\n            for (let i = 0; i < expressionTree.filteringOperands.length; i++) {\n                const expr = expressionTree.filteringOperands[i];\n\n                if (isTree(expr)) {\n                    groupItem.children.push(this.createExpressionGroupItem(expr, groupItem, expressionTree.entity));\n                } else {\n                    const filteringExpr = expr as IFilteringExpression;\n                    const exprCopy: IFilteringExpression = {\n                        fieldName: filteringExpr.fieldName,\n                        condition: filteringExpr.condition,\n                        conditionName: filteringExpr.condition?.name || filteringExpr.conditionName,\n                        searchVal: filteringExpr.searchVal,\n                        searchTree: filteringExpr.searchTree,\n                        ignoreCase: filteringExpr.ignoreCase\n                    };\n                    const operandItem = new ExpressionOperandItem(exprCopy, groupItem);\n                    const field = this.fields?.find(el => el.field === filteringExpr.fieldName);\n                    operandItem.fieldLabel = field?.label || field?.header || field?.field;\n                    if (this._expandedExpressions.filter(e => e.searchTree == operandItem.expression.searchTree).length > 0) {\n                        operandItem.expanded = true;\n                    }\n                    groupItem.children.push(operandItem);\n                }\n            }\n\n\n            if (expressionTree.entity) {\n                entityName = expressionTree.entity;\n            }\n            const entity = this.entities?.find(el => el.name === entityName);\n            if (entity) {\n                this.fields = entity.fields;\n            }\n\n            this._selectedEntity = this.entities?.find(el => el.name === entityName);\n            this._selectedReturnFields =\n                !expressionTree.returnFields || expressionTree.returnFields.includes('*') || expressionTree.returnFields.includes('All') || expressionTree.returnFields.length === 0\n                    ? this.fields?.map(f => f.field)\n                    : this.fields?.filter(f => expressionTree.returnFields.indexOf(f.field) >= 0).map(f => f.field);\n        }\n        return groupItem;\n    }\n\n    private createExpressionTreeFromGroupItem(groupItem: ExpressionGroupItem, entity?: string, returnFields?: string[]): FilteringExpressionsTree {\n        if (!groupItem) {\n            return null;\n        }\n\n        const expressionTree = new FilteringExpressionsTree(groupItem.operator, undefined, entity, returnFields);\n\n        for (let i = 0; i < groupItem.children.length; i++) {\n            const item = groupItem.children[i];\n\n            if (item instanceof ExpressionGroupItem) {\n                const subTree = this.createExpressionTreeFromGroupItem((item as ExpressionGroupItem), entity, returnFields);\n                expressionTree.filteringOperands.push(subTree);\n            } else {\n                expressionTree.filteringOperands.push((item as ExpressionOperandItem).expression);\n            }\n        }\n\n        return expressionTree;\n    }\n\n    private scrollElementIntoView(target: HTMLElement) {\n        const container = this.expressionsContainer.nativeElement;\n        const targetOffset = target.offsetTop - container.offsetTop;\n        const delta = 10;\n\n        if (container.scrollTop + delta > targetOffset) {\n            container.scrollTop = targetOffset - delta;\n        } else if (container.scrollTop + container.clientHeight < targetOffset + target.offsetHeight + delta) {\n            container.scrollTop = targetOffset + target.offsetHeight + delta - container.clientHeight;\n        }\n    }\n\n    private focusEditedExpressionChip() {\n        if (this._timeoutId) {\n            clearTimeout(this._timeoutId);\n        }\n\n        this._timeoutId = setTimeout(() => {\n            if (this._lastFocusedChipIndex != -1) {\n                //Sort the expression chip list.\n                //If there was a recent drag&drop and the tree hasn't rerendered(child query), they will be unordered\n                const sortedChips = this.expressionsChips.toArray().sort(function (a, b) {\n                    if (a === b) return 0;\n                    if (a.chipArea.nativeElement.compareDocumentPosition(b.chipArea.nativeElement) & 2) {\n                        // b comes before a\n                        return 1;\n                    }\n                    return -1;\n                });\n                const chipElement = sortedChips[this._lastFocusedChipIndex]?.nativeElement;\n                if (chipElement) {\n                    chipElement.focus();\n                }\n                this._lastFocusedChipIndex = -1;\n                this._focusDelay = DEFAULT_CHIP_FOCUS_DELAY;\n            }\n        }, this._focusDelay);\n    }\n\n    private init() {\n        this.cancelOperandAdd();\n        this.cancelOperandEdit();\n\n        // Ignore values of certain properties for the comparison\n        const propsToIgnore = ['parent', 'hovered', 'ignoreCase', 'inEditMode', 'inAddMode'];\n        const propsReplacer = function replacer(key, value) {\n            if (propsToIgnore.indexOf(key) >= 0) {\n                return undefined;\n            } else {\n                return value;\n            }\n        };\n\n        // Skip root being recreated if the same\n        const newRootGroup = this.createExpressionGroupItem(this.expressionTree);\n        if (JSON.stringify(this.rootGroup, propsReplacer) !== JSON.stringify(newRootGroup, propsReplacer)) {\n            this.rootGroup = this.createExpressionGroupItem(this.expressionTree);\n            this.currentGroup = this.rootGroup;\n        }\n\n        if (this.rootGroup?.children?.length == 0) {\n            this.rootGroup = null;\n            this.currentGroup = null;\n        }\n    }\n\n    private initLocale() {\n        this._defaultLocale = getCurrentI18n();\n        this._locale = this._localeId !== DEFAULT_LOCALE ? this._localeId : this._locale;\n        onResourceChangeHandle(this.destroy$, this.onResourceChange, this);\n    }\n\n    private onResourceChange(args: CustomEvent<IResourceChangeEventArgs>) {\n        this._defaultLocale = args.detail.newLocale;\n        if (!this._locale) {\n            this._defaultResourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN, false);\n        }\n    }\n\n    /** rootGroup is recreated after clicking Apply, which sets new expressionTree and calls init()*/\n    protected trackExpressionItem = trackByIdentity;\n}\n","<ng-template #addIcon>\n    <igx-icon family=\"default\" name=\"add\"></igx-icon>\n</ng-template>\n\n<ng-template #closeIcon>\n    <igx-icon family=\"default\" name=\"close\"></igx-icon>\n</ng-template>\n\n<ng-template #selectFromTemplate>\n    <div class=\"igx-filter-tree__inputs\" [style.display]=\"(isInEditMode() && (!this.isAdvancedFiltering() || this.isHierarchicalNestedQuery())) ? 'flex' : 'none'\">\n        <div class=\"igx-filter-tree__inputs-field\">\n            <span class=\"igx-query-builder__label\">{{ this.resourceStrings.igx_query_builder_from_label }}</span>\n            <igx-select #entitySelect\n                type=\"box\"\n                (selectionChanging)=\"onEntitySelectChanging($event)\"\n                (opening)=\"exitEditAddMode(true)\"\n                [overlaySettings]=\"entitySelectOverlaySettings\"\n                [ngModel]=\"selectedEntity\"\n                [style.display]=\"isInEditMode() ? 'block' : 'none'\"\n                [placeholder]=\"this.resourceStrings.igx_query_builder_select_entity\"\n                [disabled]=\"disableEntityChange\"\n            >\n                @for (entity of entities; track entity.name) {\n                    <igx-select-item [value]=\"entity\">\n                        {{entity.name}}\n                    </igx-select-item>\n                }\n            </igx-select>\n        </div>\n\n        <div class=\"igx-filter-tree__inputs-field\">\n            @if (!this.isHierarchicalNestedQuery()) {\n                <span class=\"igx-query-builder__label\">{{ this.resourceStrings.igx_query_builder_select_label }}</span>\n            }\n            @if (!parentExpression) {\n                <igx-combo\n                    #returnFieldsCombo\n                    [itemsMaxHeight]=\"250\"\n                    [data]=\"fields\"\n                    [displayKey]=\"'field'\"\n                    [valueKey]=\"'field'\"\n                    [disabled]=\"disableReturnFieldsChange\"\n                    [(ngModel)]=\"selectedReturnFields\"\n                    [overlaySettings]=\"returnFieldSelectOverlaySettings\"\n                    [placeholder]=\"this.resourceStrings.igx_query_builder_select_return_fields\"\n                    searchPlaceholder=\"{{ this.resourceStrings.igx_query_builder_search }}\"\n                    [style.display]=\"isInEditMode() ? 'block' : 'none'\"\n                    (selectionChanging)=\"onReturnFieldSelectChanging($event)\"\n                    (opening)=\"exitEditAddMode()\"\n                >\n                    <ng-template igxComboHeader>\n                        <div\n                            class=\"igx-drop-down__item igx-drop-down__item--query-builder\"\n                            (click)=\"onSelectAllClicked()\"\n                            [ngClass]=\"{'igx-drop-down__item--selected': this.selectedEntity && this.selectedReturnFields && this.selectedEntity.fields.length === this.selectedReturnFields.length}\"\n                        >\n                            <igx-checkbox\n                                    [checked]=\"this.selectedEntity && this.selectedReturnFields && this.selectedEntity.fields.length === this.selectedReturnFields.length\"\n                                    [indeterminate]=\"this.selectedEntity && this.selectedReturnFields && this.selectedReturnFields.length > 0 && this.selectedReturnFields.length < this.selectedEntity.fields?.length\"\n                                    [readonly]=\"true\"\n                                    [disableRipple]=\"true\"\n                                    [tabindex]=\"-1\"\n                                    class=\"igx-combo__checkbox\">\n                            </igx-checkbox>\n                            <div class=\"igx-drop-down__inner\">\n                                {{ this.resourceStrings.igx_query_builder_select_all }}\n                            </div>\n                        </div>\n                    </ng-template>\n                </igx-combo>\n            }\n            @else {\n                <igx-select #returnFieldSelect\n                    type=\"box\"\n                    (selectionChanging)=\"onReturnFieldSelectChanging($event)\"\n                    [overlaySettings]=\"returnFieldSelectOverlaySettings\"\n                    [disabled]=\"!selectedEntity\"\n                    [ngModel]=\"selectedReturnFields ? selectedReturnFields[0] : null\"\n                    [placeholder]=\"this.resourceStrings.igx_query_builder_select_return_field_single\"\n                    [style.display]=\"isInEditMode() ? 'block' : 'none'\"\n                    (opening)=\"exitEditAddMode()\"\n                >\n                    @for (field of fields; track field.field) {\n                        <igx-select-item [value]=\"field.field\">\n                            {{ field.field }}\n                        </igx-select-item>\n                    }\n                </igx-select>\n            }\n        </div>\n    </div>\n</ng-template>\n\n<div\n    #expressionsContainer\n    class=\"igx-query-builder__main\"\n>\n    <ng-container *ngTemplateOutlet=\"selectFromTemplate\"></ng-container>\n\n    <ng-template #addExpressionsTemplate let-expressionItem let-afterExpression=\"afterExpression\">\n        <button type=\"button\"\n            #addConditionButton\n            igxButton=\"flat\"\n            [disabled]=\"hasEditedExpression\"\n            (click)=\"addCondition(expressionItem, afterExpression, true)\"\n            igxDrop\n            (enter)=\"dragService.onAddConditionEnter(addConditionButton, expressionItem)\"\n            (leave)=\"dragService.onChipLeave()\"\n        >\n            <ng-container *ngTemplateOutlet=\"addIcon\"></ng-container>\n            <span>{{\n                this.resourceStrings.igx_query_builder_add_condition_root\n            }}</span>\n        </button>\n\n        @if (this.rootGroup) {\n            <button type=\"button\"\n                igxButton=\"flat\"\n                [disabled]=\"hasEditedExpression\"\n                (click)=\"addReverseGroup(expressionItem, afterExpression)\"\n            >\n                <ng-container *ngTemplateOutlet=\"addIcon\"></ng-container>\n                <span>{{ this.resourceStrings.igx_query_builder_add_group_root }}</span>\n            </button>\n        }\n    </ng-template>\n\n    <ng-template #operandTemplate let-expressionItem>\n        @if (!expressionItem.inEditMode) {\n            @if(dragService.dropGhostExpression && expressionItem === dragService.dropGhostExpression && dragService.isKeyboardDrag === false){\n                <div class=\"igx-filter-tree__expression-item igx-filter-tree__expression-item-drop-ghost\">\n                    <igx-chip [data]=\"expressionItem\">\n                        {{this.resourceStrings.igx_query_builder_drop_ghost_text}}\n                    </igx-chip>\n                </div>\n            } @else {\n            <div\n                #dragRef\n                igxDrop\n                (enter)=\"dragService.onChipEnter(dragRef, expressionItem)\"\n                (over)=\"dragService.onDivOver(dragRef, expressionItem)\"\n                (leave)=\"dragService.onChipLeave()\"\n                (dropped)=\"dragService.onDivDropped(expressionItem)\"\n                [ngClass]=\"{\n                    'igx-filter-tree__expression-item': true,\n                    'igx-filter-tree__expression-item-keyboard-ghost': expressionItem === dragService.dropGhostExpression\n                  }\"\n                (mouseenter)=\"expressionItem.hovered = true\"\n                (mouseleave)=\"expressionItem.hovered = false\"\n                (focusin)=\"onExpressionFocus(expressionItem)\"\n                (focusout)=\"onExpressionBlur($event, expressionItem)\"\n            >\n                <igx-chip\n                    #expressionChip\n                    [draggable]=\"true\"\n                    [hideBaseOnDrag]=\"false\"\n                    [animateOnRelease]=\"false\"\n                    (moveStart)=\"dragService.onMoveStart(dragRef, expressionItem, false)\"\n                    (moveEnd)=\"dragService.onMoveEnd()\"\n                    (dragEnter)=\"dragService.onChipEnter(dragRef, expressionItem)\"\n                    (dragOver)=\"dragService.onChipOver(dragRef)\"\n                    (dragLeave)=\"dragService.onChipLeave()\"\n                    (dragDrop)=\"dragService.onChipDropped()\"\n                    #target=\"tooltipTarget\"\n                    [igxTooltipTarget]=\"tooltipRef\"\n                    [data]=\"expressionItem\"\n                    [removable]=\"isInEditMode() ? 'true' : 'false'\"\n                    (keydown)=\"invokeClick($event)\"\n                    (click)=\"onChipClick(expressionItem, expressionChip)\"\n                    (remove)=\"onChipRemove(expressionItem)\"\n\n                >\n                    <igx-icon igxPrefix\n                        class=\"igx-drag-indicator\"\n                        tabindex=\"0\"\n                        (focus)=\"dragService.onChipDragIndicatorFocus(dragRef, expressionItem)\"\n                        (focusout)=\"dragService.onChipDragIndicatorFocusOut()\"\n                        family=\"default\" name=\"drag_indicator\"\n                    >\n                    </igx-icon>\n                    <span igxPrefix class=\"igx-filter-tree__expression-column\">\n                        {{expressionItem.fieldLabel || expressionItem.expression.fieldName}}\n                    </span>\n                    <span igxPrefix class=\"igx-filter-tree__expression-condition\">\n                        {{\n                            getConditionFriendlyName(\n                                expressionItem.expression.condition?.name\n                            )\n                        }}\n                    </span>\n                    @if (!expressionItem.expression.condition?.isUnary) {\n                        <span>\n                            @if (expressionItem.expression.searchTree) {\n                                <ng-container>\n                                    <strong>{{expressionItem.expression.searchTree.entity}}</strong>&nbsp;/ {{formatReturnFields(expressionItem.expression.searchTree)}}\n                                </ng-container>\n                            }\n                            @else {\n                                <ng-container>\n                                    @if(isDate(expressionItem.expression.searchVal)) {\n                                        @if(getFormatter(expressionItem.expression.fieldName)) {\n                                        {{\n                                                expressionItem.expression.searchVal\n                                                | fieldFormatter\n                                                    : getFormatter(\n                                                            expressionItem.expression.fieldName\n                                                        )\n                                                    : undefined\n                                        }}\n                                        } @else {\n                                            {{\n                                                expressionItem.expression.searchVal\n                                                | date\n                                                    : getFormat(\n                                                            expressionItem.expression.fieldName\n                                                        )\n                                                    : undefined\n                                                    : this.locale\n                                            }}\n                                        }\n                                    } @else {\n                                        @if (getFormatter(expressionItem.expression.fieldName)) {\n                                            {{\n                                                expressionItem.expression.searchVal\n                                                    | fieldFormatter\n                                                    : getFormatter(expressionItem.expression.fieldName)\n                                                    : (expressionItem.expression.conditionName ||  expressionItem.expression.condition?.name)\n                                            }}\n                                        } @else {\n                                            {{ expressionItem.expression.searchVal }}\n                                        }\n                                    }\n                                </ng-container>\n                            }\n                        </span>\n                    }\n                </igx-chip>\n                <div #tooltipRef=\"tooltip\" igxTooltip>\n                    @if (expressionItem.expression.searchTree){\n                        {{expressionItem.expression.searchTree.returnFields.join(', ')}}\n                    } @else if (expressionItem.expression.condition?.isUnary) {\n                        {{getConditionFriendlyName(expressionItem.expression.condition?.name)}}\n                    } @else {\n                        @if(getFormatter(expressionItem.expression.fieldName)) {\n                            {{\n                                expressionItem.expression.searchVal\n                                    | fieldFormatter\n                                    : getFormatter(expressionItem.expression.fieldName)\n                                    : (expressionItem.expression.conditionName || expressionItem.expression.condition?.name)\n                            }}\n                        } @else {\n                            {{ expressionItem.expression.searchVal }}\n                        }\n                    }\n                </div>\n\n                @if (expressionItem.focused || expressionItem.hovered) {\n                    <div igxDragIgnore class=\"igx-filter-tree__expression-actions\">\n                        <button #addExpressionButton igxDragIgnore igxIconButton=\"outlined\" [igxDropDownItemNavigation]=\"addOptionsDropDown\"\n                        aria-labelledby=\"add-expression\" (keydown)=\"invokeClick($event)\"\n                            (click)=\"clickExpressionAdd(addExpressionButton, expressionChip)\"\n                            (blur)=\"addExpressionBlur()\">\n                            <igx-icon id=\"add-expression\" family=\"default\" name=\"add\"></igx-icon>\n                        </button>\n                        <igx-drop-down #addOptionsDropDown\n                            (selectionChanging)=\"enterExpressionAdd($event, expressionItem)\">\n                            <igx-drop-down-item [value]=\"'addCondition'\">\n                                <span>{{this.resourceStrings.igx_query_builder_add_condition}}</span>\n                            </igx-drop-down-item>\n                            <igx-drop-down-item [value]=\"'addGroup'\">\n                                <span>{{this.resourceStrings.igx_query_builder_add_group}}</span>\n                            </igx-drop-down-item>\n                        </igx-drop-down>\n                    </div>\n                }\n            </div>\n        }\n    }\n        <div #editingInputsContainer class=\"igx-filter-tree__subquery\" >\n            @if (expressionItem.inEditMode) {\n                <div\n                    #editingInputs\n                    igxDrop\n                    (enter)=\"dragService.onChipEnter(editingInputsContainer, expressionItem)\"\n                    (over)=\"dragService.onChipEnter(editingInputsContainer, expressionItem)\"\n                    (leave)=\"dragService.onChipLeave()\"\n                    (dropped)=\"dragService.onDivDropped(expressionItem)\"\n                    class=\"igx-filter-tree__inputs\"\n                >\n                    <igx-select\n                        #fieldSelect\n                        type=\"box\"\n                        [overlaySettings]=\"fieldSelectOverlaySettings\"\n                        [(ngModel)]=\"selectedField\"\n                        [disabled]=\"!fields\"\n                        [placeholder]=\"this.resourceStrings.igx_query_builder_column_placeholder\"\n                    >\n\n                        @for (field of fields; track field) {\n                            <igx-select-item [value]=\"field\">\n                                {{ field.label || field.header || field.field }}\n                            </igx-select-item>\n                        }\n                    </igx-select>\n\n                    <igx-select\n                        #conditionSelect\n                        type=\"box\"\n                        [overlaySettings]=\"conditionSelectOverlaySettings\"\n                        [(ngModel)]=\"selectedCondition\"\n                        (selectionChanging)=\"onConditionSelectChanging($event)\"\n                        [disabled]=\"!selectedField\"\n                        [placeholder]=\"this.resourceStrings.igx_query_builder_condition_placeholder\"\n                    >\n                        @if (\n                            selectedField &&\n                            conditionSelect.value &&\n                            selectedField.filters.condition(conditionSelect.value)\n                        ) {\n                            <igx-prefix>\n                                <igx-icon\n                                    family=\"default\"\n                                    [name]=\"\n                                        selectedField.filters.condition(\n                                            conditionSelect.value\n                                        ).iconName\n                                    \"\n                                >\n                                </igx-icon>\n                            </igx-prefix>\n                        }\n\n                        @for (condition of getConditionList(); track condition) {\n                            <igx-select-item\n                                [value]=\"condition\"\n                                [text]=\"getConditionFriendlyName(condition)\"\n                            >\n                                <div class=\"igx-grid__filtering-dropdown-items\">\n                                    <igx-icon\n                                        family=\"default\"\n                                        [name]=\"\n                                            selectedField.filters.condition(condition)\n                                                .iconName\n                                        \"\n                                    >\n                                    </igx-icon>\n                                    <span class=\"igx-grid__filtering-dropdown-text\">{{\n                                        getConditionFriendlyName(condition)\n                                    }}</span>\n                                </div>\n                            </igx-select-item>\n                        }\n                    </igx-select>\n\n                    <ng-container\n                        *ngTemplateOutlet=\"\n                            searchValueTemplate ? searchValueTemplate : defaultSearchValueTemplate;\n                            context: getSearchValueTemplateContext(defaultSearchValueTemplate)\n                        \"\n                    >\n                    </ng-container>\n\n                    <ng-template #defaultSearchValueTemplate>\n                        @if(!selectedField ||\n                            (selectedField.dataType !== 'date' && selectedField.dataType !== 'time' && selectedField.dataType !== 'dateTime')) {\n                                <igx-input-group type=\"box\">\n\n                                        <input\n                                            #searchValueInput\n                                            igxInput\n                                            [disabled]=\"isSearchValueInputDisabled()\"\n                                            [placeholder]=\"this.selectedCondition === 'inQuery' || this.selectedCondition === 'notInQuery' ?\n                                            this.resourceStrings.igx_query_builder_query_value_placeholder :\n                                            this.resourceStrings.igx_query_builder_value_placeholder\"\n                                            [type]=\"\n                                            selectedField && selectedField.dataType === 'number'\n                                                ? 'number'\n                                                : 'text'\n                                        \"\n                                        [(ngModel)]=\"searchValue.value\"\n                                    />\n                                </igx-input-group>\n                        }\n                        @else if (selectedField && selectedField.dataType === 'date') {\n                            <igx-date-picker\n                                #picker\n                                [(value)]=\"searchValue.value\"\n                                (keydown)=\"openPicker($event)\"\n                                (click)=\"picker.open()\"\n                                type=\"box\"\n                                [disabled]=\"isSearchValueInputDisabled()\"\n                                [locale]=\"this.locale\"\n                                [outlet]=\"pickerOutlet\"\n                                [formatter]=\"selectedField.formatter\"\n                                [displayFormat]=\"selectedField.pipeArgs.format\"\n                                [weekStart]=\"selectedField.pipeArgs.weekStart\"\n                                [placeholder]=\"this.resourceStrings.igx_query_builder_date_placeholder\"\n                            >\n                                <!-- disable default icons -->\n                                <igx-picker-toggle></igx-picker-toggle>\n                                <igx-picker-clear></igx-picker-clear>\n                            </igx-date-picker>\n                        }\n                        @else if (selectedField && selectedField.dataType === 'time') {\n                            <igx-time-picker\n                                #picker\n                                [(value)]=\"searchValue.value\"\n                                (click)=\"picker.open()\"\n                                (keydown)=\"openPicker($event)\"\n                                type=\"box\"\n                                [disabled]=\"isSearchValueInputDisabled()\"\n                                [locale]=\"this.locale\"\n                                [outlet]=\"pickerOutlet\"\n                                [formatter]=\"selectedField.formatter\"\n                                [displayFormat]=\"selectedField.pipeArgs.format\"\n                                [inputFormat]=\"selectedField.editorOptions?.dateTimeFormat\"\n                                [placeholder]=\"this.resourceStrings.igx_query_builder_time_placeholder\"\n                            >\n                                <!-- disable default icons -->\n                                <igx-picker-toggle></igx-picker-toggle>\n                                <igx-picker-clear></igx-picker-clear>\n                            </igx-time-picker>\n                        }\n                        @else if (selectedField && selectedField.dataType === 'dateTime') {\n                            <igx-input-group #inputGroup type=\"box\">\n                                <input\n                                    #input\n                                    igxInput\n                                    tabindex=\"0\"\n                                    [placeholder]=\"this.resourceStrings.igx_query_builder_datetime_placeholder\"\n                                    [(ngModel)]=\"searchValue.value\"\n                                    [disabled]=\"isSearchValueInputDisabled()\"\n                                    [locale]=\"this.locale\"\n                                    [igxDateTimeEditor]=\"selectedField.editorOptions?.dateTimeFormat\"\n                                    [defaultFormatType]=\"selectedField.dataType\"\n                                    [displayFormat]=\"selectedField.pipeArgs.format\"\n                                />\n                            </igx-input-group>\n                        }\n                    </ng-template>\n\n                    <div class=\"igx-filter-tree__inputs-actions\">\n                        <button type=\"button\"\n                            igxIconButton=\"outlined\"\n                            [disabled]=\"!operandCanBeCommitted()\"\n                            (click)=\"commitExpression()\"\n                        >\n                            <igx-icon family=\"default\" name=\"confirm\"></igx-icon>\n                        </button>\n                        <button type=\"button\"\n                            igxIconButton=\"outlined\"\n                            (click)=\"discardExpression(expressionItem)\"\n                        >\n                            <ng-container *ngTemplateOutlet=\"closeIcon\"></ng-container>\n                        </button>\n                    </div>\n                </div>\n            }\n\n            @if (\n                (!expressionItem.inEditMode && expressionItem.expression.searchTree && expressionItem.expression.searchTree.filteringOperands?.length > 0) ||\n                (expressionItem.inEditMode && selectedField?.filters?.condition(selectedCondition)?.isNestedQuery)\n            ) {\n                <ng-container>\n                    <igx-query-builder-tree\n                        [style.display]=\"expressionItem.inEditMode || expressionItem.expanded ? 'block' : 'none'\"\n                        [entities]=\"(this.selectedEntity ? this.selectedEntity.childEntities : entities?.[0]?.childEntities) ?? (entities ?? [])\"\n                        [queryBuilder]=\"this.queryBuilder\"\n                        [parentExpression]=\"expressionItem\"\n                        [expectedReturnField]=\"this.selectedField?.field\"\n                        [expressionTree]=\"expressionItem.inEditMode ? (innerQueryNewExpressionTree ?? getExpressionTreeCopy(expressionItem.expression.searchTree, true)) : expressionItem.expression.searchTree\"\n                        (inEditModeChange)=\"onInEditModeChanged($event)\"\n                        [searchValueTemplate]=\"searchValueTemplate\"\n                        [resourceStrings]=\"resourceStrings\">\n                    </igx-query-builder-tree>\n                </ng-container>\n            }\n        </div>\n    </ng-template>\n\n    <ng-template #expressionGroupTemplate let-expressionItem>\n        <div class=\"igx-filter-tree\"\n            (focusout)=\"parentExpression? null : dragService.onDragFocusOut()\">\n            <div\n                class=\"igx-filter-tree__line\"\n                [ngClass]=\"{\n                    'igx-filter-tree__line--and': getOperator(expressionItem) === 0,\n                    'igx-filter-tree__line--or': getOperator(expressionItem) === 1\n                }\"\n            ></div>\n\n            <div class=\"igx-filter-tree__expressions\">\n                <div class=\"igx-filter-tree__expression-context-menu\"\n                    #groupRef\n                    igxDrop\n                    (enter)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n                    (over)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n                    (leave)=\"dragService.onChipLeave()\"\n                >\n                    <button #changeGroupButton\n                            [ngClass]=\"{\n                                'igx-filter-tree__button--and': getOperator(expressionItem) === 0,\n                                'igx-filter-tree__button--or': getOperator(expressionItem) === 1\n                            }\"\n                            [igxDropDownItemNavigation]=\"groupContextMenuDropDown\"\n                            igxDragIgnore\n                            igxButton=\"flat\"\n                            aria-labelledby=\"change-group\"\n                            (keydown)=\"invokeClick($event)\"\n                            (click)=\"onGroupClick(groupContextMenuDropDown, changeGroupButton, expressionItem)\"\n                    >\n                        <span\n                            igxDrop\n                            (enter)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n                            (over)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n                            (leave)=\"dragService.onChipLeave()\"\n                        >\n                            {{getOperator(expressionItem) === 0 ? this.resourceStrings.igx_query_builder_and_label : this.resourceStrings.igx_query_builder_or_label}}\n                        </span>\n                        <igx-icon family=\"default\" name=\"arrow_drop_down\" role=\"button\"></igx-icon>\n                    </button>\n                    <igx-drop-down #groupContextMenuDropDown\n                                   (selectionChanging)=\"onGroupContextMenuDropDownSelectionChanging($event)\"\n                                   [width]=\"'fit-content'\">\n                        <igx-drop-down-item [value]=\"'switchCondition'\"\n                        >\n                            {{getSwitchGroupText(expressionItem)}}\n                        </igx-drop-down-item>\n                        <igx-drop-down-item [value]=\"'ungroup'\"\n                                            [disabled]=\"this.rootGroup === this.contextualGroup\"\n                        >\n                            {{this.resourceStrings.igx_query_builder_ungroup}}\n                        </igx-drop-down-item>\n                    </igx-drop-down>\n                </div>\n                <div class=\"igx-filter-tree__expression-section\">\n                    @for (expr of expressionItem?.children; track trackExpressionItem(expr)) {\n                        <ng-container>\n                            <ng-container\n                                    *ngTemplateOutlet=\"\n                                isExpressionGroup(expr)\n                                    ? expressionGroupTemplate\n                                    : operandTemplate;\n                                context: context(expr)\n                            \"\n                            >\n                            </ng-container>\n                        </ng-container>\n                    }\n                </div>\n\n                @if (expressionItem === rootGroup && !hasEditedExpression) {\n                    <div\n                            #currentGroupButtonsContainer\n                            class=\"igx-filter-tree__buttons\"\n                    >\n                        <ng-container\n                                *ngTemplateOutlet=\"\n                                addExpressionsTemplate;\n                                context: context(expressionItem)\n                            \"\n                        >\n                        </ng-container>\n                    </div>\n                }\n            </div>\n        </div>\n    </ng-template>\n\n    @if (rootGroup || (!rootGroup && (selectedEntity || (entities?.length === 1 && !entities[0]?.name)))) {\n        <div class=\"igx-filter-tree__section\">\n            @if (!this.isAdvancedFiltering()) {\n                <span class=\"igx-query-builder__label\">Where</span>\n            }\n            <ng-container\n                *ngTemplateOutlet=\"\n                    expressionGroupTemplate;\n                    context: context(rootGroup)\n                \"\n            ></ng-container>\n        </div>\n    }\n</div>\n\n<div\n    #overlayOutlet\n    igxOverlayOutlet\n    class=\"igx-query-builder__outlet\"\n    (pointerdown)=\"onOutletPointerDown($event)\"\n></div>\n\n<igx-dialog\n    #entityChangeDialog\n    title=\"{{ this.resourceStrings.igx_query_builder_dialog_title }}\"\n    leftButtonLabel=\"{{ this.resourceStrings.igx_query_builder_dialog_cancel }}\"\n    rightButtonLabel=\"{{ this.resourceStrings.igx_query_builder_dialog_confirm }}\"\n    (leftButtonSelect)=\"onEntityChangeCancel()\"\n    (rightButtonSelect)=\"onEntityChangeConfirm()\">\n    <section class=\"igx-query-builder-dialog\">\n        <p>{{ this.resourceStrings.igx_query_builder_dialog_message }}</p>\n        <igx-checkbox\n                (change)=\"onShowEntityChangeDialogChange($event)\"\n                [disableRipple]=\"true\"\n                [tabindex]=\"-1\">\n            {{ this.resourceStrings.igx_query_builder_dialog_checkbox_text }}\n        </igx-checkbox>\n    </section>\n</igx-dialog>\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { IgxQueryBuilderSearchValueContext } from './query-builder.common';\n\n/**\n * Defines the custom template that will be used for the search value input of condition in edit mode\n *\n * @igxModule IgxQueryBuilderModule\n * @igxKeywords query builder, query builder search value\n * @igxGroup Data entry and display\n *\n * @example\n * <igx-query-builder>\n *      <ng-template igxQueryBuilderSearchValue let-expression=\"expression\">\n *          <input type=\"text\" required [(ngModel)]=\"expression.searchVal\"/>\n *      </ng-template>\n *  </igx-query-builder>\n */\n@Directive({\n    selector: '[igxQueryBuilderSearchValue]',\n    standalone: true\n})\nexport class IgxQueryBuilderSearchValueTemplateDirective {\n    public template = inject<TemplateRef<IgxQueryBuilderSearchValueContext>>(TemplateRef);\n\n     public static ngTemplateContextGuard(_directive: IgxQueryBuilderSearchValueTemplateDirective,\n        context: unknown): context is IgxQueryBuilderSearchValueContext {\n        return true;\n    }\n}\n","import { booleanAttribute, ContentChild, EventEmitter, Output, TemplateRef, inject, ContentChildren, QueryList } from '@angular/core';\nimport {\n    Component, Input, ViewChild, ElementRef, OnDestroy, HostBinding\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport {\n    EntityType,\n    FieldType,\n    IExpressionTree,\n    IQueryBuilderResourceStrings,\n    QueryBuilderResourceStringsEN,\n    recreateTree,\n    IgxOverlayOutletDirective,\n    getCurrentResourceStrings,\n    onResourceChangeHandle\n} from 'igniteui-angular/core';\nimport { IgxQueryBuilderTreeComponent } from './query-builder-tree.component';\nimport { IgxIconService } from 'igniteui-angular/icon';\nimport { editor } from '@igniteui/material-icons-extended';\nimport { IgxQueryBuilderSearchValueTemplateDirective } from './query-builder.directives';\nimport { IgxQueryBuilderSearchValueContext } from './query-builder.common';\nimport { IgxQueryBuilderHeaderComponent } from './query-builder-header.component';\n\n/* wcElementTag: igc-query-builder */\n/* blazorIndirectRender */\n/**\n * A component used for operating with complex filters by creating or editing conditions\n * and grouping them using AND/OR logic.\n * It is used internally in the Advanced Filtering of the Grid.\n *\n * @example\n * ```html\n * <igx-query-builder [entities]=\"this.entities\">\n * </igx-query-builder>\n * ```\n */\n@Component({\n    selector: 'igx-query-builder',\n    templateUrl: './query-builder.component.html',\n    imports: [IgxQueryBuilderTreeComponent]\n})\nexport class IgxQueryBuilderComponent implements OnDestroy {\n    protected iconService = inject(IgxIconService);\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class.igx-query-builder')\n    public cssClass = 'igx-query-builder';\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('style.display')\n    public display = 'block';\n\n    /**\n     * Gets/sets whether the confirmation dialog should be shown when changing entity.\n     * Default value is `true`.\n     */\n    @Input({ transform: booleanAttribute })\n    public showEntityChangeDialog = true;\n\n    /**\n     * Gets the list of entities available for the IgxQueryBuilderComponent.\n     *\n     * Each entity describes a logical group of fields that can be used in queries.\n     * An entity can optionally have child entities, allowing nested sub-queries.\n     *\n     * @returns An array of {@link EntityType} objects.\n     */\n    public get entities(): EntityType[] {\n        return this._entities;\n    }\n\n    /**\n     * Sets the list of entities for the IgxQueryBuilderComponent.\n     * If the `expressionTree` is defined, it will be recreated with the new entities.\n     *\n     * Each entity should be an {@link EntityType} object describing the fields and optionally child entities.\n     *\n     * Example:\n     * ```ts\n     * [\n     *   {\n     *     name: 'Orders',\n     *     fields: [{ field: 'OrderID', dataType: 'number' }],\n     *     childEntities: [\n     *       {\n     *         name: 'OrderDetails',\n     *         fields: [{ field: 'ProductID', dataType: 'number' }]\n     *       }\n     *     ]\n     *   }\n     * ]\n     * ```\n     *\n     * @param entities - The array of entities to set.\n     */\n    @Input()\n    public set entities(entities: EntityType[]) {\n        if (entities !== this._entities) {\n            if (entities && this.expressionTree) {\n                this._expressionTree = recreateTree(this._expressionTree, entities);\n            }\n        }\n        this._entities = entities;\n    }\n\n    /**\n     * Gets the list of fields for the QueryBuilder.\n     *\n     * @deprecated since version 19.1.0. Use the `entities` property instead.\n     * @hidden\n     */\n    public get fields(): FieldType[] {\n        return this._fields;\n    }\n\n    /**\n     * Sets the list of fields for the QueryBuilder.\n     * Automatically wraps them into a single entity to maintain backward compatibility.\n     *\n     * @param fields - The array of fields to set.\n     * @deprecated since version 19.1.0. Use the `entities` property instead.\n     * @hidden\n     */\n    @Input()\n    public set fields(fields: FieldType[]) {\n        if (fields) {\n            this._fields = fields;\n            this.entities = [\n                {\n                    name: null,\n                    fields: fields\n                }\n            ];\n        }\n    }\n\n    /**\n    * Returns the expression tree.\n    */\n    public get expressionTree(): IExpressionTree {\n        return this._expressionTree;\n    }\n\n    /**\n     * Sets the expression tree.\n     */\n    @Input()\n    public set expressionTree(expressionTree: IExpressionTree) {\n        if (expressionTree !== this._expressionTree) {\n            if (this.entities && expressionTree) {\n                this._expressionTree = recreateTree(expressionTree, this.entities);\n            } else {\n                this._expressionTree = expressionTree;\n            }\n        }\n    }\n\n    /**\n     * Gets the `locale` of the query builder.\n     * If not set, defaults to application's locale.\n     */\n    @Input()\n    public locale: string;\n\n    /**\n     * Sets the resource strings.\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: IQueryBuilderResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * Returns the resource strings.\n     */\n    public get resourceStrings(): IQueryBuilderResourceStrings {\n        return this._resourceStrings || this._defaultResourceStrings;\n    }\n\n    /**\n     * Disables subsequent entity changes at the root level after the initial selection.\n     */\n    @Input()\n    public disableEntityChange = false;\n\n    /**\n     * Sets/gets the search value template.\n     */\n    @Input()\n    public set searchValueTemplate(template: TemplateRef<IgxQueryBuilderSearchValueContext>) {\n        this._searchValueTemplate = template;\n    }\n\n    public get searchValueTemplate(): TemplateRef<IgxQueryBuilderSearchValueContext> {\n        return this._searchValueTemplate || this.searchValueTemplateDirective?.template;\n    }\n\n    /**\n     * Disables return fields changes at the root level.\n     */\n    @Input()\n    public disableReturnFieldsChange = false;\n\n    /**\n     * Event fired as the expression tree is changed.\n     *\n     * ```html\n     *  <igx-query-builder (expressionTreeChange)='onExpressionTreeChange()'></igx-query-builder>\n     * ```\n     */\n    @Output()\n    public expressionTreeChange = new EventEmitter<IExpressionTree>();\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChild(IgxQueryBuilderSearchValueTemplateDirective)\n    protected searchValueTemplateDirective: IgxQueryBuilderSearchValueTemplateDirective;\n\n\n\n    /* contentChildren */\n    /* blazorInclude */\n    /* blazorTreatAsCollection */\n    /* blazorCollectionName: QueryBuilderHeaderCollection */\n    /* blazorCollectionItemName: QueryBuilderHeader */\n    /* ngQueryListName: queryBuilderHeaderCollection */\n    /** @hidden @internal */\n    @ContentChildren(IgxQueryBuilderHeaderComponent)\n    protected queryBuilderHeaderCollection: QueryList<IgxQueryBuilderHeaderComponent>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild(IgxQueryBuilderTreeComponent)\n    public queryTree: IgxQueryBuilderTreeComponent;\n\n    private destroy$ = new Subject<any>();\n    private _resourceStrings: IQueryBuilderResourceStrings = null;\n    private _defaultResourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);\n    private _expressionTree: IExpressionTree;\n    private _fields: FieldType[];\n    private _entities: EntityType[];\n    private _shouldEmitTreeChange = true;\n    private _searchValueTemplate: TemplateRef<IgxQueryBuilderSearchValueContext>;\n\n    constructor() {\n        this.registerSVGIcons();\n        onResourceChangeHandle(this.destroy$, () => {\n            this._defaultResourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN, false);\n        }, this);\n    }\n\n    /**\n     * Returns whether the expression tree can be committed in the current state.\n     */\n    public canCommit(): boolean {\n        return this.queryTree?.canCommitCurrentState() === true;\n    }\n\n    /**\n     * Commits the expression tree in the current state if it is valid. If not throws an exception.\n     */\n    public commit(): void {\n        if (this.canCommit()) {\n            this._shouldEmitTreeChange = false;\n            this.queryTree.commitCurrentState();\n            this._shouldEmitTreeChange = true;\n        } else {\n            throw new Error('Expression tree can\\'t be committed in the current state. Use `canCommit` method to check if the current state is valid.');\n        }\n    }\n\n    /**\n     * Discards all unsaved changes to the expression tree.\n     */\n    public discard(): void {\n        this.queryTree.cancelOperandEdit();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public setPickerOutlet(outlet?: IgxOverlayOutletDirective | ElementRef) {\n        this.queryTree.setPickerOutlet(outlet);\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public get isContextMenuVisible(): boolean {\n        return this.queryTree.isContextMenuVisible;\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public exitOperandEdit() {\n        this.queryTree.exitOperandEdit();\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public setAddButtonFocus() {\n        this.queryTree.setAddButtonFocus();\n    }\n\n    protected onExpressionTreeChange(tree: IExpressionTree) {\n        if (tree && this.entities && tree !== this._expressionTree) {\n            this._expressionTree = recreateTree(tree, this.entities);\n        } else {\n            this._expressionTree = tree;\n        }\n        if (this._shouldEmitTreeChange) {\n            this.expressionTreeChange.emit(tree);\n        }\n    }\n\n    private registerSVGIcons(): void {\n        const editorIcons = editor as any[];\n\n        editorIcons.forEach((icon) => {\n            this.iconService.addSvgIconFromText(icon.name, icon.value, 'imx-icons');\n            this.iconService.addIconRef(icon.name, 'default', {\n                name: icon.name,\n                family: 'imx-icons'\n            });\n        });\n\n        const inIcon = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\"><path d=\"M560-280H120v-400h720v120h-80v-40H200v240h360v80Zm-360-80v-240 240Zm560 200v-120H640v-80h120v-120h80v120h120v80H840v120h-80Z\"/></svg>';\n        this.iconService.addSvgIconFromText('in', inIcon, 'imx-icons');\n        this.iconService.addIconRef('in', 'default', {\n            name: 'in',\n            family: 'imx-icons'\n        });\n\n        const notInIcon = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\"><path d=\"M560-280H120v-400h720v120h-80v-40H200v240h360v80Zm-360-80v-240 240Zm440 104 84-84-84-84 56-56 84 84 84-84 56 56-83 84 83 84-56 56-84-83-84 83-56-56Z\"/></svg>';\n        this.iconService.addSvgIconFromText('not-in', notInIcon, 'imx-icons');\n        this.iconService.addIconRef('not-in', 'default', {\n            name: 'not-in',\n            family: 'imx-icons'\n        });\n\n        this.iconService.addIconRef('add', 'default', {\n            name: 'add',\n            family: 'material',\n        });\n\n        this.iconService.addIconRef('close', 'default', {\n            name: 'close',\n            family: 'material',\n        });\n\n        this.iconService.addIconRef('check', 'default', {\n            name: 'check',\n            family: 'material',\n        });\n\n        this.iconService.addIconRef('delete', 'default', {\n            name: 'delete',\n            family: 'material',\n        });\n\n        this.iconService.addIconRef('edit', 'default', {\n            name: 'edit',\n            family: 'material',\n        });\n    }\n}\n\n","<ng-content select=\"igx-query-builder-header,igc-query-builder-header\"></ng-content>\n\n<igx-query-builder-tree\n    [entities]=\"this.entities\"\n    [expressionTree]=\"this.expressionTree\"\n    [locale]=\"this.locale\"\n    [resourceStrings]=\"this.resourceStrings\"\n    [queryBuilder]=\"this\"\n    (expressionTreeChange)=\"onExpressionTreeChange($event)\"\n    [searchValueTemplate]=\"searchValueTemplate\">\n</igx-query-builder-tree>\n","import { IgxQueryBuilderHeaderComponent } from './query-builder-header.component';\nimport { IgxQueryBuilderComponent } from './query-builder.component';\nimport { IgxQueryBuilderSearchValueTemplateDirective } from './query-builder.directives';\n\nexport {\n    IgxQueryBuilderComponent\n} from './query-builder.component';\nexport * from './query-builder-header.component';\nexport * from './query-builder.directives';\n\n/* NOTE: Query builder directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_QUERY_BUILDER_DIRECTIVES = [\n    IgxQueryBuilderComponent,\n    IgxQueryBuilderHeaderComponent,\n    IgxQueryBuilderSearchValueTemplateDirective,\n] as const;\n","import { NgModule } from '@angular/core';\nimport { IGX_QUERY_BUILDER_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_QUERY_BUILDER_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_QUERY_BUILDER_DIRECTIVES\n    ]\n})\nexport class IgxQueryBuilderModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.IgxQueryBuilderComponent","i2.IgxQueryBuilderHeaderComponent","i3.IgxQueryBuilderSearchValueTemplateDirective"],"mappings":"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"}