igniteui-angular 21.2.0-beta.1 → 21.2.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/fesm2022/igniteui-angular-core.mjs.map +1 -1
  2. package/fesm2022/igniteui-angular-date-picker.mjs +2 -6
  3. package/fesm2022/igniteui-angular-date-picker.mjs.map +1 -1
  4. package/fesm2022/igniteui-angular-grids-core.mjs +13 -23
  5. package/fesm2022/igniteui-angular-grids-core.mjs.map +1 -1
  6. package/fesm2022/igniteui-angular-grids-grid.mjs +16 -46
  7. package/fesm2022/igniteui-angular-grids-grid.mjs.map +1 -1
  8. package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs +4 -15
  9. package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs.map +1 -1
  10. package/fesm2022/igniteui-angular-grids-pivot-grid.mjs +6 -2
  11. package/fesm2022/igniteui-angular-grids-pivot-grid.mjs.map +1 -1
  12. package/fesm2022/igniteui-angular-grids-tree-grid.mjs +4 -4
  13. package/fesm2022/igniteui-angular-grids-tree-grid.mjs.map +1 -1
  14. package/fesm2022/igniteui-angular-query-builder.mjs +3 -47
  15. package/fesm2022/igniteui-angular-query-builder.mjs.map +1 -1
  16. package/lib/core/styles/components/grid/_grid-component.scss +0 -8
  17. package/lib/core/styles/components/grid/_grid-theme.scss +27 -63
  18. package/lib/core/styles/components/splitter/_splitter-component.scss +27 -1
  19. package/lib/core/styles/components/splitter/_splitter-theme.scss +88 -41
  20. package/package.json +1 -1
  21. package/styles/igniteui-angular-dark.css +1 -1
  22. package/styles/igniteui-angular.css +1 -1
  23. package/styles/igniteui-bootstrap-dark.css +1 -1
  24. package/styles/igniteui-bootstrap-light.css +1 -1
  25. package/styles/igniteui-dark-green.css +1 -1
  26. package/styles/igniteui-fluent-dark-excel.css +1 -1
  27. package/styles/igniteui-fluent-dark-word.css +1 -1
  28. package/styles/igniteui-fluent-dark.css +1 -1
  29. package/styles/igniteui-fluent-light-excel.css +1 -1
  30. package/styles/igniteui-fluent-light-word.css +1 -1
  31. package/styles/igniteui-fluent-light.css +1 -1
  32. package/styles/igniteui-indigo-dark.css +1 -1
  33. package/styles/igniteui-indigo-light.css +1 -1
  34. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  35. package/styles/maps/igniteui-angular.css.map +1 -1
  36. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  37. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  38. package/styles/maps/igniteui-dark-green.css.map +1 -1
  39. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  40. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  41. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  42. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  43. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  44. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  45. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  46. package/styles/maps/igniteui-indigo-light.css.map +1 -1
  47. package/types/igniteui-angular-core.d.ts +10 -10
  48. package/types/igniteui-angular-date-picker.d.ts +2 -37
  49. package/types/igniteui-angular-grids-core.d.ts +1 -5
  50. package/types/igniteui-angular-grids-grid.d.ts +1 -16
  51. package/types/igniteui-angular-grids-hierarchical-grid.d.ts +0 -4
  52. package/types/igniteui-angular-grids-pivot-grid.d.ts +1 -0
  53. package/types/igniteui-angular-query-builder.d.ts +1 -24
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, DestroyRef, Input, HostBinding, Component, Pipe, Injectable, ChangeDetectorRef, ElementRef, LOCALE_ID, EventEmitter, ViewChildren, ViewChild, Output, TemplateRef, Directive, booleanAttribute, ContentChildren, ContentChild, NgModule } from '@angular/core';
3
- import { getCurrentResourceStrings, QueryBuilderResourceStringsEN, onResourceChangeHandle, PlatformUtil, AbsoluteScrollStrategy, VerticalAlignment, HorizontalAlignment, CloseScrollStrategy, ConnectedPositioningStrategy, trackByIdentity, FilteringLogic, DataUtil, AutoPositionStrategy, FilteringExpressionsTree, isTree, GridColumnDataType, IgxStringFilteringOperand, IgxDateTimeFilteringOperand, IgxTimeFilteringOperand, IgxDateFilteringOperand, IgxNumberFilteringOperand, IgxBooleanFilteringOperand, DEFAULT_LOCALE, IgxOverlayOutletDirective, IgxPickerClearComponent, IgxPickerToggleComponent, IgxDateFormatterPipe, recreateTree } from 'igniteui-angular/core';
3
+ import { getCurrentResourceStrings, QueryBuilderResourceStringsEN, onResourceChangeHandle, PlatformUtil, AbsoluteScrollStrategy, trackByIdentity, FilteringLogic, DataUtil, ConnectedPositioningStrategy, VerticalAlignment, HorizontalAlignment, AutoPositionStrategy, FilteringExpressionsTree, isTree, GridColumnDataType, IgxStringFilteringOperand, IgxDateTimeFilteringOperand, IgxTimeFilteringOperand, IgxDateFilteringOperand, IgxNumberFilteringOperand, IgxBooleanFilteringOperand, DEFAULT_LOCALE, IgxPickerClearComponent, IgxPickerToggleComponent, IgxDateFormatterPipe, recreateTree } from 'igniteui-angular/core';
4
4
  import { fromEvent, sampleTime, filter, Subject } from 'rxjs';
