igniteui-angular 18.0.4 → 18.0.5

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 (56) 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/pivot-grid/pivot-grid.interface.mjs +1 -1
  14. package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +27 -3
  15. package/esm2022/lib/services/excel/excel-strings.mjs +2 -2
  16. package/fesm2022/igniteui-angular.mjs +103 -38
  17. package/fesm2022/igniteui-angular.mjs.map +1 -1
  18. package/lib/core/styles/components/grid/_excel-filtering-component.scss +5 -0
  19. package/lib/core/styles/components/grid/_excel-filtering-theme.scss +5 -0
  20. package/lib/core/styles/components/grid-toolbar/_grid-toolbar-component.scss +0 -4
  21. package/lib/core/styles/components/grid-toolbar/_grid-toolbar-theme.scss +0 -15
  22. package/lib/drop-down/drop-down-item.base.d.ts +1 -1
  23. package/lib/drop-down/drop-down.base.d.ts +1 -1
  24. package/lib/drop-down/drop-down.common.d.ts +1 -1
  25. package/lib/drop-down/drop-down.component.d.ts +13 -8
  26. package/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.d.ts +5 -0
  27. package/lib/grids/headers/grid-header.component.d.ts +1 -0
  28. package/lib/grids/pivot-grid/pivot-grid.interface.d.ts +1 -1
  29. package/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.d.ts +12 -1
  30. package/package.json +1 -1
  31. package/styles/igniteui-angular-dark.css +1 -1
  32. package/styles/igniteui-angular.css +1 -1
  33. package/styles/igniteui-bootstrap-dark.css +1 -1
  34. package/styles/igniteui-bootstrap-light.css +1 -1
  35. package/styles/igniteui-dark-green.css +1 -1
  36. package/styles/igniteui-fluent-dark-excel.css +1 -1
  37. package/styles/igniteui-fluent-dark-word.css +1 -1
  38. package/styles/igniteui-fluent-dark.css +1 -1
  39. package/styles/igniteui-fluent-light-excel.css +1 -1
  40. package/styles/igniteui-fluent-light-word.css +1 -1
  41. package/styles/igniteui-fluent-light.css +1 -1
  42. package/styles/igniteui-indigo-dark.css +1 -1
  43. package/styles/igniteui-indigo-light.css +1 -1
  44. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  45. package/styles/maps/igniteui-angular.css.map +1 -1
  46. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  47. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  48. package/styles/maps/igniteui-dark-green.css.map +1 -1
  49. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  50. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  51. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  52. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  53. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  54. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  55. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  56. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -1435,8 +1435,8 @@ class FilteringExpressionsTree {
1435
1435
  if ((expr instanceof FilteringExpressionsTree)) {
1436
1436
  return this.isFilteringExpressionsTreeForColumn(expr, fieldName);
1437
1437
  }
1438
- else {
1439
- return expr.fieldName === fieldName;
1438
+ else if (expr.fieldName === fieldName) {
1439
+ return true;
1440
1440
  }
1441
1441
  }
1442
1442
  return false;
@@ -3413,7 +3413,7 @@ class ExcelStrings {
3413
3413
  }
3414
3414
  static getStyles() {
3415
3415
  return ExcelStrings.XML_STRING +
3416
- '<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>';
3416
+ '<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>';
3417
3417
  }
3418
3418
  static getWorkbook(worksheetName) {
3419
3419
  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>`;
@@ -7323,7 +7323,7 @@ class IgxDropDownBaseDirective {
7323
7323
  * @param newSelection the item selected
7324
7324
  * @param event the event that triggered the call
7325
7325
  */
7326
- selectItem(newSelection, event) {
7326
+ selectItem(newSelection, event, emit = true) {
7327
7327
  this.selectionChanging.emit({
7328
7328
  newSelection,
7329
7329
  oldSelection: null,
@@ -11104,6 +11104,10 @@ class IgxDragDirective {
11104
11104
  }
11105
11105
  /** Method setting transformation to the base draggable element. */
11106
11106
  setTransformXY(x, y) {
11107
+ if (x === 0 && y === 0) {
11108
+ this.element.nativeElement.style.transform = '';
11109
+ return;
11110
+ }
11107
11111
  this.element.nativeElement.style.transform = 'translate3d(' + x + 'px, ' + y + 'px, 0px)';
11108
11112
  }
11109
11113
  /**
@@ -13321,13 +13325,13 @@ class IgxForOfDirective extends IgxForOfToken {
13321
13325
  const currDiff = newVal - oldVal;
13322
13326
  diffs.push(currDiff);
13323
13327
  totalDiff += currDiff;
13324
- this.sizesCache[index + 1] += totalDiff;
13328
+ this.sizesCache[index + 1] = (this.sizesCache[index] || 0) + newVal;
13325
13329
  }
13326
13330
  }
13327
13331
  // update cache
13328
13332
  if (Math.abs(totalDiff) > 0) {
13329
13333
  for (let j = this.state.startIndex + this.state.chunkSize + 1; j < this.sizesCache.length; j++) {
13330
- this.sizesCache[j] += totalDiff;
13334
+ this.sizesCache[j] = (this.sizesCache[j] || 0) + totalDiff;
13331
13335
  }
13332
13336
  // update scrBar heights/widths
13333
13337
  const reducer = (acc, val) => acc + val;
@@ -22392,12 +22396,12 @@ class IgxDropDownItemBaseDirective {
22392
22396
  if (this._selected) {
22393
22397
  const dropDownSelectedItem = this.dropDown.selectedItem;
22394
22398
  if (!dropDownSelectedItem) {
22395
- this.dropDown.selectItem(this);
22399
+ this.dropDown.selectItem(this, undefined, false);
22396
22400
  }
22397
22401
  else if (this.hasIndex
22398
22402
  ? this._index !== dropDownSelectedItem.index || this.value !== dropDownSelectedItem.value :
22399
22403
  this !== dropDownSelectedItem) {
22400
- this.dropDown.selectItem(this);
22404
+ this.dropDown.selectItem(this, undefined, false);
22401
22405
  }
22402
22406
  }
22403
22407
  }
@@ -22741,9 +22745,20 @@ class IgxDropDownComponent extends IgxDropDownBaseDirective {
22741
22745
  * ```
22742
22746
  */
22743
22747
  open(overlaySettings) {
22744
- this.toggleDirective.open(overlaySettings);
22748
+ const settings = overlaySettings || this.getDefaultOverlaySettings();
22749
+ this.toggleDirective.open(settings);
22745
22750
  this.updateScrollPosition();
22746
22751
  }
22752
+ /**
22753
+ * @hidden @internal
22754
+ */
22755
+ getDefaultOverlaySettings() {
22756
+ return {
22757
+ closeOnOutsideClick: true,
22758
+ modal: false,
22759
+ positionStrategy: new ConnectedPositioningStrategy()
22760
+ };
22761
+ }
22747
22762
  /**
22748
22763
  * Closes the dropdown
22749
22764
  *
@@ -22983,14 +22998,15 @@ class IgxDropDownComponent extends IgxDropDownBaseDirective {
22983
22998
  }
22984
22999
  }
22985
23000
  /**
22986
- * Handles the `selectionChanging` emit and the drop down toggle when selection changes
22987
- *
22988
- * @hidden
22989
- * @internal
22990
- * @param newSelection
22991
- * @param event
22992
- */
22993
- selectItem(newSelection, event) {
23001
+ * Handles the `selectionChanging` emit and the drop down toggle when selection changes
23002
+ *
23003
+ * @hidden
23004
+ * @internal
23005
+ * @param newSelection
23006
+ * @param event
23007
+ * @param emit
23008
+ */
23009
+ selectItem(newSelection, event, emit = true) {
22994
23010
  const oldSelection = this.selectedItem;
22995
23011
  if (!newSelection) {
22996
23012
  newSelection = this.focusedItem;
@@ -23008,7 +23024,9 @@ class IgxDropDownComponent extends IgxDropDownBaseDirective {
23008
23024
  };
23009
23025
  }
23010
23026
  const args = { oldSelection, newSelection, cancel: false, owner: this };
23011
- this.selectionChanging.emit(args);
23027
+ if (emit) {
23028
+ this.selectionChanging.emit(args);
23029
+ }
23012
23030
  if (!args.cancel) {
23013
23031
  if (this.isSelectionValid(args.newSelection)) {
23014
23032
  this.selection.set(this.id, new Set([args.newSelection]));
@@ -27802,8 +27820,7 @@ class IgxButtonGroupComponent {
27802
27820
  if (updatedButtons.length > 0) {
27803
27821
  updatedButtons.forEach((button) => {
27804
27822
  const index = this.buttons.map((b) => b.nativeElement).indexOf(button);
27805
- const args = { owner: this, button: this.buttons[index], index };
27806
- this.updateButtonSelectionState(index, args);
27823
+ this.updateButtonSelectionState(index);
27807
27824
  });
27808
27825
  }
27809
27826
  // Watch for changes again
@@ -27821,14 +27838,12 @@ class IgxButtonGroupComponent {
27821
27838
  }, updated);
27822
27839
  return updated;
27823
27840
  }
27824
- updateButtonSelectionState(index, args) {
27841
+ updateButtonSelectionState(index) {
27825
27842
  if (this.buttons[index].selected) {
27826
27843
  this.updateSelected(index);
27827
- this.selected.emit(args);
27828
27844
  }
27829
27845
  else {
27830
27846
  this.updateDeselected(index);
27831
- this.deselected.emit(args);
27832
27847
  }
27833
27848
  }
27834
27849
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: IgxButtonGroupComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
@@ -48239,14 +48254,19 @@ class IgxExcelStyleCustomDialogComponent {
48239
48254
  this.expressionDateComponents.forEach(x => x.cdr.markForCheck());
48240
48255
  }
48241
48256
  createInitialExpressionUIElement() {
48242
- this.expressionsList = [];
48243
- const firstExprUI = new ExpressionUI();
48244
- firstExprUI.expression = {
48245
- condition: this.createCondition(this.selectedOperator),
48246
- fieldName: this.column.field,
48247
- ignoreCase: this.column.filteringIgnoreCase,
48248
- searchVal: null
48249
- };
48257
+ let firstExprUI = new ExpressionUI();
48258
+ if (this.expressionsList.length == 1 && this.expressionsList[0].expression.condition.name === this.selectedOperator) {
48259
+ firstExprUI = this.expressionsList.pop();
48260
+ }
48261
+ else {
48262
+ this.expressionsList = [];
48263
+ firstExprUI.expression = {
48264
+ condition: this.createCondition(this.selectedOperator),
48265
+ fieldName: this.column.field,
48266
+ ignoreCase: this.column.filteringIgnoreCase,
48267
+ searchVal: null
48268
+ };
48269
+ }
48250
48270
  firstExprUI.afterOperator = FilteringLogic.And;
48251
48271
  this.expressionsList.push(firstExprUI);
48252
48272
  const secondExprUI = new ExpressionUI();
@@ -48304,6 +48324,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImpor
48304
48324
  * A component used for presenting Excel style conditional filter UI.
48305
48325
  */
48306
48326
  class IgxExcelStyleConditionalFilterComponent {
48327
+ get filterNumber() {
48328
+ return this.esf.expressionsList.length;
48329
+ }
48307
48330
  constructor(esf, platform) {
48308
48331
  this.esf = esf;
48309
48332
  this.platform = platform;
@@ -48373,6 +48396,16 @@ class IgxExcelStyleConditionalFilterComponent {
48373
48396
  getCondition(value) {
48374
48397
  return this.esf.column.filters.condition(value);
48375
48398
  }
48399
+ /**
48400
+ * @hidden @internal
48401
+ */
48402
+ getSelectedCondition(condition) {
48403
+ const expressions = this.esf.expressionsList;
48404
+ if (expressions.length < 1) {
48405
+ return false;
48406
+ }
48407
+ return expressions.length === 1 ? expressions[0].expression.condition.name === condition : condition === 'custom';
48408
+ }
48376
48409
  /**
48377
48410
  * @hidden @internal
48378
48411
  */
@@ -48439,11 +48472,11 @@ class IgxExcelStyleConditionalFilterComponent {
48439
48472
  return this.esf.column.filters.conditionList();
48440
48473
  }
48441
48474
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: IgxExcelStyleConditionalFilterComponent, deps: [{ token: BaseFilteringComponent }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component }); }
48442
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", 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 (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 </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"] }] }); }
48475
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", 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 (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 </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"] }] }); }
48443
48476
  }
