igniteui-angular 18.2.4 → 18.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/esm2022/lib/calendar/common/calendar-view.directive.mjs +3 -2
  2. package/esm2022/lib/calendar/common/model.mjs +3 -2
  3. package/esm2022/lib/combo/combo.component.mjs +3 -3
  4. package/esm2022/lib/core/utils.mjs +23 -11
  5. package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +20 -22
  6. package/esm2022/lib/directives/for-of/for_of.directive.mjs +5 -3
  7. package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +5 -2
  8. package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +1 -1
  9. package/esm2022/lib/grids/grid-base.directive.mjs +7 -2
  10. package/esm2022/lib/grids/moving/moving.drag.directive.mjs +3 -3
  11. package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +6 -8
  12. package/esm2022/lib/services/animation/angular-animation-player.mjs +4 -2
  13. package/esm2022/lib/tabs/tabs/tab-header.component.mjs +7 -5
  14. package/esm2022/lib/tabs/tabs/tabs.component.mjs +14 -10
  15. package/fesm2022/igniteui-angular.mjs +86 -61
  16. package/fesm2022/igniteui-angular.mjs.map +1 -1
  17. package/lib/core/styles/components/tree/_tree-theme.scss +7 -1
  18. package/lib/core/styles/themes/generators/_base.scss +3 -2
  19. package/lib/core/styles/themes/generators/_bootstrap.scss +9 -6
  20. package/lib/core/styles/themes/generators/_fluent.scss +9 -6
  21. package/lib/core/styles/themes/generators/_indigo.scss +9 -6
  22. package/lib/directives/drag-drop/drag-drop.directive.d.ts +1 -0
  23. package/lib/grids/grid-base.directive.d.ts +1 -0
  24. package/lib/grids/pivot-grid/pivot-grid.component.d.ts +0 -1
  25. package/lib/tabs/tabs/tabs.component.d.ts +3 -1
  26. package/package.json +1 -1
  27. package/styles/igniteui-angular-dark.css +1 -1
  28. package/styles/igniteui-angular.css +1 -1
  29. package/styles/igniteui-bootstrap-dark.css +1 -1
  30. package/styles/igniteui-bootstrap-light.css +1 -1
  31. package/styles/igniteui-dark-green.css +1 -1
  32. package/styles/igniteui-fluent-dark-excel.css +1 -1
  33. package/styles/igniteui-fluent-dark-word.css +1 -1
  34. package/styles/igniteui-fluent-dark.css +1 -1
  35. package/styles/igniteui-fluent-light-excel.css +1 -1
  36. package/styles/igniteui-fluent-light-word.css +1 -1
  37. package/styles/igniteui-fluent-light.css +1 -1
  38. package/styles/igniteui-indigo-dark.css +1 -1
  39. package/styles/igniteui-indigo-light.css +1 -1
  40. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  41. package/styles/maps/igniteui-angular.css.map +1 -1
  42. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  43. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  44. package/styles/maps/igniteui-dark-green.css.map +1 -1
  45. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  46. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  47. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  48. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  49. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  50. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  51. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  52. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { Injectable, Directive, Input, HostListener, EventEmitter, InjectionToken, isDevMode, inject, PLATFORM_ID, Inject, ElementRef, ViewContainerRef, createComponent, Output, HostBinding, Self, Optional, booleanAttribute, SecurityContext, Component, ContentChildren, ContentChild, RendererStyleFlags2, Pipe, ViewChild, DestroyRef, LOCALE_ID, forwardRef, Host, QueryList, ViewChildren, TemplateRef, ChangeDetectionStrategy, SimpleChange, SkipSelf, CUSTOM_ELEMENTS_SCHEMA, reflectComponentType, NgModule } from '@angular/core';
3
3
  import * as i4 from '@angular/forms';
4
4
  import { NgModel, NgControl, FormControlName, NG_VALUE_ACCESSOR, Validators, NG_VALIDATORS, FormGroup, FormsModule, RequiredValidator, MinValidator, MaxValidator, EmailValidator, MinLengthValidator, MaxLengthValidator, PatternValidator, FormControl, ReactiveFormsModule } from '@angular/forms';
5
- import { Observable, Subject, fromEvent, BehaviorSubject, interval, animationFrameScheduler, noop, merge, Subscription, timer, pipe } from 'rxjs';
5
+ import { Observable, NEVER, Subject, fromEvent, BehaviorSubject, interval, animationFrameScheduler, noop, merge, Subscription, timer, takeUntil as takeUntil$1, pipe } from 'rxjs';
6
6
  import { takeUntil, filter, throttle, throttleTime, first as first$2, startWith, take, debounce, tap, switchMap, skipLast, debounceTime, map, shareReplay, takeWhile, timeout, pluck } from 'rxjs/operators';
7
7
  import { isPlatformBrowser, formatDate as formatDate$1, CurrencyPipe, formatPercent, formatNumber, getLocaleCurrencyCode, DatePipe, getLocaleDateFormat, FormatWidth, getLocaleDateTimeFormat, DOCUMENT, NgTemplateOutlet, NgIf, NgClass, NgSwitch, NgSwitchCase, NgSwitchDefault, NgFor, TitleCasePipe, getLocaleFirstDayOfWeek, NgStyle, getLocaleCurrencySymbol, formatCurrency as formatCurrency$1, getLocaleNumberFormat, NumberFormatStyle, DecimalPipe, PercentPipe, getCurrencySymbol, AsyncPipe } from '@angular/common';
8
8
  import { mergeWith, isEqual as isEqual$1 } from 'lodash-es';
@@ -402,7 +402,9 @@ const isObject = (value) => !!(value && value.toString() === '[object Object]');
402
402
  * @returns true if provided variable is Date
403
403
  * @hidden
404
404
  */
405
- const isDate = (value) => value instanceof Date;
405
+ const isDate = (value) => {
406
+ return Object.prototype.toString.call(value) === "[object Date]";
407
+ };
406
408
  /**
407
409
  * Checks if the two passed arguments are equal
408
410
  * Currently supports date objects
@@ -599,14 +601,24 @@ const HEADER_KEYS = new Set([...Array.from(NAVIGATION_KEYS), 'escape', 'esc', 'l
599
601
  * Run the resizeObservable outside angular zone, because it patches the MutationObserver which causes an infinite loop.
600
602
  * Related issue: https://github.com/angular/angular/issues/31712
601
603
  */