5
5
  import { NgClass, NgTemplateOutlet } from '@angular/common';
6
6
  import * as i1 from '@angular/forms';
@@ -851,16 +851,6 @@ class IgxQueryBuilderTreeComponent {
851
851
  this._expandedExpressions = [];
852
852
  this._resourceStrings = null;
853
853
  this._defaultResourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);
854
- this._positionSettings = {
855
- horizontalStartPoint: HorizontalAlignment.Right,
856
- verticalStartPoint: VerticalAlignment.Top
857
- };
858
- this._overlaySettings = {
859
- closeOnOutsideClick: false,
860
- modal: false,
861
- positionStrategy: new ConnectedPositioningStrategy(this._positionSettings),
862
- scrollStrategy: new CloseScrollStrategy()
863
- };
864
854
  /**
865
855
  * @hidden @internal
866
856
  */
@@ -903,13 +893,6 @@ class IgxQueryBuilderTreeComponent {
903
893
  * @hidden @internal
904
894
  */
905
895
  ngAfterViewInit() {
906
- this._overlaySettings.outlet = this.overlayOutlet;
907
- this.entitySelectOverlaySettings.outlet = this.overlayOutlet;
908
- this.fieldSelectOverlaySettings.outlet = this.overlayOutlet;
909
- this.conditionSelectOverlaySettings.outlet = this.overlayOutlet;
910
- this.returnFieldSelectOverlaySettings.outlet = this.overlayOutlet;
911
- this.addExpressionDropDownOverlaySettings.outlet = this.overlayOutlet;
912
- this.groupContextMenuDropDownOverlaySettings.outlet = this.overlayOutlet;
913
896
  if (this.isAdvancedFiltering() && this.entities?.length === 1) {
914
897
  this.selectedEntity = this.entities[0].name;
915
898
  if (this._selectedEntity.fields.find(f => f.field === this.expectedReturnField)) {
@@ -1048,14 +1031,6 @@ class IgxQueryBuilderTreeComponent {
1048
1031
  get selectedField() {
1049
1032
  return this._selectedField;
1050
1033
  }
1051
- /**
1052
- * @hidden @internal
1053
- *
1054
- * used by the grid
1055
- */
1056
- setPickerOutlet(outlet) {
1057
- this.pickerOutlet = outlet;
1058
- }
1059
1034
  /**
1060
1035
  * @hidden @internal
1061
1036
  *
@@ -1586,13 +1561,6 @@ class IgxQueryBuilderTreeComponent {
1586
1561
  this.picker.open();
1587
1562
  }
1588
1563
  }
1589
- /**
1590
- * @hidden @internal
1591
- */
1592
- onOutletPointerDown(event) {
1593
- // This prevents closing the select's dropdown when clicking the scroll
1594
- event.preventDefault();
1595
- }
1596
1564
  /**
1597
1565
  * @hidden @internal
1598
1566
  */
@@ -1909,7 +1877,7 @@ class IgxQueryBuilderTreeComponent {
1909
1877
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: IgxQueryBuilderTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1910
1878
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.6", type: IgxQueryBuilderTreeComponent, isStandalone: true, selector: "igx-query-builder-tree", inputs: { entities: "entities", queryBuilder: "queryBuilder", searchValueTemplate: "searchValueTemplate", parentExpression: "parentExpression", fields: "fields", expressionTree: "expressionTree", locale: "locale", resourceStrings: "resourceStrings", expectedReturnField: "expectedReturnField" }, outputs: { expressionTreeChange: "expressionTreeChange", inEditModeChange: "inEditModeChange" }, host: { properties: { "class": "this.getClass" }, classAttribute: "igx-query-builder-tree" }, providers: [
1911
1879
  IgxQueryBuilderDragService
1912
- ], viewQueries: [{ propertyName: "entitySelect", first: true, predicate: ["entitySelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "editingInputs", first: true, predicate: ["editingInputs"], descendants: true, read: ElementRef }, { propertyName: "returnFieldsCombo", first: true, predicate: ["returnFieldsCombo"], descendants: true, read: IgxComboComponent }, { propertyName: "returnFieldSelect", first: true, predicate: ["returnFieldSelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "fieldSelect", first: true, predicate: ["fieldSelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "conditionSelect", first: true, predicate: ["conditionSelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "searchValueInput", first: true, predicate: ["searchValueInput"], descendants: true, read: ElementRef }, { propertyName: "picker", first: true, predicate: ["picker"], descendants: true }, { propertyName: "addRootAndGroupButton", first: true, predicate: ["addRootAndGroupButton"], descendants: true, read: ElementRef }, { propertyName: "addConditionButton", first: true, predicate: ["addConditionButton"], descendants: true, read: ElementRef }, { propertyName: "entityChangeDialog", first: true, predicate: ["entityChangeDialog"], descendants: true, read: IgxDialogComponent }, { propertyName: "addExpressionItemDropDown", first: true, predicate: ["addOptionsDropDown"], descendants: true, read: IgxDropDownComponent }, { propertyName: "groupContextMenuDropDown", first: true, predicate: ["groupContextMenuDropDown"], descendants: true, read: IgxDropDownComponent }, { propertyName: "editingInputsContainer", first: true, predicate: ["editingInputsContainer"], descendants: true, read: ElementRef }, { propertyName: "currentGroupButtonsContainer", first: true, predicate: ["currentGroupButtonsContainer"], descendants: true, read: ElementRef }, { propertyName: "expressionsContainer", first: true, predicate: ["expressionsContainer"], descendants: true }, { propertyName: "overlayOutlet", first: true, predicate: ["overlayOutlet"], descendants: true, read: IgxOverlayOutletDirective, static: true }, { propertyName: "expressionsChips", predicate: IgxChipComponent, descendants: true, read: IgxChipComponent }, { propertyName: "innerQueries", predicate: IgxQueryBuilderTreeComponent, descendants: true }], ngImport: i0, template: "<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", dependencies: [{ kind: "component", type: IgxQueryBuilderTreeComponent, selector: "igx-query-builder-tree", inputs: ["entities", "queryBuilder", "searchValueTemplate", "parentExpression", "fields", "expressionTree", "locale", "resourceStrings", "expectedReturnField"], outputs: ["expressionTreeChange", "inEditModeChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxLabel"], outputs: ["buttonSelected"] }, { kind: "component", type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["indeterminate", "checked", "disabled", "invalid", "readonly", "disableTransitions"] }, { kind: "component", type: IgxChipComponent, selector: "igx-chip", inputs: ["variant", "id", "tabIndex", "data", "draggable", "animateOnRelease", "hideBaseOnDrag", "removable", "removeIcon", "selectable", "selectIcon", "class", "disabled", "selected", "color", "resourceStrings"], outputs: ["selectedChange", "moveStart", "moveEnd", "remove", "chipClick", "selectedChanging", "selectedChanged", "keyDown", "dragEnter", "dragLeave", "dragOver", "dragDrop"] }, { kind: "component", type: IgxComboComponent, selector: "igx-combo", inputs: ["autoFocusSearch", "searchPlaceholder"], outputs: ["selectionChanging", "selectionChanged"] }, { kind: "directive", type: IgxComboHeaderDirective, selector: "[igxComboHeader]" }, { kind: "component", type: IgxDatePickerComponent, selector: "igx-date-picker", inputs: ["hideOutsideDays", "displayMonthsCount", "orientation", "showWeekNumbers", "activeDate", "formatter", "todayButtonLabel", "cancelButtonLabel", "spinLoop", "spinDelta", "outlet", "id", "formatViews", "disabledDates", "specialDates", "calendarFormat", "value", "minValue", "maxValue", "resourceStrings", "readOnly"], outputs: ["valueChange", "validationFailed"] }, { kind: "directive", type: IgxDateTimeEditorDirective, selector: "[igxDateTimeEditor]", inputs: ["locale", "minValue", "maxValue", "spinLoop", "displayFormat", "igxDateTimeEditor", "value", "defaultFormatType", "spinDelta"], outputs: ["valueChange", "validationFailed"], exportAs: ["igxDateTimeEditor"] }, { kind: "component", type: IgxDialogComponent, selector: "igx-dialog", inputs: ["id", "isModal", "closeOnEscape", "focusTrap", "title", "message", "leftButtonLabel", "leftButtonType", "leftButtonRipple", "rightButtonLabel", "rightButtonType", "rightButtonRipple", "closeOnOutsideSelect", "positionSettings", "isOpen", "role", "titleId"], outputs: ["opening", "opened", "closing", "closed", "leftButtonSelect", "rightButtonSelect", "isOpenChange"] }, { kind: "directive", type: IgxDragIgnoreDirective, selector: "[igxDragIgnore]" }, { kind: "directive", type: IgxDropDirective, selector: "[igxDrop]", inputs: ["igxDrop", "dropChannel", "dropStrategy"], outputs: ["enter", "over", "leave", "dropped"], exportAs: ["drop"] }, { kind: "component", type: IgxDropDownComponent, selector: "igx-drop-down", inputs: ["allowItemsFocus", "labelledBy", "role"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "component", type: IgxDropDownItemComponent, selector: "igx-drop-down-item" }, { kind: "directive", type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { kind: "directive", type: IgxIconButtonDirective, selector: "[igxIconButton]", inputs: ["igxIconButton"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["ariaHidden", "family", "name", "active"] }, { kind: "directive", type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "component", type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "directive", type: IgxOverlayOutletDirective, selector: "[igxOverlayOutlet]", exportAs: ["overlay-outlet"] }, { kind: "component", type: IgxPickerClearComponent, selector: "igx-picker-clear" }, { kind: "component", type: IgxPickerToggleComponent, selector: "igx-picker-toggle", outputs: ["clicked"] }, { kind: "directive", type: IgxPrefixDirective, selector: "[igxPrefix],[igxStart],igx-prefix" }, { kind: "component", type: IgxSelectComponent, selector: "igx-select", inputs: ["placeholder", "disabled", "overlaySettings", "value", "type"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "component", type: IgxSelectItemComponent, selector: "igx-select-item", inputs: ["text"] }, { kind: "component", type: IgxTimePickerComponent, selector: "igx-time-picker", inputs: ["id", "displayFormat", "inputFormat", "mode", "minValue", "maxValue", "spinLoop", "formatter", "readOnly", "value", "resourceStrings", "okButtonLabel", "cancelButtonLabel", "itemsDelta"], outputs: ["selected", "valueChange", "validationFailed"] }, { kind: "directive", type: IgxTooltipDirective, selector: "[igxTooltip]", inputs: ["context", "id", "role"], exportAs: ["tooltip"] }, { kind: "directive", type: IgxTooltipTargetDirective, selector: "[igxTooltipTarget]", inputs: ["showDelay", "hideDelay", "hasArrow", "sticky", "closeButtonTemplate", "positionSettings", "tooltipDisabled", "showTriggers", "hideTriggers", "igxTooltipTarget", "tooltip"], outputs: ["tooltipShow", "tooltipHide"], exportAs: ["tooltipTarget"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: IgxDateFormatterPipe, name: "date" }, { kind: "pipe", type: IgxFieldFormatterPipe, name: "fieldFormatter" }] }); }
1880
+ ], viewQueries: [{ propertyName: "entitySelect", first: true, predicate: ["entitySelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "editingInputs", first: true, predicate: ["editingInputs"], descendants: true, read: ElementRef }, { propertyName: "returnFieldsCombo", first: true, predicate: ["returnFieldsCombo"], descendants: true, read: IgxComboComponent }, { propertyName: "returnFieldSelect", first: true, predicate: ["returnFieldSelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "fieldSelect", first: true, predicate: ["fieldSelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "conditionSelect", first: true, predicate: ["conditionSelect"], descendants: true, read: IgxSelectComponent }, { propertyName: "searchValueInput", first: true, predicate: ["searchValueInput"], descendants: true, read: ElementRef }, { propertyName: "picker", first: true, predicate: ["picker"], descendants: true }, { propertyName: "addRootAndGroupButton", first: true, predicate: ["addRootAndGroupButton"], descendants: true, read: ElementRef }, { propertyName: "addConditionButton", first: true, predicate: ["addConditionButton"], descendants: true, read: ElementRef }, { propertyName: "entityChangeDialog", first: true, predicate: ["entityChangeDialog"], descendants: true, read: IgxDialogComponent }, { propertyName: "addExpressionItemDropDown", first: true, predicate: ["addOptionsDropDown"], descendants: true, read: IgxDropDownComponent }, { propertyName: "groupContextMenuDropDown", first: true, predicate: ["groupContextMenuDropDown"], descendants: true, read: IgxDropDownComponent }, { propertyName: "editingInputsContainer", first: true, predicate: ["editingInputsContainer"], descendants: true, read: ElementRef }, { propertyName: "currentGroupButtonsContainer", first: true, predicate: ["currentGroupButtonsContainer"], descendants: true, read: ElementRef }, { propertyName: "expressionsContainer", first: true, predicate: ["expressionsContainer"], descendants: true }, { propertyName: "expressionsChips", predicate: IgxChipComponent, descendants: true, read: IgxChipComponent }, { propertyName: "innerQueries", predicate: IgxQueryBuilderTreeComponent, descendants: true }], ngImport: i0, template: "<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 [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 [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<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", dependencies: [{ kind: "component", type: IgxQueryBuilderTreeComponent, selector: "igx-query-builder-tree", inputs: ["entities", "queryBuilder", "searchValueTemplate", "parentExpression", "fields", "expressionTree", "locale", "resourceStrings", "expectedReturnField"], outputs: ["expressionTreeChange", "inEditModeChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxLabel"], outputs: ["buttonSelected"] }, { kind: "component", type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["indeterminate", "checked", "disabled", "invalid", "readonly", "disableTransitions"] }, { kind: "component", type: IgxChipComponent, selector: "igx-chip", inputs: ["variant", "id", "tabIndex", "data", "draggable", "animateOnRelease", "hideBaseOnDrag", "removable", "removeIcon", "selectable", "selectIcon", "class", "disabled", "selected", "color", "resourceStrings"], outputs: ["selectedChange", "moveStart", "moveEnd", "remove", "chipClick", "selectedChanging", "selectedChanged", "keyDown", "dragEnter", "dragLeave", "dragOver", "dragDrop"] }, { kind: "component", type: IgxComboComponent, selector: "igx-combo", inputs: ["autoFocusSearch", "searchPlaceholder"], outputs: ["selectionChanging", "selectionChanged"] }, { kind: "directive", type: IgxComboHeaderDirective, selector: "[igxComboHeader]" }, { kind: "component", type: IgxDatePickerComponent, selector: "igx-date-picker", inputs: ["hideOutsideDays", "displayMonthsCount", "orientation", "showWeekNumbers", "activeDate", "formatter", "todayButtonLabel", "cancelButtonLabel", "spinLoop", "spinDelta", "id", "formatViews", "disabledDates", "specialDates", "calendarFormat", "value", "minValue", "maxValue", "resourceStrings", "readOnly"], outputs: ["valueChange", "validationFailed"] }, { kind: "directive", type: IgxDateTimeEditorDirective, selector: "[igxDateTimeEditor]", inputs: ["locale", "minValue", "maxValue", "spinLoop", "displayFormat", "igxDateTimeEditor", "value", "defaultFormatType", "spinDelta"], outputs: ["valueChange", "validationFailed"], exportAs: ["igxDateTimeEditor"] }, { kind: "component", type: IgxDialogComponent, selector: "igx-dialog", inputs: ["id", "isModal", "closeOnEscape", "focusTrap", "title", "message", "leftButtonLabel", "leftButtonType", "leftButtonRipple", "rightButtonLabel", "rightButtonType", "rightButtonRipple", "closeOnOutsideSelect", "positionSettings", "isOpen", "role", "titleId"], outputs: ["opening", "opened", "closing", "closed", "leftButtonSelect", "rightButtonSelect", "isOpenChange"] }, { kind: "directive", type: IgxDragIgnoreDirective, selector: "[igxDragIgnore]" }, { kind: "directive", type: IgxDropDirective, selector: "[igxDrop]", inputs: ["igxDrop", "dropChannel", "dropStrategy"], outputs: ["enter", "over", "leave", "dropped"], exportAs: ["drop"] }, { kind: "component", type: IgxDropDownComponent, selector: "igx-drop-down", inputs: ["allowItemsFocus", "labelledBy", "role"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "component", type: IgxDropDownItemComponent, selector: "igx-drop-down-item" }, { kind: "directive", type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { kind: "directive", type: IgxIconButtonDirective, selector: "[igxIconButton]", inputs: ["igxIconButton"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["ariaHidden", "family", "name", "active"] }, { kind: "directive", type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "component", type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "component", type: IgxPickerClearComponent, selector: "igx-picker-clear" }, { kind: "component", type: IgxPickerToggleComponent, selector: "igx-picker-toggle", outputs: ["clicked"] }, { kind: "directive", type: IgxPrefixDirective, selector: "[igxPrefix],[igxStart],igx-prefix" }, { kind: "component", type: IgxSelectComponent, selector: "igx-select", inputs: ["placeholder", "disabled", "overlaySettings", "value", "type"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "component", type: IgxSelectItemComponent, selector: "igx-select-item", inputs: ["text"] }, { kind: "component", type: IgxTimePickerComponent, selector: "igx-time-picker", inputs: ["id", "displayFormat", "inputFormat", "mode", "minValue", "maxValue", "spinLoop", "formatter", "readOnly", "value", "resourceStrings", "okButtonLabel", "cancelButtonLabel", "itemsDelta"], outputs: ["selected", "valueChange", "validationFailed"] }, { kind: "directive", type: IgxTooltipDirective, selector: "[igxTooltip]", inputs: ["context", "id", "role"], exportAs: ["tooltip"] }, { kind: "directive", type: IgxTooltipTargetDirective, selector: "[igxTooltipTarget]", inputs: ["showDelay", "hideDelay", "hasArrow", "sticky", "closeButtonTemplate", "positionSettings", "tooltipDisabled", "showTriggers", "hideTriggers", "igxTooltipTarget", "tooltip"], outputs: ["tooltipShow", "tooltipHide"], exportAs: ["tooltipTarget"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: IgxDateFormatterPipe, name: "date" }, { kind: "pipe", type: IgxFieldFormatterPipe, name: "fieldFormatter" }] }); }
1913
1881
  }
1914
1882
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: IgxQueryBuilderTreeComponent, decorators: [{
1915
1883
  type: Component,
@@ -1934,7 +1902,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImpor
1934
1902
  IgxIconComponent,
1935
1903
  IgxInputDirective,
1936
1904
  IgxInputGroupComponent,
1937
- IgxOverlayOutletDirective,
1938
1905
  IgxPickerClearComponent,
1939
1906
  IgxPickerToggleComponent,
1940
1907
  IgxPrefixDirective,
@@ -1947,7 +1914,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImpor
1947
1914
  NgTemplateOutlet
1948
1915
  ], providers: [
1949
1916
  IgxQueryBuilderDragService
1950
- ], template: "<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" }]
1917
+ ], template: "<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 [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 [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<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" }]
1951
1918
  }], ctorParameters: () => [], propDecorators: { getClass: [{
1952
1919
  type: HostBinding,
1953
1920
  args: ['class']
@@ -2024,9 +1991,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImpor
2024
1991
  }], expressionsContainer: [{
2025
1992
  type: ViewChild,
2026
1993
  args: ['expressionsContainer']
2027
- }], overlayOutlet: [{
2028
- type: ViewChild,
2029
- args: ['overlayOutlet', { read: IgxOverlayOutletDirective, static: true }]
2030
1994
  }], innerQueries: [{
2031
1995
  type: ViewChildren,
2032
1996
  args: [IgxQueryBuilderTreeComponent]
@@ -2262,14 +2226,6 @@ class IgxQueryBuilderComponent {
2262
2226
  this.destroy$.next(true);
2263
2227
  this.destroy$.complete();
2264
2228
  }
2265
- /**
2266
- * @hidden @internal
2267
- *
2268
- * used by the grid
2269
- */
2270
- setPickerOutlet(outlet) {
2271
- this.queryTree.setPickerOutlet(outlet);
2272
- }
2273
2229
  /**
2274
2230
  * @hidden @internal
2275
2231
  *