igniteui-angular 17.2.9 → 17.2.10

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 (54) hide show
  1. package/esm2022/lib/buttonGroup/buttonGroup.component.mjs +3 -6
  2. package/esm2022/lib/data-operations/filtering-expressions-tree.mjs +3 -3
  3. package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +5 -1
  4. package/esm2022/lib/directives/for-of/for_of.directive.mjs +3 -3
  5. package/esm2022/lib/drop-down/drop-down-item.base.mjs +3 -3
  6. package/esm2022/lib/drop-down/drop-down.base.mjs +2 -2
  7. package/esm2022/lib/drop-down/drop-down.common.mjs +1 -1
  8. package/esm2022/lib/drop-down/drop-down.component.mjs +26 -11
  9. package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +17 -4
  10. package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +14 -9
  11. package/esm2022/lib/grids/headers/grid-header-group.component.mjs +6 -3
  12. package/esm2022/lib/grids/headers/grid-header.component.mjs +8 -2
  13. package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +27 -3
  14. package/esm2022/lib/services/excel/excel-strings.mjs +2 -2
  15. package/fesm2022/igniteui-angular.mjs +103 -38
  16. package/fesm2022/igniteui-angular.mjs.map +1 -1
  17. package/lib/core/styles/components/grid/_excel-filtering-component.scss +5 -0
  18. package/lib/core/styles/components/grid/_excel-filtering-theme.scss +5 -0
  19. package/lib/core/styles/components/grid-toolbar/_grid-toolbar-component.scss +0 -4
  20. package/lib/core/styles/components/grid-toolbar/_grid-toolbar-theme.scss +0 -15
  21. package/lib/drop-down/drop-down-item.base.d.ts +1 -1
  22. package/lib/drop-down/drop-down.base.d.ts +1 -1
  23. package/lib/drop-down/drop-down.common.d.ts +1 -1
  24. package/lib/drop-down/drop-down.component.d.ts +13 -8
  25. package/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.d.ts +5 -0
  26. package/lib/grids/headers/grid-header.component.d.ts +1 -0
  27. package/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.d.ts +12 -1
  28. package/package.json +1 -1
  29. package/styles/igniteui-angular-dark.css +1 -1
  30. package/styles/igniteui-angular.css +1 -1
  31. package/styles/igniteui-bootstrap-dark.css +1 -1
  32. package/styles/igniteui-bootstrap-light.css +1 -1
  33. package/styles/igniteui-dark-green.css +1 -1
  34. package/styles/igniteui-fluent-dark-excel.css +1 -1
  35. package/styles/igniteui-fluent-dark-word.css +1 -1
  36. package/styles/igniteui-fluent-dark.css +1 -1
  37. package/styles/igniteui-fluent-light-excel.css +1 -1
  38. package/styles/igniteui-fluent-light-word.css +1 -1
  39. package/styles/igniteui-fluent-light.css +1 -1
  40. package/styles/igniteui-indigo-dark.css +1 -1
  41. package/styles/igniteui-indigo-light.css +1 -1
  42. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  43. package/styles/maps/igniteui-angular.css.map +1 -1
  44. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  45. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  46. package/styles/maps/igniteui-dark-green.css.map +1 -1
  47. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  48. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  49. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  50. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  51. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  52. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  53. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  54. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -1420,8 +1420,8 @@ class FilteringExpressionsTree {
1420
1420
  if ((expr instanceof FilteringExpressionsTree)) {
1421
1421
  return this.isFilteringExpressionsTreeForColumn(expr, fieldName);
1422
1422
  }
1423
- else {
1424
- return expr.fieldName === fieldName;
1423
+ else if (expr.fieldName === fieldName) {
1424
+ return true;
1425
1425
  }
1426
1426
  }
1427
1427
  return false;
@@ -3361,7 +3361,7 @@ class ExcelStrings {
3361
3361
  }
3362
3362
  static getStyles() {
3363
3363
  return ExcelStrings.XML_STRING +
3364
- '<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac x16r2" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:x16r2="http://schemas.microsoft.com/office/spreadsheetml/2015/02/main"><numFmts count="5"><numFmt numFmtId="164" formatCode="&quot;$&quot;#,##0.00"/><numFmt numFmtId="165" formatCode="[$£-809]#,##0.00"/><numFmt numFmtId="166" formatCode="[$¥-804]#,##0.00"/><numFmt numFmtId="167" formatCode="#,##0.00\ [$€-1]"/><numFmt numFmtId="168" formatCode="[$¥-411]#,##0.00"/></numFmts><fonts count="2" x14ac:knownFonts="1"><font><sz val="11"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font><font><sz val="11"/><color rgb="FFB7B7B7"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts><fills count="3"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill><fill><patternFill patternType="solid"><fgColor rgb="FF0D1822"/><bgColor indexed="64"/></patternFill></fill></fills><borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="13"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="14" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="0" fontId="1" fillId="2" borderId="0" xfId="0"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="164" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="165" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="166" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="167" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="168" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="21" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="22" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="10" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles><dxfs count="0"/><tableStyles count="0" defaultTableStyle="TableStyleMedium2" defaultPivotStyle="PivotStyleLight16"/><extLst><ext uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"><x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/></ext><ext uri="{9260A510-F301-46a8-8635-F512D64BE5F5}" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><x15:timelineStyles defaultTimelineStyle="TimeSlicerStyleLight1"/></ext></extLst></styleSheet>';
3364
+ '<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac x16r2" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:x16r2="http://schemas.microsoft.com/office/spreadsheetml/2015/02/main"><numFmts count="5"><numFmt numFmtId="164" formatCode="&quot;$&quot;#,##0.00"/><numFmt numFmtId="165" formatCode="[$£-809]#,##0.00"/><numFmt numFmtId="166" formatCode="[$¥-804]#,##0.00"/><numFmt numFmtId="167" formatCode="#,##0.00\ [$€-1]"/><numFmt numFmtId="168" formatCode="[$¥-411]#,##0.00"/></numFmts><fonts count="2" x14ac:knownFonts="1"><font><sz val="11"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font><font><b/><sz val="11"/><color theme="0"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts><fills count="3"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill><fill><patternFill patternType="solid"><fgColor theme="4"/><bgColor indexed="64"/></patternFill></fill></fills><borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="13"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="14" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="0" fontId="1" fillId="2" borderId="0" xfId="0"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="164" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="165" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="166" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="167" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="168" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="21" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="22" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="10" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles><dxfs count="0"/><tableStyles count="0" defaultTableStyle="TableStyleMedium2" defaultPivotStyle="PivotStyleLight16"/><extLst><ext uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"><x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/></ext><ext uri="{9260A510-F301-46a8-8635-F512D64BE5F5}" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><x15:timelineStyles defaultTimelineStyle="TimeSlicerStyleLight1"/></ext></extLst></styleSheet>';
3365
3365
  }
3366
3366
  static getWorkbook(worksheetName) {
3367
3367
  return ExcelStrings.XML_STRING + `<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x15" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><fileVersion appName="xl" lastEdited="6" lowestEdited="6" rupBuild="14420"/><workbookPr filterPrivacy="1" defaultThemeVersion="164011"/><bookViews><workbookView xWindow="0" yWindow="0" windowWidth="22260" windowHeight="12645"/></bookViews><sheets><sheet name="${worksheetName}" sheetId="1" r:id="rId1"/></sheets><calcPr calcId="162913"/><extLst><ext uri="{140A7094-0E35-4892-8432-C4D2E57EDEB5}" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><x15:workbookPr chartTrackingRefBase="1"/></ext></extLst></workbook>`;
@@ -7415,7 +7415,7 @@ class IgxDropDownBaseDirective extends DisplayDensityBase {
7415
7415
  * @param newSelection the item selected
7416
7416
  * @param event the event that triggered the call
7417
7417
  */
7418
- selectItem(newSelection, event) {
7418
+ selectItem(newSelection, event, emit = true) {
7419
7419
  this.selectionChanging.emit({
7420
7420
  newSelection,
7421
7421
  oldSelection: null,
@@ -11235,6 +11235,10 @@ class IgxDragDirective {
11235
11235
  }
11236
11236
  /** Method setting transformation to the base draggable element. */
11237
11237
  setTransformXY(x, y) {
11238
+ if (x === 0 && y === 0) {
11239
+ this.element.nativeElement.style.transform = '';
11240
+ return;
11241
+ }
11238
11242
  this.element.nativeElement.style.transform = 'translate3d(' + x + 'px, ' + y + 'px, 0px)';
11239
11243
  }
11240
11244
  /**
@@ -13448,13 +13452,13 @@ class IgxForOfDirective extends IgxForOfToken {
13448
13452
  const currDiff = newVal - oldVal;
13449
13453
  diffs.push(currDiff);
13450
13454
  totalDiff += currDiff;
13451
- this.sizesCache[index + 1] += totalDiff;
13455
+ this.sizesCache[index + 1] = (this.sizesCache[index] || 0) + newVal;
13452
13456
  }
13453
13457
  }
13454
13458
  // update cache
13455
13459
  if (Math.abs(totalDiff) > 0) {
13456
13460
  for (let j = this.state.startIndex + this.state.chunkSize + 1; j < this.sizesCache.length; j++) {
13457
- this.sizesCache[j] += totalDiff;
13461
+ this.sizesCache[j] = (this.sizesCache[j] || 0) + totalDiff;
13458
13462
  }
13459
13463
  // update scrBar heights/widths
13460
13464
  const reducer = (acc, val) => acc + val;
@@ -22450,12 +22454,12 @@ class IgxDropDownItemBaseDirective {
22450
22454
  if (this._selected) {
22451
22455
  const dropDownSelectedItem = this.dropDown.selectedItem;
22452
22456
  if (!dropDownSelectedItem) {
22453
- this.dropDown.selectItem(this);
22457
+ this.dropDown.selectItem(this, undefined, false);
22454
22458
  }
22455
22459
  else if (this.hasIndex
22456
22460
  ? this._index !== dropDownSelectedItem.index || this.value !== dropDownSelectedItem.value :
22457
22461
  this !== dropDownSelectedItem) {
22458
- this.dropDown.selectItem(this);
22462
+ this.dropDown.selectItem(this, undefined, false);
22459
22463
  }
22460
22464
  }
22461
22465
  }
@@ -22802,9 +22806,20 @@ class IgxDropDownComponent extends IgxDropDownBaseDirective {
22802
22806
  * ```
22803
22807
  */
22804
22808
  open(overlaySettings) {
22805
- this.toggleDirective.open(overlaySettings);
22809
+ const settings = overlaySettings || this.getDefaultOverlaySettings();
22810
+ this.toggleDirective.open(settings);
22806
22811
  this.updateScrollPosition();
22807
22812
  }
22813
+ /**
22814
+ * @hidden @internal
22815
+ */
22816
+ getDefaultOverlaySettings() {
22817
+ return {
22818
+ closeOnOutsideClick: true,
22819
+ modal: false,
22820
+ positionStrategy: new ConnectedPositioningStrategy()
22821
+ };
22822
+ }
22808
22823
  /**
22809
22824
  * Closes the dropdown
22810
22825
  *
@@ -23044,14 +23059,15 @@ class IgxDropDownComponent extends IgxDropDownBaseDirective {
23044
23059
  }
23045
23060
  }
23046
23061
  /**
23047
- * Handles the `selectionChanging` emit and the drop down toggle when selection changes
23048
- *
23049
- * @hidden
23050
- * @internal
23051
- * @param newSelection
23052
- * @param event
23053
- */
23054
- selectItem(newSelection, event) {
23062
+ * Handles the `selectionChanging` emit and the drop down toggle when selection changes
23063
+ *
23064
+ * @hidden
23065
+ * @internal
23066
+ * @param newSelection
23067
+ * @param event
23068
+ * @param emit
23069
+ */
23070
+ selectItem(newSelection, event, emit = true) {
23055
23071
  const oldSelection = this.selectedItem;
23056
23072
  if (!newSelection) {
23057
23073
  newSelection = this.focusedItem;
@@ -23069,7 +23085,9 @@ class IgxDropDownComponent extends IgxDropDownBaseDirective {
23069
23085
  };
23070
23086
  }
23071
23087
  const args = { oldSelection, newSelection, cancel: false, owner: this };
23072
- this.selectionChanging.emit(args);
23088
+ if (emit) {
23089
+ this.selectionChanging.emit(args);
23090
+ }
23073
23091
  if (!args.cancel) {
23074
23092
  if (this.isSelectionValid(args.newSelection)) {
23075
23093
  this.selection.set(this.id, new Set([args.newSelection]));
@@ -27880,8 +27898,7 @@ class IgxButtonGroupComponent extends DisplayDensityBase {
27880
27898
  if (updatedButtons.length > 0) {
27881
27899
  updatedButtons.forEach((button) => {
27882
27900
  const index = this.buttons.map((b) => b.nativeElement).indexOf(button);
27883
- const args = { owner: this, button: this.buttons[index], index };
27884
- this.updateButtonSelectionState(index, args);
27901
+ this.updateButtonSelectionState(index);
27885
27902
  });
27886
27903
  }
27887
27904
  // Watch for changes again
@@ -27899,14 +27916,12 @@ class IgxButtonGroupComponent extends DisplayDensityBase {
27899
27916
  }, updated);
27900
27917
  return updated;
27901
27918
  }
27902
- updateButtonSelectionState(index, args) {
27919
+ updateButtonSelectionState(index) {
27903
27920
  if (this.buttons[index].selected) {
27904
27921
  this.updateSelected(index);
27905
- this.selected.emit(args);
27906
27922
  }
27907
27923
  else {
27908
27924
  this.updateDeselected(index);
27909
- this.deselected.emit(args);
27910
27925
  }
27911
27926
  }
27912
27927
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxButtonGroupComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
@@ -48398,14 +48413,19 @@ class IgxExcelStyleCustomDialogComponent {
48398
48413
  this.expressionDateComponents.forEach(x => x.cdr.markForCheck());
48399
48414
  }
48400
48415
  createInitialExpressionUIElement() {
48401
- this.expressionsList = [];
48402
- const firstExprUI = new ExpressionUI();
48403
- firstExprUI.expression = {
48404
- condition: this.createCondition(this.selectedOperator),
48405
- fieldName: this.column.field,
48406
- ignoreCase: this.column.filteringIgnoreCase,
48407
- searchVal: null
48408
- };
48416
+ let firstExprUI = new ExpressionUI();
48417
+ if (this.expressionsList.length == 1 && this.expressionsList[0].expression.condition.name === this.selectedOperator) {
48418
+ firstExprUI = this.expressionsList.pop();
48419
+ }
48420
+ else {
48421
+ this.expressionsList = [];
48422
+ firstExprUI.expression = {
48423
+ condition: this.createCondition(this.selectedOperator),
48424
+ fieldName: this.column.field,
48425
+ ignoreCase: this.column.filteringIgnoreCase,
48426
+ searchVal: null
48427
+ };
48428
+ }
48409
48429
  firstExprUI.afterOperator = FilteringLogic.And;
48410
48430
  this.expressionsList.push(firstExprUI);
48411
48431
  const secondExprUI = new ExpressionUI();
@@ -48465,6 +48485,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
48465
48485
  * A component used for presenting Excel style conditional filter UI.
48466
48486
  */
48467
48487
  class IgxExcelStyleConditionalFilterComponent {
48488
+ get filterNumber() {
48489
+ return this.esf.expressionsList.length;
48490
+ }
48468
48491
  constructor(esf, platform) {
48469
48492
  this.esf = esf;
48470
48493
  this.platform = platform;
@@ -48534,6 +48557,16 @@ class IgxExcelStyleConditionalFilterComponent {
48534
48557
  getCondition(value) {
48535
48558
  return this.esf.column.filters.condition(value);
48536
48559
  }
48560
+ /**
48561
+ * @hidden @internal
48562
+ */
48563
+ getSelectedCondition(condition) {
48564
+ const expressions = this.esf.expressionsList;
48565
+ if (expressions.length < 1) {
48566
+ return false;
48567
+ }
48568
+ return expressions.length === 1 ? expressions[0].expression.condition.name === condition : condition === 'custom';
48569
+ }
48537
48570
  /**
48538
48571
  * @hidden @internal
48539
48572
  */
@@ -48600,11 +48633,11 @@ class IgxExcelStyleConditionalFilterComponent {
48600
48633
  return this.esf.column.filters.conditionList();
48601
48634
  }
48602
48635
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxExcelStyleConditionalFilterComponent, deps: [{ token: BaseFilteringComponent }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component }); }
48603
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: IgxExcelStyleConditionalFilterComponent, isStandalone: true, selector: "igx-excel-style-conditional-filter", viewQueries: [{ propertyName: "customDialog", first: true, predicate: ["customDialog"], descendants: true, read: IgxExcelStyleCustomDialogComponent }, { propertyName: "subMenu", first: true, predicate: ["subMenu"], descendants: true, read: IgxDropDownComponent }], ngImport: i0, template: "<ng-container *ngIf=\"esf.column\">\n <div tabindex=\"0\"\n class=\"igx-excel-filter__actions-filter\"\n (keydown)=\"onTextFilterKeyDown($event)\"\n (click)=\"onTextFilterClick($event)\"\n [igxDropDownItemNavigation]=\"subMenu\"\n role=\"menuitem\"\n aria-haspopup=\"true\"\n [attr.aria-controls]=\"this.subMenu.listId\"\n [attr.aria-activedescendant]=\"!this.subMenu.collapsed ? this.subMenu.focusedItem?.id : null\">\n <span>{{ subMenuText }}</span>\n <igx-icon>keyboard_arrow_right</igx-icon>\n </div>\n\n <igx-drop-down\n #subMenu\n [maxHeight]=\"'397px'\"\n [displayDensity]=\"esf.displayDensity\"\n (selectionChanging)=\"onSubMenuSelection($event)\"\n (closed)=\"onSubMenuClosed()\">\n <div>\n <igx-drop-down-item\n *ngFor=\"let condition of conditions\"\n [value]=\"condition\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon family=\"imx-icons\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n </div>\n </igx-drop-down-item>\n <igx-drop-down-item *ngIf=\"showCustomFilterItem()\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon>filter_list</igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}</span>\n </div>\n </igx-drop-down-item>\n </div>\n </igx-drop-down>\n\n <igx-excel-style-custom-dialog\n #customDialog\n [column]=\"esf.column\"\n [filteringService]=\"esf.grid.filteringService\"\n [overlayComponentId]=\"esf.overlayComponentId\"\n [displayDensity]=\"esf.displayDensity\">\n </igx-excel-style-custom-dialog>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "component", type: IgxDropDownComponent, selector: "igx-drop-down", inputs: ["allowItemsFocus", "labelledBy"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: IgxDropDownItemComponent, selector: "igx-drop-down-item" }, { kind: "component", type: IgxExcelStyleCustomDialogComponent, selector: "igx-excel-style-custom-dialog", inputs: ["expressionsList", "column", "selectedOperator", "filteringService", "overlayComponentId", "displayDensity"] }] }); }
48636
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: IgxExcelStyleConditionalFilterComponent, isStandalone: true, selector: "igx-excel-style-conditional-filter", viewQueries: [{ propertyName: "customDialog", first: true, predicate: ["customDialog"], descendants: true, read: IgxExcelStyleCustomDialogComponent }, { propertyName: "subMenu", first: true, predicate: ["subMenu"], descendants: true, read: IgxDropDownComponent }], ngImport: i0, template: "<ng-container *ngIf=\"esf.column\">\n <div tabindex=\"0\"\n class=\"igx-excel-filter__actions-filter\"\n [ngClass]=\"filterNumber > 0 ? 'igx-excel-filter__actions-filter--active' : ''\"\n (keydown)=\"onTextFilterKeyDown($event)\"\n (click)=\"onTextFilterClick($event)\"\n [igxDropDownItemNavigation]=\"subMenu\"\n role=\"menuitem\"\n aria-haspopup=\"true\"\n [attr.aria-controls]=\"this.subMenu.listId\"\n [attr.aria-activedescendant]=\"!this.subMenu.collapsed ? this.subMenu.focusedItem?.id : null\">\n <span class=\"igx-excel-filter__filter-number\">{{ subMenuText }} <ng-container *ngIf=\"filterNumber > 0\">({{filterNumber}})</ng-container></span>\n <igx-icon>keyboard_arrow_right</igx-icon>\n </div>\n\n <igx-drop-down\n #subMenu\n [maxHeight]=\"'397px'\"\n [displayDensity]=\"esf.displayDensity\"\n (selectionChanging)=\"onSubMenuSelection($event)\"\n (closed)=\"onSubMenuClosed()\">\n <div>\n <igx-drop-down-item\n *ngFor=\"let condition of conditions\"\n [selected]=\"getSelectedCondition(condition)\"\n [value]=\"condition\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon family=\"imx-icons\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n </div>\n </igx-drop-down-item>\n <igx-drop-down-item *ngIf=\"showCustomFilterItem()\"\n [selected]=\"getSelectedCondition('custom')\" >\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon>filter_list</igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}</span>\n </div>\n </igx-drop-down-item>\n </div>\n </igx-drop-down>\n\n <igx-excel-style-custom-dialog\n #customDialog\n [column]=\"esf.column\"\n [filteringService]=\"esf.grid.filteringService\"\n [overlayComponentId]=\"esf.overlayComponentId\"\n [displayDensity]=\"esf.displayDensity\">\n </igx-excel-style-custom-dialog>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "component", type: IgxDropDownComponent, selector: "igx-drop-down", inputs: ["allowItemsFocus", "labelledBy"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: IgxDropDownItemComponent, selector: "igx-drop-down-item" }, { kind: "component", type: IgxExcelStyleCustomDialogComponent, selector: "igx-excel-style-custom-dialog", inputs: ["expressionsList", "column", "selectedOperator", "filteringService", "overlayComponentId", "displayDensity"] }] }); }
48604
48637
  }
48605
48638
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxExcelStyleConditionalFilterComponent, decorators: [{
48606
48639
  type: Component,
48607
- args: [{ selector: 'igx-excel-style-conditional-filter', standalone: true, imports: [NgIf, IgxDropDownItemNavigationDirective, IgxIconComponent, IgxDropDownComponent, NgFor, IgxDropDownItemComponent, IgxExcelStyleCustomDialogComponent], template: "<ng-container *ngIf=\"esf.column\">\n <div tabindex=\"0\"\n class=\"igx-excel-filter__actions-filter\"\n (keydown)=\"onTextFilterKeyDown($event)\"\n (click)=\"onTextFilterClick($event)\"\n [igxDropDownItemNavigation]=\"subMenu\"\n role=\"menuitem\"\n aria-haspopup=\"true\"\n [attr.aria-controls]=\"this.subMenu.listId\"\n [attr.aria-activedescendant]=\"!this.subMenu.collapsed ? this.subMenu.focusedItem?.id : null\">\n <span>{{ subMenuText }}</span>\n <igx-icon>keyboard_arrow_right</igx-icon>\n </div>\n\n <igx-drop-down\n #subMenu\n [maxHeight]=\"'397px'\"\n [displayDensity]=\"esf.displayDensity\"\n (selectionChanging)=\"onSubMenuSelection($event)\"\n (closed)=\"onSubMenuClosed()\">\n <div>\n <igx-drop-down-item\n *ngFor=\"let condition of conditions\"\n [value]=\"condition\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon family=\"imx-icons\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n </div>\n </igx-drop-down-item>\n <igx-drop-down-item *ngIf=\"showCustomFilterItem()\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon>filter_list</igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}</span>\n </div>\n </igx-drop-down-item>\n </div>\n </igx-drop-down>\n\n <igx-excel-style-custom-dialog\n #customDialog\n [column]=\"esf.column\"\n [filteringService]=\"esf.grid.filteringService\"\n [overlayComponentId]=\"esf.overlayComponentId\"\n [displayDensity]=\"esf.displayDensity\">\n </igx-excel-style-custom-dialog>\n</ng-container>\n" }]
48640
+ args: [{ selector: 'igx-excel-style-conditional-filter', standalone: true, imports: [NgIf, NgClass, IgxDropDownItemNavigationDirective, IgxIconComponent, IgxDropDownComponent, NgFor, IgxDropDownItemComponent, IgxExcelStyleCustomDialogComponent], template: "<ng-container *ngIf=\"esf.column\">\n <div tabindex=\"0\"\n class=\"igx-excel-filter__actions-filter\"\n [ngClass]=\"filterNumber > 0 ? 'igx-excel-filter__actions-filter--active' : ''\"\n (keydown)=\"onTextFilterKeyDown($event)\"\n (click)=\"onTextFilterClick($event)\"\n [igxDropDownItemNavigation]=\"subMenu\"\n role=\"menuitem\"\n aria-haspopup=\"true\"\n [attr.aria-controls]=\"this.subMenu.listId\"\n [attr.aria-activedescendant]=\"!this.subMenu.collapsed ? this.subMenu.focusedItem?.id : null\">\n <span class=\"igx-excel-filter__filter-number\">{{ subMenuText }} <ng-container *ngIf=\"filterNumber > 0\">({{filterNumber}})</ng-container></span>\n <igx-icon>keyboard_arrow_right</igx-icon>\n </div>\n\n <igx-drop-down\n #subMenu\n [maxHeight]=\"'397px'\"\n [displayDensity]=\"esf.displayDensity\"\n (selectionChanging)=\"onSubMenuSelection($event)\"\n (closed)=\"onSubMenuClosed()\">\n <div>\n <igx-drop-down-item\n *ngFor=\"let condition of conditions\"\n [selected]=\"getSelectedCondition(condition)\"\n [value]=\"condition\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon family=\"imx-icons\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n </div>\n </igx-drop-down-item>\n <igx-drop-down-item *ngIf=\"showCustomFilterItem()\"\n [selected]=\"getSelectedCondition('custom')\" >\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon>filter_list</igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}</span>\n </div>\n </igx-drop-down-item>\n </div>\n </igx-drop-down>\n\n <igx-excel-style-custom-dialog\n #customDialog\n [column]=\"esf.column\"\n [filteringService]=\"esf.grid.filteringService\"\n [overlayComponentId]=\"esf.overlayComponentId\"\n [displayDensity]=\"esf.displayDensity\">\n </igx-excel-style-custom-dialog>\n</ng-container>\n" }]
48608
48641
  }], ctorParameters: () => [{ type: BaseFilteringComponent }, { type: PlatformUtil }], propDecorators: { customDialog: [{
48609
48642
  type: ViewChild,
48610
48643
  args: ['customDialog', { read: IgxExcelStyleCustomDialogComponent }]
@@ -54522,7 +54555,7 @@ class IgxGridHeaderComponent {
54522
54555
  return this.sortDirection !== SortingDirection.None;
54523
54556
  }
54524
54557
  get filterIconClassName() {
54525
- return this.column.filteringExpressionsTree ? 'igx-excel-filter__icon--filtered' : 'igx-excel-filter__icon';
54558
+ return this.column.filteringExpressionsTree || this.isAdvancedFilterApplied() ? 'igx-excel-filter__icon--filtered' : 'igx-excel-filter__icon';
54526
54559
  }
54527
54560
  get selectable() {
54528
54561
  return this.grid.columnSelection !== GridSelectionMode.none &&
@@ -54624,6 +54657,12 @@ class IgxGridHeaderComponent {
54624
54657
  const expr = this.grid.sortingExpressions.find((x) => x.fieldName === this.column.field);
54625
54658
  this.sortDirection = expr ? expr.dir : SortingDirection.None;
54626
54659
  }
54660
+ isAdvancedFilterApplied() {
54661
+ if (!this.grid.advancedFilteringExpressionsTree) {
54662
+ return false;
54663
+ }
54664
+ return !!this.grid.advancedFilteringExpressionsTree.find(this.column.field);
54665
+ }
54627
54666
  triggerSort() {
54628
54667
  const groupingExpr = this.grid.groupingExpressions ?
54629
54668
  this.grid.groupingExpressions.find((expr) => expr.fieldName === this.column.field) :
@@ -55815,8 +55854,11 @@ class IgxGridHeaderGroupComponent {
55815
55854
  * @hidden
55816
55855
  */
55817
55856
  onMouseDown(event) {
55818
- // hack for preventing text selection in IE and Edge while dragging the resize element
55819
- event.preventDefault();
55857
+ if (!this.grid.allowFiltering ||
55858
+ (event.composedPath().findIndex(el => el.tagName?.toLowerCase() === 'igx-grid-filtering-cell') < 1)) {
55859
+ // Hack for preventing text selection in IE and Edge while dragging the resize element
55860
+ event.preventDefault();
55861
+ }
55820
55862
  }
55821
55863
  /**
55822
55864
  * @hidden
@@ -75679,13 +75721,36 @@ class IgxGridToolbarAdvancedFilteringComponent {
75679
75721
  }
75680
75722
  constructor(toolbar) {
75681
75723
  this.toolbar = toolbar;
75724
+ this.grid?.advancedFilteringExpressionsTreeChange.subscribe(filteringTree => {
75725
+ this.numberOfColumns = this.extractUniqueFieldNamesFromFilterTree(filteringTree).length;
75726
+ });
75727
+ }
75728
+ /**
75729
+ * @hidden
75730
+ */
75731
+ ngAfterViewInit() {
75732
+ this.numberOfColumns = this.grid?.advancedFilteringExpressionsTree ? this.extractUniqueFieldNamesFromFilterTree(this.grid?.advancedFilteringExpressionsTree).length : 0;
75733
+ }
75734
+ extractUniqueFieldNamesFromFilterTree(filteringTree) {
75735
+ const columnNames = [];
75736
+ if (!filteringTree)
75737
+ return columnNames;
75738
+ filteringTree.filteringOperands.forEach((expr) => {
75739
+ if (expr instanceof FilteringExpressionsTree) {
75740
+ columnNames.push(...this.extractUniqueFieldNamesFromFilterTree(expr));
75741
+ }
75742
+ else {
75743
+ columnNames.push(expr.fieldName);
75744
+ }
75745
+ });
75746
+ return [...new Set(columnNames)];
75682
75747
  }
75683
75748
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxGridToolbarAdvancedFilteringComponent, deps: [{ token: IgxToolbarToken }], target: i0.ɵɵFactoryTarget.Component }); }
75684
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: IgxGridToolbarAdvancedFilteringComponent, isStandalone: true, selector: "igx-grid-toolbar-advanced-filtering", inputs: { overlaySettings: "overlaySettings" }, ngImport: i0, template: "<button igxButton=\"outlined\" type=\"button\" [displayDensity]=\"grid.displayDensity\" name=\"btnAdvancedFiltering\" igxRipple\n [title]=\"grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_tooltip\"\n (click)=\"grid.openAdvancedFilteringDialog(overlaySettings)\"\n [ngClass]=\"grid.advancedFilteringExpressionsTree ? 'igx-grid-toolbar__adv-filter--filtered' : 'igx-grid-toolbar__adv-filter'\">\n <igx-icon>filter_list</igx-icon>\n <span #ref>\n <ng-content></ng-content>\n </span>\n <span *ngIf=\"!ref.childNodes.length\">{{ grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_label }}</span>\n</button>\n", dependencies: [{ kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxLabel"], outputs: ["buttonSelected"] }, { kind: "directive", type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
75749
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: IgxGridToolbarAdvancedFilteringComponent, isStandalone: true, selector: "igx-grid-toolbar-advanced-filtering", inputs: { overlaySettings: "overlaySettings" }, ngImport: i0, template: "<button igxButton=\"outlined\" type=\"button\" [displayDensity]=\"grid.displayDensity\" name=\"btnAdvancedFiltering\" igxRipple\n [title]=\"grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_tooltip\"\n (click)=\"grid.openAdvancedFilteringDialog(overlaySettings)\"\n class=\"igx-grid-toolbar__adv-filter\">\n <igx-icon>filter_list</igx-icon>\n <span #ref>\n <ng-content></ng-content>\n </span>\n <span *ngIf=\"!ref.childNodes.length\">{{ grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_label }}</span>\n <span class=\"igx-adv-filter--column-number\" *ngIf=\"grid?.advancedFilteringExpressionsTree\"> ({{ numberOfColumns }}) </span>\n</button>\n", dependencies: [{ kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxLabel"], outputs: ["buttonSelected"] }, { kind: "directive", type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
75685
75750
  }
75686
75751
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxGridToolbarAdvancedFilteringComponent, decorators: [{
75687
75752
  type: Component,
75688
- args: [{ selector: 'igx-grid-toolbar-advanced-filtering', standalone: true, imports: [IgxButtonDirective, IgxRippleDirective, NgClass, IgxIconComponent, NgIf], template: "<button igxButton=\"outlined\" type=\"button\" [displayDensity]=\"grid.displayDensity\" name=\"btnAdvancedFiltering\" igxRipple\n [title]=\"grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_tooltip\"\n (click)=\"grid.openAdvancedFilteringDialog(overlaySettings)\"\n [ngClass]=\"grid.advancedFilteringExpressionsTree ? 'igx-grid-toolbar__adv-filter--filtered' : 'igx-grid-toolbar__adv-filter'\">\n <igx-icon>filter_list</igx-icon>\n <span #ref>\n <ng-content></ng-content>\n </span>\n <span *ngIf=\"!ref.childNodes.length\">{{ grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_label }}</span>\n</button>\n" }]
75753
+ args: [{ selector: 'igx-grid-toolbar-advanced-filtering', standalone: true, imports: [IgxButtonDirective, IgxRippleDirective, NgClass, IgxIconComponent, NgIf], template: "<button igxButton=\"outlined\" type=\"button\" [displayDensity]=\"grid.displayDensity\" name=\"btnAdvancedFiltering\" igxRipple\n [title]=\"grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_tooltip\"\n (click)=\"grid.openAdvancedFilteringDialog(overlaySettings)\"\n class=\"igx-grid-toolbar__adv-filter\">\n <igx-icon>filter_list</igx-icon>\n <span #ref>\n <ng-content></ng-content>\n </span>\n <span *ngIf=\"!ref.childNodes.length\">{{ grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_label }}</span>\n <span class=\"igx-adv-filter--column-number\" *ngIf=\"grid?.advancedFilteringExpressionsTree\"> ({{ numberOfColumns }}) </span>\n</button>\n" }]
75689
75754
  }], ctorParameters: () => [{ type: IgxToolbarToken, decorators: [{
75690
75755
  type: Inject,
75691
75756
  args: [IgxToolbarToken]