602
- const resizeObservable = (target) => new Observable((observer) => {
603
- const instance = new (getResizeObserver())((entries) => {
604
- observer.next(entries);
605
- });
606
- instance.observe(target);
607
- const unsubscribe = () => instance.disconnect();
608
- return unsubscribe;
609
- });
604
+ const resizeObservable = (target) => {
605
+ const resizeObserver = getResizeObserver();
606
+ // check whether we are on server env or client env
607
+ if (resizeObserver) {
608
+ return new Observable((observer) => {
609
+ const instance = new resizeObserver((entries) => {
610
+ observer.next(entries);
611
+ });
612
+ instance.observe(target);
613
+ const unsubscribe = () => instance.disconnect();
614
+ return unsubscribe;
615
+ });
616
+ }
617
+ else {
618
+ // if on a server env return a empty observable that does not complete immediately
619
+ return NEVER;
620
+ }
621
+ };
610
622
  /**
611
623
  * @hidden
612
624
  * @internal
@@ -4874,7 +4886,9 @@ class IgxAngularAnimationPlayer {
4874
4886
  // To workaround this we are getting the positions from the inner player.
4875
4887
  // This is logged in Angular here - https://github.com/angular/angular/issues/18891
4876
4888
  // As soon as this is resolved we can remove this hack
4877
- this._innerPlayer = innerRenderer.engine.players[innerRenderer.engine.players.length - 1];
4889
+ const rendererEngine = innerRenderer.engine || innerRenderer.delegate.engine;
4890
+ // A workaround because of Angular SSR is using some delegation.
4891
+ this._innerPlayer = rendererEngine.players[rendererEngine.players.length - 1];
4878
4892
  }
4879
4893
  init() {
4880
4894
  this.internalPlayer.init();
@@ -11710,9 +11724,7 @@ class IgxDragDirective {
11710
11724
  fromEvent(document.defaultView, 'mouseup').pipe(takeUntil(this._destroy))
11711
11725
  .subscribe((res) => this.onPointerUp(res));
11712
11726
  }
11713
- this.element.nativeElement.addEventListener('transitionend', (args) => {
11714
- this.onTransitionEnd(args);
11715
- });
11727
+ this.element.nativeElement.addEventListener('transitionend', this.onTransitionEnd.bind(this));
11716
11728
  });
11717
11729
  // Set transition duration to 0s. This also helps with setting `visibility: hidden` to the base to not lag.
11718
11730
  this.element.nativeElement.style.transitionDuration = '0.0s';
@@ -11731,6 +11743,7 @@ class IgxDragDirective {
11731
11743
  this._dynamicGhostRef = null;
11732
11744
  }
11733
11745
  }
11746
+ this.element.nativeElement.removeEventListener('transitionend', this.onTransitionEnd);
11734
11747
  if (this._containerScrollIntervalId) {
11735
11748
  clearInterval(this._containerScrollIntervalId);
11736
11749
  this._containerScrollIntervalId = null;
@@ -12115,12 +12128,7 @@ class IgxDragDirective {
12115
12128
  if (ghostDestroyArgs.cancel) {
12116
12129
  return;
12117
12130
  }
12118
- this.ghostElement.remove();
12119
- this.ghostElement = null;
12120
- if (this._dynamicGhostRef) {
12121
- this._dynamicGhostRef.destroy();
12122
- this._dynamicGhostRef = null;
12123
- }
12131
+ this.clearGhost();
12124
12132
  }
12125
12133
  else if (!this.ghost) {
12126
12134
  this.element.nativeElement.style.transitionProperty = '';
@@ -12142,6 +12150,18 @@ class IgxDragDirective {
12142
12150
  });
12143
12151
  });
12144
12152
  }
12153
+ clearGhost() {
12154
+ this.ghostElement.removeEventListener('pointermove', this.onPointerMove);
12155
+ this.ghostElement.removeEventListener('pointerup', this.onPointerUp);
12156
+ this.ghostElement.removeEventListener('lostpointercapture', this.onPointerLost);
12157
+ this.ghostElement.removeEventListener('transitionend', this.onTransitionEnd);
12158
+ this.ghostElement.remove();
12159
+ this.ghostElement = null;
12160
+ if (this._dynamicGhostRef) {
12161
+ this._dynamicGhostRef.destroy();
12162
+ this._dynamicGhostRef = null;
12163
+ }
12164
+ }
12145
12165
  /**
12146
12166
  * @hidden
12147
12167
  * Create ghost element - if a Node object is provided it creates a clone of that node,
@@ -12211,20 +12231,12 @@ class IgxDragDirective {
12211
12231
  if (this._pointerDownId !== null) {
12212
12232
  this.ghostElement.setPointerCapture(this._pointerDownId);
12213
12233
  }
12214
- this.ghostElement.addEventListener('pointermove', (args) => {
12215
- this.onPointerMove(args);
12216
- });
12217
- this.ghostElement.addEventListener('pointerup', (args) => {
12218
- this.onPointerUp(args);
12219
- });
12220
- this.ghostElement.addEventListener('lostpointercapture', (args) => {
12221
- this.onPointerLost(args);
12222
- });
12234
+ this.ghostElement.addEventListener('pointermove', this.onPointerMove.bind(this));
12235
+ this.ghostElement.addEventListener('pointerup', this.onPointerUp.bind(this));
12236
+ this.ghostElement.addEventListener('lostpointercapture', this.onPointerLost.bind(this));
12223
12237
  }
12224
12238
  // Transition animation when the ghostElement is released and it returns to it's original position.
12225
- this.ghostElement.addEventListener('transitionend', (args) => {
12226
- this.onTransitionEnd(args);
12227
- });
12239
+ this.ghostElement.addEventListener('transitionend', this.onTransitionEnd.bind(this));
12228
12240
  this.cdr.detectChanges();
12229
12241
  }
12230
12242
  /**
@@ -14266,8 +14278,10 @@ class IgxForOfDirective extends IgxForOfToken {
14266
14278
  ngAfterViewInit() {
14267
14279
  if (this.igxForScrollOrientation === 'vertical') {
14268
14280
  this._zone.runOutsideAngular(() => {
14269
- this.contentObserver = new (getResizeObserver())(() => this.contentResizeNotify.next());
14270
- this.contentObserver.observe(this.dc.instance._viewContainer.element.nativeElement);
14281
+ if (this.platformUtil.isBrowser) {
14282
+ this.contentObserver = new (getResizeObserver())(() => this.contentResizeNotify.next());
14283
+ this.contentObserver.observe(this.dc.instance._viewContainer.element.nativeElement);
14284
+ }
14271
14285
  });
14272
14286
  }
14273
14287
  }
@@ -29575,7 +29589,7 @@ const IGX_BUTTON_GROUP_DIRECTIVES = [
29575
29589
  const daysInWeek = 7;
29576
29590
  const millisecondsInDay = 86400000;
29577
29591
  function toCalendarDay(date) {
29578
- return date instanceof Date ? CalendarDay.from(date) : date;
29592
+ return isDate(date) ? CalendarDay.from(date) : date;
29579
29593
  }
29580
29594
  function checkRollover(original, modified) {
29581
29595
  return original.date !== modified.date
@@ -30202,7 +30216,7 @@ class IgxCalendarViewDirective {
30202
30216
  * @memberof IgxYearsViewComponent
30203
30217
  */