48444
48477
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: IgxExcelStyleConditionalFilterComponent, decorators: [{
48445
48478
  type: Component,
48446
- 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 (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 </igx-excel-style-custom-dialog>\n</ng-container>\n" }]
48479
+ 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 (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 </igx-excel-style-custom-dialog>\n</ng-container>\n" }]
48447
48480
  }], ctorParameters: () => [{ type: BaseFilteringComponent }, { type: PlatformUtil }], propDecorators: { customDialog: [{
48448
48481
  type: ViewChild,
48449
48482
  args: ['customDialog', { read: IgxExcelStyleCustomDialogComponent }]
@@ -54257,7 +54290,7 @@ class IgxGridHeaderComponent {
54257
54290
  return this.sortDirection !== SortingDirection.None;
54258
54291
  }
54259
54292
  get filterIconClassName() {
54260
- return this.column.filteringExpressionsTree ? 'igx-excel-filter__icon--filtered' : 'igx-excel-filter__icon';
54293
+ return this.column.filteringExpressionsTree || this.isAdvancedFilterApplied() ? 'igx-excel-filter__icon--filtered' : 'igx-excel-filter__icon';
54261
54294
  }
54262
54295
  get selectable() {
54263
54296
  return this.grid.columnSelection !== GridSelectionMode.none &&
@@ -54359,6 +54392,12 @@ class IgxGridHeaderComponent {
54359
54392
  const expr = this.grid.sortingExpressions.find((x) => x.fieldName === this.column.field);
54360
54393
  this.sortDirection = expr ? expr.dir : SortingDirection.None;
54361
54394
  }
54395
+ isAdvancedFilterApplied() {
54396
+ if (!this.grid.advancedFilteringExpressionsTree) {
54397
+ return false;
54398
+ }
54399
+ return !!this.grid.advancedFilteringExpressionsTree.find(this.column.field);
54400
+ }
54362
54401
  triggerSort() {
54363
54402
  const groupingExpr = this.grid.groupingExpressions ?
54364
54403
  this.grid.groupingExpressions.find((expr) => expr.fieldName === this.column.field) :
@@ -55536,8 +55575,11 @@ class IgxGridHeaderGroupComponent {
55536
55575
  * @hidden
55537
55576
  */
55538
55577
  onMouseDown(event) {
55539
- // hack for preventing text selection in IE and Edge while dragging the resize element
55540
- event.preventDefault();
55578
+ if (!this.grid.allowFiltering ||
55579
+ (event.composedPath().findIndex(el => el.tagName?.toLowerCase() === 'igx-grid-filtering-cell') < 1)) {
55580
+ // Hack for preventing text selection in IE and Edge while dragging the resize element
55581
+ event.preventDefault();
55582
+ }
55541
55583
  }
55542
55584
  /**
55543
55585
  * @hidden
@@ -75654,13 +75696,36 @@ class IgxGridToolbarAdvancedFilteringComponent {
75654
75696
  }
75655
75697
  constructor(toolbar) {
75656
75698
  this.toolbar = toolbar;
75699
+ this.grid?.advancedFilteringExpressionsTreeChange.subscribe(filteringTree => {
75700
+ this.numberOfColumns = this.extractUniqueFieldNamesFromFilterTree(filteringTree).length;
75701
+ });
75702
+ }
75703
+ /**
75704
+ * @hidden
75705
+ */
75706
+ ngAfterViewInit() {
75707
+ this.numberOfColumns = this.grid?.advancedFilteringExpressionsTree ? this.extractUniqueFieldNamesFromFilterTree(this.grid?.advancedFilteringExpressionsTree).length : 0;
75708
+ }
75709
+ extractUniqueFieldNamesFromFilterTree(filteringTree) {
75710
+ const columnNames = [];
75711
+ if (!filteringTree)
75712
+ return columnNames;
75713
+ filteringTree.filteringOperands.forEach((expr) => {
75714
+ if (expr instanceof FilteringExpressionsTree) {
75715
+ columnNames.push(...this.extractUniqueFieldNamesFromFilterTree(expr));
75716
+ }
75717
+ else {
75718
+ columnNames.push(expr.fieldName);
75719
+ }
75720
+ });
75721
+ return [...new Set(columnNames)];
75657
75722
  }
75658
75723
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: IgxGridToolbarAdvancedFilteringComponent, deps: [{ token: IgxToolbarToken }], target: i0.ɵɵFactoryTarget.Component }); }
75659
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: IgxGridToolbarAdvancedFilteringComponent, isStandalone: true, selector: "igx-grid-toolbar-advanced-filtering", inputs: { overlaySettings: "overlaySettings" }, ngImport: i0, template: "<button igxButton=\"outlined\" type=\"button\" 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"] }] }); }
75724
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: IgxGridToolbarAdvancedFilteringComponent, isStandalone: true, selector: "igx-grid-toolbar-advanced-filtering", inputs: { overlaySettings: "overlaySettings" }, ngImport: i0, template: "<button igxButton=\"outlined\" type=\"button\" 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"] }] }); }
75660
75725
  }
75661
75726
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: IgxGridToolbarAdvancedFilteringComponent, decorators: [{
75662
75727
  type: Component,
75663
- args: [{ selector: 'igx-grid-toolbar-advanced-filtering', standalone: true, imports: [IgxButtonDirective, IgxRippleDirective, NgClass, IgxIconComponent, NgIf], template: "<button igxButton=\"outlined\" type=\"button\" 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" }]
75728
+ args: [{ selector: 'igx-grid-toolbar-advanced-filtering', standalone: true, imports: [IgxButtonDirective, IgxRippleDirective, NgClass, IgxIconComponent, NgIf], template: "<button igxButton=\"outlined\" type=\"button\" 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" }]
75664
75729
  }], ctorParameters: () => [{ type: IgxToolbarToken, decorators: [{
75665
75730
  type: Inject,
75666
75731
  args: [IgxToolbarToken]