30204
30218
  set date(value) {
30205
- if (!(value instanceof Date))
30219
+ if (!isDate(value))
30206
30220
  return;
30207
30221
  this._date = value;
30208
30222
  }
@@ -39098,7 +39112,7 @@ class IgxComboComponent extends IgxComboBaseDirective {
39098
39112
  IgxComboAPIService,
39099
39113
  { provide: IGX_COMBO_COMPONENT, useExisting: IgxComboComponent },
39100
39114
  { provide: NG_VALUE_ACCESSOR, useExisting: IgxComboComponent, multi: true }
39101
- ], viewQueries: [{ propertyName: "dropdown", first: true, predicate: IgxComboDropDownComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<igx-input-group #inputGroup [type]=\"type\" (click)=\"onClick($event)\">\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-hint, [igxHint]\">\n <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n </ng-container>\n <input igxInput #comboInput name=\"comboInput\" type=\"text\" [value]=\"displayValue\" readonly\n [attr.placeholder]=\"placeholder\" [disabled]=\"disabled\"\n role=\"combobox\" aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"!dropdown.collapsed\" [attr.aria-controls]=\"dropdown.listId\"\n [attr.aria-labelledby]=\"ariaLabelledBy || label?.id || placeholder\"\n (blur)=\"onBlur()\" />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix\"></ng-content>\n </ng-container>\n <igx-suffix *ngIf=\"displayValue\" [attr.aria-label]=\"resourceStrings.igx_combo_clearItems_placeholder\" class=\"igx-combo__clear-button\"\n (click)=\"handleClearItems($event)\">\n <ng-container *ngIf=\"clearIconTemplate\">\n <ng-container *ngTemplateOutlet=\"clearIconTemplate\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!clearIconTemplate\" family=\"default\" name=\"input_clear\"></igx-icon>\n </igx-suffix>\n <igx-suffix class=\"igx-combo__toggle-button\">\n <ng-container *ngIf=\"toggleIconTemplate\">\n <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: collapsed}\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!toggleIconTemplate\" family=\"default\" [name]=\"toggleIcon\"></igx-icon>\n </igx-suffix>\n</igx-input-group>\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\"\n [labelledBy]=\"ariaLabelledBy || label?.id || placeholder || ''\"\n [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n (opened)=\"handleOpened()\" (closed)=\"handleClosed()\">\n <div class=\"igx-combo__search\">\n <igx-input-group *ngIf=\"displaySearchInput\">\n <input igxInput #searchInput name=\"searchInput\" autocomplete=\"off\" type=\"text\"\n [(ngModel)]=\"searchValue\" (ngModelChange)=\"handleInputChange($event)\" (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\" (focus)=\"dropdown.onBlur($event)\" [attr.placeholder]=\"getSearchPlaceholderText()\"\n aria-autocomplete=\"list\" role=\"searchbox\" aria-label=\"search\"/>\n <igx-suffix *ngIf=\"showSearchCaseIcon\" (click)=\"toggleCaseSensitive()\">\n <span [ngClass]=\"filteringOptions.caseSensitive? 'igx-combo__case-icon--active' : 'igx-combo__case-icon'\">\n <igx-icon\n family=\"default\"\n name=\"case_sensitive\"\n [active]=\"filteringOptions.caseSensitive\">\n </igx-icon>\n </span>\n </igx-suffix>\n </igx-input-group>\n </div>\n <ng-container *ngTemplateOutlet=\"headerTemplate\">\n </ng-container>\n <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n [style.maxHeight.rem]=\"itemsMaxHeightInRem\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n [tabindex]=\"dropdown.collapsed ? -1 : 0\" [attr.id]=\"dropdown.id\" aria-multiselectable=\"true\"\n [attr.aria-activedescendant]=\"activeDescendant\">\n <igx-combo-item [itemHeight]=\"itemHeight\" *igxFor=\"let item of data\n | comboFiltering:filterValue:displayKey:filteringOptions:filterFunction:disableFiltering\n | comboGrouping:groupKey:valueKey:groupSortingDirection:compareCollator;\n index as rowIndex; containerSize: itemsMaxHeight; scrollOrientation: 'vertical'; itemSize: itemHeight\"\n [value]=\"item\" [isHeader]=\"item?.isHeader\" [index]=\"rowIndex\" [role]=\"item?.isHeader? 'group' : 'option'\">\n <ng-container *ngIf=\"item?.isHeader\">\n <ng-container\n *ngTemplateOutlet=\"headerItemTemplate ? headerItemTemplate : headerItemBase;\n context: {$implicit: item, data: data, valueKey: valueKey, groupKey: groupKey, displayKey: displayKey}\">\n </ng-container>\n </ng-container>\n <!-- if item is 'null' it should be displayed and !!(item?.isHeader) would resolve it to 'false' and not display it -->\n <ng-container *ngIf=\"!item?.isHeader\">\n <ng-container #listItem\n *ngTemplateOutlet=\"template; context: {$implicit: item, data: data, valueKey: valueKey, displayKey: displayKey};\">\n </ng-container>\n </ng-container>\n </igx-combo-item>\n </div>\n <div class=\"igx-combo__add\" *ngIf=\"filteredData.length === 0 || isAddButtonVisible()\">\n <div class=\"igx-combo__empty\" *ngIf=\"filteredData.length === 0\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate ? emptyTemplate : empty\">\n </ng-container>\n </div>\n <igx-combo-add-item [itemHeight]=\"itemHeight\" *ngIf=\"isAddButtonVisible()\"\n [tabindex]=\"dropdown.collapsed ? -1 : customValueFlag ? 1 : -1\" class=\"igx-combo__add-item\" role=\"button\"\n [attr.aria-label]=\"resourceStrings.igx_combo_addCustomValues_placeholder\" [index]=\"virtualScrollContainer.igxForOf.length\">\n <ng-container *ngTemplateOutlet=\"addItemTemplate ? addItemTemplate : addItemDefault\">\n </ng-container>\n </igx-combo-add-item>\n </div>\n <ng-container *ngTemplateOutlet=\"footerTemplate\">\n </ng-container>\n</igx-combo-drop-down>\n<ng-template #complex let-display let-data=\"data\" let-key=\"displayKey\">\n {{display[key]}}\n</ng-template>\n<ng-template #primitive let-display>\n {{display}}\n</ng-template>\n<ng-template #empty>\n <span>{{resourceStrings.igx_combo_empty_message}}</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n <button type=\"button\" igxButton=\"flat\" igxRipple>{{ resourceStrings.igx_combo_addCustomValues_placeholder }}</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n {{ item[key] }}\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "directive", type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "directive", type: IgxSuffixDirective, selector: "igx-suffix,[igxSuffix],[igxEnd]" }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "name", "active"] }, { kind: "component", type: IgxComboDropDownComponent, selector: "igx-combo-drop-down", inputs: ["singleMode"] }, { kind: "directive", type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { kind: "directive", type: IgxForOfDirective, selector: "[igxFor][igxForOf]", inputs: ["igxForOf", "igxForSizePropName", "igxForScrollOrientation", "igxForScrollContainer", "igxForContainerSize", "igxForItemSize", "igxForTotalItemCount", "igxForTrackBy"], outputs: ["chunkLoad", "scrollbarVisibilityChanged", "contentSizeChange", "dataChanged", "beforeViewDestroyed", "chunkPreload"] }, { kind: "component", type: IgxComboItemComponent, selector: "igx-combo-item", inputs: ["itemHeight", "ariaLabel", "singleMode"] }, { kind: "component", type: IgxComboAddItemComponent, selector: "igx-combo-add-item" }, { 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: "pipe", type: IgxComboFilteringPipe, name: "comboFiltering" }, { kind: "pipe", type: IgxComboGroupingPipe, name: "comboGrouping" }] }); }
39115
+ ], viewQueries: [{ propertyName: "dropdown", first: true, predicate: IgxComboDropDownComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<igx-input-group #inputGroup [type]=\"type\" (click)=\"onClick($event)\">\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-hint, [igxHint]\">\n <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n </ng-container>\n <input igxInput #comboInput name=\"comboInput\" type=\"text\" [value]=\"displayValue\" readonly\n [attr.placeholder]=\"placeholder\" [disabled]=\"disabled\"\n role=\"combobox\" aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"!dropdown.collapsed\" [attr.aria-controls]=\"dropdown.listId\"\n [attr.aria-labelledby]=\"ariaLabelledBy || label?.id || placeholder\"\n (blur)=\"onBlur()\" />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix\"></ng-content>\n </ng-container>\n <igx-suffix *ngIf=\"displayValue\" [attr.aria-label]=\"resourceStrings.igx_combo_clearItems_placeholder\" class=\"igx-combo__clear-button\"\n (click)=\"handleClearItems($event)\">\n <ng-container *ngIf=\"clearIconTemplate\">\n <ng-container *ngTemplateOutlet=\"clearIconTemplate\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!clearIconTemplate\" family=\"default\" name=\"input_clear\"></igx-icon>\n </igx-suffix>\n <igx-suffix class=\"igx-combo__toggle-button\">\n <ng-container *ngIf=\"toggleIconTemplate\">\n <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: collapsed}\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!toggleIconTemplate\" family=\"default\" [name]=\"toggleIcon\"></igx-icon>\n </igx-suffix>\n</igx-input-group>\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\"\n [labelledBy]=\"ariaLabelledBy || label?.id || placeholder || ''\"\n [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n (opened)=\"handleOpened()\" (closed)=\"handleClosed()\">\n <div class=\"igx-combo__search\" *ngIf=\"displaySearchInput\">\n <igx-input-group>\n <input igxInput #searchInput name=\"searchInput\" autocomplete=\"off\" type=\"text\"\n [(ngModel)]=\"searchValue\" (ngModelChange)=\"handleInputChange($event)\" (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\" (focus)=\"dropdown.onBlur($event)\" [attr.placeholder]=\"getSearchPlaceholderText()\"\n aria-autocomplete=\"list\" role=\"searchbox\" aria-label=\"search\"/>\n <igx-suffix *ngIf=\"showSearchCaseIcon\" (click)=\"toggleCaseSensitive()\">\n <span [ngClass]=\"filteringOptions.caseSensitive? 'igx-combo__case-icon--active' : 'igx-combo__case-icon'\">\n <igx-icon\n family=\"default\"\n name=\"case_sensitive\"\n [active]=\"filteringOptions.caseSensitive\">\n </igx-icon>\n </span>\n </igx-suffix>\n </igx-input-group>\n </div>\n <ng-container *ngTemplateOutlet=\"headerTemplate\">\n </ng-container>\n <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n [style.maxHeight.rem]=\"itemsMaxHeightInRem\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n [tabindex]=\"dropdown.collapsed ? -1 : 0\" [attr.id]=\"dropdown.id\" aria-multiselectable=\"true\"\n [attr.aria-activedescendant]=\"activeDescendant\">\n <igx-combo-item [itemHeight]=\"itemHeight\" *igxFor=\"let item of data\n | comboFiltering:filterValue:displayKey:filteringOptions:filterFunction:disableFiltering\n | comboGrouping:groupKey:valueKey:groupSortingDirection:compareCollator;\n index as rowIndex; containerSize: itemsMaxHeight; scrollOrientation: 'vertical'; itemSize: itemHeight\"\n [value]=\"item\" [isHeader]=\"item?.isHeader\" [index]=\"rowIndex\" [role]=\"item?.isHeader? 'group' : 'option'\">\n <ng-container *ngIf=\"item?.isHeader\">\n <ng-container\n *ngTemplateOutlet=\"headerItemTemplate ? headerItemTemplate : headerItemBase;\n context: {$implicit: item, data: data, valueKey: valueKey, groupKey: groupKey, displayKey: displayKey}\">\n </ng-container>\n </ng-container>\n <!-- if item is 'null' it should be displayed and !!(item?.isHeader) would resolve it to 'false' and not display it -->\n <ng-container *ngIf=\"!item?.isHeader\">\n <ng-container #listItem\n *ngTemplateOutlet=\"template; context: {$implicit: item, data: data, valueKey: valueKey, displayKey: displayKey};\">\n </ng-container>\n </ng-container>\n </igx-combo-item>\n </div>\n <div class=\"igx-combo__add\" *ngIf=\"filteredData.length === 0 || isAddButtonVisible()\">\n <div class=\"igx-combo__empty\" *ngIf=\"filteredData.length === 0\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate ? emptyTemplate : empty\">\n </ng-container>\n </div>\n <igx-combo-add-item [itemHeight]=\"itemHeight\" *ngIf=\"isAddButtonVisible()\"\n [tabindex]=\"dropdown.collapsed ? -1 : customValueFlag ? 1 : -1\" class=\"igx-combo__add-item\" role=\"button\"\n [attr.aria-label]=\"resourceStrings.igx_combo_addCustomValues_placeholder\" [index]=\"virtualScrollContainer.igxForOf.length\">\n <ng-container *ngTemplateOutlet=\"addItemTemplate ? addItemTemplate : addItemDefault\">\n </ng-container>\n </igx-combo-add-item>\n </div>\n <ng-container *ngTemplateOutlet=\"footerTemplate\">\n </ng-container>\n</igx-combo-drop-down>\n<ng-template #complex let-display let-data=\"data\" let-key=\"displayKey\">\n {{display[key]}}\n</ng-template>\n<ng-template #primitive let-display>\n {{display}}\n</ng-template>\n<ng-template #empty>\n <span>{{resourceStrings.igx_combo_empty_message}}</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n <button type=\"button\" igxButton=\"flat\" igxRipple>{{ resourceStrings.igx_combo_addCustomValues_placeholder }}</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n {{ item[key] }}\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "directive", type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "directive", type: IgxSuffixDirective, selector: "igx-suffix,[igxSuffix],[igxEnd]" }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "name", "active"] }, { kind: "component", type: IgxComboDropDownComponent, selector: "igx-combo-drop-down", inputs: ["singleMode"] }, { kind: "directive", type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { kind: "directive", type: IgxForOfDirective, selector: "[igxFor][igxForOf]", inputs: ["igxForOf", "igxForSizePropName", "igxForScrollOrientation", "igxForScrollContainer", "igxForContainerSize", "igxForItemSize", "igxForTotalItemCount", "igxForTrackBy"], outputs: ["chunkLoad", "scrollbarVisibilityChanged", "contentSizeChange", "dataChanged", "beforeViewDestroyed", "chunkPreload"] }, { kind: "component", type: IgxComboItemComponent, selector: "igx-combo-item", inputs: ["itemHeight", "ariaLabel", "singleMode"] }, { kind: "component", type: IgxComboAddItemComponent, selector: "igx-combo-add-item" }, { 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: "pipe", type: IgxComboFilteringPipe, name: "comboFiltering" }, { kind: "pipe", type: IgxComboGroupingPipe, name: "comboGrouping" }] }); }
39102
39116
  }
39103
39117
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxComboComponent, decorators: [{
39104
39118
  type: Component,
@@ -39124,7 +39138,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
39124
39138
  IgxRippleDirective,
39125
39139
  IgxComboFilteringPipe,
39126
39140
  IgxComboGroupingPipe
39127
- ], template: "<igx-input-group #inputGroup [type]=\"type\" (click)=\"onClick($event)\">\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-hint, [igxHint]\">\n <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n </ng-container>\n <input igxInput #comboInput name=\"comboInput\" type=\"text\" [value]=\"displayValue\" readonly\n [attr.placeholder]=\"placeholder\" [disabled]=\"disabled\"\n role=\"combobox\" aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"!dropdown.collapsed\" [attr.aria-controls]=\"dropdown.listId\"\n [attr.aria-labelledby]=\"ariaLabelledBy || label?.id || placeholder\"\n (blur)=\"onBlur()\" />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix\"></ng-content>\n </ng-container>\n <igx-suffix *ngIf=\"displayValue\" [attr.aria-label]=\"resourceStrings.igx_combo_clearItems_placeholder\" class=\"igx-combo__clear-button\"\n (click)=\"handleClearItems($event)\">\n <ng-container *ngIf=\"clearIconTemplate\">\n <ng-container *ngTemplateOutlet=\"clearIconTemplate\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!clearIconTemplate\" family=\"default\" name=\"input_clear\"></igx-icon>\n </igx-suffix>\n <igx-suffix class=\"igx-combo__toggle-button\">\n <ng-container *ngIf=\"toggleIconTemplate\">\n <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: collapsed}\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!toggleIconTemplate\" family=\"default\" [name]=\"toggleIcon\"></igx-icon>\n </igx-suffix>\n</igx-input-group>\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\"\n [labelledBy]=\"ariaLabelledBy || label?.id || placeholder || ''\"\n [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n (opened)=\"handleOpened()\" (closed)=\"handleClosed()\">\n <div class=\"igx-combo__search\">\n <igx-input-group *ngIf=\"displaySearchInput\">\n <input igxInput #searchInput name=\"searchInput\" autocomplete=\"off\" type=\"text\"\n [(ngModel)]=\"searchValue\" (ngModelChange)=\"handleInputChange($event)\" (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\" (focus)=\"dropdown.onBlur($event)\" [attr.placeholder]=\"getSearchPlaceholderText()\"\n aria-autocomplete=\"list\" role=\"searchbox\" aria-label=\"search\"/>\n <igx-suffix *ngIf=\"showSearchCaseIcon\" (click)=\"toggleCaseSensitive()\">\n <span [ngClass]=\"filteringOptions.caseSensitive? 'igx-combo__case-icon--active' : 'igx-combo__case-icon'\">\n <igx-icon\n family=\"default\"\n name=\"case_sensitive\"\n [active]=\"filteringOptions.caseSensitive\">\n </igx-icon>\n </span>\n </igx-suffix>\n </igx-input-group>\n </div>\n <ng-container *ngTemplateOutlet=\"headerTemplate\">\n </ng-container>\n <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n [style.maxHeight.rem]=\"itemsMaxHeightInRem\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n [tabindex]=\"dropdown.collapsed ? -1 : 0\" [attr.id]=\"dropdown.id\" aria-multiselectable=\"true\"\n [attr.aria-activedescendant]=\"activeDescendant\">\n <igx-combo-item [itemHeight]=\"itemHeight\" *igxFor=\"let item of data\n | comboFiltering:filterValue:displayKey:filteringOptions:filterFunction:disableFiltering\n | comboGrouping:groupKey:valueKey:groupSortingDirection:compareCollator;\n index as rowIndex; containerSize: itemsMaxHeight; scrollOrientation: 'vertical'; itemSize: itemHeight\"\n [value]=\"item\" [isHeader]=\"item?.isHeader\" [index]=\"rowIndex\" [role]=\"item?.isHeader? 'group' : 'option'\">\n <ng-container *ngIf=\"item?.isHeader\">\n <ng-container\n *ngTemplateOutlet=\"headerItemTemplate ? headerItemTemplate : headerItemBase;\n context: {$implicit: item, data: data, valueKey: valueKey, groupKey: groupKey, displayKey: displayKey}\">\n </ng-container>\n </ng-container>\n <!-- if item is 'null' it should be displayed and !!(item?.isHeader) would resolve it to 'false' and not display it -->\n <ng-container *ngIf=\"!item?.isHeader\">\n <ng-container #listItem\n *ngTemplateOutlet=\"template; context: {$implicit: item, data: data, valueKey: valueKey, displayKey: displayKey};\">\n </ng-container>\n </ng-container>\n </igx-combo-item>\n </div>\n <div class=\"igx-combo__add\" *ngIf=\"filteredData.length === 0 || isAddButtonVisible()\">\n <div class=\"igx-combo__empty\" *ngIf=\"filteredData.length === 0\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate ? emptyTemplate : empty\">\n </ng-container>\n </div>\n <igx-combo-add-item [itemHeight]=\"itemHeight\" *ngIf=\"isAddButtonVisible()\"\n [tabindex]=\"dropdown.collapsed ? -1 : customValueFlag ? 1 : -1\" class=\"igx-combo__add-item\" role=\"button\"\n [attr.aria-label]=\"resourceStrings.igx_combo_addCustomValues_placeholder\" [index]=\"virtualScrollContainer.igxForOf.length\">\n <ng-container *ngTemplateOutlet=\"addItemTemplate ? addItemTemplate : addItemDefault\">\n </ng-container>\n </igx-combo-add-item>\n </div>\n <ng-container *ngTemplateOutlet=\"footerTemplate\">\n </ng-container>\n</igx-combo-drop-down>\n<ng-template #complex let-display let-data=\"data\" let-key=\"displayKey\">\n {{display[key]}}\n</ng-template>\n<ng-template #primitive let-display>\n {{display}}\n</ng-template>\n<ng-template #empty>\n <span>{{resourceStrings.igx_combo_empty_message}}</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n <button type=\"button\" igxButton=\"flat\" igxRipple>{{ resourceStrings.igx_combo_addCustomValues_placeholder }}</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n {{ item[key] }}\n</ng-template>\n" }]
39141
+ ], template: "<igx-input-group #inputGroup [type]=\"type\" (click)=\"onClick($event)\">\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-hint, [igxHint]\">\n <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n </ng-container>\n <input igxInput #comboInput name=\"comboInput\" type=\"text\" [value]=\"displayValue\" readonly\n [attr.placeholder]=\"placeholder\" [disabled]=\"disabled\"\n role=\"combobox\" aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"!dropdown.collapsed\" [attr.aria-controls]=\"dropdown.listId\"\n [attr.aria-labelledby]=\"ariaLabelledBy || label?.id || placeholder\"\n (blur)=\"onBlur()\" />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix\"></ng-content>\n </ng-container>\n <igx-suffix *ngIf=\"displayValue\" [attr.aria-label]=\"resourceStrings.igx_combo_clearItems_placeholder\" class=\"igx-combo__clear-button\"\n (click)=\"handleClearItems($event)\">\n <ng-container *ngIf=\"clearIconTemplate\">\n <ng-container *ngTemplateOutlet=\"clearIconTemplate\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!clearIconTemplate\" family=\"default\" name=\"input_clear\"></igx-icon>\n </igx-suffix>\n <igx-suffix class=\"igx-combo__toggle-button\">\n <ng-container *ngIf=\"toggleIconTemplate\">\n <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: collapsed}\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!toggleIconTemplate\" family=\"default\" [name]=\"toggleIcon\"></igx-icon>\n </igx-suffix>\n</igx-input-group>\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\"\n [labelledBy]=\"ariaLabelledBy || label?.id || placeholder || ''\"\n [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n (opened)=\"handleOpened()\" (closed)=\"handleClosed()\">\n <div class=\"igx-combo__search\" *ngIf=\"displaySearchInput\">\n <igx-input-group>\n <input igxInput #searchInput name=\"searchInput\" autocomplete=\"off\" type=\"text\"\n [(ngModel)]=\"searchValue\" (ngModelChange)=\"handleInputChange($event)\" (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\" (focus)=\"dropdown.onBlur($event)\" [attr.placeholder]=\"getSearchPlaceholderText()\"\n aria-autocomplete=\"list\" role=\"searchbox\" aria-label=\"search\"/>\n <igx-suffix *ngIf=\"showSearchCaseIcon\" (click)=\"toggleCaseSensitive()\">\n <span [ngClass]=\"filteringOptions.caseSensitive? 'igx-combo__case-icon--active' : 'igx-combo__case-icon'\">\n <igx-icon\n family=\"default\"\n name=\"case_sensitive\"\n [active]=\"filteringOptions.caseSensitive\">\n </igx-icon>\n </span>\n </igx-suffix>\n </igx-input-group>\n </div>\n <ng-container *ngTemplateOutlet=\"headerTemplate\">\n </ng-container>\n <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n [style.maxHeight.rem]=\"itemsMaxHeightInRem\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n [tabindex]=\"dropdown.collapsed ? -1 : 0\" [attr.id]=\"dropdown.id\" aria-multiselectable=\"true\"\n [attr.aria-activedescendant]=\"activeDescendant\">\n <igx-combo-item [itemHeight]=\"itemHeight\" *igxFor=\"let item of data\n | comboFiltering:filterValue:displayKey:filteringOptions:filterFunction:disableFiltering\n | comboGrouping:groupKey:valueKey:groupSortingDirection:compareCollator;\n index as rowIndex; containerSize: itemsMaxHeight; scrollOrientation: 'vertical'; itemSize: itemHeight\"\n [value]=\"item\" [isHeader]=\"item?.isHeader\" [index]=\"rowIndex\" [role]=\"item?.isHeader? 'group' : 'option'\">\n <ng-container *ngIf=\"item?.isHeader\">\n <ng-container\n *ngTemplateOutlet=\"headerItemTemplate ? headerItemTemplate : headerItemBase;\n context: {$implicit: item, data: data, valueKey: valueKey, groupKey: groupKey, displayKey: displayKey}\">\n </ng-container>\n </ng-container>\n <!-- if item is 'null' it should be displayed and !!(item?.isHeader) would resolve it to 'false' and not display it -->\n <ng-container *ngIf=\"!item?.isHeader\">\n <ng-container #listItem\n *ngTemplateOutlet=\"template; context: {$implicit: item, data: data, valueKey: valueKey, displayKey: displayKey};\">\n </ng-container>\n </ng-container>\n </igx-combo-item>\n </div>\n <div class=\"igx-combo__add\" *ngIf=\"filteredData.length === 0 || isAddButtonVisible()\">\n <div class=\"igx-combo__empty\" *ngIf=\"filteredData.length === 0\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate ? emptyTemplate : empty\">\n </ng-container>\n </div>\n <igx-combo-add-item [itemHeight]=\"itemHeight\" *ngIf=\"isAddButtonVisible()\"\n [tabindex]=\"dropdown.collapsed ? -1 : customValueFlag ? 1 : -1\" class=\"igx-combo__add-item\" role=\"button\"\n [attr.aria-label]=\"resourceStrings.igx_combo_addCustomValues_placeholder\" [index]=\"virtualScrollContainer.igxForOf.length\">\n <ng-container *ngTemplateOutlet=\"addItemTemplate ? addItemTemplate : addItemDefault\">\n </ng-container>\n </igx-combo-add-item>\n </div>\n <ng-container *ngTemplateOutlet=\"footerTemplate\">\n </ng-container>\n</igx-combo-drop-down>\n<ng-template #complex let-display let-data=\"data\" let-key=\"displayKey\">\n {{display[key]}}\n</ng-template>\n<ng-template #primitive let-display>\n {{display}}\n</ng-template>\n<ng-template #empty>\n <span>{{resourceStrings.igx_combo_empty_message}}</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n <button type=\"button\" igxButton=\"flat\" igxRipple>{{ resourceStrings.igx_combo_addCustomValues_placeholder }}</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n {{ item[key] }}\n</ng-template>\n" }]
39128
39142
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: IgxComboAPIService }, { type: undefined, decorators: [{
39129
39143
  type: Inject,
39130
39144
  args: [DOCUMENT]
@@ -50192,7 +50206,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
50192
50206
  */
50193
50207
  class IgxExcelStyleConditionalFilterComponent {
50194
50208
  get filterNumber() {
50195
- return this.esf.expressionsList.length;
50209
+ return this.esf.expressionsList.filter(e => e.expression.condition).length;
50196
50210
  }
50197
50211
  constructor(esf, platform) {
50198
50212
  this.esf = esf;
@@ -50284,6 +50298,9 @@ class IgxExcelStyleConditionalFilterComponent {
50284
50298
  this.esf.expressionsList[0].expression.condition.name !== 'in') {
50285
50299
  this.customDialog.expressionsList = this.esf.expressionsList;
50286
50300
  }
50301
+ else {
50302
+ this.customDialog.expressionsList = this.customDialog.expressionsList.filter(e => e.expression.fieldName === this.esf.column.field && e.expression.condition);
50303
+ }
50287
50304
  this.customDialog.selectedOperator = eventArgs.newSelection.value;
50288
50305
  eventArgs.cancel = true;
50289
50306
  if (this.esf.overlayComponentId) {
@@ -55389,7 +55406,7 @@ class IgxColumnMovingDragDirective extends IgxDragDirective {
55389
55406
  source: this.column
55390
55407
  };
55391
55408
  this.column.grid.columnMovingStart.emit(movingStartArgs);
55392
- this.subscription$ = fromEvent(this.column.grid.document.defaultView, 'keydown').subscribe((ev) => {
55409
+ this.subscription$ = fromEvent(this.column.grid.document.defaultView, 'keydown').pipe(takeUntil$1(this._destroy)).subscribe((ev) => {
55393
55410
  if (ev.key === this.platformUtil.KEYMAP.ESCAPE) {
55394
55411
  this.onEscape(ev);
55395
55412
  }
@@ -64232,6 +64249,7 @@ class IgxGridBaseDirective {
64232
64249
  this._rowSelectionMode = GridSelectionMode.none;
64233
64250
  this._selectRowOnClick = true;
64234
64251
  this._columnSelectionMode = GridSelectionMode.none;
64252
+ this.isColumnWidthSum = false;
64235
64253
  this.rowEditPositioningStrategy = new RowEditPositionStrategy({
64236
64254
  horizontalDirection: HorizontalAlignment.Right,
64237
64255
  verticalDirection: VerticalAlignment.Bottom,
@@ -64816,7 +64834,7 @@ class IgxGridBaseDirective {
64816
64834
  .subscribe((change) => {
64817
64835
  this.onPinnedRowsChanged(change);
64818
64836
  });
64819
- this.addRowSnackbar?.clicked.subscribe(() => {
64837
+ this.addRowSnackbar?.clicked.pipe(takeUntil(this.destroy$)).subscribe(() => {
64820
64838
  const rec = this.filteredSortedData[this.lastAddedRowIndex];
64821
64839
  this.scrollTo(rec, 0);
64822
64840
  this.addRowSnackbar.close();
@@ -67045,6 +67063,7 @@ class IgxGridBaseDirective {
67045
67063
  }
67046
67064
  if (this.width === null || !width) {
67047
67065
  width = this.getColumnWidthSum();
67066
+ this.isColumnWidthSum = true;
67048
67067
  }
67049
67068
  if (this.hasVerticalScroll() && this.width !== null) {
67050
67069
  width -= this.scrollSize;
@@ -67811,6 +67830,9 @@ class IgxGridBaseDirective {
67811
67830
  this.resetCachedWidths();
67812
67831
  this.cdr.detectChanges();
67813
67832
  }
67833
+ if (this.isColumnWidthSum) {
67834
+ this.calcWidth = this.getColumnWidthSum();
67835
+ }
67814
67836
  }
67815
67837
  extractDataFromColumnsSelection(source, formatters = false, headers = false) {
67816
67838
  let record = {};
@@ -76294,7 +76316,7 @@ class IgxPivotGridComponent extends IgxGridBaseDirective {
76294
76316
  }
76295
76317
  /** @hidden */
76296
76318
  featureColumnsWidth() {
76297
- return this.pivotRowWidths;
76319
+ return this.pivotRowWidths || 0;
76298
76320
  }
76299
76321
  /* blazorSuppress */
76300
76322
  /**
@@ -76414,7 +76436,7 @@ class IgxPivotGridComponent extends IgxGridBaseDirective {
76414
76436
  }
76415
76437
  /** @hidden @internal */
76416
76438
  get pivotPinnedWidth() {
76417
- return this.isPinningToStart ? this.pinnedWidth : this.headerFeaturesWidth;
76439
+ return !this._init ? (this.isPinningToStart ? this.pinnedWidth : this.headerFeaturesWidth) : 0;
76418
76440
  }
76419
76441
  /** @hidden @internal */
76420
76442
  get pivotUnpinnedWidth() {
@@ -76450,11 +76472,6 @@ class IgxPivotGridComponent extends IgxGridBaseDirective {
76450
76472
  this.toggleRowGroup(col, newState);
76451
76473
  this.reflow();
76452
76474
  }
76453
- getColumnWidthSum() {
76454
- let colSum = super.getColumnWidthSum();
76455
- colSum += this.rowDimensions.map(dim => this.rowDimensionWidthToPixels(dim)).reduce((prev, cur) => prev + cur, 0);
76456
- return colSum;
76457
- }
76458
76475
  /**
76459
76476
  * @hidden @internal
76460
76477
  */
@@ -77283,6 +77300,9 @@ class IgxPivotGridComponent extends IgxGridBaseDirective {
77283
77300
  dim.autoWidth = maxSize;
77284
77301
  }
77285
77302
  }
77303
+ if (this.isColumnWidthSum) {
77304
+ this.calcWidth = this.getColumnWidthSum();
77305
+ }
77286
77306
  }
77287
77307
  /** @hidden @internal */
77288
77308
  get hasDimensionsToAutosize() {
@@ -89114,9 +89134,10 @@ class IgxTabsComponent extends IgxTabsDirective {
89114
89134
  this.realignSelectedIndicator();
89115
89135
  });
89116
89136
  }
89117
- constructor(animationService, cdr, ngZone, dir) {
89137
+ constructor(animationService, cdr, ngZone, dir, platform) {
89118
89138
  super(animationService, cdr, dir);
89119
89139
  this.ngZone = ngZone;
89140
+ this.platform = platform;
89120
89141
  /**
89121
89142
  * Determines the tab activation.
89122
89143
  * When set to auto, the tab is instantly selected while navigating with the Left/Right Arrows, Home or End keys and the corresponding panel is displayed.
@@ -89136,12 +89157,14 @@ class IgxTabsComponent extends IgxTabsDirective {
89136
89157
  ngAfterViewInit() {
89137
89158
  super.ngAfterViewInit();
89138
89159
  this.ngZone.runOutsideAngular(() => {
89139
- this._resizeObserver = new (getResizeObserver())(() => {
89140
- this.updateScrollButtons();
89141
- this.realignSelectedIndicator();
89142
- });
89143
- this._resizeObserver.observe(this.headerContainer.nativeElement);
89144
- this._resizeObserver.observe(this.viewPort.nativeElement);
89160
+ if (this.platform.isBrowser) {
89161
+ this._resizeObserver = new (getResizeObserver())(() => {
89162
+ this.updateScrollButtons();
89163
+ this.realignSelectedIndicator();
89164
+ });
89165
+ this._resizeObserver.observe(this.headerContainer.nativeElement);
89166
+ this._resizeObserver.observe(this.viewPort.nativeElement);
89167
+ }
89145
89168
  });
89146
89169
  }
89147
89170
  /** @hidden @internal */
@@ -89313,7 +89336,7 @@ class IgxTabsComponent extends IgxTabsDirective {
89313
89336
  getElementOffset(element) {
89314
89337
  return this.dir.rtl ? this.itemsWrapper.nativeElement.offsetWidth - element.offsetLeft - element.offsetWidth : element.offsetLeft;
89315
89338
  }
89316
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxTabsComponent, deps: [{ token: IgxAngularAnimationService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: IgxDirectionality }], target: i0.ɵɵFactoryTarget.Component }); }
89339
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxTabsComponent, deps: [{ token: IgxAngularAnimationService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: IgxDirectionality }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component }); }
89317
89340
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.4", type: IgxTabsComponent, isStandalone: true, selector: "igx-tabs", inputs: { tabAlignment: "tabAlignment", activation: "activation" }, host: { properties: { "class.igx-tabs": "this.defaultClass" } }, providers: [{ provide: IgxTabsBase, useExisting: IgxTabsComponent }], viewQueries: [{ propertyName: "headerContainer", first: true, predicate: ["headerContainer"], descendants: true, static: true }, { propertyName: "viewPort", first: true, predicate: ["viewPort"], descendants: true, static: true }, { propertyName: "itemsWrapper", first: true, predicate: ["itemsWrapper"], descendants: true, static: true }, { propertyName: "itemsContainer", first: true, predicate: ["itemsContainer"], descendants: true, static: true }, { propertyName: "selectedIndicator", first: true, predicate: ["selectedIndicator"], descendants: true }, { propertyName: "scrollPrevButton", first: true, predicate: ["scrollPrevButton"], descendants: true }, { propertyName: "scrollNextButton", first: true, predicate: ["scrollNextButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #headerContainer class=\"igx-tabs__header\">\n <button #scrollPrevButton type=\"button\" igxIconButton=\"flat\" igxRipple tabindex=\"-1\" class=\"igx-tabs__header-button\" (click)=\"scrollPrev()\">\n <igx-icon family=\"default\" name=\"prev\"></igx-icon>\n </button>\n <div #viewPort class=\"igx-tabs__header-content\">\n <div #itemsWrapper class=\"igx-tabs__header-wrapper\" role=\"tablist\">\n <div #itemsContainer class=\"igx-tabs__header-scroll\" [ngClass]=\"resolveHeaderScrollClasses()\">\n <ng-container *ngFor=\"let tab of items; let i = index\">\n <ng-container *ngTemplateOutlet=\"tab.headerTemplate\"></ng-container>\n </ng-container>\n </div>\n <div #selectedIndicator *ngIf=\"items.length > 0\" class=\"igx-tabs__header-active-indicator\">\n </div>\n </div>\n </div>\n <button #scrollNextButton type=\"button\" igxIconButton=\"flat\" igxRipple tabindex=\"-1\" class=\"igx-tabs__header-button\" (click)=\"scrollNext()\">\n <igx-icon family=\"default\" name=\"next\"></igx-icon>\n </button>\n</div>\n<div class=\"igx-tabs__panels\">\n <ng-container *ngFor=\"let tab of items; let i = index\">\n <ng-container *ngTemplateOutlet=\"tab.panelTemplate\"></ng-container>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "name", "active"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: IgxIconButtonDirective, selector: "[igxIconButton]", inputs: ["igxIconButton"] }] }); }
89318
89341
  }
89319
89342
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxTabsComponent, decorators: [{
@@ -89322,7 +89345,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
89322
89345
  }], ctorParameters: () => [{ type: undefined, decorators: [{
89323
89346
  type: Inject,
89324
89347
  args: [IgxAngularAnimationService]
89325
- }] }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: IgxDirectionality }], propDecorators: { tabAlignment: [{
89348
+ }] }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: IgxDirectionality }, { type: PlatformUtil }], propDecorators: { tabAlignment: [{
89326
89349
  type: Input
89327
89350
  }], activation: [{
89328
89351
  type: Input
@@ -89420,10 +89443,12 @@ class IgxTabHeaderComponent extends IgxTabHeaderDirective {
89420
89443
  /** @hidden @internal */
89421
89444
  ngAfterViewInit() {
89422
89445
  this.ngZone.runOutsideAngular(() => {
89423
- this._resizeObserver = new (getResizeObserver())(() => {
89424
- this.tabs.realignSelectedIndicator();
89425
- });
89426
- this._resizeObserver.observe(this.nativeElement);
89446
+ if (this.platform.isBrowser) {
89447
+ this._resizeObserver = new (getResizeObserver())(() => {
89448
+ this.tabs.realignSelectedIndicator();
89449
+ });
89450
+ this._resizeObserver.observe(this.nativeElement);
89451
+ }
89427
89452
  });
89428
89453
  }
89429
89454
  /** @hidden @internal */