igniteui-angular 13.0.0-alpha.6 → 13.0.0-alpha.7

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 (72) hide show
  1. package/README.md +31 -30
  2. package/esm2020/lib/action-strip/grid-actions/grid-editing-actions.component.mjs +2 -2
  3. package/esm2020/lib/banner/banner.component.mjs +1 -1
  4. package/esm2020/lib/combo/combo-dropdown.component.mjs +12 -6
  5. package/esm2020/lib/combo/combo-item.component.mjs +5 -3
  6. package/esm2020/lib/combo/combo.api.mjs +3 -3
  7. package/esm2020/lib/combo/combo.common.mjs +1100 -2
  8. package/esm2020/lib/combo/combo.component.mjs +107 -1231
  9. package/esm2020/lib/combo/combo.directives.mjs +9 -25
  10. package/esm2020/lib/combo/combo.pipes.mjs +4 -6
  11. package/esm2020/lib/combo/public_api.mjs +5 -1
  12. package/esm2020/lib/core/utils.mjs +11 -1
  13. package/esm2020/lib/dialog/dialog.component.mjs +22 -10
  14. package/esm2020/lib/directives/focus-trap/focus-trap.directive.mjs +112 -0
  15. package/esm2020/lib/directives/for-of/for_of.directive.mjs +2 -2
  16. package/esm2020/lib/directives/radio/radio-group.directive.mjs +5 -13
  17. package/esm2020/lib/drop-down/drop-down-item.base.mjs +1 -5
  18. package/esm2020/lib/grids/column-actions/column-actions.component.mjs +4 -4
  19. package/esm2020/lib/grids/columns/column-layout.component.mjs +3 -3
  20. package/esm2020/lib/grids/columns/column.component.mjs +5 -5
  21. package/esm2020/lib/grids/common/crud.service.mjs +2 -2
  22. package/esm2020/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.mjs +2 -2
  23. package/esm2020/lib/grids/filtering/grid-filtering.service.mjs +9 -9
  24. package/esm2020/lib/grids/grid/grid.component.mjs +4 -8
  25. package/esm2020/lib/grids/grid-base.directive.mjs +82 -69
  26. package/esm2020/lib/grids/grid-public-row.mjs +3 -12
  27. package/esm2020/lib/grids/grouping/group-by-area.directive.mjs +2 -2
  28. package/esm2020/lib/grids/headers/grid-header-row.component.mjs +3 -3
  29. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +4 -8
  30. package/esm2020/lib/grids/state.directive.mjs +2 -2
  31. package/esm2020/lib/grids/tree-grid/tree-grid.component.mjs +4 -8
  32. package/esm2020/lib/services/overlay/utilities.mjs +1 -1
  33. package/esm2020/lib/simple-combo/public_api.mjs +2 -0
  34. package/esm2020/lib/simple-combo/simple-combo.component.mjs +375 -0
  35. package/esm2020/lib/toast/toast.component.mjs +3 -6
  36. package/esm2020/public_api.mjs +3 -1
  37. package/fesm2015/igniteui-angular.mjs +1723 -1405
  38. package/fesm2015/igniteui-angular.mjs.map +1 -1
  39. package/fesm2020/igniteui-angular.mjs +1714 -1402
  40. package/fesm2020/igniteui-angular.mjs.map +1 -1
  41. package/lib/banner/banner.component.d.ts +1 -2
  42. package/lib/combo/combo-dropdown.component.d.ts +3 -1
  43. package/lib/combo/combo-item.component.d.ts +3 -1
  44. package/lib/combo/combo.common.d.ts +733 -4
  45. package/lib/combo/combo.component.d.ts +41 -799
  46. package/lib/combo/combo.pipes.d.ts +1 -1
  47. package/lib/combo/public_api.d.ts +4 -0
  48. package/lib/core/utils.d.ts +4 -0
  49. package/lib/dialog/dialog.component.d.ts +11 -2
  50. package/lib/directives/focus-trap/focus-trap.directive.d.ts +41 -0
  51. package/lib/directives/radio/radio-group.directive.d.ts +4 -4
  52. package/lib/grids/columns/column.component.d.ts +1 -1
  53. package/lib/grids/grid/grid.component.d.ts +2 -1
  54. package/lib/grids/grid-base.directive.d.ts +64 -8
  55. package/lib/grids/grid-public-row.d.ts +2 -3
  56. package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +2 -1
  57. package/lib/grids/tree-grid/tree-grid.component.d.ts +2 -1
  58. package/lib/services/overlay/utilities.d.ts +2 -1
  59. package/lib/simple-combo/public_api.d.ts +1 -0
  60. package/lib/simple-combo/simple-combo.component.d.ts +134 -0
  61. package/lib/toast/toast.component.d.ts +2 -0
  62. package/migrations/common/filterSourceDirs.d.ts +2 -2
  63. package/migrations/common/filterSourceDirs.js +2 -2
  64. package/migrations/update-13_0_0/changes/members.json +26 -0
  65. package/migrations/update-13_0_0/index.js +0 -31
  66. package/package.json +51 -43
  67. package/public_api.d.ts +2 -0
  68. package/src/lib/combo/README.md +14 -14
  69. package/src/lib/directives/focus-trap/README.md +17 -0
  70. package/src/lib/simple-combo/README.md +317 -0
  71. package/esm2020/lib/core/deprecateDecorators.mjs +0 -99
  72. package/lib/core/deprecateDecorators.d.ts +0 -20
@@ -1,7 +1,7 @@
1
1
  import * as i1 from '@angular/animations';
2
2
  import { style, animate, animation, keyframes, useAnimation, trigger, transition } from '@angular/animations';
3
3
  import * as i0 from '@angular/core';
4
- import { Injectable, Directive, Input, HostListener, NgModule, PLATFORM_ID, Inject, EventEmitter, ElementRef, Optional, Output, HostBinding, InjectionToken, isDevMode, Component, ViewContainerRef, ViewChild, ContentChildren, forwardRef, ContentChild, Self, SecurityContext, TemplateRef, Pipe, LOCALE_ID, QueryList, ViewChildren, Host, ChangeDetectionStrategy, inject, SimpleChange, CUSTOM_ELEMENTS_SCHEMA, SkipSelf } from '@angular/core';
4
+ import { Injectable, Directive, Input, HostListener, NgModule, isDevMode, PLATFORM_ID, Inject, EventEmitter, ElementRef, Optional, Output, HostBinding, InjectionToken, Component, ViewContainerRef, ViewChild, ContentChildren, forwardRef, ContentChild, Self, SecurityContext, TemplateRef, Pipe, LOCALE_ID, QueryList, ViewChildren, Host, ChangeDetectionStrategy, inject, SimpleChange, CUSTOM_ELEMENTS_SCHEMA, SkipSelf } from '@angular/core';
5
5
  import * as i12 from '@angular/forms';
6
6
  import { NgModel, FormControlName, NG_VALUE_ACCESSOR, NG_VALIDATORS, CheckboxRequiredValidator, FormsModule, NgControl, ReactiveFormsModule } from '@angular/forms';
7
7
  import * as i4 from '@angular/common';
@@ -924,6 +924,15 @@ function clearImmediate(id) {
924
924
  delete queue[id];
925
925
  }
926
926
 
927
+ /**
928
+ * @hidden
929
+ */
930
+ const showMessage = (message, isMessageShown) => {
931
+ if (!isMessageShown && isDevMode()) {
932
+ console.warn(message);
933
+ }
934
+ return true;
935
+ };
927
936
  const mkenum = (x) => x;
928
937
  /**
929
938
  *
@@ -7517,104 +7526,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
7517
7526
  }]
7518
7527
  }] });
7519
7528
 
7520
- /**
7521
- * @hidden
7522
- */
7523
- const DeprecateClass = (message) => {
7524
- let isMessageShown = false;
7525
- return (originalClass) => class extends originalClass {
7526
- constructor(...args) {
7527
- const target = originalClass;
7528
- const targetName = typeof target === 'function' ? target.name : target.constructor.name;
7529
- isMessageShown = showMessage(`${targetName}: ${message}`, isMessageShown);
7530
- super(...args);
7531
- }
7532
- };
7533
- };
7534
- /**
7535
- * @hidden
7536
- */
7537
- function DeprecateMethod(message) {
7538
- let isMessageShown = false;
7539
- return function (target, key, descriptor) {
7540
- if (descriptor && descriptor.value) {
7541
- const originalMethod = descriptor.value;
7542
- descriptor.value = function () {
7543
- const targetName = typeof target === 'function' ? target.name : target.constructor.name;
7544
- isMessageShown = showMessage(`${targetName}.${key}: ${message}`, isMessageShown);
7545
- const args = [];
7546
- for (const x of arguments) {
7547
- args.push(x);
7548
- }
7549
- return originalMethod.call(this, ...args);
7550
- };
7551
- return descriptor;
7552
- }
7553
- };
7554
- }
7555
- /**
7556
- * @hidden
7557
- */
7558
- function DeprecateProperty(message) {
7559
- return function (target, key) {
7560
- let isMessageShown = false;
7561
- const messageToDisplay = `${target.constructor.name}.${key}: ${message}`;
7562
- // if the target already has the property defined
7563
- const originalDescriptor = Object.getOwnPropertyDescriptor(target, key);
7564
- if (originalDescriptor) {
7565
- const getter = originalDescriptor.get;
7566
- const setter = originalDescriptor.set;
7567
- if (getter) {
7568
- originalDescriptor.get = function () {
7569
- isMessageShown = showMessage(messageToDisplay, isMessageShown);
7570
- return getter.call(this);
7571
- };
7572
- }
7573
- if (setter) {
7574
- originalDescriptor.set = function (value) {
7575
- isMessageShown = showMessage(messageToDisplay, isMessageShown);
7576
- setter.call(this, value);
7577
- };
7578
- }
7579
- return originalDescriptor;
7580
- }
7581
- // the target doesn't contain a descriptor for that property, so create one
7582
- // use backing field to set/get the value of the property to ensure there won't be infinite recursive calls
7583
- const newKey = generateUniqueKey(target, key);
7584
- Object.defineProperty(target, key, {
7585
- configurable: true,
7586
- enumerable: true,
7587
- set(value) {
7588
- isMessageShown = showMessage(messageToDisplay, isMessageShown);
7589
- this[newKey] = value;
7590
- },
7591
- get() {
7592
- isMessageShown = showMessage(messageToDisplay, isMessageShown);
7593
- return this[newKey];
7594
- }
7595
- });
7596
- };
7597
- }
7598
- /**
7599
- * @hidden
7600
- */
7601
- const generateUniqueKey = (target, key) => {
7602
- let newKey = '_' + key;
7603
- while (target.hasOwnProperty(newKey)) {
7604
- newKey = '_' + newKey;
7605
- }
7606
- return newKey;
7607
- };
7608
- /**
7609
- * @hidden
7610
- */
7611
- const showMessage = (message, isMessageShown) => {
7612
- if (!isMessageShown && isDevMode()) {
7613
- console.warn(message);
7614
- }
7615
- return true;
7616
- };
7617
-
7618
7529
  let NEXT_ID$u = 0;
7619
7530
  /**
7620
7531
  * The `<igx-drop-down-item>` is a container intended for row items in
@@ -7702,7 +7613,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
7702
7613
  }] } });
7703
7614
 
7704
7615
  let NEXT_ID$t = 0;
7705
- let warningShown = false;
7706
7616
  /**
7707
7617
  * An abstract class defining a drop-down item:
7708
7618
  * With properties / styles for selection, highlight, height
@@ -7767,8 +7677,6 @@ class IgxDropDownItemBaseDirective {
7767
7677
  */
7768
7678
  get index() {
7769
7679
  if (this._index === null) {
7770
- warningShown = showMessage('IgxDropDownItemBaseDirective: Automatic index is deprecated.' +
7771
- 'Bind in the template instead using `<igx-drop-down-item [index]="i"` instead.`', warningShown);
7772
7680
  return this.itemIndex;
7773
7681
  }
7774
7682
  return this._index;
@@ -9414,7 +9322,7 @@ class IgxForOfDirective {
9414
9322
  this.dc.instance.scrollContainer = this.scrollComponent.nativeElement;
9415
9323
  });
9416
9324
  const destructor = takeUntil(this.destroy$);
9417
- this.contentResizeNotify.pipe(destructor, filter(() => this.igxForContainerSize && this.igxForOf && this.igxForOf.length > 0), throttleTime(40, undefined, { leading: true, trailing: true })).subscribe(() => this._zone.runTask(() => this.updateSizes()));
9325
+ this.contentResizeNotify.pipe(filter(() => this.igxForContainerSize && this.igxForOf && this.igxForOf.length > 0), throttleTime(40, undefined, { leading: true, trailing: true }), destructor).subscribe(() => this._zone.runTask(() => this.updateSizes()));
9418
9326
  }
9419
9327
  if (this.igxForScrollOrientation === 'horizontal') {
9420
9328
  this.func = (evt) => this.onHScroll(evt);
@@ -15879,6 +15787,113 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
15879
15787
  }]
15880
15788
  }] });
15881
15789
 
15790
+ class IgxFocusTrapDirective {
15791
+ /** @hidden */
15792
+ constructor(elementRef, platformUtil) {
15793
+ this.elementRef = elementRef;
15794
+ this.platformUtil = platformUtil;
15795
+ this.destroy$ = new Subject();
15796
+ this._focusTrap = true;
15797
+ }
15798
+ /** @hidden */
15799
+ get element() {
15800
+ return this.elementRef.nativeElement;
15801
+ }
15802
+ /**
15803
+ * Sets whether the Tab key focus is trapped within the element.
15804
+ *
15805
+ * @example
15806
+ * ```html
15807
+ * <div igxFocusTrap="true"></div>
15808
+ * ```
15809
+ */
15810
+ set focusTrap(focusTrap) {
15811
+ this._focusTrap = focusTrap;
15812
+ }
15813
+ /** @hidden */
15814
+ get focusTrap() {
15815
+ return this._focusTrap;
15816
+ }
15817
+ /** @hidden */
15818
+ ngAfterViewInit() {
15819
+ fromEvent(this.element, 'keydown')
15820
+ .pipe(takeUntil(this.destroy$))
15821
+ .subscribe((event) => {
15822
+ if (this._focusTrap && event.key === this.platformUtil.KEYMAP.TAB) {
15823
+ this.handleTab(event);
15824
+ }
15825
+ });
15826
+ }
15827
+ /** @hidden */
15828
+ ngOnDestroy() {
15829
+ this.destroy$.complete();
15830
+ }
15831
+ handleTab(event) {
15832
+ const elements = this.getFocusableElements(this.element);
15833
+ if (elements.length > 0) {
15834
+ const focusedElement = this.getFocusedElement();
15835
+ const focusedElementIndex = elements.findIndex((element) => element === focusedElement);
15836
+ const direction = event.shiftKey ? -1 : 1;
15837
+ let nextFocusableElementIndex = focusedElementIndex + direction;
15838
+ if (nextFocusableElementIndex < 0) {
15839
+ nextFocusableElementIndex = elements.length - 1;
15840
+ }
15841
+ if (nextFocusableElementIndex >= elements.length) {
15842
+ nextFocusableElementIndex = 0;
15843
+ }
15844
+ elements[nextFocusableElementIndex].focus();
15845
+ }
15846
+ else {
15847
+ this.element.focus();
15848
+ }
15849
+ event.preventDefault();
15850
+ }
15851
+ getFocusableElements(element) {
15852
+ return Array.from(element.querySelectorAll('a[href], button, input, textarea, select, details,[tabindex]:not([tabindex="-1"])')).filter(el => !el.hasAttribute('disabled') && !el.getAttribute('aria-hidden'));
15853
+ }
15854
+ getFocusedElement() {
15855
+ let activeElement = typeof document !== 'undefined' && document
15856
+ ? document.activeElement
15857
+ : null;
15858
+ while (activeElement && activeElement.shadowRoot) {
15859
+ const newActiveElement = activeElement.shadowRoot.activeElement;
15860
+ if (newActiveElement === activeElement) {
15861
+ break;
15862
+ }
15863
+ else {
15864
+ activeElement = newActiveElement;
15865
+ }
15866
+ }
15867
+ return activeElement;
15868
+ }
15869
+ }
15870
+ IgxFocusTrapDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxFocusTrapDirective, deps: [{ token: i0.ElementRef }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Directive });
15871
+ IgxFocusTrapDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxFocusTrapDirective, selector: "[igxFocusTrap]", inputs: { focusTrap: ["igxFocusTrap", "focusTrap"] }, ngImport: i0 });
15872
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxFocusTrapDirective, decorators: [{
15873
+ type: Directive,
15874
+ args: [{
15875
+ selector: '[igxFocusTrap]'
15876
+ }]
15877
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: PlatformUtil }]; }, propDecorators: { focusTrap: [{
15878
+ type: Input,
15879
+ args: ['igxFocusTrap']
15880
+ }] } });
15881
+ /**
15882
+ * @hidden
15883
+ */
15884
+ class IgxFocusTrapModule {
15885
+ }
15886
+ IgxFocusTrapModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxFocusTrapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15887
+ IgxFocusTrapModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxFocusTrapModule, declarations: [IgxFocusTrapDirective], exports: [IgxFocusTrapDirective] });
15888
+ IgxFocusTrapModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxFocusTrapModule });
15889
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxFocusTrapModule, decorators: [{
15890
+ type: NgModule,
15891
+ args: [{
15892
+ declarations: [IgxFocusTrapDirective],
15893
+ exports: [IgxFocusTrapDirective]
15894
+ }]
15895
+ }] });
15896
+
15882
15897
  class IgxLayoutDirective {
15883
15898
  constructor() {
15884
15899
  /**
@@ -17449,10 +17464,10 @@ class IgxRadioGroupDirective {
17449
17464
  this._setRadioButtonsRequired();
17450
17465
  }
17451
17466
  /**
17452
- * An @Input property that allows you to disable the radio group. By default it's false.
17453
- *
17454
17467
  * @deprecated in version 12.2.0
17455
17468
  *
17469
+ * An input property that allows you to disable the radio group. By default it's false.
17470
+ *
17456
17471
  * @example
17457
17472
  * ```html
17458
17473
  * <igx-radio-group disabled></igx-radio-group>
@@ -17466,10 +17481,10 @@ class IgxRadioGroupDirective {
17466
17481
  this.setDisabledState(value);
17467
17482
  }
17468
17483
  /**
17469
- * Sets/gets the position of the `label` in the child radio buttons.
17470
- *
17471
17484
  * @deprecated in version 12.2.0
17472
17485
  *
17486
+ * Sets/gets the position of the `label` in the child radio buttons.
17487
+ *
17473
17488
  * @remarks
17474
17489
  * If not set, `labelPosition` will have value `"after"`.
17475
17490
  *
@@ -17701,12 +17716,6 @@ class IgxRadioGroupDirective {
17701
17716
  }
17702
17717
  IgxRadioGroupDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxRadioGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
17703
17718
  IgxRadioGroupDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxRadioGroupDirective, selector: "igx-radio-group, [igxRadioGroup]", inputs: { value: "value", name: "name", required: "required", disabled: "disabled", labelPosition: "labelPosition", selected: "selected", alignment: "alignment" }, outputs: { change: "change" }, host: { properties: { "class.igx-radio-group": "this.cssClass", "class.igx-radio-group--vertical": "this.vertical" } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: IgxRadioGroupDirective, multi: true }], queries: [{ propertyName: "radioButtons", predicate: IgxRadioComponent, descendants: true }], exportAs: ["igxRadioGroup"], ngImport: i0 });
17704
- __decorate([
17705
- DeprecateProperty('`disabled` is deprecated.')
17706
- ], IgxRadioGroupDirective.prototype, "disabled", null);
17707
- __decorate([
17708
- DeprecateProperty('`labelPosition` is deprecated.')
17709
- ], IgxRadioGroupDirective.prototype, "labelPosition", null);
17710
17719
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxRadioGroupDirective, decorators: [{
17711
17720
  type: Directive,
17712
17721
  args: [{
@@ -21762,7 +21771,7 @@ class IgxRowAddCrudState extends IgxRowCrudState {
21762
21771
  * @hidden @internal
21763
21772
  */
21764
21773
  createAddRowParent(row, newRowAsChild) {
21765
- const rowIndex = row ? row.index : this.grid.rowList.length - 1;
21774
+ const rowIndex = row ? row.index : -1;
21766
21775
  const rowId = row ? row.rowID : (rowIndex >= 0 ? this.grid.rowList.last.rowID : null);
21767
21776
  const isInPinnedArea = this.grid.isRecordPinnedByViewIndex(rowIndex);
21768
21777
  const pinIndex = this.grid.pinnedRecords.findIndex(x => x[this.primaryKey] === rowId);
@@ -32950,9 +32959,7 @@ IgxComboHeaderDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0",
32950
32959
  IgxComboHeaderDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboHeaderDirective, selector: "[igxComboHeader]", ngImport: i0 });
32951
32960
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboHeaderDirective, decorators: [{
32952
32961
  type: Directive,
32953
- args: [{
32954
- selector: '[igxComboHeader]'
32955
- }]
32962
+ args: [{ selector: '[igxComboHeader]' }]
32956
32963
  }] });
32957
32964
  /**
32958
32965
  * @hidden
@@ -32963,9 +32970,7 @@ IgxComboFooterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0",
32963
32970
  IgxComboFooterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboFooterDirective, selector: "[igxComboFooter]", ngImport: i0 });
32964
32971
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboFooterDirective, decorators: [{
32965
32972
  type: Directive,
32966
- args: [{
32967
- selector: '[igxComboFooter]'
32968
- }]
32973
+ args: [{ selector: '[igxComboFooter]' }]
32969
32974
  }] });
32970
32975
  /**
32971
32976
  * @hidden
@@ -32976,9 +32981,7 @@ IgxComboItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", ve
32976
32981
  IgxComboItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboItemDirective, selector: "[igxComboItem]", ngImport: i0 });
32977
32982
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboItemDirective, decorators: [{
32978
32983
  type: Directive,
32979
- args: [{
32980
- selector: '[igxComboItem]'
32981
- }]
32984
+ args: [{ selector: '[igxComboItem]' }]
32982
32985
  }] });
32983
32986
  /**
32984
32987
  * @hidden
@@ -32989,9 +32992,7 @@ IgxComboEmptyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", v
32989
32992
  IgxComboEmptyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboEmptyDirective, selector: "[igxComboEmpty]", ngImport: i0 });
32990
32993
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboEmptyDirective, decorators: [{
32991
32994
  type: Directive,
32992
- args: [{
32993
- selector: '[igxComboEmpty]'
32994
- }]
32995
+ args: [{ selector: '[igxComboEmpty]' }]
32995
32996
  }] });
32996
32997
  /**
32997
32998
  * @hidden
@@ -33002,9 +33003,7 @@ IgxComboHeaderItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.
33002
33003
  IgxComboHeaderItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboHeaderItemDirective, selector: "[igxComboHeaderItem]", ngImport: i0 });
33003
33004
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboHeaderItemDirective, decorators: [{
33004
33005
  type: Directive,
33005
- args: [{
33006
- selector: '[igxComboHeaderItem]'
33007
- }]
33006
+ args: [{ selector: '[igxComboHeaderItem]' }]
33008
33007
  }] });
33009
33008
  /**
33010
33009
  * @hidden
@@ -33015,9 +33014,7 @@ IgxComboAddItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0",
33015
33014
  IgxComboAddItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboAddItemDirective, selector: "[igxComboAddItem]", ngImport: i0 });
33016
33015
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboAddItemDirective, decorators: [{
33017
33016
  type: Directive,
33018
- args: [{
33019
- selector: '[igxComboAddItem]'
33020
- }]
33017
+ args: [{ selector: '[igxComboAddItem]' }]
33021
33018
  }] });
33022
33019
  /**
33023
33020
  * @hidden
@@ -33028,9 +33025,7 @@ IgxComboToggleIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.
33028
33025
  IgxComboToggleIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboToggleIconDirective, selector: "[igxComboToggleIcon]", ngImport: i0 });
33029
33026
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboToggleIconDirective, decorators: [{
33030
33027
  type: Directive,
33031
- args: [{
33032
- selector: '[igxComboToggleIcon]'
33033
- }]
33028
+ args: [{ selector: '[igxComboToggleIcon]' }]
33034
33029
  }] });
33035
33030
  /**
33036
33031
  * @hidden
@@ -33041,9 +33036,7 @@ IgxComboClearIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0
33041
33036
  IgxComboClearIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboClearIconDirective, selector: "[igxComboClearIcon]", ngImport: i0 });
33042
33037
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboClearIconDirective, decorators: [{
33043
33038
  type: Directive,
33044
- args: [{
33045
- selector: '[igxComboClearIcon]'
33046
- }]
33039
+ args: [{ selector: '[igxComboClearIcon]' }]
33047
33040
  }] });
33048
33041
 
33049
33042
  /**
@@ -33083,10 +33076,10 @@ class IgxComboAPIService {
33083
33076
  return;
33084
33077
  }
33085
33078
  if (!selected) {
33086
- this.combo.selectItems([itemID], false, event);
33079
+ this.combo.select([itemID], false, event);
33087
33080
  }
33088
33081
  else {
33089
- this.combo.deselectItems([itemID], event);
33082
+ this.combo.deselect([itemID], event);
33090
33083
  }
33091
33084
  }
33092
33085
  is_item_selected(itemID) {
@@ -33182,10 +33175,10 @@ class IgxComboItemComponent extends IgxDropDownItemComponent {
33182
33175
  }
33183
33176
  }
33184
33177
  IgxComboItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboItemComponent, deps: [{ token: IgxComboAPIService }, { token: IGX_DROPDOWN_BASE }, { token: i0.ElementRef }, { token: IgxSelectionAPIService }], target: i0.ɵɵFactoryTarget.Component });
33185
- IgxComboItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboItemComponent, selector: "igx-combo-item", inputs: { itemHeight: "itemHeight" }, host: { properties: { "style.height.px": "this.itemHeight" } }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!isHeader\">\n <igx-checkbox [checked]=\"selected\" [disableRipple]=\"true\" [disableTransitions]=\"disableTransitions\" [tabindex]=\"-1\" (click)=\"disableCheck($event)\" class=\"igx-combo__checkbox\"></igx-checkbox>\n</ng-container>\n<span class=\"igx-drop-down__inner\"><ng-content></ng-content></span>\n", components: [{ type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
33178
+ IgxComboItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboItemComponent, selector: "igx-combo-item", inputs: { itemHeight: "itemHeight", singleMode: "singleMode" }, host: { properties: { "style.height.px": "this.itemHeight" } }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!isHeader && !singleMode\">\n <igx-checkbox [checked]=\"selected\" [disableRipple]=\"true\" [disableTransitions]=\"disableTransitions\" [tabindex]=\"-1\" (click)=\"disableCheck($event)\" class=\"igx-combo__checkbox\"></igx-checkbox>\n</ng-container>\n<span class=\"igx-drop-down__inner\"><ng-content></ng-content></span>\n", components: [{ type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
33186
33179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboItemComponent, decorators: [{
33187
33180
  type: Component,
33188
- args: [{ selector: 'igx-combo-item', template: "<ng-container *ngIf=\"!isHeader\">\n <igx-checkbox [checked]=\"selected\" [disableRipple]=\"true\" [disableTransitions]=\"disableTransitions\" [tabindex]=\"-1\" (click)=\"disableCheck($event)\" class=\"igx-combo__checkbox\"></igx-checkbox>\n</ng-container>\n<span class=\"igx-drop-down__inner\"><ng-content></ng-content></span>\n" }]
33181
+ args: [{ selector: 'igx-combo-item', template: "<ng-container *ngIf=\"!isHeader && !singleMode\">\n <igx-checkbox [checked]=\"selected\" [disableRipple]=\"true\" [disableTransitions]=\"disableTransitions\" [tabindex]=\"-1\" (click)=\"disableCheck($event)\" class=\"igx-combo__checkbox\"></igx-checkbox>\n</ng-container>\n<span class=\"igx-drop-down__inner\"><ng-content></ng-content></span>\n" }]
33189
33182
  }], ctorParameters: function () {
33190
33183
  return [{ type: IgxComboAPIService }, { type: undefined, decorators: [{
33191
33184
  type: Inject,
@@ -33199,320 +33192,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
33199
33192
  }, {
33200
33193
  type: HostBinding,
33201
33194
  args: ['style.height.px']
33195
+ }], singleMode: [{
33196
+ type: Input
33202
33197
  }] } });
33203
33198
 
33204
33199
  const IGX_COMBO_COMPONENT = new InjectionToken('IgxComboComponentToken');
33205
-
33206
- /**
33207
- * @hidden
33208
- */
33209
- class IgxComboAddItemComponent extends IgxComboItemComponent {
33210
- get selected() {
33211
- return false;
33212
- }
33213
- set selected(value) {
33214
- }
33215
- /**
33216
- * @inheritdoc
33217
- */
33218
- clicked(event) {
33219
- this.comboAPI.disableTransitions = false;
33220
- this.comboAPI.add_custom_item();
33221
- }
33222
- }
33223
- IgxComboAddItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboAddItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
33224
- IgxComboAddItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboAddItemComponent, selector: "igx-combo-add-item", providers: [{ provide: IgxComboItemComponent, useExisting: IgxComboAddItemComponent }], usesInheritance: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
33225
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboAddItemComponent, decorators: [{
33226
- type: Component,
33227
- args: [{
33228
- selector: 'igx-combo-add-item',
33229
- template: '<ng-content></ng-content>',
33230
- providers: [{ provide: IgxComboItemComponent, useExisting: IgxComboAddItemComponent }]
33231
- }]
33232
- }] });
33233
-
33234
- /** @hidden */
33235
- class IgxComboDropDownComponent extends IgxDropDownComponent {
33236
- constructor(elementRef, cdr, selection, combo, comboAPI, _displayDensityOptions) {
33237
- super(elementRef, cdr, selection, _displayDensityOptions);
33238
- this.elementRef = elementRef;
33239
- this.cdr = cdr;
33240
- this.selection = selection;
33241
- this.combo = combo;
33242
- this.comboAPI = comboAPI;
33243
- this._displayDensityOptions = _displayDensityOptions;
33244
- /**
33245
- * @hidden
33246
- * @internal
33247
- */
33248
- this.children = null;
33249
- this.scrollHandler = () => {
33250
- this.comboAPI.disableTransitions = true;
33251
- };
33252
- }
33253
- /** @hidden @internal */
33254
- get scrollContainer() {
33255
- return this.virtDir.dc.location.nativeElement;
33256
- }
33257
- get isScrolledToLast() {
33258
- const scrollTop = this.virtDir.scrollPosition;
33259
- const scrollHeight = this.virtDir.getScroll().scrollHeight;
33260
- return Math.floor(scrollTop + this.virtDir.igxForContainerSize) === scrollHeight;
33261
- }
33262
- get lastVisibleIndex() {
33263
- return this.combo.totalItemCount ?
33264
- Math.floor(this.combo.itemsMaxHeight / this.combo.itemHeight) :
33265
- this.items.length - 1;
33266
- }
33267
- get sortedChildren() {
33268
- if (this.children !== undefined) {
33269
- return this.children.toArray()
33270
- .sort((a, b) => a.index - b.index);
33271
- }
33272
- return null;
33273
- }
33274
- /**
33275
- * Get all non-header items
33276
- *
33277
- * ```typescript
33278
- * let myDropDownItems = this.dropdown.items;
33279
- * ```
33280
- */
33281
- get items() {
33282
- const items = [];
33283
- if (this.children !== undefined) {
33284
- const sortedChildren = this.sortedChildren;
33285
- for (const child of sortedChildren) {
33286
- if (!child.isHeader) {
33287
- items.push(child);
33288
- }
33289
- }
33290
- }
33291
- return items;
33292
- }
33293
- /**
33294
- * @hidden @internal
33295
- */
33296
- onFocus() {
33297
- this.focusedItem = this._focusedItem || this.items[0];
33298
- }
33299
- /**
33300
- * @hidden @internal
33301
- */
33302
- onBlur(_evt) {
33303
- this.focusedItem = null;
33304
- }
33305
- /**
33306
- * @hidden @internal
33307
- */
33308
- onToggleOpened() {
33309
- this.opened.emit();
33310
- }
33311
- /**
33312
- * @hidden
33313
- */
33314
- navigateFirst() {
33315
- this.navigateItem(this.virtDir.igxForOf.findIndex(e => !e.isHeader));
33316
- }
33317
- /**
33318
- * @hidden
33319
- */
33320
- navigatePrev() {
33321
- if (this._focusedItem && this._focusedItem.index === 0 && this.virtDir.state.startIndex === 0) {
33322
- this.combo.focusSearchInput(false);
33323
- }
33324
- else {
33325
- super.navigatePrev();
33326
- }
33327
- }
33328
- /**
33329
- * @hidden
33330
- */
33331
- navigateNext() {
33332
- const lastIndex = this.combo.totalItemCount ? this.combo.totalItemCount - 1 : this.virtDir.igxForOf.length - 1;
33333
- if (this._focusedItem && this._focusedItem.index === lastIndex) {
33334
- this.focusAddItemButton();
33335
- }
33336
- else {
33337
- super.navigateNext();
33338
- }
33339
- }
33340
- /**
33341
- * @hidden @internal
33342
- */
33343
- selectItem(item) {
33344
- if (item === null || item === undefined) {
33345
- return;
33346
- }
33347
- this.comboAPI.set_selected_item(item.itemID);
33348
- this._focusedItem = item;
33349
- }
33350
- /**
33351
- * @hidden @internal
33352
- */
33353
- updateScrollPosition() {
33354
- this.virtDir.getScroll().scrollTop = this._scrollPosition;
33355
- }
33356
- /**
33357
- * @hidden @internal
33358
- */
33359
- onItemActionKey(key) {
33360
- switch (key) {
33361
- case DropDownActionKey.ENTER:
33362
- this.handleEnter();
33363
- break;
33364
- case DropDownActionKey.SPACE:
33365
- this.handleSpace();
33366
- break;
33367
- case DropDownActionKey.ESCAPE:
33368
- this.close();
33369
- }
33370
- }
33371
- ngAfterViewInit() {
33372
- this.virtDir.getScroll().addEventListener('scroll', this.scrollHandler);
33373
- }
33374
- /**
33375
- * @hidden @internal
33376
- */
33377
- ngOnDestroy() {
33378
- this.virtDir.getScroll().removeEventListener('scroll', this.scrollHandler);
33379
- this.destroy$.next(true);
33380
- this.destroy$.complete();
33381
- }
33382
- scrollToHiddenItem(_newItem) { }
33383
- handleEnter() {
33384
- if (this.isAddItemFocused()) {
33385
- this.combo.addItemToCollection();
33386
- }
33387
- else {
33388
- this.close();
33389
- }
33390
- }
33391
- handleSpace() {
33392
- if (this.isAddItemFocused()) {
33393
- return;
33394
- }
33395
- else {
33396
- this.selectItem(this.focusedItem);
33397
- }
33398
- }
33399
- isAddItemFocused() {
33400
- return this.focusedItem instanceof IgxComboAddItemComponent;
33401
- }
33402
- focusAddItemButton() {
33403
- if (this.combo.isAddButtonVisible()) {
33404
- this.focusedItem = this.items[this.items.length - 1];
33405
- }
33406
- }
33407
- }
33408
- IgxComboDropDownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboDropDownComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxSelectionAPIService }, { token: IGX_COMBO_COMPONENT }, { token: IgxComboAPIService }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component });
33409
- IgxComboDropDownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboDropDownComponent, selector: "igx-combo-drop-down", providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }], queries: [{ propertyName: "children", predicate: IgxComboItemComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"igx-drop-down__list\" [style.width]=\"width\"\nigxToggle\n(appended)=\"onToggleContentAppended($event)\"\n(opening)=\"onToggleOpening($event)\" (opened)=\"onToggleOpened()\"\n(closing)=\"onToggleClosing($event)\" (closed)=\"onToggleClosed()\">\n <div class=\"igx-drop-down__list-scroll\" #scrollContainer [attr.id]=\"this.listId\" role=\"listbox\" [attr.aria-label]=\"this.listId\"\n [style.height]=\"height\"\n [style.maxHeight]=\"maxHeight\">\n <ng-container *ngIf=\"!collapsed\">\n <ng-content></ng-content>\n </ng-container>\n </div>\n</div>\n", directives: [{ type: IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
33410
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboDropDownComponent, decorators: [{
33411
- type: Component,
33412
- args: [{ selector: 'igx-combo-drop-down', providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }], template: "<div class=\"igx-drop-down__list\" [style.width]=\"width\"\nigxToggle\n(appended)=\"onToggleContentAppended($event)\"\n(opening)=\"onToggleOpening($event)\" (opened)=\"onToggleOpened()\"\n(closing)=\"onToggleClosing($event)\" (closed)=\"onToggleClosed()\">\n <div class=\"igx-drop-down__list-scroll\" #scrollContainer [attr.id]=\"this.listId\" role=\"listbox\" [attr.aria-label]=\"this.listId\"\n [style.height]=\"height\"\n [style.maxHeight]=\"maxHeight\">\n <ng-container *ngIf=\"!collapsed\">\n <ng-content></ng-content>\n </ng-container>\n </div>\n</div>\n" }]
33413
- }], ctorParameters: function () {
33414
- return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: undefined, decorators: [{
33415
- type: Inject,
33416
- args: [IGX_COMBO_COMPONENT]
33417
- }] }, { type: IgxComboAPIService }, { type: undefined, decorators: [{
33418
- type: Optional
33419
- }, {
33420
- type: Inject,
33421
- args: [DisplayDensityToken]
33422
- }] }];
33423
- }, propDecorators: { children: [{
33424
- type: ContentChildren,
33425
- args: [IgxComboItemComponent, { descendants: true }]
33426
- }] } });
33427
-
33428
- /**
33429
- * @hidden
33430
- */
33431
- class IgxComboFilteringPipe {
33432
- transform(collection, searchValue, displayKey, shouldFilter, filteringOptions) {
33433
- if (!collection) {
33434
- return [];
33435
- }
33436
- if (!searchValue || !shouldFilter) {
33437
- return collection;
33438
- }
33439
- else {
33440
- const searchTerm = filteringOptions.caseSensitive ? searchValue.trim() : searchValue.toLowerCase().trim();
33441
- if (displayKey != null) {
33442
- return collection.filter(e => filteringOptions.caseSensitive ? e[displayKey].includes(searchTerm) :
33443
- e[displayKey].toString().toLowerCase().includes(searchTerm));
33444
- }
33445
- else {
33446
- return collection.filter(e => filteringOptions.caseSensitive ? e.includes(searchTerm) :
33447
- e.toLowerCase().includes(searchTerm));
33448
- }
33449
- }
33450
- }
33451
- }
33452
- IgxComboFilteringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboFilteringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
33453
- IgxComboFilteringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboFilteringPipe, name: "comboFiltering" });
33454
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboFilteringPipe, decorators: [{
33455
- type: Pipe,
33456
- args: [{
33457
- name: 'comboFiltering'
33458
- }]
33459
- }] });
33460
- /**
33461
- * @hidden
33462
- */
33463
- class IgxComboGroupingPipe {
33464
- constructor(combo) {
33465
- this.combo = combo;
33466
- }
33467
- transform(collection, groupKey, valueKey, sortingDirection) {
33468
- this.combo.filteredData = collection;
33469
- if ((!groupKey && groupKey !== 0) || !collection.length) {
33470
- return collection;
33471
- }
33472
- const sorted = DataUtil.sort(cloneArray(collection), [{
33473
- fieldName: groupKey,
33474
- dir: sortingDirection,
33475
- ignoreCase: true,
33476
- strategy: DefaultSortingStrategy.instance()
33477
- }]);
33478
- const data = cloneArray(sorted);
33479
- let inserts = 0;
33480
- let currentHeader = null;
33481
- for (let i = 0; i < sorted.length; i++) {
33482
- let insertFlag = 0;
33483
- if (currentHeader !== sorted[i][groupKey]) {
33484
- currentHeader = sorted[i][groupKey];
33485
- insertFlag = 1;
33486
- }
33487
- if (insertFlag) {
33488
- data.splice(i + inserts, 0, {
33489
- [valueKey]: currentHeader,
33490
- [groupKey]: currentHeader,
33491
- isHeader: true
33492
- });
33493
- inserts++;
33494
- }
33495
- }
33496
- return data;
33497
- }
33498
- }
33499
- IgxComboGroupingPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboGroupingPipe, deps: [{ token: IGX_COMBO_COMPONENT }], target: i0.ɵɵFactoryTarget.Pipe });
33500
- IgxComboGroupingPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboGroupingPipe, name: "comboGrouping" });
33501
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboGroupingPipe, decorators: [{
33502
- type: Pipe,
33503
- args: [{
33504
- name: 'comboGrouping'
33505
- }]
33506
- }], ctorParameters: function () {
33507
- return [{ type: undefined, decorators: [{
33508
- type: Inject,
33509
- args: [IGX_COMBO_COMPONENT]
33510
- }] }];
33511
- } });
33512
-
33200
+ let NEXT_ID$d = 0;
33513
33201
  /**
33514
33202
  * @hidden
33203
+ * The default number of items that should be in the combo's
33204
+ * drop-down list if no `[itemsMaxHeight]` is specified
33515
33205
  */
33206
+ const itemsInContainer = 10; // TODO: make private readonly
33207
+ /** @hidden @internal */
33208
+ const ItemHeights = {
33209
+ comfortable: 40,
33210
+ cosy: 32,
33211
+ compact: 28,
33212
+ };
33213
+ /** @hidden @internal */
33516
33214
  var DataTypes;
33517
33215
  (function (DataTypes) {
33518
33216
  DataTypes["EMPTY"] = "empty";
@@ -33520,20 +33218,6 @@ var DataTypes;
33520
33218
  DataTypes["COMPLEX"] = "complex";
33521
33219
  DataTypes["PRIMARYKEY"] = "valueKey";
33522
33220
  })(DataTypes || (DataTypes = {}));
33523
- /**
33524
- * @hidden
33525
- */
33526
- const ItemHeights = {
33527
- comfortable: 40,
33528
- cosy: 32,
33529
- compact: 28,
33530
- };
33531
- /**
33532
- * @hidden
33533
- * The default number of items that should be in the combo's
33534
- * drop-down list if no `[itemsMaxHeight]` is specified
33535
- */
33536
- const itemsInContainer = 10;
33537
33221
  var IgxComboState;
33538
33222
  (function (IgxComboState) {
33539
33223
  /**
@@ -33549,46 +33233,12 @@ var IgxComboState;
33549
33233
  */
33550
33234
  IgxComboState[IgxComboState["INVALID"] = 2] = "INVALID";
33551
33235
  })(IgxComboState || (IgxComboState = {}));
33552
- /**
33553
- * When called with sets A & B, returns A - B (as array);
33554
- *
33555
- * @hidden
33556
- */
33557
- const diffInSets = (set1, set2) => {
33558
- const results = [];
33559
- set1.forEach(entry => {
33560
- if (!set2.has(entry)) {
33561
- results.push(entry);
33562
- }
33563
- });
33564
- return results;
33565
- };
33566
- let NEXT_ID$d = 0;
33567
- /**
33568
- * Represents a drop-down list that provides editable functionalities, allowing users to choose an option from a predefined list.
33569
- *
33570
- * @igxModule IgxComboModule
33571
- * @igxTheme igx-combo-theme
33572
- * @igxKeywords combobox, combo selection
33573
- * @igxGroup Grids & Lists
33574
- *
33575
- * @remarks
33576
- * It provides the ability to filter items as well as perform single or multiple seleciton with the provided data.
33577
- * Additionally, it exposes keyboard navigation and custom styling capabilities.
33578
- * @example
33579
- * ```html
33580
- * <igx-combo [itemsMaxHeight]="250" [data]="locationData"
33581
- * [displayKey]="'field'" [valueKey]="'field'"
33582
- * placeholder="Location(s)" searchPlaceholder="Search...">
33583
- * </igx-combo>
33584
- * ```
33585
- */
33586
- class IgxComboComponent extends DisplayDensityBase {
33587
- constructor(elementRef, cdr, selection, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector) {
33236
+ class IgxComboBaseDirective extends DisplayDensityBase {
33237
+ constructor(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector) {
33588
33238
  super(_displayDensityOptions);
33589
33239
  this.elementRef = elementRef;
33590
33240
  this.cdr = cdr;
33591
- this.selection = selection;
33241
+ this.selectionService = selectionService;
33592
33242
  this.comboAPI = comboAPI;
33593
33243
  this._iconService = _iconService;
33594
33244
  this._displayDensityOptions = _displayDensityOptions;
@@ -33612,9 +33262,123 @@ class IgxComboComponent extends DisplayDensityBase {
33612
33262
  */
33613
33263
  this.overlaySettings = null;
33614
33264
  /**
33615
- * @hidden @internal
33265
+ * Gets/gets combo id.
33266
+ *
33267
+ * ```typescript
33268
+ * // get
33269
+ * let id = this.combo.id;
33270
+ * ```
33271
+ *
33272
+ * ```html
33273
+ * <!--set-->
33274
+ * <igx-combo [id]='combo1'></igx-combo>
33275
+ * ```
33616
33276
  */
33617
- this.searchInput = null;
33277
+ this.id = `igx-combo-${NEXT_ID$d++}`;
33278
+ /**
33279
+ * Controls whether custom values can be added to the collection
33280
+ *
33281
+ * ```typescript
33282
+ * // get
33283
+ * let comboAllowsCustomValues = this.combo.allowCustomValues;
33284
+ * ```
33285
+ *
33286
+ * ```html
33287
+ * <!--set-->
33288
+ * <igx-combo [allowCustomValues]='true'></igx-combo>
33289
+ * ```
33290
+ */
33291
+ this.allowCustomValues = false;
33292
+ /**
33293
+ * Determines which column in the data source is used to determine the value.
33294
+ *
33295
+ * ```typescript
33296
+ * // get
33297
+ * let myComboValueKey = this.combo.valueKey;
33298
+ * ```
33299
+ *
33300
+ * ```html
33301
+ * <!--set-->
33302
+ * <igx-combo [valueKey]='myKey'></igx-combo>
33303
+ * ```
33304
+ */
33305
+ this.valueKey = null;
33306
+ /** @hidden @internal */
33307
+ this.cssClass = 'igx-combo'; // Independent of display density for the time being
33308
+ /** @hidden @internal */
33309
+ this.role = 'combobox';
33310
+ /**
33311
+ * An @Input property that enabled/disables combo. The default is `false`.
33312
+ * ```html
33313
+ * <igx-combo [disabled]="'true'">
33314
+ * ```
33315
+ */
33316
+ this.disabled = false;
33317
+ /**
33318
+ * Emitted when item selection is changing, before the selection completes
33319
+ *
33320
+ * ```html
33321
+ * <igx-combo (selectionChanging)='handleSelection()'></igx-combo>
33322
+ * ```
33323
+ */
33324
+ // TODO: any for old/new selection?
33325
+ this.selectionChanging = new EventEmitter();
33326
+ /**
33327
+ * Emitted before the dropdown is opened
33328
+ *
33329
+ * ```html
33330
+ * <igx-combo opening='handleOpening($event)'></igx-combo>
33331
+ * ```
33332
+ */
33333
+ this.opening = new EventEmitter();
33334
+ /**
33335
+ * Emitted after the dropdown is opened
33336
+ *
33337
+ * ```html
33338
+ * <igx-combo (opened)='handleOpened($event)'></igx-combo>
33339
+ * ```
33340
+ */
33341
+ this.opened = new EventEmitter();
33342
+ /**
33343
+ * Emitted before the dropdown is closed
33344
+ *
33345
+ * ```html
33346
+ * <igx-combo (closing)='handleClosing($event)'></igx-combo>
33347
+ * ```
33348
+ */
33349
+ this.closing = new EventEmitter();
33350
+ /**
33351
+ * Emitted after the dropdown is closed
33352
+ *
33353
+ * ```html
33354
+ * <igx-combo (closed)='handleClosed($event)'></igx-combo>
33355
+ * ```
33356
+ */
33357
+ this.closed = new EventEmitter();
33358
+ /**
33359
+ * Emitted when an item is being added to the data collection
33360
+ *
33361
+ * ```html
33362
+ * <igx-combo (addition)='handleAdditionEvent($event)'></igx-combo>
33363
+ * ```
33364
+ */
33365
+ this.addition = new EventEmitter();
33366
+ /**
33367
+ * Emitted when the value of the search input changes (e.g. typing, pasting, clear, etc.)
33368
+ *
33369
+ * ```html
33370
+ * <igx-combo (searchInputUpdate)='handleSearchInputEvent($event)'></igx-combo>
33371
+ * ```
33372
+ */
33373
+ this.searchInputUpdate = new EventEmitter();
33374
+ /**
33375
+ * Emitted when new chunk of data is loaded from the virtualization
33376
+ *
33377
+ * ```html
33378
+ * <igx-combo (dataPreLoad)='handleDataPreloadEvent($event)'></igx-combo>
33379
+ * ```
33380
+ */
33381
+ this.dataPreLoad = new EventEmitter();
33618
33382
  /**
33619
33383
  * The custom template, if any, that should be used when rendering ITEMS in the combo list
33620
33384
  *
@@ -33778,207 +33542,34 @@ class IgxComboComponent extends DisplayDensityBase {
33778
33542
  * ```
33779
33543
  */
33780
33544
  this.clearIconTemplate = null;
33781
- /**
33782
- * Emitted when item selection is changing, before the selection completes
33783
- *
33784
- * ```html
33785
- * <igx-combo (selectionChanging)='handleSelection()'></igx-combo>
33786
- * ```
33787
- */
33788
- this.selectionChanging = new EventEmitter();
33789
- /**
33790
- * Emitted before the dropdown is opened
33791
- *
33792
- * ```html
33793
- * <igx-combo opening='handleOpening($event)'></igx-combo>
33794
- * ```
33795
- */
33796
- this.opening = new EventEmitter();
33797
- /**
33798
- * Emitted after the dropdown is opened
33799
- *
33800
- * ```html
33801
- * <igx-combo (opened)='handleOpened($event)'></igx-combo>
33802
- * ```
33803
- */
33804
- this.opened = new EventEmitter();
33805
- /**
33806
- * Emitted before the dropdown is closed
33807
- *
33808
- * ```html
33809
- * <igx-combo (closing)='handleClosing($event)'></igx-combo>
33810
- * ```
33811
- */
33812
- this.closing = new EventEmitter();
33813
- /**
33814
- * Emitted after the dropdown is closed
33815
- *
33816
- * ```html
33817
- * <igx-combo (closed)='handleClosed($event)'></igx-combo>
33818
- * ```
33819
- */
33820
- this.closed = new EventEmitter();
33821
- /**
33822
- * Emitted when an item is being added to the data collection
33823
- *
33824
- * ```html
33825
- * <igx-combo (addition)='handleAdditionEvent($event)'></igx-combo>
33826
- * ```
33827
- */
33828
- this.addition = new EventEmitter();
33829
- /**
33830
- * Emitted when the value of the search input changes (e.g. typing, pasting, clear, etc.)
33831
- *
33832
- * ```html
33833
- * <igx-combo (searchInputUpdate)='handleSearchInputEvent($event)'></igx-combo>
33834
- * ```
33835
- */
33836
- this.searchInputUpdate = new EventEmitter();
33837
- /**
33838
- * Emitted when new chunk of data is loaded from the virtualization
33839
- *
33840
- * ```html
33841
- * <igx-combo (dataPreLoad)='handleDataPreloadEvent($event)'></igx-combo>
33842
- * ```
33843
- */
33844
- this.dataPreLoad = new EventEmitter();
33845
- /**
33846
- * Gets/gets combo id.
33847
- *
33848
- * ```typescript
33849
- * // get
33850
- * let id = this.combo.id;
33851
- * ```
33852
- *
33853
- * ```html
33854
- * <!--set-->
33855
- * <igx-combo [id]='combo1'></igx-combo>
33856
- * ```
33857
- */
33858
- this.id = `igx-combo-${NEXT_ID$d++}`;
33859
- /**
33860
- * @hidden @internal
33861
- */
33862
- this.cssClass = 'igx-combo'; // Independent of display density, at the time being
33863
- /**
33864
- * @hidden @internal
33865
- */
33866
- this.role = 'combobox';
33867
- /**
33868
- * Controls whether custom values can be added to the collection
33869
- *
33870
- * ```typescript
33871
- * // get
33872
- * let comboAllowsCustomValues = this.combo.allowCustomValues;
33873
- * ```
33874
- *
33875
- * ```html
33876
- * <!--set-->
33877
- * <igx-combo [allowCustomValues]='true'></igx-combo>
33878
- * ```
33879
- */
33880
- this.allowCustomValues = false;
33881
- /**
33882
- * Defines the placeholder value for the combo dropdown search field
33883
- *
33884
- * ```typescript
33885
- * // get
33886
- * let myComboSearchPlaceholder = this.combo.searchPlaceholder;
33887
- * ```
33888
- *
33889
- * ```html
33890
- * <!--set-->
33891
- * <igx-combo [searchPlaceholder]='newPlaceHolder'></igx-combo>
33892
- * ```
33893
- */
33894
- this.searchPlaceholder = 'Enter a Search Term';
33895
- /**
33896
- * Defines whether the caseSensitive icon should be shown in the search input
33897
- *
33898
- * ```typescript
33899
- * // get
33900
- * let myComboShowSearchCaseIcon = this.combo.showSearchCaseIcon;
33901
- * ```
33902
- *
33903
- * ```html
33904
- * <!--set-->
33905
- * <igx-combo [showSearchCaseIcon]='true'></igx-combo>
33906
- * ```
33907
- */
33908
- this.showSearchCaseIcon = false;
33909
- /**
33910
- * Combo value data source property.
33911
- *
33912
- * ```typescript
33913
- * // get
33914
- * let myComboValueKey = this.combo.valueKey;
33915
- * ```
33916
- *
33917
- * ```html
33918
- * <!--set-->
33919
- * <igx-combo [valueKey]='myKey'></igx-combo>
33920
- * ```
33921
- */
33922
- this.valueKey = null;
33923
- /**
33924
- * An @Input property that enabled/disables filtering in the list. The default is `true`.
33925
- * ```html
33926
- * <igx-combo [filterable]="false">
33927
- * ```
33928
- */
33929
- this.filterable = true;
33930
- /**
33931
- * An @Input property that enabled/disables combo. The default is `false`.
33932
- * ```html
33933
- * <igx-combo [disabled]="'true'">
33934
- * ```
33935
- */
33936
- this.disabled = false;
33937
- /**
33938
- * An @Input property that controls whether the combo's search box
33939
- * should be focused after the `opened` event is called
33940
- * When `false`, the combo's list item container will be focused instead
33941
- */
33942
- this.autoFocusSearch = true;
33545
+ /** @hidden @internal */
33546
+ this.searchInput = null;
33943
33547
  this.dropdownContainer = null;
33944
- /**
33945
- * @hidden @internal
33946
- */
33548
+ /** @hidden @internal */
33947
33549
  this.customValueFlag = true;
33948
- /**
33949
- * @hidden @internal
33950
- */
33550
+ /** @hidden @internal */
33551
+ this.filterValue = '';
33552
+ /** @hidden @internal */
33951
33553
  this.defaultFallbackGroup = 'Other';
33952
- /**
33953
- * @hidden @internal
33954
- */
33554
+ /** @hidden @internal */
33955
33555
  this.filteringOptions = {
33956
33556
  caseSensitive: false
33957
33557
  };
33958
- /**
33959
- * @hidden @internal
33960
- */
33961
- this.filteringLogic = FilteringLogic.Or;
33962
- /** @hidden @internal */
33963
- this.filterValue = '';
33964
- this.stringFilters = IgxStringFilteringOperand;
33965
- this.booleanFilters = IgxBooleanFilteringOperand;
33558
+ this._data = [];
33559
+ this._value = '';
33966
33560
  this._groupKey = '';
33967
- this._prevInputValue = '';
33968
- this._dataType = '';
33969
- this._searchValue = '';
33970
- this._type = null;
33561
+ this._filteredData = [];
33562
+ this._remoteSelection = {};
33563
+ this._valid = IgxComboState.INITIAL;
33971
33564
  this.ngControl = null;
33972
33565
  this.destroy$ = new Subject();
33973
- this._data = [];
33974
- this._filteredData = [];
33566
+ this._onTouchedCallback = noop;
33567
+ this._onChangeCallback = noop;
33568
+ this._type = null;
33569
+ this._dataType = '';
33570
+ this._searchValue = '';
33975
33571
  this._itemHeight = null;
33976
33572
  this._itemsMaxHeight = null;
33977
- this._remoteSelection = {};
33978
- this._onChangeCallback = noop;
33979
- this._onTouchedCallback = noop;
33980
- this._value = '';
33981
- this._valid = IgxComboState.INITIAL;
33982
33573
  this._groupSortingDirection = SortingDirection.Asc;
33983
33574
  this.onStatusChanged = () => {
33984
33575
  if ((this.ngControl.control.touched || this.ngControl.control.dirty) &&
@@ -33996,31 +33587,10 @@ class IgxComboComponent extends DisplayDensityBase {
33996
33587
  }
33997
33588
  this.manageRequiredAsterisk();
33998
33589
  };
33999
- this.comboAPI.register(this);
34000
- }
34001
- /**
34002
- * @hidden @internal
34003
- */
34004
- get displaySearchInput() {
34005
- return this.filterable || this.allowCustomValues;
34006
- }
34007
- /**
34008
- * @hidden @internal
34009
- */
34010
- get ariaExpanded() {
34011
- return !this.dropdown.collapsed;
34012
- }
34013
- /**
34014
- * @hidden @internal
34015
- */
34016
- get hasPopUp() {
34017
- return 'listbox';
34018
- }
34019
- /**
34020
- * @hidden @internal
34021
- */
34022
- get ariaOwns() {
34023
- return this.dropdown.id;
33590
+ this.findMatch = (element) => {
33591
+ const value = this.displayKey ? element[this.displayKey] : element;
33592
+ return value.toString().toLowerCase() === this.searchValue.trim().toLowerCase();
33593
+ };
34024
33594
  }
34025
33595
  /**
34026
33596
  * Configures the drop down list height
@@ -34066,12 +33636,6 @@ class IgxComboComponent extends DisplayDensityBase {
34066
33636
  set itemHeight(val) {
34067
33637
  this._itemHeight = val;
34068
33638
  }
34069
- /**
34070
- * @hidden @internal
34071
- */
34072
- get inputEmpty() {
34073
- return !this.value && !this.placeholder;
34074
- }
34075
33639
  /**
34076
33640
  * Combo data source.
34077
33641
  *
@@ -34090,7 +33654,7 @@ class IgxComboComponent extends DisplayDensityBase {
34090
33654
  this._displayKey = val;
34091
33655
  }
34092
33656
  /**
34093
- * Combo text data source property.
33657
+ * Determines which column in the data source is used to determine the display value.
34094
33658
  *
34095
33659
  * ```typescript
34096
33660
  * // get
@@ -34148,6 +33712,18 @@ class IgxComboComponent extends DisplayDensityBase {
34148
33712
  set groupSortingDirection(val) {
34149
33713
  this._groupSortingDirection = val;
34150
33714
  }
33715
+ /** @hidden @internal */
33716
+ get ariaExpanded() {
33717
+ return !this.dropdown.collapsed;
33718
+ }
33719
+ /** @hidden @internal */
33720
+ get hasPopUp() {
33721
+ return 'listbox';
33722
+ }
33723
+ /** @hidden @internal */
33724
+ get ariaOwns() {
33725
+ return this.dropdown.id;
33726
+ }
34151
33727
  /**
34152
33728
  * An @Input property that sets how the combo will be styled.
34153
33729
  * The allowed values are `line`, `box`, `border` and `search`. The default is `box`.
@@ -34161,6 +33737,27 @@ class IgxComboComponent extends DisplayDensityBase {
34161
33737
  set type(val) {
34162
33738
  this._type = val;
34163
33739
  }
33740
+ /** @hidden @internal */
33741
+ get searchValue() {
33742
+ return this._searchValue;
33743
+ }
33744
+ set searchValue(val) {
33745
+ this.filterValue = val;
33746
+ this._searchValue = val;
33747
+ }
33748
+ /** @hidden @internal */
33749
+ get isRemote() {
33750
+ return this.totalItemCount > 0 &&
33751
+ this.valueKey &&
33752
+ this.dataType === DataTypes.COMPLEX;
33753
+ }
33754
+ /** @hidden @internal */
33755
+ get dataType() {
33756
+ if (this.displayKey) {
33757
+ return DataTypes.COMPLEX;
33758
+ }
33759
+ return DataTypes.PRIMITIVE;
33760
+ }
34164
33761
  /**
34165
33762
  * Gets if control is valid, when used in a form
34166
33763
  *
@@ -34185,32 +33782,15 @@ class IgxComboComponent extends DisplayDensityBase {
34185
33782
  this.comboInput.valid = IgxInputState[IgxComboState[valid]];
34186
33783
  }
34187
33784
  /**
34188
- * @hidden @internal
34189
- */
34190
- get searchValue() {
34191
- return this._searchValue;
34192
- }
34193
- set searchValue(val) {
34194
- this.filterValue = val;
34195
- this._searchValue = val;
34196
- }
34197
- /**
34198
- * @hidden @internal
34199
- */
34200
- onArrowDown(event) {
34201
- event.preventDefault();
34202
- event.stopPropagation();
34203
- this.open();
34204
- }
34205
- /**
34206
- * @hidden @internal
33785
+ * The text displayed in the combo input
33786
+ *
33787
+ * ```typescript
33788
+ * // get
33789
+ * let comboValue = this.combo.value;
33790
+ * ```
34207
33791
  */
34208
- onInputClick(event) {
34209
- event.stopPropagation();
34210
- event.preventDefault();
34211
- if (!this.disabled) {
34212
- this.toggle();
34213
- }
33792
+ get value() {
33793
+ return this._value;
34214
33794
  }
34215
33795
  /**
34216
33796
  * Defines the current state of the virtualized data. It contains `startIndex` and `chunkSize`
@@ -34234,6 +33814,16 @@ class IgxComboComponent extends DisplayDensityBase {
34234
33814
  set virtualizationState(state) {
34235
33815
  this.virtDir.state = state;
34236
33816
  }
33817
+ /**
33818
+ * Gets drop down state.
33819
+ *
33820
+ * ```typescript
33821
+ * let state = this.combo.collapsed;
33822
+ * ```
33823
+ */
33824
+ get collapsed() {
33825
+ return this.dropdown.collapsed;
33826
+ }
34237
33827
  /**
34238
33828
  * Gets total count of the virtual data items, when using remote service.
34239
33829
  *
@@ -34256,34 +33846,873 @@ class IgxComboComponent extends DisplayDensityBase {
34256
33846
  set totalItemCount(count) {
34257
33847
  this.virtDir.totalItemCount = count;
34258
33848
  }
33849
+ /** @hidden @internal */
33850
+ get template() {
33851
+ this._dataType = this.dataType;
33852
+ if (this.itemTemplate) {
33853
+ return this.itemTemplate;
33854
+ }
33855
+ if (this._dataType === DataTypes.COMPLEX) {
33856
+ return this.complexTemplate;
33857
+ }
33858
+ return this.primitiveTemplate;
33859
+ }
33860
+ /** @hidden @internal */
33861
+ onArrowDown(event) {
33862
+ event.preventDefault();
33863
+ event.stopPropagation();
33864
+ this.open();
33865
+ }
33866
+ /** @hidden @internal */
33867
+ ngOnInit() {
33868
+ this.ngControl = this._injector.get(NgControl, null);
33869
+ const targetElement = this.elementRef.nativeElement;
33870
+ this._overlaySettings = {
33871
+ target: targetElement,
33872
+ scrollStrategy: new AbsoluteScrollStrategy(),
33873
+ positionStrategy: new AutoPositionStrategy(),
33874
+ modal: false,
33875
+ closeOnOutsideClick: true,
33876
+ excludeFromOutsideClick: [targetElement]
33877
+ };
33878
+ this.selectionService.set(this.id, new Set());
33879
+ this._iconService.addSvgIconFromText(caseSensitive.name, caseSensitive.value, 'imx-icons');
33880
+ }
33881
+ /** @hidden @internal */
33882
+ ngAfterViewInit() {
33883
+ this.filteredData = [...this.data];
33884
+ if (this.ngControl) {
33885
+ this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.onStatusChanged);
33886
+ this.manageRequiredAsterisk();
33887
+ this.cdr.detectChanges();
33888
+ }
33889
+ this.virtDir.chunkPreload.pipe(takeUntil(this.destroy$)).subscribe((e) => {
33890
+ const eventArgs = Object.assign({}, e, { owner: this });
33891
+ this.dataPreLoad.emit(eventArgs);
33892
+ });
33893
+ }
33894
+ /** @hidden @internal */
33895
+ ngOnDestroy() {
33896
+ this.destroy$.next();
33897
+ this.destroy$.complete();
33898
+ this.comboAPI.clear();
33899
+ this.selectionService.clear(this.id);
33900
+ }
34259
33901
  /**
34260
- * The text displayed in the combo input
33902
+ * A method that opens/closes the combo.
34261
33903
  *
34262
- * ```typescript
34263
- * // get
34264
- * let comboValue = this.combo.value;
33904
+ * ```html
33905
+ * <button (click)="combo.toggle()">Toggle Combo</button>
33906
+ * <igx-combo #combo></igx-combo>
34265
33907
  * ```
34266
33908
  */
34267
- get value() {
34268
- return this._value;
33909
+ toggle() {
33910
+ const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);
33911
+ this.dropdown.toggle(overlaySettings);
34269
33912
  }
34270
33913
  /**
34271
- * @hidden @internal
33914
+ * A method that opens the combo.
33915
+ *
33916
+ * ```html
33917
+ * <button (click)="combo.open()">Open Combo</button>
33918
+ * <igx-combo #combo></igx-combo>
33919
+ * ```
34272
33920
  */
34273
- get filteredData() {
34274
- return this.filterable ? this._filteredData : this.data;
33921
+ open() {
33922
+ const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);
33923
+ this.dropdown.open(overlaySettings);
34275
33924
  }
34276
33925
  /**
34277
- * @hidden @internal
33926
+ * A method that closes the combo.
33927
+ *
33928
+ * ```html
33929
+ * <button (click)="combo.close()">Close Combo</button>
33930
+ * <igx-combo #combo></igx-combo>
33931
+ * ```
34278
33932
  */
34279
- set filteredData(val) {
34280
- this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;
33933
+ close() {
33934
+ this.dropdown.close();
33935
+ }
33936
+ /**
33937
+ * Triggers change detection on the combo view
33938
+ */
33939
+ triggerCheck() {
33940
+ this.cdr.detectChanges();
33941
+ }
33942
+ /**
33943
+ * Get current selection state
33944
+ *
33945
+ * @returns Array of selected items
33946
+ * ```typescript
33947
+ * let selectedItems = this.combo.selectedItems();
33948
+ * ```
33949
+ */
33950
+ get selection() {
33951
+ const items = Array.from(this.selectionService.get(this.id));
33952
+ return items;
33953
+ }
33954
+ /**
33955
+ * Returns if the specified itemID is selected
33956
+ *
33957
+ * @hidden
33958
+ * @internal
33959
+ */
33960
+ isItemSelected(item) {
33961
+ return this.selectionService.is_item_selected(this.id, item);
33962
+ }
33963
+ /** @hidden @internal */
33964
+ addItemToCollection() {
33965
+ var _a;
33966
+ if (!this.searchValue) {
33967
+ return;
33968
+ }
33969
+ const newValue = this.searchValue.trim();
33970
+ const addedItem = this.displayKey ? {
33971
+ [this.valueKey]: newValue,
33972
+ [this.displayKey]: newValue
33973
+ } : newValue;
33974
+ if (this.groupKey) {
33975
+ Object.assign(addedItem, { [this.groupKey]: this.defaultFallbackGroup });
33976
+ }
33977
+ // expose shallow copy instead of this.data in event args so this.data can't be mutated
33978
+ const oldCollection = [...this.data];
33979
+ const newCollection = [...this.data, addedItem];
33980
+ const args = {
33981
+ oldCollection, addedItem, newCollection, owner: this, cancel: false
33982
+ };
33983
+ this.addition.emit(args);
33984
+ if (args.cancel) {
33985
+ return;
33986
+ }
33987
+ this.data.push(args.addedItem);
33988
+ // trigger re-render
33989
+ this.data = cloneArray(this.data);
33990
+ this.select(this.valueKey !== null && this.valueKey !== undefined ?
33991
+ [args.addedItem[this.valueKey]] : [args.addedItem], false);
33992
+ this.customValueFlag = false;
33993
+ (_a = this.searchInput) === null || _a === void 0 ? void 0 : _a.nativeElement.focus();
33994
+ this.dropdown.focusedItem = null;
33995
+ this.virtDir.scrollTo(0);
33996
+ }
33997
+ /** @hidden @internal */
33998
+ isAddButtonVisible() {
33999
+ // This should always return a boolean value. If this.searchValue was '', it returns '' instead of false;
34000
+ return this.searchValue !== '' && this.customValueFlag;
34001
+ }
34002
+ /** @hidden @internal */
34003
+ handleInputChange(event) {
34004
+ if (event !== undefined) {
34005
+ const args = {
34006
+ searchText: typeof event === 'string' ? event : event.target.value,
34007
+ owner: this,
34008
+ cancel: false
34009
+ };
34010
+ this.searchInputUpdate.emit(args);
34011
+ if (args.cancel) {
34012
+ this.filterValue = null;
34013
+ }
34014
+ }
34015
+ this.checkMatch();
34016
+ }
34017
+ /**
34018
+ * Event handlers
34019
+ *
34020
+ * @hidden
34021
+ * @internal
34022
+ */
34023
+ handleOpening(e) {
34024
+ const args = { owner: this, event: e.event, cancel: e.cancel };
34025
+ this.opening.emit(args);
34026
+ e.cancel = args.cancel;
34027
+ }
34028
+ /** @hidden @internal */
34029
+ handleClosing(e) {
34030
+ var _a;
34031
+ const args = { owner: this, event: e.event, cancel: e.cancel };
34032
+ this.closing.emit(args);
34033
+ e.cancel = args.cancel;
34034
+ if (e.cancel) {
34035
+ return;
34036
+ }
34037
+ this.searchValue = '';
34038
+ if (!e.event) {
34039
+ (_a = this.comboInput) === null || _a === void 0 ? void 0 : _a.nativeElement.focus();
34040
+ }
34041
+ }
34042
+ /** @hidden @internal */
34043
+ handleClosed() {
34044
+ this.closed.emit({ owner: this });
34045
+ }
34046
+ /** @hidden @internal */
34047
+ handleKeyDown(event) {
34048
+ if (event.key === 'ArrowUp' || event.key === 'Up') {
34049
+ event.preventDefault();
34050
+ event.stopPropagation();
34051
+ this.close();
34052
+ }
34053
+ }
34054
+ /** @hidden @internal */
34055
+ registerOnChange(fn) {
34056
+ this._onChangeCallback = fn;
34057
+ }
34058
+ /** @hidden @internal */
34059
+ registerOnTouched(fn) {
34060
+ this._onTouchedCallback = fn;
34061
+ }
34062
+ /** @hidden @internal */
34063
+ setDisabledState(isDisabled) {
34064
+ this.disabled = isDisabled;
34065
+ }
34066
+ /** @hidden @internal */
34067
+ onClick(event) {
34068
+ event.stopPropagation();
34069
+ event.preventDefault();
34070
+ if (!this.disabled) {
34071
+ this.toggle();
34072
+ }
34073
+ }
34074
+ /** @hidden @internal */
34075
+ onBlur() {
34076
+ if (this.collapsed) {
34077
+ this._onTouchedCallback();
34078
+ if (this.ngControl && this.ngControl.invalid) {
34079
+ this.valid = IgxComboState.INVALID;
34080
+ }
34081
+ else {
34082
+ this.valid = IgxComboState.INITIAL;
34083
+ }
34084
+ }
34085
+ }
34086
+ /** if there is a valueKey - map the keys to data items, else - just return the keys */
34087
+ convertKeysToItems(keys) {
34088
+ if (this.comboAPI.valueKey === null) {
34089
+ return keys;
34090
+ }
34091
+ // map keys vs. filter data to retain the order of the selected items
34092
+ return keys.map(key => this.data.find(entry => entry[this.valueKey] === key)).filter(e => e !== undefined);
34093
+ }
34094
+ checkMatch() {
34095
+ const itemMatch = this.filteredData.some(this.findMatch);
34096
+ this.customValueFlag = this.allowCustomValues && !itemMatch;
34097
+ }
34098
+ manageRequiredAsterisk() {
34099
+ if (this.ngControl && this.ngControl.control.validator) {
34100
+ // Run the validation with empty object to check if required is enabled.
34101
+ const error = this.ngControl.control.validator({});
34102
+ this.inputGroup.isRequired = error && error.required;
34103
+ }
34104
+ }
34105
+ /** Contains key-value pairs of the selected valueKeys and their resp. displayKeys */
34106
+ registerRemoteEntries(ids, add = true) {
34107
+ if (add) {
34108
+ const selection = this.getValueDisplayPairs(ids);
34109
+ for (const entry of selection) {
34110
+ this._remoteSelection[entry[this.valueKey]] = entry[this.displayKey];
34111
+ }
34112
+ }
34113
+ else {
34114
+ for (const entry of ids) {
34115
+ delete this._remoteSelection[entry];
34116
+ }
34117
+ }
34118
+ }
34119
+ /**
34120
+ * For `id: any[]` returns a mapped `{ [combo.valueKey]: any, [combo.displayKey]: any }[]`
34121
+ */
34122
+ getValueDisplayPairs(ids) {
34123
+ return this.data.filter(entry => ids.indexOf(entry[this.valueKey]) > -1).map(e => ({
34124
+ [this.valueKey]: e[this.valueKey],
34125
+ [this.displayKey]: e[this.displayKey]
34126
+ }));
34127
+ }
34128
+ getRemoteSelection(newSelection, oldSelection) {
34129
+ if (!newSelection.length) {
34130
+ // If new selection is empty, clear all items
34131
+ this.registerRemoteEntries(oldSelection, false);
34132
+ return '';
34133
+ }
34134
+ const removedItems = oldSelection.filter(e => newSelection.indexOf(e) < 0);
34135
+ const addedItems = newSelection.filter(e => oldSelection.indexOf(e) < 0);
34136
+ this.registerRemoteEntries(addedItems);
34137
+ this.registerRemoteEntries(removedItems, false);
34138
+ return Object.keys(this._remoteSelection).map(e => this._remoteSelection[e]).join(', ');
34139
+ }
34140
+ }
34141
+ IgxComboBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboBaseDirective, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxSelectionAPIService }, { token: IgxComboAPIService }, { token: IgxIconService }, { token: DisplayDensityToken, optional: true }, { token: IGX_INPUT_GROUP_TYPE, optional: true }, { token: i0.Injector, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
34142
+ IgxComboBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboBaseDirective, inputs: { overlaySettings: "overlaySettings", id: "id", width: "width", allowCustomValues: "allowCustomValues", itemsMaxHeight: "itemsMaxHeight", itemHeight: "itemHeight", itemsWidth: "itemsWidth", placeholder: "placeholder", data: "data", valueKey: "valueKey", displayKey: "displayKey", groupKey: "groupKey", groupSortingDirection: "groupSortingDirection", ariaLabelledBy: "ariaLabelledBy", disabled: "disabled", type: "type" }, outputs: { selectionChanging: "selectionChanging", opening: "opening", opened: "opened", closing: "closing", closed: "closed", addition: "addition", searchInputUpdate: "searchInputUpdate", dataPreLoad: "dataPreLoad" }, host: { listeners: { "keydown.ArrowDown": "onArrowDown($event)", "keydown.Alt.ArrowDown": "onArrowDown($event)" }, properties: { "attr.id": "this.id", "style.width": "this.width", "attr.aria-labelledby": "this.ariaLabelledBy", "class.igx-combo": "this.cssClass", "attr.role": "this.role", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-haspopup": "this.hasPopUp", "attr.aria-owns": "this.ariaOwns" } }, queries: [{ propertyName: "itemTemplate", first: true, predicate: IgxComboItemDirective, descendants: true, read: TemplateRef }, { propertyName: "headerTemplate", first: true, predicate: IgxComboHeaderDirective, descendants: true, read: TemplateRef }, { propertyName: "footerTemplate", first: true, predicate: IgxComboFooterDirective, descendants: true, read: TemplateRef }, { propertyName: "headerItemTemplate", first: true, predicate: IgxComboHeaderItemDirective, descendants: true, read: TemplateRef }, { propertyName: "addItemTemplate", first: true, predicate: IgxComboAddItemDirective, descendants: true, read: TemplateRef }, { propertyName: "emptyTemplate", first: true, predicate: IgxComboEmptyDirective, descendants: true, read: TemplateRef }, { propertyName: "toggleIconTemplate", first: true, predicate: IgxComboToggleIconDirective, descendants: true, read: TemplateRef }, { propertyName: "clearIconTemplate", first: true, predicate: IgxComboClearIconDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "inputGroup", first: true, predicate: ["inputGroup"], descendants: true, read: IgxInputGroupComponent, static: true }, { propertyName: "comboInput", first: true, predicate: ["comboInput"], descendants: true, read: IgxInputDirective, static: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "virtualScrollContainer", first: true, predicate: IgxForOfDirective, descendants: true, static: true }, { propertyName: "virtDir", first: true, predicate: IgxForOfDirective, descendants: true, read: IgxForOfDirective, static: true }, { propertyName: "dropdownContainer", first: true, predicate: ["dropdownItemContainer"], descendants: true, static: true }, { propertyName: "primitiveTemplate", first: true, predicate: ["primitive"], descendants: true, read: TemplateRef, static: true }, { propertyName: "complexTemplate", first: true, predicate: ["complex"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0 });
34143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboBaseDirective, decorators: [{
34144
+ type: Directive
34145
+ }], ctorParameters: function () {
34146
+ return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: IgxComboAPIService }, { type: IgxIconService }, { type: undefined, decorators: [{
34147
+ type: Optional
34148
+ }, {
34149
+ type: Inject,
34150
+ args: [DisplayDensityToken]
34151
+ }] }, { type: undefined, decorators: [{
34152
+ type: Optional
34153
+ }, {
34154
+ type: Inject,
34155
+ args: [IGX_INPUT_GROUP_TYPE]
34156
+ }] }, { type: i0.Injector, decorators: [{
34157
+ type: Optional
34158
+ }] }];
34159
+ }, propDecorators: { overlaySettings: [{
34160
+ type: Input
34161
+ }], id: [{
34162
+ type: HostBinding,
34163
+ args: ['attr.id']
34164
+ }, {
34165
+ type: Input
34166
+ }], width: [{
34167
+ type: HostBinding,
34168
+ args: ['style.width']
34169
+ }, {
34170
+ type: Input
34171
+ }], allowCustomValues: [{
34172
+ type: Input
34173
+ }], itemsMaxHeight: [{
34174
+ type: Input
34175
+ }], itemHeight: [{
34176
+ type: Input
34177
+ }], itemsWidth: [{
34178
+ type: Input
34179
+ }], placeholder: [{
34180
+ type: Input
34181
+ }], data: [{
34182
+ type: Input
34183
+ }], valueKey: [{
34184
+ type: Input
34185
+ }], displayKey: [{
34186
+ type: Input
34187
+ }], groupKey: [{
34188
+ type: Input
34189
+ }], groupSortingDirection: [{
34190
+ type: Input
34191
+ }], ariaLabelledBy: [{
34192
+ type: Input
34193
+ }, {
34194
+ type: HostBinding,
34195
+ args: ['attr.aria-labelledby']
34196
+ }], cssClass: [{
34197
+ type: HostBinding,
34198
+ args: ['class.igx-combo']
34199
+ }], role: [{
34200
+ type: HostBinding,
34201
+ args: [`attr.role`]
34202
+ }], ariaExpanded: [{
34203
+ type: HostBinding,
34204
+ args: ['attr.aria-expanded']
34205
+ }], hasPopUp: [{
34206
+ type: HostBinding,
34207
+ args: ['attr.aria-haspopup']
34208
+ }], ariaOwns: [{
34209
+ type: HostBinding,
34210
+ args: ['attr.aria-owns']
34211
+ }], disabled: [{
34212
+ type: Input
34213
+ }], type: [{
34214
+ type: Input
34215
+ }], selectionChanging: [{
34216
+ type: Output
34217
+ }], opening: [{
34218
+ type: Output
34219
+ }], opened: [{
34220
+ type: Output
34221
+ }], closing: [{
34222
+ type: Output
34223
+ }], closed: [{
34224
+ type: Output
34225
+ }], addition: [{
34226
+ type: Output
34227
+ }], searchInputUpdate: [{
34228
+ type: Output
34229
+ }], dataPreLoad: [{
34230
+ type: Output
34231
+ }], itemTemplate: [{
34232
+ type: ContentChild,
34233
+ args: [IgxComboItemDirective, { read: TemplateRef }]
34234
+ }], headerTemplate: [{
34235
+ type: ContentChild,
34236
+ args: [IgxComboHeaderDirective, { read: TemplateRef }]
34237
+ }], footerTemplate: [{
34238
+ type: ContentChild,
34239
+ args: [IgxComboFooterDirective, { read: TemplateRef }]
34240
+ }], headerItemTemplate: [{
34241
+ type: ContentChild,
34242
+ args: [IgxComboHeaderItemDirective, { read: TemplateRef }]
34243
+ }], addItemTemplate: [{
34244
+ type: ContentChild,
34245
+ args: [IgxComboAddItemDirective, { read: TemplateRef }]
34246
+ }], emptyTemplate: [{
34247
+ type: ContentChild,
34248
+ args: [IgxComboEmptyDirective, { read: TemplateRef }]
34249
+ }], toggleIconTemplate: [{
34250
+ type: ContentChild,
34251
+ args: [IgxComboToggleIconDirective, { read: TemplateRef }]
34252
+ }], clearIconTemplate: [{
34253
+ type: ContentChild,
34254
+ args: [IgxComboClearIconDirective, { read: TemplateRef }]
34255
+ }], inputGroup: [{
34256
+ type: ViewChild,
34257
+ args: ['inputGroup', { read: IgxInputGroupComponent, static: true }]
34258
+ }], comboInput: [{
34259
+ type: ViewChild,
34260
+ args: ['comboInput', { read: IgxInputDirective, static: true }]
34261
+ }], searchInput: [{
34262
+ type: ViewChild,
34263
+ args: ['searchInput']
34264
+ }], virtualScrollContainer: [{
34265
+ type: ViewChild,
34266
+ args: [IgxForOfDirective, { static: true }]
34267
+ }], virtDir: [{
34268
+ type: ViewChild,
34269
+ args: [IgxForOfDirective, { read: IgxForOfDirective, static: true }]
34270
+ }], dropdownContainer: [{
34271
+ type: ViewChild,
34272
+ args: ['dropdownItemContainer', { static: true }]
34273
+ }], primitiveTemplate: [{
34274
+ type: ViewChild,
34275
+ args: ['primitive', { read: TemplateRef, static: true }]
34276
+ }], complexTemplate: [{
34277
+ type: ViewChild,
34278
+ args: ['complex', { read: TemplateRef, static: true }]
34279
+ }], onArrowDown: [{
34280
+ type: HostListener,
34281
+ args: ['keydown.ArrowDown', ['$event']]
34282
+ }, {
34283
+ type: HostListener,
34284
+ args: ['keydown.Alt.ArrowDown', ['$event']]
34285
+ }] } });
34286
+
34287
+ /**
34288
+ * @hidden
34289
+ */
34290
+ class IgxComboAddItemComponent extends IgxComboItemComponent {
34291
+ get selected() {
34292
+ return false;
34293
+ }
34294
+ set selected(value) {
34295
+ }
34296
+ /**
34297
+ * @inheritdoc
34298
+ */
34299
+ clicked(event) {
34300
+ this.comboAPI.disableTransitions = false;
34301
+ this.comboAPI.add_custom_item();
34302
+ }
34303
+ }
34304
+ IgxComboAddItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboAddItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
34305
+ IgxComboAddItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboAddItemComponent, selector: "igx-combo-add-item", providers: [{ provide: IgxComboItemComponent, useExisting: IgxComboAddItemComponent }], usesInheritance: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
34306
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboAddItemComponent, decorators: [{
34307
+ type: Component,
34308
+ args: [{
34309
+ selector: 'igx-combo-add-item',
34310
+ template: '<ng-content></ng-content>',
34311
+ providers: [{ provide: IgxComboItemComponent, useExisting: IgxComboAddItemComponent }]
34312
+ }]
34313
+ }] });
34314
+
34315
+ /** @hidden */
34316
+ class IgxComboDropDownComponent extends IgxDropDownComponent {
34317
+ constructor(elementRef, cdr, selection, combo, comboAPI, _displayDensityOptions) {
34318
+ super(elementRef, cdr, selection, _displayDensityOptions);
34319
+ this.elementRef = elementRef;
34320
+ this.cdr = cdr;
34321
+ this.selection = selection;
34322
+ this.combo = combo;
34323
+ this.comboAPI = comboAPI;
34324
+ this._displayDensityOptions = _displayDensityOptions;
34325
+ /** @hidden @internal */
34326
+ this.singleMode = false;
34327
+ /**
34328
+ * @hidden
34329
+ * @internal
34330
+ */
34331
+ this.children = null;
34332
+ this.scrollHandler = () => {
34333
+ this.comboAPI.disableTransitions = true;
34334
+ };
34335
+ }
34336
+ /** @hidden @internal */
34337
+ get scrollContainer() {
34338
+ return this.virtDir.dc.location.nativeElement;
34339
+ }
34340
+ get isScrolledToLast() {
34341
+ const scrollTop = this.virtDir.scrollPosition;
34342
+ const scrollHeight = this.virtDir.getScroll().scrollHeight;
34343
+ return Math.floor(scrollTop + this.virtDir.igxForContainerSize) === scrollHeight;
34344
+ }
34345
+ get lastVisibleIndex() {
34346
+ return this.combo.totalItemCount ?
34347
+ Math.floor(this.combo.itemsMaxHeight / this.combo.itemHeight) :
34348
+ this.items.length - 1;
34349
+ }
34350
+ get sortedChildren() {
34351
+ if (this.children !== undefined) {
34352
+ return this.children.toArray()
34353
+ .sort((a, b) => a.index - b.index);
34354
+ }
34355
+ return null;
34356
+ }
34357
+ /**
34358
+ * Get all non-header items
34359
+ *
34360
+ * ```typescript
34361
+ * let myDropDownItems = this.dropdown.items;
34362
+ * ```
34363
+ */
34364
+ get items() {
34365
+ const items = [];
34366
+ if (this.children !== undefined) {
34367
+ const sortedChildren = this.sortedChildren;
34368
+ for (const child of sortedChildren) {
34369
+ if (!child.isHeader) {
34370
+ items.push(child);
34371
+ }
34372
+ }
34373
+ }
34374
+ return items;
34375
+ }
34376
+ /**
34377
+ * @hidden @internal
34378
+ */
34379
+ onFocus() {
34380
+ this.focusedItem = this._focusedItem || this.items[0];
34381
+ }
34382
+ /**
34383
+ * @hidden @internal
34384
+ */
34385
+ onBlur(_evt) {
34386
+ this.focusedItem = null;
34387
+ }
34388
+ /**
34389
+ * @hidden @internal
34390
+ */
34391
+ onToggleOpened() {
34392
+ this.opened.emit();
34393
+ }
34394
+ /**
34395
+ * @hidden
34396
+ */
34397
+ navigateFirst() {
34398
+ this.navigateItem(this.virtDir.igxForOf.findIndex(e => !e.isHeader));
34399
+ }
34400
+ /**
34401
+ * @hidden
34402
+ */
34403
+ navigatePrev() {
34404
+ if (this._focusedItem && this._focusedItem.index === 0 && this.virtDir.state.startIndex === 0) {
34405
+ this.combo.focusSearchInput(false);
34406
+ }
34407
+ else {
34408
+ super.navigatePrev();
34409
+ }
34410
+ }
34411
+ /**
34412
+ * @hidden
34413
+ */
34414
+ navigateNext() {
34415
+ const lastIndex = this.combo.totalItemCount ? this.combo.totalItemCount - 1 : this.virtDir.igxForOf.length - 1;
34416
+ if (this._focusedItem && this._focusedItem.index === lastIndex) {
34417
+ this.focusAddItemButton();
34418
+ }
34419
+ else {
34420
+ super.navigateNext();
34421
+ }
34422
+ }
34423
+ /**
34424
+ * @hidden @internal
34425
+ */
34426
+ selectItem(item) {
34427
+ if (item === null || item === undefined) {
34428
+ return;
34429
+ }
34430
+ this.comboAPI.set_selected_item(item.itemID);
34431
+ this._focusedItem = item;
34432
+ }
34433
+ /**
34434
+ * @hidden @internal
34435
+ */
34436
+ updateScrollPosition() {
34437
+ this.virtDir.getScroll().scrollTop = this._scrollPosition;
34438
+ }
34439
+ /**
34440
+ * @hidden @internal
34441
+ */
34442
+ onItemActionKey(key) {
34443
+ switch (key) {
34444
+ case DropDownActionKey.ENTER:
34445
+ this.handleEnter();
34446
+ break;
34447
+ case DropDownActionKey.SPACE:
34448
+ this.handleSpace();
34449
+ break;
34450
+ case DropDownActionKey.ESCAPE:
34451
+ this.close();
34452
+ }
34453
+ }
34454
+ ngAfterViewInit() {
34455
+ this.virtDir.getScroll().addEventListener('scroll', this.scrollHandler);
34456
+ }
34457
+ /**
34458
+ * @hidden @internal
34459
+ */
34460
+ ngOnDestroy() {
34461
+ this.virtDir.getScroll().removeEventListener('scroll', this.scrollHandler);
34462
+ this.destroy$.next(true);
34463
+ this.destroy$.complete();
34464
+ }
34465
+ scrollToHiddenItem(_newItem) { }
34466
+ handleEnter() {
34467
+ if (this.isAddItemFocused()) {
34468
+ this.combo.addItemToCollection();
34469
+ return;
34470
+ }
34471
+ if (this.singleMode && this.focusedItem) {
34472
+ this.combo.select(this.focusedItem.itemID);
34473
+ }
34474
+ this.close();
34475
+ }
34476
+ handleSpace() {
34477
+ if (this.isAddItemFocused()) {
34478
+ return;
34479
+ }
34480
+ else {
34481
+ this.selectItem(this.focusedItem);
34482
+ }
34483
+ }
34484
+ isAddItemFocused() {
34485
+ return this.focusedItem instanceof IgxComboAddItemComponent;
34486
+ }
34487
+ focusAddItemButton() {
34488
+ if (this.combo.isAddButtonVisible()) {
34489
+ this.focusedItem = this.items[this.items.length - 1];
34490
+ }
34491
+ }
34492
+ }
34493
+ IgxComboDropDownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboDropDownComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxSelectionAPIService }, { token: IGX_COMBO_COMPONENT }, { token: IgxComboAPIService }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component });
34494
+ IgxComboDropDownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboDropDownComponent, selector: "igx-combo-drop-down", inputs: { singleMode: "singleMode" }, providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }], queries: [{ propertyName: "children", predicate: IgxComboItemComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"igx-drop-down__list\" [style.width]=\"width\"\nigxToggle\n(appended)=\"onToggleContentAppended($event)\"\n(opening)=\"onToggleOpening($event)\" (opened)=\"onToggleOpened()\"\n(closing)=\"onToggleClosing($event)\" (closed)=\"onToggleClosed()\">\n <div class=\"igx-drop-down__list-scroll\" #scrollContainer [attr.id]=\"this.listId\" role=\"listbox\" [attr.aria-label]=\"this.listId\"\n [style.height]=\"height\"\n [style.maxHeight]=\"maxHeight\">\n <ng-container *ngIf=\"!collapsed\">\n <ng-content></ng-content>\n </ng-container>\n </div>\n</div>\n", directives: [{ type: IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
34495
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboDropDownComponent, decorators: [{
34496
+ type: Component,
34497
+ args: [{ selector: 'igx-combo-drop-down', providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }], template: "<div class=\"igx-drop-down__list\" [style.width]=\"width\"\nigxToggle\n(appended)=\"onToggleContentAppended($event)\"\n(opening)=\"onToggleOpening($event)\" (opened)=\"onToggleOpened()\"\n(closing)=\"onToggleClosing($event)\" (closed)=\"onToggleClosed()\">\n <div class=\"igx-drop-down__list-scroll\" #scrollContainer [attr.id]=\"this.listId\" role=\"listbox\" [attr.aria-label]=\"this.listId\"\n [style.height]=\"height\"\n [style.maxHeight]=\"maxHeight\">\n <ng-container *ngIf=\"!collapsed\">\n <ng-content></ng-content>\n </ng-container>\n </div>\n</div>\n" }]
34498
+ }], ctorParameters: function () {
34499
+ return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: undefined, decorators: [{
34500
+ type: Inject,
34501
+ args: [IGX_COMBO_COMPONENT]
34502
+ }] }, { type: IgxComboAPIService }, { type: undefined, decorators: [{
34503
+ type: Optional
34504
+ }, {
34505
+ type: Inject,
34506
+ args: [DisplayDensityToken]
34507
+ }] }];
34508
+ }, propDecorators: { singleMode: [{
34509
+ type: Input
34510
+ }], children: [{
34511
+ type: ContentChildren,
34512
+ args: [IgxComboItemComponent, { descendants: true }]
34513
+ }] } });
34514
+
34515
+ /**
34516
+ * @hidden
34517
+ */
34518
+ class IgxComboFilteringPipe {
34519
+ transform(collection, searchValue, displayKey, filteringOptions, shouldFilter = false) {
34520
+ if (!collection) {
34521
+ return [];
34522
+ }
34523
+ if (!searchValue || !shouldFilter) {
34524
+ return collection;
34525
+ }
34526
+ else {
34527
+ const searchTerm = filteringOptions.caseSensitive ? searchValue.trim() : searchValue.toLowerCase().trim();
34528
+ if (displayKey != null) {
34529
+ return collection.filter(e => filteringOptions.caseSensitive ? e[displayKey].includes(searchTerm) :
34530
+ e[displayKey].toString().toLowerCase().includes(searchTerm));
34531
+ }
34532
+ else {
34533
+ return collection.filter(e => filteringOptions.caseSensitive ? e.includes(searchTerm) :
34534
+ e.toString().toLowerCase().includes(searchTerm));
34535
+ }
34536
+ }
34537
+ }
34538
+ }
34539
+ IgxComboFilteringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboFilteringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
34540
+ IgxComboFilteringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboFilteringPipe, name: "comboFiltering" });
34541
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboFilteringPipe, decorators: [{
34542
+ type: Pipe,
34543
+ args: [{
34544
+ name: 'comboFiltering'
34545
+ }]
34546
+ }] });
34547
+ /**
34548
+ * @hidden
34549
+ */
34550
+ class IgxComboGroupingPipe {
34551
+ constructor(combo) {
34552
+ this.combo = combo;
34553
+ }
34554
+ transform(collection, groupKey, valueKey, sortingDirection) {
34555
+ this.combo.filteredData = collection;
34556
+ if ((!groupKey && groupKey !== 0) || !collection.length) {
34557
+ return collection;
34558
+ }
34559
+ const sorted = DataUtil.sort(cloneArray(collection), [{
34560
+ fieldName: groupKey,
34561
+ dir: sortingDirection,
34562
+ ignoreCase: true,
34563
+ strategy: DefaultSortingStrategy.instance()
34564
+ }]);
34565
+ const data = cloneArray(sorted);
34566
+ let inserts = 0;
34567
+ let currentHeader = null;
34568
+ for (let i = 0; i < sorted.length; i++) {
34569
+ let insertFlag = 0;
34570
+ if (currentHeader !== sorted[i][groupKey]) {
34571
+ currentHeader = sorted[i][groupKey];
34572
+ insertFlag = 1;
34573
+ }
34574
+ if (insertFlag) {
34575
+ data.splice(i + inserts, 0, {
34576
+ [valueKey]: currentHeader,
34577
+ [groupKey]: currentHeader,
34578
+ isHeader: true
34579
+ });
34580
+ inserts++;
34581
+ }
34582
+ }
34583
+ return data;
34584
+ }
34585
+ }
34586
+ IgxComboGroupingPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboGroupingPipe, deps: [{ token: IGX_COMBO_COMPONENT }], target: i0.ɵɵFactoryTarget.Pipe });
34587
+ IgxComboGroupingPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboGroupingPipe, name: "comboGrouping" });
34588
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboGroupingPipe, decorators: [{
34589
+ type: Pipe,
34590
+ args: [{ name: 'comboGrouping' }]
34591
+ }], ctorParameters: function () {
34592
+ return [{ type: undefined, decorators: [{
34593
+ type: Inject,
34594
+ args: [IGX_COMBO_COMPONENT]
34595
+ }] }];
34596
+ } });
34597
+
34598
+ /**
34599
+ * When called with sets A & B, returns A - B (as array);
34600
+ *
34601
+ * @hidden
34602
+ */
34603
+ const diffInSets = (set1, set2) => {
34604
+ const results = [];
34605
+ set1.forEach(entry => {
34606
+ if (!set2.has(entry)) {
34607
+ results.push(entry);
34608
+ }
34609
+ });
34610
+ return results;
34611
+ };
34612
+ /**
34613
+ * Represents a drop-down list that provides editable functionalities, allowing users to choose an option from a predefined list.
34614
+ *
34615
+ * @igxModule IgxComboModule
34616
+ * @igxTheme igx-combo-theme
34617
+ * @igxKeywords combobox, combo selection
34618
+ * @igxGroup Grids & Lists
34619
+ *
34620
+ * @remarks
34621
+ * It provides the ability to filter items as well as perform selection with the provided data.
34622
+ * Additionally, it exposes keyboard navigation and custom styling capabilities.
34623
+ * @example
34624
+ * ```html
34625
+ * <igx-combo [itemsMaxHeight]="250" [data]="locationData"
34626
+ * [displayKey]="'field'" [valueKey]="'field'"
34627
+ * placeholder="Location(s)" searchPlaceholder="Search...">
34628
+ * </igx-combo>
34629
+ * ```
34630
+ */
34631
+ class IgxComboComponent extends IgxComboBaseDirective {
34632
+ constructor(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector) {
34633
+ super(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector);
34634
+ this.elementRef = elementRef;
34635
+ this.cdr = cdr;
34636
+ this.selectionService = selectionService;
34637
+ this.comboAPI = comboAPI;
34638
+ this._iconService = _iconService;
34639
+ this._displayDensityOptions = _displayDensityOptions;
34640
+ this._inputGroupType = _inputGroupType;
34641
+ this._injector = _injector;
34642
+ /**
34643
+ * Defines whether the caseSensitive icon should be shown in the search input
34644
+ *
34645
+ * ```typescript
34646
+ * // get
34647
+ * let myComboShowSearchCaseIcon = this.combo.showSearchCaseIcon;
34648
+ * ```
34649
+ *
34650
+ * ```html
34651
+ * <!--set-->
34652
+ * <igx-combo [showSearchCaseIcon]='true'></igx-combo>
34653
+ * ```
34654
+ */
34655
+ this.showSearchCaseIcon = false;
34656
+ /**
34657
+ * An @Input property that controls whether the combo's search box
34658
+ * should be focused after the `opened` event is called
34659
+ * When `false`, the combo's list item container will be focused instead
34660
+ */
34661
+ this.autoFocusSearch = true;
34662
+ /**
34663
+ * An @Input property that enabled/disables filtering in the list. The default is `true`.
34664
+ * ```html
34665
+ * <igx-combo [filterable]="false">
34666
+ * ```
34667
+ */
34668
+ this.filterable = true;
34669
+ /**
34670
+ * Defines the placeholder value for the combo dropdown search field
34671
+ *
34672
+ * ```typescript
34673
+ * // get
34674
+ * let myComboSearchPlaceholder = this.combo.searchPlaceholder;
34675
+ * ```
34676
+ *
34677
+ * ```html
34678
+ * <!--set-->
34679
+ * <igx-combo [searchPlaceholder]='newPlaceHolder'></igx-combo>
34680
+ * ```
34681
+ */
34682
+ this.searchPlaceholder = 'Enter a Search Term';
34683
+ /**
34684
+ * @hidden @internal
34685
+ */
34686
+ this.filteringLogic = FilteringLogic.Or;
34687
+ this.stringFilters = IgxStringFilteringOperand;
34688
+ this.booleanFilters = IgxBooleanFilteringOperand;
34689
+ this._prevInputValue = '';
34690
+ this.comboAPI.register(this);
34691
+ }
34692
+ /**
34693
+ * @hidden @internal
34694
+ */
34695
+ get inputEmpty() {
34696
+ return !this.value && !this.placeholder;
34697
+ }
34698
+ /** @hidden @internal */
34699
+ get filteredData() {
34700
+ return this.filterable ? this._filteredData : this.data;
34701
+ }
34702
+ /** @hidden @internal */
34703
+ set filteredData(val) {
34704
+ this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;
34281
34705
  this.checkMatch();
34282
34706
  }
34707
+ /** @hidden @internal */
34708
+ get displaySearchInput() {
34709
+ return this.filterable || this.allowCustomValues;
34710
+ }
34283
34711
  /**
34284
34712
  * @hidden @internal
34285
34713
  */
34286
34714
  handleKeyUp(event) {
34715
+ // TODO: use PlatformUtil for keyboard navigation
34287
34716
  if (event.key === 'ArrowDown' || event.key === 'Down') {
34288
34717
  this.dropdown.focusedItem = this.dropdown.items[0];
34289
34718
  this.dropdownContainer.nativeElement.focus();
@@ -34292,72 +34721,6 @@ class IgxComboComponent extends DisplayDensityBase {
34292
34721
  this.toggle();
34293
34722
  }
34294
34723
  }
34295
- /**
34296
- * @hidden @internal
34297
- */
34298
- handleKeyDown(event) {
34299
- if (event.key === 'ArrowUp' || event.key === 'Up') {
34300
- event.preventDefault();
34301
- event.stopPropagation();
34302
- this.close();
34303
- }
34304
- }
34305
- /**
34306
- * @hidden @internal
34307
- */
34308
- handleInputChange(event) {
34309
- if (event !== undefined) {
34310
- const args = {
34311
- searchText: event,
34312
- owner: this,
34313
- cancel: false
34314
- };
34315
- this.searchInputUpdate.emit(args);
34316
- if (args.cancel) {
34317
- this.filterValue = null;
34318
- }
34319
- }
34320
- this.checkMatch();
34321
- }
34322
- /**
34323
- * @hidden @internal
34324
- */
34325
- get dataType() {
34326
- if (this.displayKey) {
34327
- return DataTypes.COMPLEX;
34328
- }
34329
- return DataTypes.PRIMITIVE;
34330
- }
34331
- /**
34332
- * @hidden @internal
34333
- */
34334
- get isRemote() {
34335
- return this.totalItemCount > 0 &&
34336
- this.valueKey &&
34337
- this.dataType === DataTypes.COMPLEX;
34338
- }
34339
- /**
34340
- * Returns if the specified itemID is selected
34341
- *
34342
- * @hidden
34343
- * @internal
34344
- */
34345
- isItemSelected(item) {
34346
- return this.selection.is_item_selected(this.id, item);
34347
- }
34348
- /**
34349
- * Triggers change detection on the combo view
34350
- */
34351
- triggerCheck() {
34352
- this.cdr.detectChanges();
34353
- }
34354
- /**
34355
- * @hidden @internal
34356
- */
34357
- isAddButtonVisible() {
34358
- // This should always return a boolean value. If this.searchValue was '', it returns '' instead of false;
34359
- return this.searchValue !== '' && this.customValueFlag;
34360
- }
34361
34724
  /**
34362
34725
  * @hidden @internal
34363
34726
  */
@@ -34369,140 +34732,15 @@ class IgxComboComponent extends DisplayDensityBase {
34369
34732
  this.deselectAllItems();
34370
34733
  }
34371
34734
  }
34372
- /**
34373
- * @hidden @internal
34374
- */
34375
- addItemToCollection() {
34376
- if (!this.searchValue) {
34377
- return;
34378
- }
34379
- const newValue = this.searchValue.trim();
34380
- const addedItem = this.displayKey ? {
34381
- [this.valueKey]: newValue,
34382
- [this.displayKey]: newValue
34383
- } : newValue;
34384
- if (this.groupKey) {
34385
- Object.assign(addedItem, { [this.groupKey]: this.defaultFallbackGroup });
34386
- }
34387
- // expose shallow copy instead of this.data in event args so this.data can't be mutated
34388
- const oldCollection = [...this.data];
34389
- const newCollection = [...this.data, addedItem];
34390
- const args = {
34391
- oldCollection, addedItem, newCollection, owner: this, cancel: false
34392
- };
34393
- this.addition.emit(args);
34394
- if (args.cancel) {
34395
- return;
34396
- }
34397
- this.data.push(args.addedItem);
34398
- // trigger re-render
34399
- this.data = cloneArray(this.data);
34400
- this.selectItems(this.valueKey !== null && this.valueKey !== undefined ?
34401
- [args.addedItem[this.valueKey]] : [args.addedItem], false);
34402
- this.customValueFlag = false;
34403
- this.searchInput.nativeElement.focus();
34404
- this.dropdown.focusedItem = null;
34405
- this.virtDir.scrollTo(0);
34406
- }
34407
- /**
34408
- * @hidden @internal
34409
- */
34410
- focusSearchInput(opening) {
34411
- if (this.displaySearchInput && this.searchInput) {
34412
- this.searchInput.nativeElement.focus();
34413
- }
34414
- else {
34415
- if (opening) {
34416
- this.dropdownContainer.nativeElement.focus();
34417
- }
34418
- else {
34419
- this.comboInput.nativeElement.focus();
34420
- this.toggle();
34421
- }
34422
- }
34423
- }
34424
- /**
34425
- * @hidden @internal
34426
- */
34427
- onBlur() {
34428
- if (this.collapsed) {
34429
- this._onTouchedCallback();
34430
- if (this.ngControl && this.ngControl.invalid) {
34431
- this.valid = IgxComboState.INVALID;
34432
- }
34433
- else {
34434
- this.valid = IgxComboState.INITIAL;
34435
- }
34436
- }
34437
- }
34438
- /**
34439
- * @hidden @internal
34440
- */
34441
- ngOnInit() {
34442
- this.ngControl = this._injector.get(NgControl, null);
34443
- const targetElement = this.elementRef.nativeElement;
34444
- this._overlaySettings = {
34445
- target: targetElement,
34446
- scrollStrategy: new AbsoluteScrollStrategy(),
34447
- positionStrategy: new AutoPositionStrategy(),
34448
- modal: false,
34449
- closeOnOutsideClick: true,
34450
- excludeFromOutsideClick: [targetElement]
34451
- };
34452
- this.selection.set(this.id, new Set());
34453
- this._iconService.addSvgIconFromText(caseSensitive.name, caseSensitive.value, 'imx-icons');
34454
- }
34455
- /**
34456
- * @hidden @internal
34457
- */
34458
- ngAfterViewInit() {
34459
- this.filteredData = [...this.data];
34460
- if (this.ngControl) {
34461
- this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.onStatusChanged);
34462
- this.manageRequiredAsterisk();
34463
- this.cdr.detectChanges();
34464
- }
34465
- this.virtDir.chunkPreload.pipe(takeUntil(this.destroy$)).subscribe((e) => {
34466
- const eventArgs = Object.assign({}, e, { owner: this });
34467
- this.dataPreLoad.emit(eventArgs);
34468
- });
34469
- }
34470
- /**
34471
- * @hidden @internal
34472
- */
34473
- ngOnDestroy() {
34474
- this.destroy$.next();
34475
- this.destroy$.complete();
34476
- this.comboAPI.clear();
34477
- this.selection.clear(this.id);
34478
- }
34479
34735
  /**
34480
34736
  * @hidden @internal
34481
34737
  */
34482
34738
  writeValue(value) {
34483
34739
  const selection = Array.isArray(value) ? value : [];
34484
- const oldSelection = this.selectedItems();
34485
- this.selection.select_items(this.id, selection, true);
34740
+ const oldSelection = this.selection;
34741
+ this.selectionService.select_items(this.id, selection, true);
34486
34742
  this.cdr.markForCheck();
34487
- this._value = this.createDisplayText(this.selectedItems(), oldSelection);
34488
- }
34489
- /**
34490
- * @hidden @internal
34491
- */
34492
- registerOnChange(fn) {
34493
- this._onChangeCallback = fn;
34494
- }
34495
- /**
34496
- * @hidden @internal
34497
- */
34498
- registerOnTouched(fn) {
34499
- this._onTouchedCallback = fn;
34500
- }
34501
- /**
34502
- * @hidden @internal
34503
- */
34504
- setDisabledState(isDisabled) {
34505
- this.disabled = isDisabled;
34743
+ this._value = this.createDisplayText(this.selection, oldSelection);
34506
34744
  }
34507
34745
  /**
34508
34746
  * @hidden
@@ -34510,19 +34748,6 @@ class IgxComboComponent extends DisplayDensityBase {
34510
34748
  getEditElement() {
34511
34749
  return this.comboInput.nativeElement;
34512
34750
  }
34513
- /**
34514
- * @hidden @internal
34515
- */
34516
- get template() {
34517
- this._dataType = this.dataType;
34518
- if (this.itemTemplate) {
34519
- return this.itemTemplate;
34520
- }
34521
- if (this._dataType === DataTypes.COMPLEX) {
34522
- return this.complexTemplate;
34523
- }
34524
- return this.primitiveTemplate;
34525
- }
34526
34751
  /**
34527
34752
  * @hidden @internal
34528
34753
  */
@@ -34547,75 +34772,18 @@ class IgxComboComponent extends DisplayDensityBase {
34547
34772
  }
34548
34773
  event.stopPropagation();
34549
34774
  }
34550
- /**
34551
- * A method that opens/closes the combo.
34552
- *
34553
- * ```html
34554
- * <button (click)="combo.toggle()">Toggle Combo</button>
34555
- * <igx-combo #combo></igx-combo>
34556
- * ```
34557
- */
34558
- toggle() {
34559
- const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);
34560
- this.dropdown.toggle(overlaySettings);
34561
- }
34562
- /**
34563
- * A method that opens the combo.
34564
- *
34565
- * ```html
34566
- * <button (click)="combo.open()">Open Combo</button>
34567
- * <igx-combo #combo></igx-combo>
34568
- * ```
34569
- */
34570
- open() {
34571
- const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);
34572
- this.dropdown.open(overlaySettings);
34573
- }
34574
- /**
34575
- * A method that closes the combo.
34576
- *
34577
- * ```html
34578
- * <button (click)="combo.close()">Close Combo</button>
34579
- * <igx-combo #combo></igx-combo>
34580
- * ```
34581
- */
34582
- close() {
34583
- this.dropdown.close();
34584
- }
34585
- /**
34586
- * Gets drop down state.
34587
- *
34588
- * ```typescript
34589
- * let state = this.combo.collapsed;
34590
- * ```
34591
- */
34592
- get collapsed() {
34593
- return this.dropdown.collapsed;
34594
- }
34595
- /**
34596
- * Get current selection state
34597
- *
34598
- * @returns Array of selected items
34599
- * ```typescript
34600
- * let selectedItems = this.combo.selectedItems();
34601
- * ```
34602
- */
34603
- selectedItems() {
34604
- const items = Array.from(this.selection.get(this.id));
34605
- return items;
34606
- }
34607
34775
  /**
34608
34776
  * Select defined items
34609
34777
  *
34610
34778
  * @param newItems new items to be selected
34611
34779
  * @param clearCurrentSelection if true clear previous selected items
34612
34780
  * ```typescript
34613
- * this.combo.selectItems(["New York", "New Jersey"]);
34781
+ * this.combo.select(["New York", "New Jersey"]);
34614
34782
  * ```
34615
34783
  */
34616
- selectItems(newItems, clearCurrentSelection, event) {
34784
+ select(newItems, clearCurrentSelection, event) {
34617
34785
  if (newItems) {
34618
- const newSelection = this.selection.add_items(this.id, newItems, clearCurrentSelection);
34786
+ const newSelection = this.selectionService.add_items(this.id, newItems, clearCurrentSelection);
34619
34787
  this.setSelection(newSelection, event);
34620
34788
  }
34621
34789
  }
@@ -34624,12 +34792,12 @@ class IgxComboComponent extends DisplayDensityBase {
34624
34792
  *
34625
34793
  * @param items items to deselected
34626
34794
  * ```typescript
34627
- * this.combo.deselectItems(["New York", "New Jersey"]);
34795
+ * this.combo.deselect(["New York", "New Jersey"]);
34628
34796
  * ```
34629
34797
  */
34630
- deselectItems(items, event) {
34798
+ deselect(items, event) {
34631
34799
  if (items) {
34632
- const newSelection = this.selection.delete_items(this.id, items);
34800
+ const newSelection = this.selectionService.delete_items(this.id, items);
34633
34801
  this.setSelection(newSelection, event);
34634
34802
  }
34635
34803
  }
@@ -34642,8 +34810,8 @@ class IgxComboComponent extends DisplayDensityBase {
34642
34810
  * ```
34643
34811
  */
34644
34812
  selectAllItems(ignoreFilter, event) {
34645
- const allVisible = this.selection.get_all_ids(ignoreFilter ? this.data : this.filteredData, this.valueKey);
34646
- const newSelection = this.selection.add_items(this.id, allVisible);
34813
+ const allVisible = this.selectionService.get_all_ids(ignoreFilter ? this.data : this.filteredData, this.valueKey);
34814
+ const newSelection = this.selectionService.add_items(this.id, allVisible);
34647
34815
  this.setSelection(newSelection, event);
34648
34816
  }
34649
34817
  /**
@@ -34655,9 +34823,9 @@ class IgxComboComponent extends DisplayDensityBase {
34655
34823
  * ```
34656
34824
  */
34657
34825
  deselectAllItems(ignoreFilter, event) {
34658
- let newSelection = this.selection.get_empty();
34826
+ let newSelection = this.selectionService.get_empty();
34659
34827
  if (this.filteredData.length !== this.data.length && !ignoreFilter) {
34660
- newSelection = this.selection.delete_items(this.id, this.selection.get_all_ids(this.filteredData, this.valueKey));
34828
+ newSelection = this.selectionService.delete_items(this.id, this.selectionService.get_all_ids(this.filteredData, this.valueKey));
34661
34829
  }
34662
34830
  this.setSelection(newSelection, event);
34663
34831
  }
@@ -34685,26 +34853,19 @@ class IgxComboComponent extends DisplayDensityBase {
34685
34853
  return;
34686
34854
  }
34687
34855
  if (select) {
34688
- this.selectItems([itemID], false, event);
34856
+ this.select([itemID], false, event);
34689
34857
  }
34690
34858
  else {
34691
- this.deselectItems([itemID], event);
34859
+ this.deselect([itemID], event);
34692
34860
  }
34693
34861
  }
34694
- /**
34695
- * Event handlers
34696
- *
34697
- * @hidden
34698
- * @internal
34699
- */
34700
- handleOpening(e) {
34701
- const args = { owner: this, event: e.event, cancel: e.cancel };
34702
- this.opening.emit(args);
34703
- e.cancel = args.cancel;
34704
- }
34705
34862
  /**
34706
34863
  * @hidden @internal
34707
34864
  */
34865
+ toggleCaseSensitive() {
34866
+ this.filteringOptions = { caseSensitive: !this.filteringOptions.caseSensitive };
34867
+ }
34868
+ /** @hidden @internal */
34708
34869
  handleOpened() {
34709
34870
  this.triggerCheck();
34710
34871
  // Disabling focus of the search input should happen only when drop down opens.
@@ -34718,36 +34879,26 @@ class IgxComboComponent extends DisplayDensityBase {
34718
34879
  }
34719
34880
  this.opened.emit({ owner: this });
34720
34881
  }
34721
- /**
34722
- * @hidden @internal
34723
- */
34724
- handleClosing(e) {
34725
- const args = { owner: this, event: e.event, cancel: e.cancel };
34726
- this.closing.emit(args);
34727
- e.cancel = args.cancel;
34728
- if (e.cancel) {
34729
- return;
34882
+ /** @hidden @internal */
34883
+ focusSearchInput(opening) {
34884
+ if (this.displaySearchInput && this.searchInput) {
34885
+ this.searchInput.nativeElement.focus();
34886
+ }
34887
+ else {
34888
+ if (opening) {
34889
+ this.dropdownContainer.nativeElement.focus();
34890
+ }
34891
+ else {
34892
+ this.comboInput.nativeElement.focus();
34893
+ this.toggle();
34894
+ }
34730
34895
  }
34731
- this.searchValue = '';
34732
- this.comboInput.nativeElement.focus();
34733
- }
34734
- /**
34735
- * @hidden @internal
34736
- */
34737
- handleClosed() {
34738
- this.closed.emit({ owner: this });
34739
- }
34740
- /**
34741
- * @hidden @internal
34742
- */
34743
- toggleCaseSensitive() {
34744
- this.filteringOptions = { caseSensitive: !this.filteringOptions.caseSensitive };
34745
34896
  }
34746
34897
  setSelection(newSelection, event) {
34747
- const removed = diffInSets(this.selection.get(this.id), newSelection);
34748
- const added = diffInSets(newSelection, this.selection.get(this.id));
34898
+ const removed = diffInSets(this.selectionService.get(this.id), newSelection);
34899
+ const added = diffInSets(newSelection, this.selectionService.get(this.id));
34749
34900
  const newSelectionAsArray = Array.from(newSelection);
34750
- const oldSelectionAsArray = Array.from(this.selection.get(this.id) || []);
34901
+ const oldSelectionAsArray = Array.from(this.selectionService.get(this.id) || []);
34751
34902
  const displayText = this.createDisplayText(newSelectionAsArray, oldSelectionAsArray);
34752
34903
  const args = {
34753
34904
  newSelection: newSelectionAsArray,
@@ -34761,7 +34912,7 @@ class IgxComboComponent extends DisplayDensityBase {
34761
34912
  };
34762
34913
  this.selectionChanging.emit(args);
34763
34914
  if (!args.cancel) {
34764
- this.selection.select_items(this.id, args.newSelection, true);
34915
+ this.selectionService.select_items(this.id, args.newSelection, true);
34765
34916
  if (displayText !== args.displayText) {
34766
34917
  this._value = args.displayText;
34767
34918
  }
@@ -34771,44 +34922,10 @@ class IgxComboComponent extends DisplayDensityBase {
34771
34922
  this._onChangeCallback(args.newSelection);
34772
34923
  }
34773
34924
  }
34774
- manageRequiredAsterisk() {
34775
- if (this.ngControl && this.ngControl.control.validator) {
34776
- // Run the validation with empty object to check if required is enabled.
34777
- const error = this.ngControl.control.validator({});
34778
- this.inputGroup.isRequired = error && error.required;
34779
- }
34780
- }
34781
- /** Contains key-value pairs of the selected valueKeys and their resp. displayKeys */
34782
- registerRemoteEntries(ids, add = true) {
34783
- if (add) {
34784
- const selection = this.getValueDisplayPairs(ids);
34785
- for (const entry of selection) {
34786
- this._remoteSelection[entry[this.valueKey]] = entry[this.displayKey];
34787
- }
34788
- }
34789
- else {
34790
- for (const entry of ids) {
34791
- delete this._remoteSelection[entry];
34792
- }
34793
- }
34794
- }
34795
- /**
34796
- * For `id: any[]` returns a mapped `{ [combo.valueKey]: any, [combo.displayKey]: any }[]`
34797
- */
34798
- getValueDisplayPairs(ids) {
34799
- return this.data.filter(entry => ids.indexOf(entry[this.valueKey]) > -1).map(e => ({
34800
- [this.valueKey]: e[this.valueKey],
34801
- [this.displayKey]: e[this.displayKey]
34802
- }));
34803
- }
34804
- checkMatch() {
34805
- const displayKey = this.displayKey;
34806
- const matchFn = (e) => {
34807
- const value = displayKey ? e[displayKey] : e;
34808
- return value.toString().toLowerCase() === this.searchValue.trim().toLowerCase();
34809
- };
34810
- const itemMatch = this.filteredData.some(matchFn);
34811
- this.customValueFlag = this.allowCustomValues && !itemMatch;
34925
+ createDisplayText(newSelection, oldSelection) {
34926
+ return this.isRemote
34927
+ ? this.getRemoteSelection(newSelection, oldSelection)
34928
+ : this.concatDisplayText(newSelection);
34812
34929
  }
34813
34930
  /** Returns a string that should be populated in the combo's text box */
34814
34931
  concatDisplayText(selection) {
@@ -34817,53 +34934,20 @@ class IgxComboComponent extends DisplayDensityBase {
34817
34934
  selection.join(', ');
34818
34935
  return value;
34819
34936
  }
34820
- /**
34821
- * Constructs the combo display value
34822
- * If remote, caches the key displayText
34823
- * If not, just combine the object.displayKeys
34824
- */
34825
- createDisplayText(newSelection, oldSelection) {
34826
- let value = '';
34827
- if (this.isRemote) {
34828
- if (newSelection.length) {
34829
- const removedItems = oldSelection.filter(e => newSelection.indexOf(e) < 0);
34830
- const addedItems = newSelection.filter(e => oldSelection.indexOf(e) < 0);
34831
- this.registerRemoteEntries(addedItems);
34832
- this.registerRemoteEntries(removedItems, false);
34833
- value = Object.keys(this._remoteSelection).map(e => this._remoteSelection[e]).join(', ');
34834
- }
34835
- else {
34836
- // If new selection is empty, clear all items
34837
- this.registerRemoteEntries(oldSelection, false);
34838
- }
34839
- }
34840
- else {
34841
- value = this.concatDisplayText(newSelection);
34842
- }
34843
- return value;
34844
- }
34845
- /** if there is a valueKey - map the keys to data items, else - just return the keys */
34846
- convertKeysToItems(keys) {
34847
- if (this.comboAPI.valueKey === null) {
34848
- return keys;
34849
- }
34850
- // map keys vs. filter data to retain the order of the selected items
34851
- return keys.map(key => this.data.find(entry => entry[this.valueKey] === key)).filter(e => e !== undefined);
34852
- }
34853
34937
  }
34854
34938
  IgxComboComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxSelectionAPIService }, { token: IgxComboAPIService }, { token: IgxIconService }, { token: DisplayDensityToken, optional: true }, { token: IGX_INPUT_GROUP_TYPE, optional: true }, { token: i0.Injector, optional: true }], target: i0.ɵɵFactoryTarget.Component });
34855
- IgxComboComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboComponent, selector: "igx-combo", inputs: { overlaySettings: "overlaySettings", id: "id", width: "width", allowCustomValues: "allowCustomValues", itemsMaxHeight: "itemsMaxHeight", itemsWidth: "itemsWidth", itemHeight: "itemHeight", placeholder: "placeholder", searchPlaceholder: "searchPlaceholder", showSearchCaseIcon: "showSearchCaseIcon", data: "data", valueKey: "valueKey", displayKey: "displayKey", groupKey: "groupKey", filterable: "filterable", groupSortingDirection: "groupSortingDirection", ariaLabelledBy: "ariaLabelledBy", disabled: "disabled", type: "type", autoFocusSearch: "autoFocusSearch" }, outputs: { selectionChanging: "selectionChanging", opening: "opening", opened: "opened", closing: "closing", closed: "closed", addition: "addition", searchInputUpdate: "searchInputUpdate", dataPreLoad: "dataPreLoad" }, host: { listeners: { "keydown.ArrowDown": "onArrowDown($event)", "keydown.Alt.ArrowDown": "onArrowDown($event)" }, properties: { "attr.id": "this.id", "style.width": "this.width", "class.igx-combo": "this.cssClass", "attr.role": "this.role", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-haspopup": "this.hasPopUp", "attr.aria-owns": "this.ariaOwns", "attr.aria-labelledby": "this.ariaLabelledBy" } }, providers: [
34939
+ IgxComboComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboComponent, selector: "igx-combo", inputs: { showSearchCaseIcon: "showSearchCaseIcon", autoFocusSearch: "autoFocusSearch", filterable: "filterable", searchPlaceholder: "searchPlaceholder" }, providers: [
34856
34940
  IgxComboAPIService,
34857
34941
  { provide: IGX_COMBO_COMPONENT, useExisting: IgxComboComponent },
34858
34942
  { provide: NG_VALUE_ACCESSOR, useExisting: IgxComboComponent, multi: true }
34859
- ], queries: [{ propertyName: "itemTemplate", first: true, predicate: IgxComboItemDirective, descendants: true, read: TemplateRef }, { propertyName: "headerTemplate", first: true, predicate: IgxComboHeaderDirective, descendants: true, read: TemplateRef }, { propertyName: "footerTemplate", first: true, predicate: IgxComboFooterDirective, descendants: true, read: TemplateRef }, { propertyName: "headerItemTemplate", first: true, predicate: IgxComboHeaderItemDirective, descendants: true, read: TemplateRef }, { propertyName: "addItemTemplate", first: true, predicate: IgxComboAddItemDirective, descendants: true, read: TemplateRef }, { propertyName: "emptyTemplate", first: true, predicate: IgxComboEmptyDirective, descendants: true, read: TemplateRef }, { propertyName: "toggleIconTemplate", first: true, predicate: IgxComboToggleIconDirective, descendants: true, read: TemplateRef }, { propertyName: "clearIconTemplate", first: true, predicate: IgxComboClearIconDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "inputGroup", first: true, predicate: ["inputGroup"], descendants: true, read: IgxInputGroupComponent, static: true }, { propertyName: "comboInput", first: true, predicate: ["comboInput"], descendants: true, read: IgxInputDirective, static: true }, { propertyName: "dropdown", first: true, predicate: IgxComboDropDownComponent, descendants: true, read: IgxComboDropDownComponent, static: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "virtualScrollContainer", first: true, predicate: IgxForOfDirective, descendants: true, static: true }, { propertyName: "dropdownContainer", first: true, predicate: ["dropdownItemContainer"], descendants: true, static: true }, { propertyName: "primitiveTemplate", first: true, predicate: ["primitive"], descendants: true, read: TemplateRef, static: true }, { propertyName: "complexTemplate", first: true, predicate: ["complex"], descendants: true, read: TemplateRef, static: true }, { propertyName: "virtDir", first: true, predicate: IgxForOfDirective, descendants: true, read: IgxForOfDirective, static: true }], usesInheritance: true, ngImport: i0, template: "<igx-input-group #inputGroup [displayDensity]=\"displayDensity\" [type]=\"type\" (click)=\"onInputClick($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]=\"value\" readonly [attr.placeholder]=\"placeholder\"\n [disabled]=\"disabled\" (blur)=\"onBlur()\" />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix\"></ng-content>\n </ng-container>\n <igx-suffix *ngIf=\"value.length\" aria-label=\"Clear Selection\" 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\">\n clear\n </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: this.collapsed}\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!toggleIconTemplate\">\n {{ dropdown.collapsed ? 'arrow_drop_down' : 'arrow_drop_up'}}\n </igx-icon>\n </igx-suffix>\n</igx-input-group>\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\" [displayDensity]=\"displayDensity\"\n [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n (opened)=\"handleOpened()\" (closed)=\"handleClosed()\">\n <igx-input-group *ngIf=\"displaySearchInput\" [displayDensity]=\"displayDensity\" theme=\"material\" class=\"igx-combo__search\">\n <input class=\"igx-combo-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]=\"searchPlaceholder\"\n aria-autocomplete=\"both\" [attr.aria-owns]=\"dropdown.id\" [attr.aria-labelledby]=\"ariaLabelledBy\" />\n <igx-suffix *ngIf=\"showSearchCaseIcon\">\n <igx-icon family=\"imx-icons\" name=\"case-sensitive\" [active]=\"filteringOptions.caseSensitive\"\n (click)=\"toggleCaseSensitive()\">\n </igx-icon>\n </igx-suffix>\n </igx-input-group>\n <ng-container *ngTemplateOutlet=\"headerTemplate\">\n </ng-container>\n <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n [style.maxHeight.px]=\"itemsMaxHeight\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n [tabindex]=\"dropdown.collapsed ? -1 : 0\" role=\"listbox\" [attr.id]=\"dropdown.id\">\n <igx-combo-item role=\"option\" [itemHeight]='itemHeight' *igxFor=\"let item of data\n | comboFiltering:filterValue:displayKey:filterable:filteringOptions\n | comboGrouping:groupKey:valueKey:groupSortingDirection;\n index as rowIndex; containerSize: itemsMaxHeight; scrollOrientation: 'vertical'; itemSize: itemHeight\"\n [value]=\"item\" [isHeader]=\"item.isHeader\" [index]=\"rowIndex\">\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 <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 aria-label=\"Add Item\" [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>The list is empty</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n <button igxButton=\"flat\" igxRipple>Add item</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n {{ item[key] }}\n</ng-template>\n", components: [{ type: i0.forwardRef(function () { return IgxInputGroupComponent; }), selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { type: i0.forwardRef(function () { return IgxIconComponent; }), selector: "igx-icon", inputs: ["family", "active", "name"] }, { type: i0.forwardRef(function () { return IgxComboDropDownComponent; }), selector: "igx-combo-drop-down" }, { type: i0.forwardRef(function () { return IgxComboItemComponent; }), selector: "igx-combo-item", inputs: ["itemHeight"] }, { type: i0.forwardRef(function () { return IgxComboAddItemComponent; }), selector: "igx-combo-add-item" }], directives: [{ type: i0.forwardRef(function () { return IgxInputDirective; }), selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { type: i0.forwardRef(function () { return i4.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return IgxSuffixDirective; }), selector: "igx-suffix,[igxSuffix]" }, { type: i0.forwardRef(function () { return i4.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i0.forwardRef(function () { return i12.DefaultValueAccessor; }), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i0.forwardRef(function () { return i12.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { type: i0.forwardRef(function () { return i12.NgModel; }), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i0.forwardRef(function () { return IgxDropDownItemNavigationDirective; }), selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { type: i0.forwardRef(function () { return IgxForOfDirective; }), selector: "[igxFor][igxForOf]", inputs: ["igxForOf", "igxForSizePropName", "igxForScrollOrientation", "igxForScrollContainer", "igxForContainerSize", "igxForItemSize", "igxForTotalItemCount", "igxForTrackBy"], outputs: ["chunkLoad", "scrollbarVisibilityChanged", "contentSizeChange", "dataChanged", "beforeViewDestroyed", "chunkPreload"] }, { type: i0.forwardRef(function () { return IgxButtonDirective; }), selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: i0.forwardRef(function () { return IgxRippleDirective; }), selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }], pipes: { "comboGrouping": i0.forwardRef(function () { return IgxComboGroupingPipe; }), "comboFiltering": i0.forwardRef(function () { return IgxComboFilteringPipe; }) } });
34943
+ ], viewQueries: [{ propertyName: "dropdown", first: true, predicate: IgxComboDropDownComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<igx-input-group #inputGroup [displayDensity]=\"displayDensity\" [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]=\"value\" readonly [attr.placeholder]=\"placeholder\"\n [disabled]=\"disabled\" (blur)=\"onBlur()\" />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix\"></ng-content>\n </ng-container>\n <igx-suffix *ngIf=\"value.length\" aria-label=\"Clear Selection\" 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\">\n clear\n </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: this.collapsed}\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!toggleIconTemplate\">\n {{ dropdown.collapsed ? 'arrow_drop_down' : 'arrow_drop_up'}}\n </igx-icon>\n </igx-suffix>\n</igx-input-group>\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\" [displayDensity]=\"displayDensity\"\n [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n (opened)=\"handleOpened()\" (closed)=\"handleClosed()\">\n <igx-input-group *ngIf=\"displaySearchInput\" [displayDensity]=\"displayDensity\" theme=\"material\" class=\"igx-combo__search\">\n <input class=\"igx-combo-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]=\"searchPlaceholder\"\n aria-autocomplete=\"both\" [attr.aria-owns]=\"dropdown.id\" [attr.aria-labelledby]=\"ariaLabelledBy\" />\n <igx-suffix *ngIf=\"showSearchCaseIcon\">\n <igx-icon family=\"imx-icons\" name=\"case-sensitive\" [active]=\"filteringOptions.caseSensitive\"\n (click)=\"toggleCaseSensitive()\">\n </igx-icon>\n </igx-suffix>\n </igx-input-group>\n <ng-container *ngTemplateOutlet=\"headerTemplate\">\n </ng-container>\n <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n [style.maxHeight.px]=\"itemsMaxHeight\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n [tabindex]=\"dropdown.collapsed ? -1 : 0\" role=\"listbox\" [attr.id]=\"dropdown.id\">\n <igx-combo-item role=\"option\" [itemHeight]='itemHeight' *igxFor=\"let item of data\n | comboFiltering:filterValue:displayKey:filteringOptions:filterable\n | comboGrouping:groupKey:valueKey:groupSortingDirection;\n index as rowIndex; containerSize: itemsMaxHeight; scrollOrientation: 'vertical'; itemSize: itemHeight\"\n [value]=\"item\" [isHeader]=\"item.isHeader\" [index]=\"rowIndex\">\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 <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 aria-label=\"Add Item\" [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>The list is empty</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n <button igxButton=\"flat\" igxRipple>Add item</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n {{ item[key] }}\n</ng-template>\n", components: [{ type: i0.forwardRef(function () { return IgxInputGroupComponent; }), selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { type: i0.forwardRef(function () { return IgxIconComponent; }), selector: "igx-icon", inputs: ["family", "active", "name"] }, { type: i0.forwardRef(function () { return IgxComboDropDownComponent; }), selector: "igx-combo-drop-down", inputs: ["singleMode"] }, { type: i0.forwardRef(function () { return IgxComboItemComponent; }), selector: "igx-combo-item", inputs: ["itemHeight", "singleMode"] }, { type: i0.forwardRef(function () { return IgxComboAddItemComponent; }), selector: "igx-combo-add-item" }], directives: [{ type: i0.forwardRef(function () { return IgxInputDirective; }), selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { type: i0.forwardRef(function () { return i4.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return IgxSuffixDirective; }), selector: "igx-suffix,[igxSuffix]" }, { type: i0.forwardRef(function () { return i4.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i0.forwardRef(function () { return i12.DefaultValueAccessor; }), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i0.forwardRef(function () { return i12.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { type: i0.forwardRef(function () { return i12.NgModel; }), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i0.forwardRef(function () { return IgxDropDownItemNavigationDirective; }), selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { type: i0.forwardRef(function () { return IgxForOfDirective; }), selector: "[igxFor][igxForOf]", inputs: ["igxForOf", "igxForSizePropName", "igxForScrollOrientation", "igxForScrollContainer", "igxForContainerSize", "igxForItemSize", "igxForTotalItemCount", "igxForTrackBy"], outputs: ["chunkLoad", "scrollbarVisibilityChanged", "contentSizeChange", "dataChanged", "beforeViewDestroyed", "chunkPreload"] }, { type: i0.forwardRef(function () { return IgxButtonDirective; }), selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: i0.forwardRef(function () { return IgxRippleDirective; }), selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }], pipes: { "comboGrouping": i0.forwardRef(function () { return IgxComboGroupingPipe; }), "comboFiltering": i0.forwardRef(function () { return IgxComboFilteringPipe; }) } });
34860
34944
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboComponent, decorators: [{
34861
34945
  type: Component,
34862
34946
  args: [{ selector: 'igx-combo', providers: [
34863
34947
  IgxComboAPIService,
34864
34948
  { provide: IGX_COMBO_COMPONENT, useExisting: IgxComboComponent },
34865
34949
  { provide: NG_VALUE_ACCESSOR, useExisting: IgxComboComponent, multi: true }
34866
- ], template: "<igx-input-group #inputGroup [displayDensity]=\"displayDensity\" [type]=\"type\" (click)=\"onInputClick($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]=\"value\" readonly [attr.placeholder]=\"placeholder\"\n [disabled]=\"disabled\" (blur)=\"onBlur()\" />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix\"></ng-content>\n </ng-container>\n <igx-suffix *ngIf=\"value.length\" aria-label=\"Clear Selection\" 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\">\n clear\n </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: this.collapsed}\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!toggleIconTemplate\">\n {{ dropdown.collapsed ? 'arrow_drop_down' : 'arrow_drop_up'}}\n </igx-icon>\n </igx-suffix>\n</igx-input-group>\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\" [displayDensity]=\"displayDensity\"\n [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n (opened)=\"handleOpened()\" (closed)=\"handleClosed()\">\n <igx-input-group *ngIf=\"displaySearchInput\" [displayDensity]=\"displayDensity\" theme=\"material\" class=\"igx-combo__search\">\n <input class=\"igx-combo-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]=\"searchPlaceholder\"\n aria-autocomplete=\"both\" [attr.aria-owns]=\"dropdown.id\" [attr.aria-labelledby]=\"ariaLabelledBy\" />\n <igx-suffix *ngIf=\"showSearchCaseIcon\">\n <igx-icon family=\"imx-icons\" name=\"case-sensitive\" [active]=\"filteringOptions.caseSensitive\"\n (click)=\"toggleCaseSensitive()\">\n </igx-icon>\n </igx-suffix>\n </igx-input-group>\n <ng-container *ngTemplateOutlet=\"headerTemplate\">\n </ng-container>\n <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n [style.maxHeight.px]=\"itemsMaxHeight\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n [tabindex]=\"dropdown.collapsed ? -1 : 0\" role=\"listbox\" [attr.id]=\"dropdown.id\">\n <igx-combo-item role=\"option\" [itemHeight]='itemHeight' *igxFor=\"let item of data\n | comboFiltering:filterValue:displayKey:filterable:filteringOptions\n | comboGrouping:groupKey:valueKey:groupSortingDirection;\n index as rowIndex; containerSize: itemsMaxHeight; scrollOrientation: 'vertical'; itemSize: itemHeight\"\n [value]=\"item\" [isHeader]=\"item.isHeader\" [index]=\"rowIndex\">\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 <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 aria-label=\"Add Item\" [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>The list is empty</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n <button igxButton=\"flat\" igxRipple>Add item</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n {{ item[key] }}\n</ng-template>\n" }]
34950
+ ], template: "<igx-input-group #inputGroup [displayDensity]=\"displayDensity\" [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]=\"value\" readonly [attr.placeholder]=\"placeholder\"\n [disabled]=\"disabled\" (blur)=\"onBlur()\" />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix\"></ng-content>\n </ng-container>\n <igx-suffix *ngIf=\"value.length\" aria-label=\"Clear Selection\" 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\">\n clear\n </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: this.collapsed}\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!toggleIconTemplate\">\n {{ dropdown.collapsed ? 'arrow_drop_down' : 'arrow_drop_up'}}\n </igx-icon>\n </igx-suffix>\n</igx-input-group>\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\" [displayDensity]=\"displayDensity\"\n [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n (opened)=\"handleOpened()\" (closed)=\"handleClosed()\">\n <igx-input-group *ngIf=\"displaySearchInput\" [displayDensity]=\"displayDensity\" theme=\"material\" class=\"igx-combo__search\">\n <input class=\"igx-combo-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]=\"searchPlaceholder\"\n aria-autocomplete=\"both\" [attr.aria-owns]=\"dropdown.id\" [attr.aria-labelledby]=\"ariaLabelledBy\" />\n <igx-suffix *ngIf=\"showSearchCaseIcon\">\n <igx-icon family=\"imx-icons\" name=\"case-sensitive\" [active]=\"filteringOptions.caseSensitive\"\n (click)=\"toggleCaseSensitive()\">\n </igx-icon>\n </igx-suffix>\n </igx-input-group>\n <ng-container *ngTemplateOutlet=\"headerTemplate\">\n </ng-container>\n <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n [style.maxHeight.px]=\"itemsMaxHeight\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n [tabindex]=\"dropdown.collapsed ? -1 : 0\" role=\"listbox\" [attr.id]=\"dropdown.id\">\n <igx-combo-item role=\"option\" [itemHeight]='itemHeight' *igxFor=\"let item of data\n | comboFiltering:filterValue:displayKey:filteringOptions:filterable\n | comboGrouping:groupKey:valueKey:groupSortingDirection;\n index as rowIndex; containerSize: itemsMaxHeight; scrollOrientation: 'vertical'; itemSize: itemHeight\"\n [value]=\"item\" [isHeader]=\"item.isHeader\" [index]=\"rowIndex\">\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 <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 aria-label=\"Add Item\" [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>The list is empty</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n <button igxButton=\"flat\" igxRipple>Add item</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n {{ item[key] }}\n</ng-template>\n" }]
34867
34951
  }], ctorParameters: function () {
34868
34952
  return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: IgxComboAPIService }, { type: IgxIconService }, { type: undefined, decorators: [{
34869
34953
  type: Optional
@@ -34878,143 +34962,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
34878
34962
  }] }, { type: i0.Injector, decorators: [{
34879
34963
  type: Optional
34880
34964
  }] }];
34881
- }, propDecorators: { overlaySettings: [{
34882
- type: Input
34883
- }], inputGroup: [{
34884
- type: ViewChild,
34885
- args: ['inputGroup', { read: IgxInputGroupComponent, static: true }]
34886
- }], comboInput: [{
34887
- type: ViewChild,
34888
- args: ['comboInput', { read: IgxInputDirective, static: true }]
34889
- }], dropdown: [{
34890
- type: ViewChild,
34891
- args: [IgxComboDropDownComponent, { read: IgxComboDropDownComponent, static: true }]
34892
- }], searchInput: [{
34893
- type: ViewChild,
34894
- args: ['searchInput']
34895
- }], itemTemplate: [{
34896
- type: ContentChild,
34897
- args: [IgxComboItemDirective, { read: TemplateRef }]
34898
- }], headerTemplate: [{
34899
- type: ContentChild,
34900
- args: [IgxComboHeaderDirective, { read: TemplateRef }]
34901
- }], footerTemplate: [{
34902
- type: ContentChild,
34903
- args: [IgxComboFooterDirective, { read: TemplateRef }]
34904
- }], headerItemTemplate: [{
34905
- type: ContentChild,
34906
- args: [IgxComboHeaderItemDirective, { read: TemplateRef }]
34907
- }], addItemTemplate: [{
34908
- type: ContentChild,
34909
- args: [IgxComboAddItemDirective, { read: TemplateRef }]
34910
- }], emptyTemplate: [{
34911
- type: ContentChild,
34912
- args: [IgxComboEmptyDirective, { read: TemplateRef }]
34913
- }], toggleIconTemplate: [{
34914
- type: ContentChild,
34915
- args: [IgxComboToggleIconDirective, { read: TemplateRef }]
34916
- }], clearIconTemplate: [{
34917
- type: ContentChild,
34918
- args: [IgxComboClearIconDirective, { read: TemplateRef }]
34919
- }], virtualScrollContainer: [{
34920
- type: ViewChild,
34921
- args: [IgxForOfDirective, { static: true }]
34922
- }], selectionChanging: [{
34923
- type: Output
34924
- }], opening: [{
34925
- type: Output
34926
- }], opened: [{
34927
- type: Output
34928
- }], closing: [{
34929
- type: Output
34930
- }], closed: [{
34931
- type: Output
34932
- }], addition: [{
34933
- type: Output
34934
- }], searchInputUpdate: [{
34935
- type: Output
34936
- }], dataPreLoad: [{
34937
- type: Output
34938
- }], id: [{
34939
- type: HostBinding,
34940
- args: ['attr.id']
34941
- }, {
34942
- type: Input
34943
- }], width: [{
34944
- type: HostBinding,
34945
- args: ['style.width']
34946
- }, {
34947
- type: Input
34948
- }], cssClass: [{
34949
- type: HostBinding,
34950
- args: ['class.igx-combo']
34951
- }], role: [{
34952
- type: HostBinding,
34953
- args: [`attr.role`]
34954
- }], ariaExpanded: [{
34955
- type: HostBinding,
34956
- args: ['attr.aria-expanded']
34957
- }], hasPopUp: [{
34958
- type: HostBinding,
34959
- args: ['attr.aria-haspopup']
34960
- }], ariaOwns: [{
34961
- type: HostBinding,
34962
- args: ['attr.aria-owns']
34963
- }], allowCustomValues: [{
34964
- type: Input
34965
- }], itemsMaxHeight: [{
34966
- type: Input
34967
- }], itemsWidth: [{
34968
- type: Input
34969
- }], itemHeight: [{
34970
- type: Input
34971
- }], placeholder: [{
34965
+ }, propDecorators: { showSearchCaseIcon: [{
34972
34966
  type: Input
34973
- }], searchPlaceholder: [{
34974
- type: Input
34975
- }], showSearchCaseIcon: [{
34976
- type: Input
34977
- }], data: [{
34978
- type: Input
34979
- }], valueKey: [{
34980
- type: Input
34981
- }], displayKey: [{
34982
- type: Input
34983
- }], groupKey: [{
34967
+ }], autoFocusSearch: [{
34984
34968
  type: Input
34985
34969
  }], filterable: [{
34986
34970
  type: Input
34987
- }], groupSortingDirection: [{
34988
- type: Input
34989
- }], ariaLabelledBy: [{
34990
- type: Input
34991
- }, {
34992
- type: HostBinding,
34993
- args: ['attr.aria-labelledby']
34994
- }], disabled: [{
34995
- type: Input
34996
- }], type: [{
34997
- type: Input
34998
- }], autoFocusSearch: [{
34971
+ }], searchPlaceholder: [{
34999
34972
  type: Input
35000
- }], dropdownContainer: [{
35001
- type: ViewChild,
35002
- args: ['dropdownItemContainer', { static: true }]
35003
- }], primitiveTemplate: [{
35004
- type: ViewChild,
35005
- args: ['primitive', { read: TemplateRef, static: true }]
35006
- }], complexTemplate: [{
35007
- type: ViewChild,
35008
- args: ['complex', { read: TemplateRef, static: true }]
35009
- }], virtDir: [{
34973
+ }], dropdown: [{
35010
34974
  type: ViewChild,
35011
- args: [IgxForOfDirective, { read: IgxForOfDirective, static: true }]
35012
- }], onArrowDown: [{
35013
- type: HostListener,
35014
- args: ['keydown.ArrowDown', ['$event']]
35015
- }, {
35016
- type: HostListener,
35017
- args: ['keydown.Alt.ArrowDown', ['$event']]
34975
+ args: [IgxComboDropDownComponent, { static: true }]
35018
34976
  }] } });
35019
34977
  /**
35020
34978
  * @hidden
@@ -35043,11 +35001,16 @@ IgxComboModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
35043
35001
  IgxInputGroupModule,
35044
35002
  IgxRippleModule,
35045
35003
  IgxToggleModule,
35046
- ReactiveFormsModule], exports: [IgxComboAddItemDirective,
35047
- IgxComboClearIconDirective, IgxComboComponent, IgxComboEmptyDirective,
35004
+ ReactiveFormsModule], exports: [IgxComboAddItemComponent,
35005
+ IgxComboAddItemDirective,
35006
+ IgxComboClearIconDirective, IgxComboComponent, IgxComboDropDownComponent,
35007
+ IgxComboEmptyDirective,
35008
+ IgxComboFilteringPipe,
35048
35009
  IgxComboFooterDirective,
35010
+ IgxComboGroupingPipe,
35049
35011
  IgxComboHeaderDirective,
35050
35012
  IgxComboHeaderItemDirective,
35013
+ IgxComboItemComponent,
35051
35014
  IgxComboItemDirective,
35052
35015
  IgxComboToggleIconDirective,
35053
35016
  IgxInputGroupModule] });
@@ -35084,13 +35047,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
35084
35047
  IgxComboToggleIconDirective
35085
35048
  ],
35086
35049
  exports: [
35050
+ IgxComboAddItemComponent,
35087
35051
  IgxComboAddItemDirective,
35088
35052
  IgxComboClearIconDirective,
35089
35053
  IgxComboComponent,
35054
+ IgxComboDropDownComponent,
35090
35055
  IgxComboEmptyDirective,
35056
+ IgxComboFilteringPipe,
35091
35057
  IgxComboFooterDirective,
35058
+ IgxComboGroupingPipe,
35092
35059
  IgxComboHeaderDirective,
35093
35060
  IgxComboHeaderItemDirective,
35061
+ IgxComboItemComponent,
35094
35062
  IgxComboItemDirective,
35095
35063
  IgxComboToggleIconDirective,
35096
35064
  IgxInputGroupModule
@@ -35111,6 +35079,346 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
35111
35079
  }]
35112
35080
  }] });
35113
35081
 
35082
+ /**
35083
+ * Represents a drop-down list that provides filtering functionality, allowing users to choose a single option from a predefined list.
35084
+ *
35085
+ * @igxModule IgxSimpleComboModule
35086
+ * @igxTheme igx-combo-theme
35087
+ * @igxKeywords combobox, single combo selection
35088
+ * @igxGroup Grids & Lists
35089
+ *
35090
+ * @remarks
35091
+ * It provides the ability to filter items as well as perform single selection on the provided data.
35092
+ * Additionally, it exposes keyboard navigation and custom styling capabilities.
35093
+ * @example
35094
+ * ```html
35095
+ * <igx-simple-combo [itemsMaxHeight]="250" [data]="locationData"
35096
+ * [displayKey]="'field'" [valueKey]="'field'"
35097
+ * placeholder="Location" searchPlaceholder="Search...">
35098
+ * </igx-simple-combo>
35099
+ * ```
35100
+ */
35101
+ class IgxSimpleComboComponent extends IgxComboBaseDirective {
35102
+ constructor(elementRef, cdr, selectionService, comboAPI, _iconService, platformUtil, _displayDensityOptions, _inputGroupType, _injector) {
35103
+ super(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector);
35104
+ this.elementRef = elementRef;
35105
+ this.cdr = cdr;
35106
+ this.selectionService = selectionService;
35107
+ this.comboAPI = comboAPI;
35108
+ this._iconService = _iconService;
35109
+ this.platformUtil = platformUtil;
35110
+ this._displayDensityOptions = _displayDensityOptions;
35111
+ this._inputGroupType = _inputGroupType;
35112
+ this._injector = _injector;
35113
+ /**
35114
+ * Emitted when item selection is changing, before the selection completes
35115
+ *
35116
+ * ```html
35117
+ * <igx-simple-combo (selectionChanging)='handleSelection()'></igx-simple-combo>
35118
+ * ```
35119
+ */
35120
+ this.selectionChanging = new EventEmitter();
35121
+ /** @hidden @internal */
35122
+ this.composing = false;
35123
+ this._updateInput = true;
35124
+ this.findMatch = (element) => {
35125
+ const value = this.displayKey ? element[this.displayKey] : element;
35126
+ return value.toString().toLowerCase().includes(this.searchValue.trim().toLowerCase());
35127
+ };
35128
+ this.comboAPI.register(this);
35129
+ }
35130
+ /** @hidden @internal */
35131
+ get filteredData() {
35132
+ return this._filteredData;
35133
+ }
35134
+ /** @hidden @internal */
35135
+ set filteredData(val) {
35136
+ this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;
35137
+ this.checkMatch();
35138
+ }
35139
+ /**
35140
+ * Select a defined item
35141
+ *
35142
+ * @param item the item to be selected
35143
+ * ```typescript
35144
+ * this.combo.select("New York");
35145
+ * ```
35146
+ */
35147
+ select(item) {
35148
+ if (item !== null && item !== undefined) {
35149
+ const newSelection = this.selectionService.add_items(this.id, item instanceof Array ? item : [item], true);
35150
+ this.setSelection(newSelection);
35151
+ }
35152
+ }
35153
+ /**
35154
+ * Deselect the currently selected item
35155
+ *
35156
+ * @param item the items to be deselected
35157
+ * ```typescript
35158
+ * this.combo.deselect("New York");
35159
+ * ```
35160
+ */
35161
+ deselect() {
35162
+ this.clearSelection();
35163
+ }
35164
+ /** @hidden @internal */
35165
+ writeValue(value) {
35166
+ const oldSelection = this.selection;
35167
+ this.selectionService.select_items(this.id, value ? [value] : [], true);
35168
+ this.cdr.markForCheck();
35169
+ this._value = this.createDisplayText(this.selection, oldSelection);
35170
+ }
35171
+ /** @hidden @internal */
35172
+ ngAfterViewInit() {
35173
+ this.virtDir.contentSizeChange.pipe(takeUntil(this.destroy$)).subscribe(() => {
35174
+ if (this.selection.length > 0) {
35175
+ const index = this.virtDir.igxForOf.findIndex(e => {
35176
+ let current = e[this.valueKey];
35177
+ if (this.valueKey === null || this.valueKey === undefined) {
35178
+ current = e;
35179
+ }
35180
+ return current === this.selection[0];
35181
+ });
35182
+ this.dropdown.navigateItem(index);
35183
+ }
35184
+ });
35185
+ this.dropdown.opened.pipe(takeUntil(this.destroy$)).subscribe(() => {
35186
+ if (this.composing) {
35187
+ this.comboInput.focus();
35188
+ }
35189
+ if (this.comboInput.value.length === 0) {
35190
+ this.dropdown.navigateFirst();
35191
+ this.dropdownContainer.nativeElement.focus();
35192
+ }
35193
+ });
35194
+ super.ngAfterViewInit();
35195
+ }
35196
+ /** @hidden @internal */
35197
+ handleInputChange(event) {
35198
+ this.searchValue = event.target.value;
35199
+ this._onChangeCallback(this.searchValue);
35200
+ if (this.collapsed) {
35201
+ this.open();
35202
+ this.dropdown.navigateFirst();
35203
+ }
35204
+ if (!this.comboInput.value.trim()) {
35205
+ // handle clearing of input by space
35206
+ this.clearSelection();
35207
+ this._onChangeCallback(null);
35208
+ }
35209
+ super.handleInputChange(event);
35210
+ this.composing = true;
35211
+ }
35212
+ /** @hidden @internal */
35213
+ handleKeyDown(event) {
35214
+ if (event.key === this.platformUtil.KEYMAP.ENTER) {
35215
+ const filtered = this.filteredData.find(this.findMatch);
35216
+ if (filtered === null || filtered === undefined) {
35217
+ return;
35218
+ }
35219
+ this.select(this.dropdown.items[0].itemID);
35220
+ event.preventDefault();
35221
+ event.stopPropagation();
35222
+ this.close();
35223
+ // manually trigger text selection as it will not be triggered during editing
35224
+ this.textSelection.trigger();
35225
+ return;
35226
+ }
35227
+ if (event.key === this.platformUtil.KEYMAP.BACKSPACE
35228
+ || event.key === this.platformUtil.KEYMAP.DELETE) {
35229
+ this._updateInput = false;
35230
+ this.clearSelection();
35231
+ }
35232
+ super.handleKeyDown(event);
35233
+ }
35234
+ /** @hidden @internal */
35235
+ handleKeyUp(event) {
35236
+ if (event.key === this.platformUtil.KEYMAP.ARROW_DOWN) {
35237
+ const firstItem = this.selectionService.first_item(this.id);
35238
+ this.dropdown.focusedItem = firstItem && this.filteredData.length > 0
35239
+ ? this.dropdown.items.find(i => i.itemID === firstItem)
35240
+ : this.dropdown.items[0];
35241
+ this.dropdownContainer.nativeElement.focus();
35242
+ }
35243
+ }
35244
+ /** @hidden @internal */
35245
+ handleItemKeyDown(event) {
35246
+ if (event.key === this.platformUtil.KEYMAP.ARROW_UP && event.altKey) {
35247
+ this.close();
35248
+ }
35249
+ }
35250
+ /** @hidden @internal */
35251
+ getEditElement() {
35252
+ return this.comboInput.nativeElement;
35253
+ }
35254
+ /** @hidden @internal */
35255
+ handleClear(event) {
35256
+ if (this.disabled) {
35257
+ return;
35258
+ }
35259
+ this.clearSelection(true);
35260
+ if (this.collapsed) {
35261
+ this.open();
35262
+ this.dropdown.navigateFirst();
35263
+ }
35264
+ else {
35265
+ this.focusSearchInput(true);
35266
+ }
35267
+ event.stopPropagation();
35268
+ this.comboInput.value = this.filterValue = this.searchValue = '';
35269
+ this.dropdown.focusedItem = null;
35270
+ this.composing = false;
35271
+ this.comboInput.focus();
35272
+ }
35273
+ /** @hidden @internal */
35274
+ handleOpened() {
35275
+ this.triggerCheck();
35276
+ this.dropdownContainer.nativeElement.focus();
35277
+ this.opened.emit({ owner: this });
35278
+ }
35279
+ /** @hidden @internal */
35280
+ handleClosing(e) {
35281
+ const args = { owner: this, event: e.event, cancel: e.cancel };
35282
+ this.closing.emit(args);
35283
+ e.cancel = args.cancel;
35284
+ if (e.cancel) {
35285
+ return;
35286
+ }
35287
+ this.composing = false;
35288
+ // explicitly update selection and trigger text selection so that we don't have to force CD
35289
+ this.textSelection.selected = true;
35290
+ this.textSelection.trigger();
35291
+ const selection = this.selectionService.first_item(this.id);
35292
+ this._value = selection !== undefined && selection !== null ? selection : '';
35293
+ this.comboInput.focus();
35294
+ this._onChangeCallback(selection);
35295
+ }
35296
+ /** @hidden @internal */
35297
+ focusSearchInput(opening) {
35298
+ if (opening) {
35299
+ this.dropdownContainer.nativeElement.focus();
35300
+ }
35301
+ else {
35302
+ this.comboInput.nativeElement.focus();
35303
+ this.toggle();
35304
+ }
35305
+ }
35306
+ /** @hidden @internal */
35307
+ onClick(event) {
35308
+ super.onClick(event);
35309
+ if (this.comboInput.value.length === 0) {
35310
+ this.virtDir.scrollTo(0);
35311
+ }
35312
+ }
35313
+ setSelection(newSelection) {
35314
+ const newSelectionAsArray = newSelection ? Array.from(newSelection) : [];
35315
+ const oldSelectionAsArray = Array.from(this.selectionService.get(this.id) || []);
35316
+ const displayText = this.createDisplayText(newSelectionAsArray, oldSelectionAsArray);
35317
+ const args = {
35318
+ newSelection: newSelectionAsArray[0],
35319
+ oldSelection: oldSelectionAsArray[0],
35320
+ displayText,
35321
+ owner: this,
35322
+ cancel: false
35323
+ };
35324
+ this.selectionChanging.emit(args);
35325
+ if (!args.cancel) {
35326
+ const argsSelection = args.newSelection !== undefined
35327
+ && args.newSelection !== null
35328
+ ? [args.newSelection]
35329
+ : [];
35330
+ this.selectionService.select_items(this.id, argsSelection, true);
35331
+ if (this._updateInput) {
35332
+ this.comboInput.value = this._value = displayText !== args.displayText
35333
+ ? args.displayText
35334
+ : this.createDisplayText([args.newSelection], [args.oldSelection]);
35335
+ }
35336
+ this._onChangeCallback(args.newSelection);
35337
+ this._updateInput = true;
35338
+ }
35339
+ }
35340
+ createDisplayText(newSelection, oldSelection) {
35341
+ if (this.isRemote) {
35342
+ return this.getRemoteSelection(newSelection, oldSelection);
35343
+ }
35344
+ return this.displayKey !== null && this.displayKey !== undefined
35345
+ ? this.convertKeysToItems(newSelection).map(e => e[this.displayKey])[0]
35346
+ : newSelection[0];
35347
+ }
35348
+ clearSelection(ignoreFilter) {
35349
+ let newSelection = this.selectionService.get_empty();
35350
+ if (this.filteredData.length !== this.data.length && !ignoreFilter) {
35351
+ newSelection = this.selectionService.delete_items(this.id, this.selectionService.get_all_ids(this.filteredData, this.valueKey));
35352
+ }
35353
+ this.setSelection(newSelection);
35354
+ }
35355
+ }
35356
+ IgxSimpleComboComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxSimpleComboComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxSelectionAPIService }, { token: IgxComboAPIService }, { token: IgxIconService }, { token: PlatformUtil }, { token: DisplayDensityToken, optional: true }, { token: IGX_INPUT_GROUP_TYPE, optional: true }, { token: i0.Injector, optional: true }], target: i0.ɵɵFactoryTarget.Component });
35357
+ IgxSimpleComboComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxSimpleComboComponent, selector: "igx-simple-combo", outputs: { selectionChanging: "selectionChanging" }, providers: [
35358
+ IgxComboAPIService,
35359
+ { provide: IGX_COMBO_COMPONENT, useExisting: IgxSimpleComboComponent },
35360
+ { provide: NG_VALUE_ACCESSOR, useExisting: IgxSimpleComboComponent, multi: true }
35361
+ ], viewQueries: [{ propertyName: "dropdown", first: true, predicate: IgxComboDropDownComponent, descendants: true, static: true }, { propertyName: "textSelection", first: true, predicate: IgxTextSelectionDirective, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<igx-input-group #inputGroup [displayDensity]=\"displayDensity\" [type]=\"type\">\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\n <input #comboInput igxInput [value]=\"value\" (input)=\"handleInputChange($event)\" (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\" (blur)=\"onBlur()\" [attr.placeholder]=\"placeholder\"\n aria-autocomplete=\"both\" [attr.aria-owns]=\"dropdown.id\" [attr.aria-labelledby]=\"ariaLabelledBy\"\n [disabled]=\"disabled\" [igxTextSelection]=\"!composing\" />\n\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix\"></ng-content>\n </ng-container>\n <igx-suffix *ngIf=\"comboInput.value.length\" aria-label=\"Clear Selection\" class=\"igx-combo__clear-button\"\n (click)=\"handleClear($event)\">\n <ng-container *ngIf=\"clearIconTemplate\">\n <ng-container *ngTemplateOutlet=\"clearIconTemplate\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!clearIconTemplate\">\n clear\n </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 (click)=\"onClick($event)\" *ngIf=\"!toggleIconTemplate\">\n {{ dropdown.collapsed ? 'arrow_drop_down' : 'arrow_drop_up'}}\n </igx-icon>\n </igx-suffix>\n</igx-input-group>\n\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\" [displayDensity]=\"displayDensity\"\n [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n (opened)=\"handleOpened()\" (closed)=\"handleClosed()\" [singleMode]=\"true\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\">\n </ng-container>\n <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n [style.maxHeight.px]=\"itemsMaxHeight\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n [tabindex]=\"dropdown.collapsed ? -1 : 0\" role=\"listbox\" [attr.id]=\"dropdown.id\" (keydown)=\"handleItemKeyDown($event)\">\n <igx-combo-item role=\"option\" [singleMode]=\"true\" [itemHeight]='itemHeight' (click)=\"close()\" *igxFor=\"let item of data\n | comboFiltering:filterValue:displayKey:filteringOptions:true\n | comboGrouping:groupKey:valueKey:groupSortingDirection;\n index as rowIndex; containerSize: itemsMaxHeight; scrollOrientation: 'vertical'; itemSize: itemHeight\"\n [value]=\"item\" [isHeader]=\"item.isHeader\" [index]=\"rowIndex\">\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 <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\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 aria-label=\"Add Item\" [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\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>The list is empty</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n <button igxButton=\"flat\" igxRipple>Add item</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n {{ item[key] }}\n</ng-template>\n", components: [{ type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { type: IgxComboDropDownComponent, selector: "igx-combo-drop-down", inputs: ["singleMode"] }, { type: IgxComboItemComponent, selector: "igx-combo-item", inputs: ["itemHeight", "singleMode"] }, { type: IgxComboAddItemComponent, selector: "igx-combo-add-item" }], directives: [{ type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { type: IgxTextSelectionDirective, selector: "[igxTextSelection]", inputs: ["igxTextSelection"], exportAs: ["igxTextSelection"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: IgxSuffixDirective, selector: "igx-suffix,[igxSuffix]" }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { type: IgxForOfDirective, selector: "[igxFor][igxForOf]", inputs: ["igxForOf", "igxForSizePropName", "igxForScrollOrientation", "igxForScrollContainer", "igxForContainerSize", "igxForItemSize", "igxForTotalItemCount", "igxForTrackBy"], outputs: ["chunkLoad", "scrollbarVisibilityChanged", "contentSizeChange", "dataChanged", "beforeViewDestroyed", "chunkPreload"] }, { type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }], pipes: { "comboGrouping": IgxComboGroupingPipe, "comboFiltering": IgxComboFilteringPipe } });
35362
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxSimpleComboComponent, decorators: [{
35363
+ type: Component,
35364
+ args: [{ selector: 'igx-simple-combo', providers: [
35365
+ IgxComboAPIService,
35366
+ { provide: IGX_COMBO_COMPONENT, useExisting: IgxSimpleComboComponent },
35367
+ { provide: NG_VALUE_ACCESSOR, useExisting: IgxSimpleComboComponent, multi: true }
35368
+ ], template: "<igx-input-group #inputGroup [displayDensity]=\"displayDensity\" [type]=\"type\">\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\n <input #comboInput igxInput [value]=\"value\" (input)=\"handleInputChange($event)\" (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\" (blur)=\"onBlur()\" [attr.placeholder]=\"placeholder\"\n aria-autocomplete=\"both\" [attr.aria-owns]=\"dropdown.id\" [attr.aria-labelledby]=\"ariaLabelledBy\"\n [disabled]=\"disabled\" [igxTextSelection]=\"!composing\" />\n\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix\"></ng-content>\n </ng-container>\n <igx-suffix *ngIf=\"comboInput.value.length\" aria-label=\"Clear Selection\" class=\"igx-combo__clear-button\"\n (click)=\"handleClear($event)\">\n <ng-container *ngIf=\"clearIconTemplate\">\n <ng-container *ngTemplateOutlet=\"clearIconTemplate\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!clearIconTemplate\">\n clear\n </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 (click)=\"onClick($event)\" *ngIf=\"!toggleIconTemplate\">\n {{ dropdown.collapsed ? 'arrow_drop_down' : 'arrow_drop_up'}}\n </igx-icon>\n </igx-suffix>\n</igx-input-group>\n\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\" [displayDensity]=\"displayDensity\"\n [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n (opened)=\"handleOpened()\" (closed)=\"handleClosed()\" [singleMode]=\"true\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\">\n </ng-container>\n <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n [style.maxHeight.px]=\"itemsMaxHeight\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n [tabindex]=\"dropdown.collapsed ? -1 : 0\" role=\"listbox\" [attr.id]=\"dropdown.id\" (keydown)=\"handleItemKeyDown($event)\">\n <igx-combo-item role=\"option\" [singleMode]=\"true\" [itemHeight]='itemHeight' (click)=\"close()\" *igxFor=\"let item of data\n | comboFiltering:filterValue:displayKey:filteringOptions:true\n | comboGrouping:groupKey:valueKey:groupSortingDirection;\n index as rowIndex; containerSize: itemsMaxHeight; scrollOrientation: 'vertical'; itemSize: itemHeight\"\n [value]=\"item\" [isHeader]=\"item.isHeader\" [index]=\"rowIndex\">\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 <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\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 aria-label=\"Add Item\" [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\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>The list is empty</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n <button igxButton=\"flat\" igxRipple>Add item</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n {{ item[key] }}\n</ng-template>\n" }]
35369
+ }], ctorParameters: function () {
35370
+ return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: IgxComboAPIService }, { type: IgxIconService }, { type: PlatformUtil }, { type: undefined, decorators: [{
35371
+ type: Optional
35372
+ }, {
35373
+ type: Inject,
35374
+ args: [DisplayDensityToken]
35375
+ }] }, { type: undefined, decorators: [{
35376
+ type: Optional
35377
+ }, {
35378
+ type: Inject,
35379
+ args: [IGX_INPUT_GROUP_TYPE]
35380
+ }] }, { type: i0.Injector, decorators: [{
35381
+ type: Optional
35382
+ }] }];
35383
+ }, propDecorators: { dropdown: [{
35384
+ type: ViewChild,
35385
+ args: [IgxComboDropDownComponent, { static: true }]
35386
+ }], selectionChanging: [{
35387
+ type: Output
35388
+ }], textSelection: [{
35389
+ type: ViewChild,
35390
+ args: [IgxTextSelectionDirective, { static: true }]
35391
+ }] } });
35392
+ class IgxSimpleComboModule {
35393
+ }
35394
+ IgxSimpleComboModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxSimpleComboModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
35395
+ IgxSimpleComboModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxSimpleComboModule, declarations: [IgxSimpleComboComponent], imports: [IgxComboModule, IgxRippleModule, CommonModule,
35396
+ IgxInputGroupModule, FormsModule, ReactiveFormsModule,
35397
+ IgxForOfModule, IgxToggleModule, IgxCheckboxModule,
35398
+ IgxDropDownModule, IgxButtonModule, IgxIconModule,
35399
+ IgxTextSelectionModule], exports: [IgxSimpleComboComponent, IgxComboModule] });
35400
+ IgxSimpleComboModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxSimpleComboModule, imports: [[
35401
+ IgxComboModule, IgxRippleModule, CommonModule,
35402
+ IgxInputGroupModule, FormsModule, ReactiveFormsModule,
35403
+ IgxForOfModule, IgxToggleModule, IgxCheckboxModule,
35404
+ IgxDropDownModule, IgxButtonModule, IgxIconModule,
35405
+ IgxTextSelectionModule
35406
+ ], IgxComboModule] });
35407
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxSimpleComboModule, decorators: [{
35408
+ type: NgModule,
35409
+ args: [{
35410
+ declarations: [IgxSimpleComboComponent],
35411
+ imports: [
35412
+ IgxComboModule, IgxRippleModule, CommonModule,
35413
+ IgxInputGroupModule, FormsModule, ReactiveFormsModule,
35414
+ IgxForOfModule, IgxToggleModule, IgxCheckboxModule,
35415
+ IgxDropDownModule, IgxButtonModule, IgxIconModule,
35416
+ IgxTextSelectionModule
35417
+ ],
35418
+ exports: [IgxSimpleComboComponent, IgxComboModule]
35419
+ }]
35420
+ }] });
35421
+
35114
35422
  /** Header orientation in `dialog` mode. */
35115
35423
  const PickerHeaderOrientation = mkenum({
35116
35424
  Horizontal: 'horizontal',
@@ -36404,6 +36712,14 @@ class IgxDialogComponent {
36404
36712
  * ```
36405
36713
  */
36406
36714
  this.id = `igx-dialog-${DIALOG_ID++}`;
36715
+ /**
36716
+ * An @Input property to set whether the Tab key focus is trapped within the dialog when opened.
36717
+ * Defaults to `true`.
36718
+ * ```html
36719
+ * <igx-dialog focusTrap="false""></igx-dialog>
36720
+ * ```
36721
+ */
36722
+ this.focusTrap = true;
36407
36723
  /**
36408
36724
  * An @Input property controlling the `title` of the dialog.
36409
36725
  * ```html
@@ -36851,10 +37167,10 @@ class IgxDialogComponent {
36851
37167
  IgxDialogComponent.NEXT_ID = 1;
36852
37168
  IgxDialogComponent.DIALOG_CLASS = 'igx-dialog';
36853
37169
  IgxDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxDialogComponent, deps: [{ token: i0.ElementRef }, { token: IgxNavigationService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
36854
- IgxDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxDialogComponent, selector: "igx-dialog", inputs: { id: "id", isModal: "isModal", closeOnEscape: "closeOnEscape", title: "title", message: "message", leftButtonLabel: "leftButtonLabel", leftButtonType: "leftButtonType", leftButtonColor: "leftButtonColor", leftButtonBackgroundColor: "leftButtonBackgroundColor", leftButtonRipple: "leftButtonRipple", rightButtonLabel: "rightButtonLabel", rightButtonType: "rightButtonType", rightButtonColor: "rightButtonColor", rightButtonBackgroundColor: "rightButtonBackgroundColor", rightButtonRipple: "rightButtonRipple", closeOnOutsideSelect: "closeOnOutsideSelect", positionSettings: "positionSettings", isOpen: "isOpen", role: "role", titleId: "titleId" }, outputs: { opening: "opening", opened: "opened", closing: "closing", closed: "closed", leftButtonSelect: "leftButtonSelect", rightButtonSelect: "rightButtonSelect", isOpenChange: "isOpenChange" }, host: { properties: { "attr.id": "this.id", "attr.tabindex": "this.tabindex", "class.igx-dialog--hidden": "this.isCollapsed" } }, viewQueries: [{ propertyName: "toggleRef", first: true, predicate: IgxToggleDirective, descendants: true, static: true }], ngImport: i0, template: "<div tabindex=\"0\" #dialog class=\"igx-dialog\" igxToggle (click)=\"onDialogSelected($event)\">\n <div #dialogWindow class=\"igx-dialog__window\" [attr.role]=\"role\" [attr.aria-labelledby]=\"titleId\">\n\n <div *ngIf=\"title\" [attr.id]=\"titleId\" class=\"igx-dialog__window-title\">\n {{ title }}\n </div>\n <ng-content *ngIf=\"!title\" select=\"igx-dialog-title,[igxDialogTitle]\"></ng-content>\n\n <div class=\"igx-dialog__window-content\">\n <span *ngIf=\"message\" class=\"igx-dialog__window-message\">{{ message }}</span>\n <ng-content *ngIf=\"!message\"></ng-content>\n </div>\n\n <div *ngIf=\"leftButtonLabel || rightButtonLabel\" class=\"igx-dialog__window-actions\">\n <button *ngIf=\"leftButtonLabel\" type=\"button\" [igxFocus]=\"isOpen\" [igxButton]=\"leftButtonType\" igxButtonColor=\"{{ leftButtonColor }}\" igxButtonBackground=\"{{ leftButtonBackgroundColor }}\"\n igxRipple=\"{{ leftButtonRipple }}\" (click)=\"onInternalLeftButtonSelect($event)\">\n {{ leftButtonLabel }}\n </button>\n <button *ngIf=\"rightButtonLabel\" type=\"button\" [igxFocus]=\"isOpen\" [igxButton]=\"rightButtonType\" igxButtonColor=\"{{ rightButtonColor }}\" igxButtonBackground=\"{{ rightButtonBackgroundColor }}\"\n igxRipple=\"{{ rightButtonRipple }}\" (click)=\"onInternalRightButtonSelect($event)\">\n {{ rightButtonLabel }}\n </button>\n </div>\n <ng-content *ngIf=\"!leftButtonLabel && !rightButtonLabel\" select=\"igx-dialog-actions,[igxDialogActions]\"></ng-content>\n\n </div>\n</div>\n", directives: [{ type: IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: IgxFocusDirective, selector: "[igxFocus]", inputs: ["igxFocus"], exportAs: ["igxFocus"] }, { type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }] });
37170
+ IgxDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxDialogComponent, selector: "igx-dialog", inputs: { id: "id", isModal: "isModal", closeOnEscape: "closeOnEscape", focusTrap: "focusTrap", title: "title", message: "message", leftButtonLabel: "leftButtonLabel", leftButtonType: "leftButtonType", leftButtonColor: "leftButtonColor", leftButtonBackgroundColor: "leftButtonBackgroundColor", leftButtonRipple: "leftButtonRipple", rightButtonLabel: "rightButtonLabel", rightButtonType: "rightButtonType", rightButtonColor: "rightButtonColor", rightButtonBackgroundColor: "rightButtonBackgroundColor", rightButtonRipple: "rightButtonRipple", closeOnOutsideSelect: "closeOnOutsideSelect", positionSettings: "positionSettings", isOpen: "isOpen", role: "role", titleId: "titleId" }, outputs: { opening: "opening", opened: "opened", closing: "closing", closed: "closed", leftButtonSelect: "leftButtonSelect", rightButtonSelect: "rightButtonSelect", isOpenChange: "isOpenChange" }, host: { properties: { "attr.id": "this.id", "attr.tabindex": "this.tabindex", "class.igx-dialog--hidden": "this.isCollapsed" } }, viewQueries: [{ propertyName: "toggleRef", first: true, predicate: IgxToggleDirective, descendants: true, static: true }], ngImport: i0, template: "<div tabindex=\"0\" #dialog class=\"igx-dialog\" igxToggle [igxFocusTrap]=\"focusTrap\" (click)=\"onDialogSelected($event)\">\n <div #dialogWindow class=\"igx-dialog__window\" [attr.role]=\"role\" [attr.aria-labelledby]=\"titleId\">\n\n <div *ngIf=\"title\" [attr.id]=\"titleId\" class=\"igx-dialog__window-title\">\n {{ title }}\n </div>\n <ng-content *ngIf=\"!title\" select=\"igx-dialog-title,[igxDialogTitle]\"></ng-content>\n\n <div class=\"igx-dialog__window-content\">\n <span *ngIf=\"message\" class=\"igx-dialog__window-message\">{{ message }}</span>\n <ng-content *ngIf=\"!message\"></ng-content>\n </div>\n\n <div *ngIf=\"leftButtonLabel || rightButtonLabel\" class=\"igx-dialog__window-actions\">\n <button *ngIf=\"leftButtonLabel\" type=\"button\" [igxFocus]=\"isOpen\" [igxButton]=\"leftButtonType\" igxButtonColor=\"{{ leftButtonColor }}\" igxButtonBackground=\"{{ leftButtonBackgroundColor }}\"\n igxRipple=\"{{ leftButtonRipple }}\" (click)=\"onInternalLeftButtonSelect($event)\">\n {{ leftButtonLabel }}\n </button>\n <button *ngIf=\"rightButtonLabel\" type=\"button\" [igxFocus]=\"isOpen\" [igxButton]=\"rightButtonType\" igxButtonColor=\"{{ rightButtonColor }}\" igxButtonBackground=\"{{ rightButtonBackgroundColor }}\"\n igxRipple=\"{{ rightButtonRipple }}\" (click)=\"onInternalRightButtonSelect($event)\">\n {{ rightButtonLabel }}\n </button>\n </div>\n <ng-content *ngIf=\"!leftButtonLabel && !rightButtonLabel\" select=\"igx-dialog-actions,[igxDialogActions]\"></ng-content>\n\n </div>\n</div>\n", directives: [{ type: IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }, { type: IgxFocusTrapDirective, selector: "[igxFocusTrap]", inputs: ["igxFocusTrap"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: IgxFocusDirective, selector: "[igxFocus]", inputs: ["igxFocus"], exportAs: ["igxFocus"] }, { type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }] });
36855
37171
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxDialogComponent, decorators: [{
36856
37172
  type: Component,
36857
- args: [{ selector: 'igx-dialog', template: "<div tabindex=\"0\" #dialog class=\"igx-dialog\" igxToggle (click)=\"onDialogSelected($event)\">\n <div #dialogWindow class=\"igx-dialog__window\" [attr.role]=\"role\" [attr.aria-labelledby]=\"titleId\">\n\n <div *ngIf=\"title\" [attr.id]=\"titleId\" class=\"igx-dialog__window-title\">\n {{ title }}\n </div>\n <ng-content *ngIf=\"!title\" select=\"igx-dialog-title,[igxDialogTitle]\"></ng-content>\n\n <div class=\"igx-dialog__window-content\">\n <span *ngIf=\"message\" class=\"igx-dialog__window-message\">{{ message }}</span>\n <ng-content *ngIf=\"!message\"></ng-content>\n </div>\n\n <div *ngIf=\"leftButtonLabel || rightButtonLabel\" class=\"igx-dialog__window-actions\">\n <button *ngIf=\"leftButtonLabel\" type=\"button\" [igxFocus]=\"isOpen\" [igxButton]=\"leftButtonType\" igxButtonColor=\"{{ leftButtonColor }}\" igxButtonBackground=\"{{ leftButtonBackgroundColor }}\"\n igxRipple=\"{{ leftButtonRipple }}\" (click)=\"onInternalLeftButtonSelect($event)\">\n {{ leftButtonLabel }}\n </button>\n <button *ngIf=\"rightButtonLabel\" type=\"button\" [igxFocus]=\"isOpen\" [igxButton]=\"rightButtonType\" igxButtonColor=\"{{ rightButtonColor }}\" igxButtonBackground=\"{{ rightButtonBackgroundColor }}\"\n igxRipple=\"{{ rightButtonRipple }}\" (click)=\"onInternalRightButtonSelect($event)\">\n {{ rightButtonLabel }}\n </button>\n </div>\n <ng-content *ngIf=\"!leftButtonLabel && !rightButtonLabel\" select=\"igx-dialog-actions,[igxDialogActions]\"></ng-content>\n\n </div>\n</div>\n" }]
37173
+ args: [{ selector: 'igx-dialog', template: "<div tabindex=\"0\" #dialog class=\"igx-dialog\" igxToggle [igxFocusTrap]=\"focusTrap\" (click)=\"onDialogSelected($event)\">\n <div #dialogWindow class=\"igx-dialog__window\" [attr.role]=\"role\" [attr.aria-labelledby]=\"titleId\">\n\n <div *ngIf=\"title\" [attr.id]=\"titleId\" class=\"igx-dialog__window-title\">\n {{ title }}\n </div>\n <ng-content *ngIf=\"!title\" select=\"igx-dialog-title,[igxDialogTitle]\"></ng-content>\n\n <div class=\"igx-dialog__window-content\">\n <span *ngIf=\"message\" class=\"igx-dialog__window-message\">{{ message }}</span>\n <ng-content *ngIf=\"!message\"></ng-content>\n </div>\n\n <div *ngIf=\"leftButtonLabel || rightButtonLabel\" class=\"igx-dialog__window-actions\">\n <button *ngIf=\"leftButtonLabel\" type=\"button\" [igxFocus]=\"isOpen\" [igxButton]=\"leftButtonType\" igxButtonColor=\"{{ leftButtonColor }}\" igxButtonBackground=\"{{ leftButtonBackgroundColor }}\"\n igxRipple=\"{{ leftButtonRipple }}\" (click)=\"onInternalLeftButtonSelect($event)\">\n {{ leftButtonLabel }}\n </button>\n <button *ngIf=\"rightButtonLabel\" type=\"button\" [igxFocus]=\"isOpen\" [igxButton]=\"rightButtonType\" igxButtonColor=\"{{ rightButtonColor }}\" igxButtonBackground=\"{{ rightButtonBackgroundColor }}\"\n igxRipple=\"{{ rightButtonRipple }}\" (click)=\"onInternalRightButtonSelect($event)\">\n {{ rightButtonLabel }}\n </button>\n </div>\n <ng-content *ngIf=\"!leftButtonLabel && !rightButtonLabel\" select=\"igx-dialog-actions,[igxDialogActions]\"></ng-content>\n\n </div>\n</div>\n" }]
36858
37174
  }], ctorParameters: function () {
36859
37175
  return [{ type: i0.ElementRef }, { type: IgxNavigationService, decorators: [{
36860
37176
  type: Optional
@@ -36871,6 +37187,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
36871
37187
  type: Input
36872
37188
  }], closeOnEscape: [{
36873
37189
  type: Input
37190
+ }], focusTrap: [{
37191
+ type: Input
36874
37192
  }], title: [{
36875
37193
  type: Input
36876
37194
  }], message: [{
@@ -36932,14 +37250,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
36932
37250
  class IgxDialogModule {
36933
37251
  }
36934
37252
  IgxDialogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
36935
- IgxDialogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxDialogModule, declarations: [IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective], imports: [CommonModule, IgxToggleModule, IgxButtonModule, IgxRippleModule, IgxFocusModule], exports: [IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective] });
36936
- IgxDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxDialogModule, imports: [[CommonModule, IgxToggleModule, IgxButtonModule, IgxRippleModule, IgxFocusModule]] });
37253
+ IgxDialogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxDialogModule, declarations: [IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective], imports: [CommonModule, IgxToggleModule, IgxButtonModule, IgxRippleModule, IgxFocusModule, IgxFocusTrapModule], exports: [IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective] });
37254
+ IgxDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxDialogModule, imports: [[CommonModule, IgxToggleModule, IgxButtonModule, IgxRippleModule, IgxFocusModule, IgxFocusTrapModule]] });
36937
37255
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxDialogModule, decorators: [{
36938
37256
  type: NgModule,
36939
37257
  args: [{
36940
37258
  declarations: [IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective],
36941
37259
  exports: [IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective],
36942
- imports: [CommonModule, IgxToggleModule, IgxButtonModule, IgxRippleModule, IgxFocusModule]
37260
+ imports: [CommonModule, IgxToggleModule, IgxButtonModule, IgxRippleModule, IgxFocusModule, IgxFocusTrapModule]
36943
37261
  }]
36944
37262
  }] });
36945
37263
 
@@ -45283,7 +45601,7 @@ class IgxColumnComponent {
45283
45601
  * @memberof IgxColumnComponent
45284
45602
  */
45285
45603
  get index() {
45286
- return this.grid.columns.indexOf(this);
45604
+ return this.grid.columnsCollection.indexOf(this);
45287
45605
  }
45288
45606
  /**
45289
45607
  * Gets whether the column is `pinned`.
@@ -45570,7 +45888,7 @@ class IgxColumnComponent {
45570
45888
  /**
45571
45889
  * Gets the cells of the column.
45572
45890
  * ```typescript
45573
- * let columnCells = this.column._cells;
45891
+ * let columnCells = this.column.cells;
45574
45892
  * ```
45575
45893
  *
45576
45894
  */
@@ -46116,7 +46434,7 @@ class IgxColumnComponent {
46116
46434
  grid.resetCaches();
46117
46435
  grid.notifyChanges();
46118
46436
  if (this.columnLayoutChild) {
46119
- this.grid.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
46437
+ this.grid.columnList.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
46120
46438
  }
46121
46439
  this.grid.filteringService.refreshExpressions();
46122
46440
  const eventArgs = { column: this, insertAtIndex: index, isPinned: true };
@@ -46183,7 +46501,7 @@ class IgxColumnComponent {
46183
46501
  grid.resetCaches();
46184
46502
  grid.notifyChanges();
46185
46503
  if (this.columnLayoutChild) {
46186
- this.grid.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
46504
+ this.grid.columnList.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
46187
46505
  }
46188
46506
  this.grid.filteringService.refreshExpressions();
46189
46507
  this.grid.columnPinned.emit({ column: this, insertAtIndex: index, isPinned: false });
@@ -47682,7 +48000,7 @@ class IgxColumnActionsComponent {
47682
48000
  ngDoCheck() {
47683
48001
  var _a;
47684
48002
  if (this._differ) {
47685
- const changes = this._differ.diff((_a = this.grid) === null || _a === void 0 ? void 0 : _a.columns);
48003
+ const changes = this._differ.diff((_a = this.grid) === null || _a === void 0 ? void 0 : _a.columnList);
47686
48004
  if (changes) {
47687
48005
  this.pipeTrigger++;
47688
48006
  }
@@ -47719,10 +48037,10 @@ class IgxColumnActionsComponent {
47719
48037
  }
47720
48038
  }
47721
48039
  IgxColumnActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxColumnActionsComponent, deps: [{ token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component });
47722
- IgxColumnActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxColumnActionsComponent, selector: "igx-column-actions", inputs: { grid: "grid", indentation: "indentation", columnsAreaMaxHeight: "columnsAreaMaxHeight", hideFilter: "hideFilter", title: "title", filterColumnsPrompt: "filterColumnsPrompt", filterCriteria: "filterCriteria", columnDisplayOrder: "columnDisplayOrder", uncheckAllText: "uncheckAllText", checkAllText: "checkAllText", id: "id" }, outputs: { columnToggled: "columnToggled" }, host: { properties: { "attr.class": "this.cssClass", "attr.id": "this.id" } }, viewQueries: [{ propertyName: "columnItems", predicate: IgxCheckboxComponent, descendants: true }], ngImport: i0, template: "<div class=\"igx-column-actions__header\">\n <h4 [attr.id]='titleID' class=\"igx-column-actions__header-title\" *ngIf=\"title\">{{ title }}</h4>\n\n <igx-input-group class=\"igx-column-actions__header-input\" *ngIf=\"!hideFilter\">\n <input igxInput\n type=\"text\"\n [attr.aria-describedby]='titleID'\n [(ngModel)]=\"filterCriteria\"\n [placeholder]=\"filterColumnsPrompt\"\n autocomplete=\"off\" />\n </igx-input-group>\n</div>\n\n<div class=\"igx-column-actions__columns\" tabindex=\"0\"\n [style.max-height]=\"columnsAreaMaxHeight\">\n <igx-checkbox\n *ngFor=\"let column of grid?.columns\n | columnActionEnabled:actionsDirective.actionEnabledColumnsFilter:pipeTrigger\n | filterActionColumns:filterCriteria:pipeTrigger\n | sortActionColumns:columnDisplayOrder:pipeTrigger;\"\n class=\"igx-column-actions__columns-item\"\n [readonly]=\"true\"\n (click)=\"toggleColumn(column)\"\n [checked]=\"actionsDirective.columnChecked(column)\"\n [style.margin-left.px]=\"column.level * indentation\">\n {{ column.header || column.field }}\n </igx-checkbox>\n</div>\n\n<div class=\"igx-column-actions__buttons\">\n <button igxButton igxRipple (click)=\"uncheckAllColumns()\" [disabled]=\"uncheckAllDisabled\">{{ uncheckAllText }}</button>\n <button igxButton igxRipple (click)=\"checkAllColumns()\" [disabled]=\"checkAllDisabled\">{{ checkAllText }}</button>\n</div>\n", components: [{ type: i0.forwardRef(function () { return IgxInputGroupComponent; }), selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { type: i0.forwardRef(function () { return IgxCheckboxComponent; }), selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }], directives: [{ type: i0.forwardRef(function () { return i4.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i12.DefaultValueAccessor; }), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i0.forwardRef(function () { return IgxInputDirective; }), selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { type: i0.forwardRef(function () { return i12.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { type: i0.forwardRef(function () { return i12.NgModel; }), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i0.forwardRef(function () { return i4.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i0.forwardRef(function () { return IgxButtonDirective; }), selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: i0.forwardRef(function () { return IgxRippleDirective; }), selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }], pipes: { "sortActionColumns": i0.forwardRef(function () { return IgxSortActionColumnsPipe; }), "filterActionColumns": i0.forwardRef(function () { return IgxFilterActionColumnsPipe; }), "columnActionEnabled": i0.forwardRef(function () { return IgxColumnActionEnabledPipe; }) } });
48040
+ IgxColumnActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxColumnActionsComponent, selector: "igx-column-actions", inputs: { grid: "grid", indentation: "indentation", columnsAreaMaxHeight: "columnsAreaMaxHeight", hideFilter: "hideFilter", title: "title", filterColumnsPrompt: "filterColumnsPrompt", filterCriteria: "filterCriteria", columnDisplayOrder: "columnDisplayOrder", uncheckAllText: "uncheckAllText", checkAllText: "checkAllText", id: "id" }, outputs: { columnToggled: "columnToggled" }, host: { properties: { "attr.class": "this.cssClass", "attr.id": "this.id" } }, viewQueries: [{ propertyName: "columnItems", predicate: IgxCheckboxComponent, descendants: true }], ngImport: i0, template: "<div class=\"igx-column-actions__header\">\n <h4 [attr.id]='titleID' class=\"igx-column-actions__header-title\" *ngIf=\"title\">{{ title }}</h4>\n\n <igx-input-group class=\"igx-column-actions__header-input\" *ngIf=\"!hideFilter\">\n <input igxInput\n type=\"text\"\n [attr.aria-describedby]='titleID'\n [(ngModel)]=\"filterCriteria\"\n [placeholder]=\"filterColumnsPrompt\"\n autocomplete=\"off\" />\n </igx-input-group>\n</div>\n\n<div class=\"igx-column-actions__columns\" tabindex=\"0\"\n [style.max-height]=\"columnsAreaMaxHeight\">\n <igx-checkbox\n *ngFor=\"let column of $any(grid)?.columnsCollection\n | columnActionEnabled:actionsDirective.actionEnabledColumnsFilter:pipeTrigger\n | filterActionColumns:filterCriteria:pipeTrigger\n | sortActionColumns:columnDisplayOrder:pipeTrigger;\"\n class=\"igx-column-actions__columns-item\"\n [readonly]=\"true\"\n (click)=\"toggleColumn(column)\"\n [checked]=\"actionsDirective.columnChecked(column)\"\n [style.margin-left.px]=\"column.level * indentation\">\n {{ column.header || column.field }}\n </igx-checkbox>\n</div>\n\n<div class=\"igx-column-actions__buttons\">\n <button igxButton igxRipple (click)=\"uncheckAllColumns()\" [disabled]=\"uncheckAllDisabled\">{{ uncheckAllText }}</button>\n <button igxButton igxRipple (click)=\"checkAllColumns()\" [disabled]=\"checkAllDisabled\">{{ checkAllText }}</button>\n</div>\n", components: [{ type: i0.forwardRef(function () { return IgxInputGroupComponent; }), selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { type: i0.forwardRef(function () { return IgxCheckboxComponent; }), selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }], directives: [{ type: i0.forwardRef(function () { return i4.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i12.DefaultValueAccessor; }), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i0.forwardRef(function () { return IgxInputDirective; }), selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { type: i0.forwardRef(function () { return i12.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { type: i0.forwardRef(function () { return i12.NgModel; }), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i0.forwardRef(function () { return i4.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i0.forwardRef(function () { return IgxButtonDirective; }), selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: i0.forwardRef(function () { return IgxRippleDirective; }), selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }], pipes: { "sortActionColumns": i0.forwardRef(function () { return IgxSortActionColumnsPipe; }), "filterActionColumns": i0.forwardRef(function () { return IgxFilterActionColumnsPipe; }), "columnActionEnabled": i0.forwardRef(function () { return IgxColumnActionEnabledPipe; }) } });
47723
48041
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxColumnActionsComponent, decorators: [{
47724
48042
  type: Component,
47725
- args: [{ selector: 'igx-column-actions', template: "<div class=\"igx-column-actions__header\">\n <h4 [attr.id]='titleID' class=\"igx-column-actions__header-title\" *ngIf=\"title\">{{ title }}</h4>\n\n <igx-input-group class=\"igx-column-actions__header-input\" *ngIf=\"!hideFilter\">\n <input igxInput\n type=\"text\"\n [attr.aria-describedby]='titleID'\n [(ngModel)]=\"filterCriteria\"\n [placeholder]=\"filterColumnsPrompt\"\n autocomplete=\"off\" />\n </igx-input-group>\n</div>\n\n<div class=\"igx-column-actions__columns\" tabindex=\"0\"\n [style.max-height]=\"columnsAreaMaxHeight\">\n <igx-checkbox\n *ngFor=\"let column of grid?.columns\n | columnActionEnabled:actionsDirective.actionEnabledColumnsFilter:pipeTrigger\n | filterActionColumns:filterCriteria:pipeTrigger\n | sortActionColumns:columnDisplayOrder:pipeTrigger;\"\n class=\"igx-column-actions__columns-item\"\n [readonly]=\"true\"\n (click)=\"toggleColumn(column)\"\n [checked]=\"actionsDirective.columnChecked(column)\"\n [style.margin-left.px]=\"column.level * indentation\">\n {{ column.header || column.field }}\n </igx-checkbox>\n</div>\n\n<div class=\"igx-column-actions__buttons\">\n <button igxButton igxRipple (click)=\"uncheckAllColumns()\" [disabled]=\"uncheckAllDisabled\">{{ uncheckAllText }}</button>\n <button igxButton igxRipple (click)=\"checkAllColumns()\" [disabled]=\"checkAllDisabled\">{{ checkAllText }}</button>\n</div>\n" }]
48043
+ args: [{ selector: 'igx-column-actions', template: "<div class=\"igx-column-actions__header\">\n <h4 [attr.id]='titleID' class=\"igx-column-actions__header-title\" *ngIf=\"title\">{{ title }}</h4>\n\n <igx-input-group class=\"igx-column-actions__header-input\" *ngIf=\"!hideFilter\">\n <input igxInput\n type=\"text\"\n [attr.aria-describedby]='titleID'\n [(ngModel)]=\"filterCriteria\"\n [placeholder]=\"filterColumnsPrompt\"\n autocomplete=\"off\" />\n </igx-input-group>\n</div>\n\n<div class=\"igx-column-actions__columns\" tabindex=\"0\"\n [style.max-height]=\"columnsAreaMaxHeight\">\n <igx-checkbox\n *ngFor=\"let column of $any(grid)?.columnsCollection\n | columnActionEnabled:actionsDirective.actionEnabledColumnsFilter:pipeTrigger\n | filterActionColumns:filterCriteria:pipeTrigger\n | sortActionColumns:columnDisplayOrder:pipeTrigger;\"\n class=\"igx-column-actions__columns-item\"\n [readonly]=\"true\"\n (click)=\"toggleColumn(column)\"\n [checked]=\"actionsDirective.columnChecked(column)\"\n [style.margin-left.px]=\"column.level * indentation\">\n {{ column.header || column.field }}\n </igx-checkbox>\n</div>\n\n<div class=\"igx-column-actions__buttons\">\n <button igxButton igxRipple (click)=\"uncheckAllColumns()\" [disabled]=\"uncheckAllDisabled\">{{ uncheckAllText }}</button>\n <button igxButton igxRipple (click)=\"checkAllColumns()\" [disabled]=\"checkAllDisabled\">{{ checkAllText }}</button>\n</div>\n" }]
47726
48044
  }], ctorParameters: function () { return [{ type: i0.IterableDiffers }]; }, propDecorators: { grid: [{
47727
48045
  type: Input
47728
48046
  }], indentation: [{
@@ -48555,7 +48873,7 @@ class BaseRow {
48555
48873
  return (_b = this._data) !== null && _b !== void 0 ? _b : this.grid.dataView[this.index];
48556
48874
  }
48557
48875
  /**
48558
- * @deprecated Use 'data' instead.
48876
+ * @deprecated Use 'data' instead
48559
48877
  *
48560
48878
  * The data record that populates the row
48561
48879
  */
@@ -48563,8 +48881,7 @@ class BaseRow {
48563
48881
  return this.data;
48564
48882
  }
48565
48883
  /**
48566
- * @deprecated Use 'key' instead.
48567
- *
48884
+ * @deprecated Use 'key' instead
48568
48885
  */
48569
48886
  get rowID() {
48570
48887
  return this.key;
@@ -48733,12 +49050,6 @@ class BaseRow {
48733
49050
  this.grid.deleteRowById(this.key);
48734
49051
  }
48735
49052
  }
48736
- __decorate([
48737
- DeprecateProperty(`'rowData' property is deprecated. Use 'data' instead.`)
48738
- ], BaseRow.prototype, "rowData", null);
48739
- __decorate([
48740
- DeprecateProperty(`'rowID' property is deprecated. Use 'key' instead.`)
48741
- ], BaseRow.prototype, "rowID", null);
48742
49053
  class IgxGridRow extends BaseRow {
48743
49054
  /**
48744
49055
  * @hidden
@@ -50275,7 +50586,7 @@ class IgxGroupByAreaDirective {
50275
50586
  const drag = event.detail.owner;
50276
50587
  if (drag instanceof IgxColumnMovingDragDirective) {
50277
50588
  const column = drag.column;
50278
- if (this.grid.columns.indexOf(column) < 0) {
50589
+ if (!this.grid.columnList.find(c => c === column)) {
50279
50590
  return;
50280
50591
  }
50281
50592
  const isGrouped = this.expressions.findIndex((item) => item.fieldName === column.field) !== -1;
@@ -50737,7 +51048,7 @@ class IgxAdvancedFilteringDialogComponent {
50737
51048
  * @hidden @internal
50738
51049
  */
50739
51050
  get filterableColumns() {
50740
- return this.grid.columns.filter((col) => !col.columnGroup && col.filterable);
51051
+ return this.grid.columnList.filter((col) => !col.columnGroup && col.filterable);
50741
51052
  }
50742
51053
  /**
50743
51054
  * @hidden @internal
@@ -52441,10 +52752,10 @@ class IgxFilteringService {
52441
52752
  const filterIconTarget = element.querySelector(`.${filterIcon}`);
52442
52753
  const { id, ref } = this.grid.createFilterDropdown(column, Object.assign(Object.assign({}, this._filterMenuOverlaySettings), { target: filterIconTarget }));
52443
52754
  this._overlayService.opening
52444
- .pipe(takeUntil(this.destroy$), first$1(overlay => overlay.id === id))
52755
+ .pipe(first$1(overlay => overlay.id === id), takeUntil(this.destroy$))
52445
52756
  .subscribe(() => this.lastActiveNode = this.grid.navigation.activeNode);
52446
52757
  this._overlayService.closed
52447
- .pipe(takeUntil(this.destroy$), first$1(overlay => overlay.id === id))
52758
+ .pipe(first$1(overlay => overlay.id === id), takeUntil(this.destroy$))
52448
52759
  .subscribe(() => {
52449
52760
  this._overlayService.detach(id);
52450
52761
  ref === null || ref === void 0 ? void 0 : ref.destroy();
@@ -52561,7 +52872,7 @@ class IgxFilteringService {
52561
52872
  grid.paginator.page = 0;
52562
52873
  }
52563
52874
  filteringTree.filteringOperands = [];
52564
- for (const column of grid.columns) {
52875
+ for (const column of grid.columnList) {
52565
52876
  this.prepare_filtering_expression(filteringTree, column.field, term, condition, ignoreCase || column.filteringIgnoreCase);
52566
52877
  }
52567
52878
  grid.filteringExpressionsTree = filteringTree;
@@ -52595,7 +52906,7 @@ class IgxFilteringService {
52595
52906
  expressions.length = 0;
52596
52907
  }
52597
52908
  else {
52598
- this.grid.columns.forEach(c => {
52909
+ this.grid.columnList.forEach(c => {
52599
52910
  const expressions = this.getExpressions(c.field);
52600
52911
  expressions.length = 0;
52601
52912
  });
@@ -52625,7 +52936,7 @@ class IgxFilteringService {
52625
52936
  const grid = this.grid;
52626
52937
  const filteringTree = grid.filteringExpressionsTree;
52627
52938
  const newFilteringTree = new FilteringExpressionsTree(filteringTree.operator, filteringTree.fieldName);
52628
- for (const column of grid.columns) {
52939
+ for (const column of grid.columnList) {
52629
52940
  this.prepare_filtering_expression(newFilteringTree, column.field, value, condition, ignoreCase || column.filteringIgnoreCase);
52630
52941
  }
52631
52942
  const eventArgs = { owner: grid, filteringExpressions: newFilteringTree, cancel: false };
@@ -52655,7 +52966,7 @@ class IgxFilteringService {
52655
52966
  */
52656
52967
  getExpressions(columnId) {
52657
52968
  if (!this.columnToExpressionsMap.has(columnId)) {
52658
- const column = this.grid.columns.find((col) => col.field === columnId);
52969
+ const column = this.grid.columnList.find((col) => col.field === columnId);
52659
52970
  const expressionUIs = new Array();
52660
52971
  if (column) {
52661
52972
  this.generateExpressionsList(column.filteringExpressionsTree, this.grid.filteringExpressionsTree.operator, expressionUIs);
@@ -52672,7 +52983,7 @@ class IgxFilteringService {
52672
52983
  if (!this.isFiltering) {
52673
52984
  this.columnsWithComplexFilter.clear();
52674
52985
  this.columnToExpressionsMap.forEach((value, key) => {
52675
- const column = this.grid.columns.find((col) => col.field === key);
52986
+ const column = this.grid.columnList.find((col) => col.field === key);
52676
52987
  if (column) {
52677
52988
  value.length = 0;
52678
52989
  this.generateExpressionsList(column.filteringExpressionsTree, this.grid.filteringExpressionsTree.operator, value);
@@ -52745,7 +53056,7 @@ class IgxFilteringService {
52745
53056
  if (this.columnsWithComplexFilter.has(columnId)) {
52746
53057
  return true;
52747
53058
  }
52748
- const column = this.grid.columns.find((col) => col.field === columnId);
53059
+ const column = this.grid.columnList.find((col) => col.field === columnId);
52749
53060
  const isComplex = column && this.isFilteringTreeComplex(column.filteringExpressionsTree);
52750
53061
  if (isComplex) {
52751
53062
  this.columnsWithComplexFilter.add(columnId);
@@ -54750,10 +55061,10 @@ class IgxGridHeaderRowComponent {
54750
55061
  }
54751
55062
  }
54752
55063
  IgxGridHeaderRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxGridHeaderRowComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
54753
- IgxGridHeaderRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxGridHeaderRowComponent, selector: "igx-grid-header-row", inputs: { grid: "grid", pinnedColumnCollection: "pinnedColumnCollection", unpinnedColumnCollection: "unpinnedColumnCollection", activeDescendant: "activeDescendant", hasMRL: "hasMRL", width: "width", density: "density" }, host: { properties: { "class.igx-grid-thead--cosy": "this.cosyStyle", "class.igx-grid-thead--compact": "this.compactStyle" } }, viewQueries: [{ propertyName: "headerContainer", first: true, predicate: ["headerVirtualContainer"], descendants: true, read: IgxGridForOfDirective, static: true }, { propertyName: "headerDragContainer", first: true, predicate: ["headerDragContainer"], descendants: true }, { propertyName: "headerSelectorContainer", first: true, predicate: ["headerSelectorContainer"], descendants: true }, { propertyName: "headerGroupContainer", first: true, predicate: ["headerGroupContainer"], descendants: true }, { propertyName: "headSelectorBaseTemplate", first: true, predicate: ["headSelectorBaseTemplate"], descendants: true }, { propertyName: "filterRow", first: true, predicate: IgxGridFilteringRowComponent, descendants: true }, { propertyName: "headerHierarchyExpander", first: true, predicate: ["headerHierarchyExpander"], descendants: true }, { propertyName: "_groups", predicate: IgxGridHeaderGroupComponent, descendants: true }], ngImport: i0, template: "<div role=\"rowgroup\" class=\"igx-grid-thead__wrapper\" [style.width.px]=\"width\"\n [attr.aria-activedescendant]=\"activeDescendant\" [class.igx-grid__tr--mrl]=\"hasMRL\">\n\n <!-- Column headers area -->\n <div class=\"igx-grid__tr\" role=\"row\" [style.width.px]=\"width\">\n\n <!-- Left column moving area -->\n <ng-container *ngIf=\"grid.hasMovableColumns && grid.columnInDrag && pinnedColumnCollection.length <= 0\">\n <span id=\"left\" class=\"igx-grid__scroll-on-drag-left\" droppable=\"true\" [style.left.px]=\"grid.pinnedWidth\"\n [igxColumnMovingDrop]=\"headerContainer\"></span>\n </ng-container>\n <ng-container *ngIf=\"grid.hasMovableColumns && grid.columnInDrag && pinnedColumnCollection.length > 0\">\n <span id=\"left\" class=\"igx-grid__scroll-on-drag-pinned\" droppable=\"true\" [style.left.px]=\"grid.pinnedWidth\"\n [igxColumnMovingDrop]=\"headerContainer\"></span>\n </ng-container>\n\n <!-- Row dragging area -->\n <ng-container *ngIf=\"grid.rowDraggable\">\n <div #headerDragContainer class=\"igx-grid__drag-indicator igx-grid__tr-action\" (pointerdown)=\"$event.preventDefault()\" [class.igx-grid__drag-indicator--header]=\"!grid.isRowSelectable\">\n <div style=\"visibility: hidden;\">\n <ng-container *ngTemplateOutlet=\"grid.dragIndicatorIconTemplate || grid.dragIndicatorIconBase\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Row selectors area -->\n <ng-container *ngIf=\"grid.showRowSelectors\">\n <div #headerSelectorContainer class=\"igx-grid__cbx-selection igx-grid__tr-action\"\n [class.igx-grid__cbx-selection--push]=\"grid.filteringService.isFilterRowVisible\"\n (click)=\"headerRowSelection($event)\"\n (pointerdown)=\"$event.preventDefault()\">\n <ng-container #headSelector\n *ngTemplateOutlet=\"grid.headSelectorTemplate || headSelectorBaseTemplate; context: rowSelectorsContext\">\n </ng-container>\n </div>\n </ng-container>\n\n <!-- Hierarchical grids expand all area -->\n <ng-container *ngIf=\"isHierarchicalGrid\">\n <div #headerHierarchyExpander\n (click)=\"grid.toggleAll()\"\n (pointerdown)=\"$event.preventDefault()\"\n [hidden]=\"!grid.hasExpandableChildren || !grid.hasVisibleColumns\"\n [ngClass]=\"{\n 'igx-grid__hierarchical-expander igx-grid__hierarchical-expander--header igx-grid__tr-action': grid.hasExpandableChildren,\n 'igx-grid__hierarchical-expander--push': grid.filteringService.isFilterRowVisible,\n 'igx-grid__hierarchical-expander--no-border': grid.isRowSelectable || grid.rowDraggable\n }\">\n <ng-container *ngTemplateOutlet=\"grid.iconTemplate; context: { $implicit: grid }\"></ng-container>\n </div>\n </ng-container>\n\n\n <!-- Grouping icon toggle area -->\n <ng-container *ngIf=\"grid?.groupingExpressions?.length\">\n <div #headerGroupContainer class=\"{{ indentationCSSClasses }}\"\n (click)=\"grid.toggleAllGroupRows()\"\n (pointerdown)=\"$event.preventDefault()\">\n <ng-container *ngTemplateOutlet=\"grid.iconTemplate\"></ng-container>\n </div>\n </ng-container>\n\n <!-- Pinned columns collection from the start -->\n <ng-container *ngIf=\"pinnedColumnCollection.length && grid.isPinningToStart\">\n <ng-container *ngFor=\"let column of pinnedColumnCollection | igxTopLevel\">\n <igx-grid-header-group\n [ngClass]=\"column.headerGroupClasses\"\n [ngStyle]=\"column.headerGroupStyles | igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [column]=\"column\"\n [style.min-width]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.flex-basis]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\">\n </igx-grid-header-group>\n </ng-container>\n </ng-container>\n\n <!-- Unpinned columns collection -->\n <ng-template igxGridFor #headerVirtualContainer let-column\n [igxGridForOf]=\"unpinnedColumnCollection | igxTopLevel\"\n [igxForScrollContainer]=\"grid.parentVirtDir\"\n [igxForContainerSize]=\"grid.unpinnedWidth\"\n [igxForTrackBy]=\"grid.trackColumnChanges\"\n [igxForSizePropName]=\"'calcPixelWidth'\"\n [igxForScrollOrientation]=\"'horizontal'\"\n >\n <igx-grid-header-group\n [ngClass]=\"column.headerGroupClasses\"\n [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [column]=\"column\"\n [style.min-width]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.flex-basis]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\">\n </igx-grid-header-group>\n </ng-template>\n\n <!-- Pinned columns collection at the end -->\n <ng-container *ngIf=\"pinnedColumnCollection.length && !grid.isPinningToStart\">\n <ng-container *ngFor=\"let column of pinnedColumnCollection | igxTopLevel\">\n <igx-grid-header-group\n [ngClass]=\"column.headerGroupClasses\"\n [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [column]=\"column\"\n [style.min-width]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.flex-basis]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.left]=\"column.rightPinnedOffset\">\n </igx-grid-header-group>\n </ng-container>\n </ng-container>\n </div>\n\n <!-- Filter row area -->\n <ng-container *ngIf=\"grid.filteringService.isFilterRowVisible\">\n <igx-grid-filtering-row #filteringRow\n [column]=\"grid.filteringService.filteredColumn\"\n [style.width.px]=\"width\">\n </igx-grid-filtering-row>\n </ng-container>\n\n <!-- Right column moving area -->\n <ng-container *ngIf=\"grid.hasMovableColumns && grid.columnInDrag\">\n <span id=\"right\" class=\"igx-grid__scroll-on-drag-right\" droppable=\"true\" [igxColumnMovingDrop]=\"headerContainer\"></span>\n </ng-container>\n</div>\n\n<!-- Header thumb area -->\n<div class=\"igx-grid-thead__thumb\" [hidden]=\"!grid.hasVerticalScroll()\" [style.width.px]=\"grid.scrollSize\"></div>\n\n<!-- Default row selection header checkbox template -->\n<ng-template #headSelectorBaseTemplate igxHeadSelector let-context>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [tabindex]=\"-1\"\n [readonly]=\"true\"\n [checked]=\"context.selectedCount > 0 && context.totalCount === context.selectedCount\"\n [disableRipple]=\"true\"\n [ngStyle]=\"{'visibility': grid.isMultiRowSelectionEnabled? 'visible' : 'hidden' }\"\n [indeterminate]=\"context.selectedCount > 0 && context.selectedCount !== context.totalCount\"\n [aria-label]=\"grid.headSelectorBaseAriaLabel\"\n #headerCheckbox>\n </igx-checkbox>\n </div>\n</ng-template>\n", components: [{ type: IgxGridHeaderGroupComponent, selector: "igx-grid-header-group", inputs: ["column"] }, { type: IgxGridFilteringRowComponent, selector: "igx-grid-filtering-row", inputs: ["column", "value"] }, { type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: IgxColumnMovingDropDirective, selector: "[igxColumnMovingDrop]", inputs: ["igxColumnMovingDrop"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: IgxGridForOfDirective, selector: "[igxGridFor][igxGridForOf]", inputs: ["igxGridForOf"], outputs: ["dataChanging"] }], pipes: { "igxTopLevel": IgxGridTopLevelColumns, "igxHeaderGroupStyle": IgxHeaderGroupStylePipe, "igxHeaderGroupWidth": IgxHeaderGroupWidthPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
55064
+ IgxGridHeaderRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxGridHeaderRowComponent, selector: "igx-grid-header-row", inputs: { grid: "grid", pinnedColumnCollection: "pinnedColumnCollection", unpinnedColumnCollection: "unpinnedColumnCollection", activeDescendant: "activeDescendant", hasMRL: "hasMRL", width: "width", density: "density" }, host: { properties: { "class.igx-grid-thead--cosy": "this.cosyStyle", "class.igx-grid-thead--compact": "this.compactStyle" } }, viewQueries: [{ propertyName: "headerContainer", first: true, predicate: ["headerVirtualContainer"], descendants: true, read: IgxGridForOfDirective, static: true }, { propertyName: "headerDragContainer", first: true, predicate: ["headerDragContainer"], descendants: true }, { propertyName: "headerSelectorContainer", first: true, predicate: ["headerSelectorContainer"], descendants: true }, { propertyName: "headerGroupContainer", first: true, predicate: ["headerGroupContainer"], descendants: true }, { propertyName: "headSelectorBaseTemplate", first: true, predicate: ["headSelectorBaseTemplate"], descendants: true }, { propertyName: "filterRow", first: true, predicate: IgxGridFilteringRowComponent, descendants: true }, { propertyName: "headerHierarchyExpander", first: true, predicate: ["headerHierarchyExpander"], descendants: true }, { propertyName: "_groups", predicate: IgxGridHeaderGroupComponent, descendants: true }], ngImport: i0, template: "<div role=\"rowgroup\" class=\"igx-grid-thead__wrapper\" [style.width.px]=\"width\"\n [class.igx-grid__tr--mrl]=\"hasMRL\">\n\n <!-- Column headers area -->\n <div class=\"igx-grid__tr\" role=\"row\" [style.width.px]=\"width\">\n\n <!-- Left column moving area -->\n <ng-container *ngIf=\"grid.hasMovableColumns && grid.columnInDrag && pinnedColumnCollection.length <= 0\">\n <span id=\"left\" class=\"igx-grid__scroll-on-drag-left\" droppable=\"true\" [style.left.px]=\"grid.pinnedWidth\"\n [igxColumnMovingDrop]=\"headerContainer\"></span>\n </ng-container>\n <ng-container *ngIf=\"grid.hasMovableColumns && grid.columnInDrag && pinnedColumnCollection.length > 0\">\n <span id=\"left\" class=\"igx-grid__scroll-on-drag-pinned\" droppable=\"true\" [style.left.px]=\"grid.pinnedWidth\"\n [igxColumnMovingDrop]=\"headerContainer\"></span>\n </ng-container>\n\n <!-- Row dragging area -->\n <ng-container *ngIf=\"grid.rowDraggable\">\n <div #headerDragContainer class=\"igx-grid__drag-indicator igx-grid__tr-action\" (pointerdown)=\"$event.preventDefault()\" [class.igx-grid__drag-indicator--header]=\"!grid.isRowSelectable\">\n <div style=\"visibility: hidden;\">\n <ng-container *ngTemplateOutlet=\"grid.dragIndicatorIconTemplate || grid.dragIndicatorIconBase\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Row selectors area -->\n <ng-container *ngIf=\"grid.showRowSelectors\">\n <div #headerSelectorContainer class=\"igx-grid__cbx-selection igx-grid__tr-action\"\n [class.igx-grid__cbx-selection--push]=\"grid.filteringService.isFilterRowVisible\"\n (click)=\"headerRowSelection($event)\"\n (pointerdown)=\"$event.preventDefault()\">\n <ng-container #headSelector\n *ngTemplateOutlet=\"grid.headSelectorTemplate || headSelectorBaseTemplate; context: rowSelectorsContext\">\n </ng-container>\n </div>\n </ng-container>\n\n <!-- Hierarchical grids expand all area -->\n <ng-container *ngIf=\"isHierarchicalGrid\">\n <div #headerHierarchyExpander\n (click)=\"grid.toggleAll()\"\n (pointerdown)=\"$event.preventDefault()\"\n [hidden]=\"!grid.hasExpandableChildren || !grid.hasVisibleColumns\"\n [ngClass]=\"{\n 'igx-grid__hierarchical-expander igx-grid__hierarchical-expander--header igx-grid__tr-action': grid.hasExpandableChildren,\n 'igx-grid__hierarchical-expander--push': grid.filteringService.isFilterRowVisible,\n 'igx-grid__hierarchical-expander--no-border': grid.isRowSelectable || grid.rowDraggable\n }\">\n <ng-container *ngTemplateOutlet=\"grid.iconTemplate; context: { $implicit: grid }\"></ng-container>\n </div>\n </ng-container>\n\n\n <!-- Grouping icon toggle area -->\n <ng-container *ngIf=\"grid?.groupingExpressions?.length\">\n <div #headerGroupContainer class=\"{{ indentationCSSClasses }}\"\n (click)=\"grid.toggleAllGroupRows()\"\n (pointerdown)=\"$event.preventDefault()\">\n <ng-container *ngTemplateOutlet=\"grid.iconTemplate\"></ng-container>\n </div>\n </ng-container>\n\n <!-- Pinned columns collection from the start -->\n <ng-container *ngIf=\"pinnedColumnCollection.length && grid.isPinningToStart\">\n <ng-container *ngFor=\"let column of pinnedColumnCollection | igxTopLevel\">\n <igx-grid-header-group\n [ngClass]=\"column.headerGroupClasses\"\n [ngStyle]=\"column.headerGroupStyles | igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [column]=\"column\"\n [style.min-width]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.flex-basis]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\">\n </igx-grid-header-group>\n </ng-container>\n </ng-container>\n\n <!-- Unpinned columns collection -->\n <ng-template igxGridFor #headerVirtualContainer let-column\n [igxGridForOf]=\"unpinnedColumnCollection | igxTopLevel\"\n [igxForScrollContainer]=\"grid.parentVirtDir\"\n [igxForContainerSize]=\"grid.unpinnedWidth\"\n [igxForTrackBy]=\"grid.trackColumnChanges\"\n [igxForSizePropName]=\"'calcPixelWidth'\"\n [igxForScrollOrientation]=\"'horizontal'\"\n >\n <igx-grid-header-group\n [ngClass]=\"column.headerGroupClasses\"\n [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [column]=\"column\"\n [style.min-width]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.flex-basis]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\">\n </igx-grid-header-group>\n </ng-template>\n\n <!-- Pinned columns collection at the end -->\n <ng-container *ngIf=\"pinnedColumnCollection.length && !grid.isPinningToStart\">\n <ng-container *ngFor=\"let column of pinnedColumnCollection | igxTopLevel\">\n <igx-grid-header-group\n [ngClass]=\"column.headerGroupClasses\"\n [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [column]=\"column\"\n [style.min-width]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.flex-basis]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.left]=\"column.rightPinnedOffset\">\n </igx-grid-header-group>\n </ng-container>\n </ng-container>\n </div>\n\n <!-- Filter row area -->\n <ng-container *ngIf=\"grid.filteringService.isFilterRowVisible\">\n <igx-grid-filtering-row #filteringRow\n [column]=\"grid.filteringService.filteredColumn\"\n [style.width.px]=\"width\">\n </igx-grid-filtering-row>\n </ng-container>\n\n <!-- Right column moving area -->\n <ng-container *ngIf=\"grid.hasMovableColumns && grid.columnInDrag\">\n <span id=\"right\" class=\"igx-grid__scroll-on-drag-right\" droppable=\"true\" [igxColumnMovingDrop]=\"headerContainer\"></span>\n </ng-container>\n</div>\n\n<!-- Header thumb area -->\n<div class=\"igx-grid-thead__thumb\" [hidden]=\"!grid.hasVerticalScroll()\" [style.width.px]=\"grid.scrollSize\"></div>\n\n<!-- Default row selection header checkbox template -->\n<ng-template #headSelectorBaseTemplate igxHeadSelector let-context>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [tabindex]=\"-1\"\n [readonly]=\"true\"\n [checked]=\"context.selectedCount > 0 && context.totalCount === context.selectedCount\"\n [disableRipple]=\"true\"\n [ngStyle]=\"{'visibility': grid.isMultiRowSelectionEnabled? 'visible' : 'hidden' }\"\n [indeterminate]=\"context.selectedCount > 0 && context.selectedCount !== context.totalCount\"\n [aria-label]=\"grid.headSelectorBaseAriaLabel\"\n #headerCheckbox>\n </igx-checkbox>\n </div>\n</ng-template>\n", components: [{ type: IgxGridHeaderGroupComponent, selector: "igx-grid-header-group", inputs: ["column"] }, { type: IgxGridFilteringRowComponent, selector: "igx-grid-filtering-row", inputs: ["column", "value"] }, { type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: IgxColumnMovingDropDirective, selector: "[igxColumnMovingDrop]", inputs: ["igxColumnMovingDrop"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: IgxGridForOfDirective, selector: "[igxGridFor][igxGridForOf]", inputs: ["igxGridForOf"], outputs: ["dataChanging"] }], pipes: { "igxTopLevel": IgxGridTopLevelColumns, "igxHeaderGroupStyle": IgxHeaderGroupStylePipe, "igxHeaderGroupWidth": IgxHeaderGroupWidthPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
54754
55065
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxGridHeaderRowComponent, decorators: [{
54755
55066
  type: Component,
54756
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-grid-header-row', template: "<div role=\"rowgroup\" class=\"igx-grid-thead__wrapper\" [style.width.px]=\"width\"\n [attr.aria-activedescendant]=\"activeDescendant\" [class.igx-grid__tr--mrl]=\"hasMRL\">\n\n <!-- Column headers area -->\n <div class=\"igx-grid__tr\" role=\"row\" [style.width.px]=\"width\">\n\n <!-- Left column moving area -->\n <ng-container *ngIf=\"grid.hasMovableColumns && grid.columnInDrag && pinnedColumnCollection.length <= 0\">\n <span id=\"left\" class=\"igx-grid__scroll-on-drag-left\" droppable=\"true\" [style.left.px]=\"grid.pinnedWidth\"\n [igxColumnMovingDrop]=\"headerContainer\"></span>\n </ng-container>\n <ng-container *ngIf=\"grid.hasMovableColumns && grid.columnInDrag && pinnedColumnCollection.length > 0\">\n <span id=\"left\" class=\"igx-grid__scroll-on-drag-pinned\" droppable=\"true\" [style.left.px]=\"grid.pinnedWidth\"\n [igxColumnMovingDrop]=\"headerContainer\"></span>\n </ng-container>\n\n <!-- Row dragging area -->\n <ng-container *ngIf=\"grid.rowDraggable\">\n <div #headerDragContainer class=\"igx-grid__drag-indicator igx-grid__tr-action\" (pointerdown)=\"$event.preventDefault()\" [class.igx-grid__drag-indicator--header]=\"!grid.isRowSelectable\">\n <div style=\"visibility: hidden;\">\n <ng-container *ngTemplateOutlet=\"grid.dragIndicatorIconTemplate || grid.dragIndicatorIconBase\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Row selectors area -->\n <ng-container *ngIf=\"grid.showRowSelectors\">\n <div #headerSelectorContainer class=\"igx-grid__cbx-selection igx-grid__tr-action\"\n [class.igx-grid__cbx-selection--push]=\"grid.filteringService.isFilterRowVisible\"\n (click)=\"headerRowSelection($event)\"\n (pointerdown)=\"$event.preventDefault()\">\n <ng-container #headSelector\n *ngTemplateOutlet=\"grid.headSelectorTemplate || headSelectorBaseTemplate; context: rowSelectorsContext\">\n </ng-container>\n </div>\n </ng-container>\n\n <!-- Hierarchical grids expand all area -->\n <ng-container *ngIf=\"isHierarchicalGrid\">\n <div #headerHierarchyExpander\n (click)=\"grid.toggleAll()\"\n (pointerdown)=\"$event.preventDefault()\"\n [hidden]=\"!grid.hasExpandableChildren || !grid.hasVisibleColumns\"\n [ngClass]=\"{\n 'igx-grid__hierarchical-expander igx-grid__hierarchical-expander--header igx-grid__tr-action': grid.hasExpandableChildren,\n 'igx-grid__hierarchical-expander--push': grid.filteringService.isFilterRowVisible,\n 'igx-grid__hierarchical-expander--no-border': grid.isRowSelectable || grid.rowDraggable\n }\">\n <ng-container *ngTemplateOutlet=\"grid.iconTemplate; context: { $implicit: grid }\"></ng-container>\n </div>\n </ng-container>\n\n\n <!-- Grouping icon toggle area -->\n <ng-container *ngIf=\"grid?.groupingExpressions?.length\">\n <div #headerGroupContainer class=\"{{ indentationCSSClasses }}\"\n (click)=\"grid.toggleAllGroupRows()\"\n (pointerdown)=\"$event.preventDefault()\">\n <ng-container *ngTemplateOutlet=\"grid.iconTemplate\"></ng-container>\n </div>\n </ng-container>\n\n <!-- Pinned columns collection from the start -->\n <ng-container *ngIf=\"pinnedColumnCollection.length && grid.isPinningToStart\">\n <ng-container *ngFor=\"let column of pinnedColumnCollection | igxTopLevel\">\n <igx-grid-header-group\n [ngClass]=\"column.headerGroupClasses\"\n [ngStyle]=\"column.headerGroupStyles | igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [column]=\"column\"\n [style.min-width]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.flex-basis]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\">\n </igx-grid-header-group>\n </ng-container>\n </ng-container>\n\n <!-- Unpinned columns collection -->\n <ng-template igxGridFor #headerVirtualContainer let-column\n [igxGridForOf]=\"unpinnedColumnCollection | igxTopLevel\"\n [igxForScrollContainer]=\"grid.parentVirtDir\"\n [igxForContainerSize]=\"grid.unpinnedWidth\"\n [igxForTrackBy]=\"grid.trackColumnChanges\"\n [igxForSizePropName]=\"'calcPixelWidth'\"\n [igxForScrollOrientation]=\"'horizontal'\"\n >\n <igx-grid-header-group\n [ngClass]=\"column.headerGroupClasses\"\n [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [column]=\"column\"\n [style.min-width]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.flex-basis]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\">\n </igx-grid-header-group>\n </ng-template>\n\n <!-- Pinned columns collection at the end -->\n <ng-container *ngIf=\"pinnedColumnCollection.length && !grid.isPinningToStart\">\n <ng-container *ngFor=\"let column of pinnedColumnCollection | igxTopLevel\">\n <igx-grid-header-group\n [ngClass]=\"column.headerGroupClasses\"\n [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [column]=\"column\"\n [style.min-width]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.flex-basis]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.left]=\"column.rightPinnedOffset\">\n </igx-grid-header-group>\n </ng-container>\n </ng-container>\n </div>\n\n <!-- Filter row area -->\n <ng-container *ngIf=\"grid.filteringService.isFilterRowVisible\">\n <igx-grid-filtering-row #filteringRow\n [column]=\"grid.filteringService.filteredColumn\"\n [style.width.px]=\"width\">\n </igx-grid-filtering-row>\n </ng-container>\n\n <!-- Right column moving area -->\n <ng-container *ngIf=\"grid.hasMovableColumns && grid.columnInDrag\">\n <span id=\"right\" class=\"igx-grid__scroll-on-drag-right\" droppable=\"true\" [igxColumnMovingDrop]=\"headerContainer\"></span>\n </ng-container>\n</div>\n\n<!-- Header thumb area -->\n<div class=\"igx-grid-thead__thumb\" [hidden]=\"!grid.hasVerticalScroll()\" [style.width.px]=\"grid.scrollSize\"></div>\n\n<!-- Default row selection header checkbox template -->\n<ng-template #headSelectorBaseTemplate igxHeadSelector let-context>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [tabindex]=\"-1\"\n [readonly]=\"true\"\n [checked]=\"context.selectedCount > 0 && context.totalCount === context.selectedCount\"\n [disableRipple]=\"true\"\n [ngStyle]=\"{'visibility': grid.isMultiRowSelectionEnabled? 'visible' : 'hidden' }\"\n [indeterminate]=\"context.selectedCount > 0 && context.selectedCount !== context.totalCount\"\n [aria-label]=\"grid.headSelectorBaseAriaLabel\"\n #headerCheckbox>\n </igx-checkbox>\n </div>\n</ng-template>\n" }]
55067
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-grid-header-row', template: "<div role=\"rowgroup\" class=\"igx-grid-thead__wrapper\" [style.width.px]=\"width\"\n [class.igx-grid__tr--mrl]=\"hasMRL\">\n\n <!-- Column headers area -->\n <div class=\"igx-grid__tr\" role=\"row\" [style.width.px]=\"width\">\n\n <!-- Left column moving area -->\n <ng-container *ngIf=\"grid.hasMovableColumns && grid.columnInDrag && pinnedColumnCollection.length <= 0\">\n <span id=\"left\" class=\"igx-grid__scroll-on-drag-left\" droppable=\"true\" [style.left.px]=\"grid.pinnedWidth\"\n [igxColumnMovingDrop]=\"headerContainer\"></span>\n </ng-container>\n <ng-container *ngIf=\"grid.hasMovableColumns && grid.columnInDrag && pinnedColumnCollection.length > 0\">\n <span id=\"left\" class=\"igx-grid__scroll-on-drag-pinned\" droppable=\"true\" [style.left.px]=\"grid.pinnedWidth\"\n [igxColumnMovingDrop]=\"headerContainer\"></span>\n </ng-container>\n\n <!-- Row dragging area -->\n <ng-container *ngIf=\"grid.rowDraggable\">\n <div #headerDragContainer class=\"igx-grid__drag-indicator igx-grid__tr-action\" (pointerdown)=\"$event.preventDefault()\" [class.igx-grid__drag-indicator--header]=\"!grid.isRowSelectable\">\n <div style=\"visibility: hidden;\">\n <ng-container *ngTemplateOutlet=\"grid.dragIndicatorIconTemplate || grid.dragIndicatorIconBase\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Row selectors area -->\n <ng-container *ngIf=\"grid.showRowSelectors\">\n <div #headerSelectorContainer class=\"igx-grid__cbx-selection igx-grid__tr-action\"\n [class.igx-grid__cbx-selection--push]=\"grid.filteringService.isFilterRowVisible\"\n (click)=\"headerRowSelection($event)\"\n (pointerdown)=\"$event.preventDefault()\">\n <ng-container #headSelector\n *ngTemplateOutlet=\"grid.headSelectorTemplate || headSelectorBaseTemplate; context: rowSelectorsContext\">\n </ng-container>\n </div>\n </ng-container>\n\n <!-- Hierarchical grids expand all area -->\n <ng-container *ngIf=\"isHierarchicalGrid\">\n <div #headerHierarchyExpander\n (click)=\"grid.toggleAll()\"\n (pointerdown)=\"$event.preventDefault()\"\n [hidden]=\"!grid.hasExpandableChildren || !grid.hasVisibleColumns\"\n [ngClass]=\"{\n 'igx-grid__hierarchical-expander igx-grid__hierarchical-expander--header igx-grid__tr-action': grid.hasExpandableChildren,\n 'igx-grid__hierarchical-expander--push': grid.filteringService.isFilterRowVisible,\n 'igx-grid__hierarchical-expander--no-border': grid.isRowSelectable || grid.rowDraggable\n }\">\n <ng-container *ngTemplateOutlet=\"grid.iconTemplate; context: { $implicit: grid }\"></ng-container>\n </div>\n </ng-container>\n\n\n <!-- Grouping icon toggle area -->\n <ng-container *ngIf=\"grid?.groupingExpressions?.length\">\n <div #headerGroupContainer class=\"{{ indentationCSSClasses }}\"\n (click)=\"grid.toggleAllGroupRows()\"\n (pointerdown)=\"$event.preventDefault()\">\n <ng-container *ngTemplateOutlet=\"grid.iconTemplate\"></ng-container>\n </div>\n </ng-container>\n\n <!-- Pinned columns collection from the start -->\n <ng-container *ngIf=\"pinnedColumnCollection.length && grid.isPinningToStart\">\n <ng-container *ngFor=\"let column of pinnedColumnCollection | igxTopLevel\">\n <igx-grid-header-group\n [ngClass]=\"column.headerGroupClasses\"\n [ngStyle]=\"column.headerGroupStyles | igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [column]=\"column\"\n [style.min-width]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.flex-basis]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\">\n </igx-grid-header-group>\n </ng-container>\n </ng-container>\n\n <!-- Unpinned columns collection -->\n <ng-template igxGridFor #headerVirtualContainer let-column\n [igxGridForOf]=\"unpinnedColumnCollection | igxTopLevel\"\n [igxForScrollContainer]=\"grid.parentVirtDir\"\n [igxForContainerSize]=\"grid.unpinnedWidth\"\n [igxForTrackBy]=\"grid.trackColumnChanges\"\n [igxForSizePropName]=\"'calcPixelWidth'\"\n [igxForScrollOrientation]=\"'horizontal'\"\n >\n <igx-grid-header-group\n [ngClass]=\"column.headerGroupClasses\"\n [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [column]=\"column\"\n [style.min-width]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.flex-basis]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\">\n </igx-grid-header-group>\n </ng-template>\n\n <!-- Pinned columns collection at the end -->\n <ng-container *ngIf=\"pinnedColumnCollection.length && !grid.isPinningToStart\">\n <ng-container *ngFor=\"let column of pinnedColumnCollection | igxTopLevel\">\n <igx-grid-header-group\n [ngClass]=\"column.headerGroupClasses\"\n [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\"\n [column]=\"column\"\n [style.min-width]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.flex-basis]=\"column.calcWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n [style.left]=\"column.rightPinnedOffset\">\n </igx-grid-header-group>\n </ng-container>\n </ng-container>\n </div>\n\n <!-- Filter row area -->\n <ng-container *ngIf=\"grid.filteringService.isFilterRowVisible\">\n <igx-grid-filtering-row #filteringRow\n [column]=\"grid.filteringService.filteredColumn\"\n [style.width.px]=\"width\">\n </igx-grid-filtering-row>\n </ng-container>\n\n <!-- Right column moving area -->\n <ng-container *ngIf=\"grid.hasMovableColumns && grid.columnInDrag\">\n <span id=\"right\" class=\"igx-grid__scroll-on-drag-right\" droppable=\"true\" [igxColumnMovingDrop]=\"headerContainer\"></span>\n </ng-container>\n</div>\n\n<!-- Header thumb area -->\n<div class=\"igx-grid-thead__thumb\" [hidden]=\"!grid.hasVerticalScroll()\" [style.width.px]=\"grid.scrollSize\"></div>\n\n<!-- Default row selection header checkbox template -->\n<ng-template #headSelectorBaseTemplate igxHeadSelector let-context>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [tabindex]=\"-1\"\n [readonly]=\"true\"\n [checked]=\"context.selectedCount > 0 && context.totalCount === context.selectedCount\"\n [disableRipple]=\"true\"\n [ngStyle]=\"{'visibility': grid.isMultiRowSelectionEnabled? 'visible' : 'hidden' }\"\n [indeterminate]=\"context.selectedCount > 0 && context.selectedCount !== context.totalCount\"\n [aria-label]=\"grid.headSelectorBaseAriaLabel\"\n #headerCheckbox>\n </igx-checkbox>\n </div>\n</ng-template>\n" }]
54757
55068
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { grid: [{
54758
55069
  type: Input
54759
55070
  }], pinnedColumnCollection: [{
@@ -55900,9 +56211,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
55900
56211
  */
55901
56212
  this.gridScroll = new EventEmitter();
55902
56213
  /**
56214
+ * @deprecated in version 12.1.0. Use the corresponding output exposed by the `igx-paginator` component instead
56215
+ *
55903
56216
  * Emitted after the current page is changed.
55904
56217
  *
55905
56218
  * @deprecated in version 12.1.0
56219
+ * Use the corresponding output exposed by the `igx-paginator` component instead.
56220
+ *
55906
56221
  * @example
55907
56222
  * ```html
55908
56223
  * <igx-grid (pageChange)="onPageChange($event)"></igx-grid>
@@ -55915,9 +56230,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
55915
56230
  */
55916
56231
  this.pageChange = new EventEmitter();
55917
56232
  /**
56233
+ * @deprecated in version 12.1.0. Use the corresponding output exposed by the `igx-paginator` component instead
56234
+ *
55918
56235
  * Emitted when `perPage` property value of the grid is changed.
55919
56236
  *
55920
56237
  * @deprecated in version 12.1.0
56238
+ * Use the corresponding output exposed by the `igx-paginator` component instead.
56239
+ *
55921
56240
  * @example
55922
56241
  * ```html
55923
56242
  * <igx-grid #grid (perPageChange)="onPerPageChange($event)" [autoGenerate]="true"></igx-grid>
@@ -55935,8 +56254,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
55935
56254
  */
55936
56255
  this.class = '';
55937
56256
  /**
56257
+ * @deprecated in version 12.2.0. We suggest using `rowClasses` property instead
56258
+ *
55938
56259
  * Gets/Sets the styling classes applied to all even `IgxGridRowComponent`s in the grid.
55939
56260
  *
56261
+ * @deprecated
56262
+ * `evenRowCSS` is deprecated. We suggest using `rowClasses` property instead.
56263
+ *
55940
56264
  * @example
55941
56265
  * ```html
55942
56266
  * <igx-grid #grid [data]="Data" [evenRowCSS]="'igx-grid--my-even-class'" [autoGenerate]="true"></igx-grid>
@@ -55944,8 +56268,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
55944
56268
  */
55945
56269
  this.evenRowCSS = 'igx-grid__tr--even';
55946
56270
  /**
56271
+ * @deprecated in version 12.2.0. We suggest using `rowClasses` property instead
56272
+ *
55947
56273
  * Gets/Sets the styling classes applied to all odd `IgxGridRowComponent`s in the grid.
55948
56274
  *
56275
+ * @deprecated
56276
+ * `oddRowCSS` is deprecated. We suggest using `rowClasses` property instead.
56277
+ *
55949
56278
  * @example
55950
56279
  * ```html
55951
56280
  * <igx-grid #grid [data]="Data" [evenRowCSS]="'igx-grid--my-odd-class'" [autoGenerate]="true"></igx-grid>
@@ -56198,9 +56527,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
56198
56527
  */
56199
56528
  this.filteringDone = new EventEmitter();
56200
56529
  /**
56530
+ * @deprecated in version 12.1.0. Use the corresponding output exposed by the `igx-paginator` component instead
56531
+ *
56201
56532
  * Emitted after paging is performed.
56202
56533
  *
56203
56534
  * @deprecated in version 12.1.x
56535
+ * `pagingDone` is deprecated. Use the corresponding output exposed by the `igx-paginator` component instead.
56536
+ *
56204
56537
  * @remarks
56205
56538
  * Returns an object consisting of the previous and next pages.
56206
56539
  * @example
@@ -56525,7 +56858,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
56525
56858
  * @hidden @internal
56526
56859
  */
56527
56860
  this.columnWidthSetByUser = false;
56528
- this.rendered$ = this.rendered.asObservable().pipe(shareReplay(1));
56861
+ this.rendered$ = this.rendered.asObservable().pipe(shareReplay({ bufferSize: 1, refCount: true }));
56529
56862
  /** @hidden @internal */
56530
56863
  this.resizeNotify = new Subject();
56531
56864
  /** @hidden @internal */
@@ -56852,9 +57185,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
56852
57185
  this.notifyChanges(true);
56853
57186
  }
56854
57187
  /**
57188
+ * @deprecated in version 12.1.0. Use the corresponding method exposed by the `igx-paginator`
57189
+ *
56855
57190
  * Gets/Sets whether the paging feature is enabled.
56856
57191
  *
56857
57192
  * @deprecated in version 12.1.x
57193
+ * `paging` is deprecated
57194
+ *
56858
57195
  * @remarks
56859
57196
  * The default state is disabled (false).
56860
57197
  * @example
@@ -56872,9 +57209,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
56872
57209
  this.pipeTrigger++;
56873
57210
  }
56874
57211
  /**
57212
+ * @deprecated in version 12.1.0. Use `page` property form `paginator` component instead
57213
+ *
56875
57214
  * Gets/Sets the current page index.
56876
57215
  *
56877
57216
  * @deprecated in version 12.1.x
57217
+ * `page` is deprecated. Use the `page` property from the `igx-paginator` component instead.
57218
+ *
56878
57219
  * @example
56879
57220
  * ```html
56880
57221
  * <igx-grid #grid [data]="Data" [autoGenerate]="true">
@@ -56894,9 +57235,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
56894
57235
  }
56895
57236
  }
56896
57237
  /**
57238
+ * @deprecated in version 12.1.0. Use `perPage` property from `paginator` component instead
57239
+ *
56897
57240
  * Gets/Sets the number of visible items per page.
56898
57241
  *
56899
57242
  * @deprecated in version 12.1.x
57243
+ * `perPage` is deprecated. Use the `perPage` property from the `igx-paginator` component instead.
57244
+ *
56900
57245
  * @remarks
56901
57246
  * The default is 15.
56902
57247
  * @example
@@ -57949,7 +58294,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
57949
58294
  this.summaryService.clearSummaryCache(args);
57950
58295
  });
57951
58296
  this.subscribeToTransactions();
57952
- this.resizeNotify.pipe(destructor, filter(() => !this._init), throttleTime(0, animationFrameScheduler, { leading: true, trailing: true }))
58297
+ this.resizeNotify.pipe(filter(() => !this._init), throttleTime(0, animationFrameScheduler, { leading: true, trailing: true }), destructor)
57953
58298
  .subscribe(() => {
57954
58299
  this.zone.run(() => {
57955
58300
  this.notifyChanges(true);
@@ -57985,7 +58330,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
57985
58330
  this.overlayIDs.push(event.id);
57986
58331
  }
57987
58332
  });
57988
- this.overlayService.closed.pipe(destructor, filter(() => !this._init)).subscribe((event) => {
58333
+ this.overlayService.closed.pipe(filter(() => !this._init), destructor).subscribe((event) => {
57989
58334
  if (this._advancedFilteringOverlayId === event.id) {
57990
58335
  this.overlayService.detach(this._advancedFilteringOverlayId);
57991
58336
  this._advancedFilteringOverlayId = null;
@@ -57996,7 +58341,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
57996
58341
  this.overlayIDs.splice(ind, 1);
57997
58342
  }
57998
58343
  });
57999
- this.verticalScrollContainer.dataChanging.pipe(destructor, filter(() => !this._init)).subscribe(($event) => {
58344
+ this.verticalScrollContainer.dataChanging.pipe(filter(() => !this._init), destructor).subscribe(($event) => {
58000
58345
  const shouldRecalcSize = this.isPercentHeight &&
58001
58346
  (!this.calcHeight || this.calcHeight === this.getDataBasedBodyHeight() ||
58002
58347
  this.calcHeight === this.renderedRowHeight * this._defaultTargetRecordNumber);
@@ -58006,12 +58351,12 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58006
58351
  }
58007
58352
  this.evaluateLoadingState();
58008
58353
  });
58009
- this.verticalScrollContainer.scrollbarVisibilityChanged.pipe(destructor, filter(() => !this._init)).subscribe(() => {
58354
+ this.verticalScrollContainer.scrollbarVisibilityChanged.pipe(filter(() => !this._init), destructor).subscribe(() => {
58010
58355
  // called to recalc all widths that may have changes as a result of
58011
58356
  // the vert. scrollbar showing/hiding
58012
58357
  this.notifyChanges(true);
58013
58358
  });
58014
- this.verticalScrollContainer.contentSizeChange.pipe(destructor, filter(() => !this._init)).subscribe(() => {
58359
+ this.verticalScrollContainer.contentSizeChange.pipe(filter(() => !this._init), destructor).subscribe(() => {
58015
58360
  this.calculateGridSizes(false);
58016
58361
  });
58017
58362
  this.onDensityChanged.pipe(destructor).subscribe(() => {
@@ -58117,7 +58462,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58117
58462
  */
58118
58463
  ngAfterContentInit() {
58119
58464
  this.setupColumns();
58120
- this.toolbar.changes.pipe(takeUntil(this.destroy$), filter(() => !this._init)).subscribe(() => this.notifyChanges(true));
58465
+ this.toolbar.changes.pipe(filter(() => !this._init), takeUntil(this.destroy$)).subscribe(() => this.notifyChanges(true));
58121
58466
  this.setUpPaginator();
58122
58467
  this.paginationComponents.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {
58123
58468
  this.setUpPaginator();
@@ -58577,24 +58922,24 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58577
58922
  get summariesMargin() {
58578
58923
  return this.featureColumnsWidth();
58579
58924
  }
58580
- /**
58581
- * @hidden
58582
- * @internal
58583
- */
58584
- get columns() {
58585
- return this._columns;
58586
- }
58587
58925
  /**
58588
58926
  * Gets an array of `IgxColumnComponent`s.
58589
58927
  *
58590
58928
  * @example
58591
58929
  * ```typescript
58592
- * const colums = this.grid.columnsCollection.
58930
+ * const colums = this.grid.columns.
58593
58931
  * ```
58594
58932
  */
58595
- get columnsCollection() {
58933
+ get columns() {
58596
58934
  return this._rendered ? this._columns : [];
58597
58935
  }
58936
+ /**
58937
+ * @hidden
58938
+ * @internal
58939
+ */
58940
+ get columnsCollection() {
58941
+ return this._columns;
58942
+ }
58598
58943
  /**
58599
58944
  * Gets an array of the pinned `IgxColumnComponent`s.
58600
58945
  *
@@ -58676,9 +59021,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58676
59021
  return this._visibleColumns;
58677
59022
  }
58678
59023
  /**
59024
+ * @deprecated in version 12.1.0. Use the corresponding property exposed by the `igx-paginator`
59025
+ *
58679
59026
  * Gets the total number of pages.
58680
59027
  *
58681
59028
  * @deprecated in version 12.1.0
59029
+ * `totalPages` is deprecated. Use the corresponding property exposed by the `igx-paginator`.
59030
+ *
58682
59031
  * @example
58683
59032
  * ```typescript
58684
59033
  * const totalPages = this.grid.totalPages;
@@ -58689,9 +59038,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58689
59038
  return (_a = this.paginator) === null || _a === void 0 ? void 0 : _a.totalPages;
58690
59039
  }
58691
59040
  /**
59041
+ * @deprecated in version 12.1.0. Use the corresponding property exposed by the `igx-paginator`
59042
+ *
58692
59043
  * Gets if the current page is the first page.
58693
59044
  *
58694
59045
  * @deprecated in version 12.1.0
59046
+ * `isFirstPage` is deprecated. Use the corresponding property exposed by the `igx-paginator`.'
59047
+ *
58695
59048
  * @example
58696
59049
  * ```typescript
58697
59050
  * const firstPage = this.grid.isFirstPage;
@@ -58701,9 +59054,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58701
59054
  return this.paginator.isLastPage;
58702
59055
  }
58703
59056
  /**
59057
+ * @deprecated in version 12.1.0. Use the corresponding method exposed by the `igx-paginator`
59058
+ *
58704
59059
  * Goes to the next page, if the grid is not already at the last page.
58705
59060
  *
58706
59061
  * @deprecated in version 12.1.0
59062
+ * 'Use the corresponding method exposed by the `igx-paginator`.'
59063
+ *
58707
59064
  * @example
58708
59065
  * ```typescript
58709
59066
  * this.grid1.nextPage();
@@ -58715,12 +59072,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58715
59072
  (_a = this.paginator) === null || _a === void 0 ? void 0 : _a.nextPage();
58716
59073
  }
58717
59074
  /**
59075
+ * @deprecated in version 12.1.0. Use the corresponding method exposed by the `igx-paginator`
59076
+ *
58718
59077
  * Goes to the previous page, if the grid is not already at the first page.
58719
59078
  *
58720
59079
  * @deprecated in version 12.1.0
59080
+ * 'Use the corresponding method exposed by the `igx-paginator`.'
58721
59081
  * @example
58722
- * ```typescript
58723
- * this.grid1.previousPage();
58724
59082
  * ```
58725
59083
  */
58726
59084
  // eslint-disable-next-line @typescript-eslint/member-ordering
@@ -58753,9 +59111,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58753
59111
  }
58754
59112
  }
58755
59113
  /**
59114
+ * @deprecated in version 12.1.0. Use the corresponding property exposed by the `igx-paginator`
59115
+ *
58756
59116
  * Returns if the current page is the last page.
58757
59117
  *
58758
59118
  * @deprecated in version 12.1.0
59119
+ * `isLastPage` is deprecated. Use the corresponding property exposed by the `igx-paginator`.'
59120
+ *
58759
59121
  * @example
58760
59122
  * ```typescript
58761
59123
  * const lastPage = this.grid.isLastPage;
@@ -58798,14 +59160,14 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58798
59160
  * @internal
58799
59161
  */
58800
59162
  get showAddButton() {
58801
- return this.rowEditable && this.dataView.length === 0 && this.columns.length > 0;
59163
+ return this.rowEditable && this.dataView.length === 0 && this.columnList.length > 0;
58802
59164
  }
58803
59165
  /**
58804
59166
  * @hidden
58805
59167
  * @internal
58806
59168
  */
58807
59169
  get showDragIcons() {
58808
- return this.rowDraggable && this.columns.length > this.hiddenColumnsCount;
59170
+ return this.rowDraggable && this.columnList.length > this.hiddenColumnsCount;
58809
59171
  }
58810
59172
  /**
58811
59173
  * Places a column before or after the specified target column.
@@ -58852,8 +59214,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58852
59214
  this._columnsReordered(column);
58853
59215
  }
58854
59216
  /**
59217
+ * @deprecated in version 12.1.0. Use the corresponding method exposed by the `igx-paginator`
59218
+ *
58855
59219
  * Goes to the desired page index.
58856
59220
  *
59221
+ * @deprecated in version 12.1.x
59222
+ * 'Use the corresponding method exposed by the `igx-paginator`.'
59223
+ *
58857
59224
  * @example
58858
59225
  * ```typescript
58859
59226
  * this.grid1.paginate(1);
@@ -60034,7 +60401,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
60034
60401
  if (!this.clipboardOptions.copyHeaders) {
60035
60402
  result = result.substring(result.indexOf('\n') + 1);
60036
60403
  }
60037
- if (Object.values(data[0]).length === 1) {
60404
+ if (data && data.length > 0 && Object.values(data[0]).length === 1) {
60038
60405
  result = result.slice(0, -2);
60039
60406
  }
60040
60407
  event.preventDefault();
@@ -61264,7 +61631,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
61264
61631
  // Make sure we don't exceed unpinned area min width and get pinned and unpinned col collections.
61265
61632
  // We take into account top level columns (top level groups and non groups).
61266
61633
  // If top level is unpinned the pinning handles all children to be unpinned as well.
61267
- for (const column of this._columns) {
61634
+ for (const column of this.columnList) {
61268
61635
  if (column.pinned && !column.parent) {
61269
61636
  pinnedColumns.push(column);
61270
61637
  }
@@ -61357,7 +61724,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
61357
61724
  _columnsReordered(column) {
61358
61725
  this.notifyChanges();
61359
61726
  if (this.hasColumnLayouts) {
61360
- this.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
61727
+ this.columnList.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
61361
61728
  }
61362
61729
  // after reordering is done reset cached column collections.
61363
61730
  this.resetColumnCollections();
@@ -61653,24 +62020,9 @@ class IgxGridBaseDirective extends DisplayDensityBase {
61653
62020
  }
61654
62021
  IgxGridBaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxGridBaseDirective, deps: [{ token: IgxGridSelectionService }, { token: IgxColumnResizingService }, { token: IGX_GRID_SERVICE_BASE }, { token: IgxFlatTransactionFactory }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: DOCUMENT }, { token: i0.ChangeDetectorRef }, { token: i0.ComponentFactoryResolver }, { token: i0.IterableDiffers }, { token: i0.ViewContainerRef }, { token: IgxGridNavigationService }, { token: IgxFilteringService }, { token: IgxOverlayService }, { token: IgxGridSummaryService }, { token: DisplayDensityToken, optional: true }, { token: LOCALE_ID }, { token: PlatformUtil }, { token: IgxGridTransaction, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
61655
62022
  IgxGridBaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxGridBaseDirective, inputs: { snackbarDisplayTime: "snackbarDisplayTime", autoGenerate: "autoGenerate", emptyGridTemplate: "emptyGridTemplate", addRowEmptyTemplate: "addRowEmptyTemplate", loadingGridTemplate: "loadingGridTemplate", clipboardOptions: "clipboardOptions", class: "class", evenRowCSS: "evenRowCSS", oddRowCSS: "oddRowCSS", rowClasses: "rowClasses", rowStyles: "rowStyles", primaryKey: "primaryKey", uniqueColumnValuesStrategy: "uniqueColumnValuesStrategy", resourceStrings: "resourceStrings", filteringLogic: "filteringLogic", filteringExpressionsTree: "filteringExpressionsTree", advancedFilteringExpressionsTree: "advancedFilteringExpressionsTree", locale: "locale", pagingMode: "pagingMode", paging: "paging", page: "page", perPage: "perPage", hideRowSelectors: "hideRowSelectors", rowDraggable: "rowDraggable", rowEditable: "rowEditable", height: "height", width: "width", rowHeight: "rowHeight", columnWidth: "columnWidth", emptyGridMessage: "emptyGridMessage", isLoading: "isLoading", emptyFilteredGridMessage: "emptyFilteredGridMessage", pinning: "pinning", allowFiltering: "allowFiltering", allowAdvancedFiltering: "allowAdvancedFiltering", filterMode: "filterMode", summaryPosition: "summaryPosition", summaryCalculationMode: "summaryCalculationMode", showSummaryOnCollapse: "showSummaryOnCollapse", filterStrategy: "filterStrategy", sortStrategy: "sortStrategy", selectedRows: "selectedRows", sortingExpressions: "sortingExpressions", batchEditing: "batchEditing", cellSelection: "cellSelection", rowSelection: "rowSelection", columnSelection: "columnSelection", expansionStates: "expansionStates", outlet: "outlet", totalRecords: "totalRecords", selectRowOnClick: "selectRowOnClick" }, outputs: { filteringExpressionsTreeChange: "filteringExpressionsTreeChange", advancedFilteringExpressionsTreeChange: "advancedFilteringExpressionsTreeChange", gridScroll: "gridScroll", pageChange: "pageChange", perPageChange: "perPageChange", cellClick: "cellClick", selected: "selected", rowSelected: "rowSelected", columnSelected: "columnSelected", columnPin: "columnPin", columnPinned: "columnPinned", cellEditEnter: "cellEditEnter", cellEditExit: "cellEditExit", cellEdit: "cellEdit", cellEditDone: "cellEditDone", rowEditEnter: "rowEditEnter", rowEdit: "rowEdit", rowEditDone: "rowEditDone", rowEditExit: "rowEditExit", columnInit: "columnInit", sorting: "sorting", sortingDone: "sortingDone", filtering: "filtering", filteringDone: "filteringDone", pagingDone: "pagingDone", rowAdded: "rowAdded", rowDeleted: "rowDeleted", rowDelete: "rowDelete", rowAdd: "rowAdd", columnResized: "columnResized", contextMenu: "contextMenu", doubleClick: "doubleClick", columnVisibilityChanging: "columnVisibilityChanging", columnVisibilityChanged: "columnVisibilityChanged", columnMovingStart: "columnMovingStart", columnMoving: "columnMoving", columnMovingEnd: "columnMovingEnd", gridKeydown: "gridKeydown", rowDragStart: "rowDragStart", rowDragEnd: "rowDragEnd", gridCopy: "gridCopy", expansionStatesChange: "expansionStatesChange", rowToggle: "rowToggle", rowPinning: "rowPinning", rowPinned: "rowPinned", activeNodeChange: "activeNodeChange", sortingExpressionsChange: "sortingExpressionsChange", toolbarExporting: "toolbarExporting", rangeSelected: "rangeSelected", rendered: "rendered", localeChange: "localeChange" }, host: { listeners: { "mouseleave": "hideActionStrip()" }, properties: { "attr.tabindex": "this.tabindex", "attr.role": "this.hostRole", "style.height": "this.height", "style.width": "this.hostWidth", "attr.class": "this.hostClass" } }, queries: [{ propertyName: "actionStrip", first: true, predicate: IgxActionStripComponent, descendants: true }, { propertyName: "excelStyleLoadingValuesTemplateDirective", first: true, predicate: IgxExcelStyleLoadingValuesTemplateDirective, descendants: true, read: IgxExcelStyleLoadingValuesTemplateDirective, static: true }, { propertyName: "rowAddText", first: true, predicate: IgxRowAddTextDirective, descendants: true, read: TemplateRef }, { propertyName: "rowExpandedIndicatorTemplate", first: true, predicate: IgxRowExpandedIndicatorDirective, descendants: true, read: TemplateRef }, { propertyName: "rowCollapsedIndicatorTemplate", first: true, predicate: IgxRowCollapsedIndicatorDirective, descendants: true, read: TemplateRef }, { propertyName: "headerExpandIndicatorTemplate", first: true, predicate: IgxHeaderExpandIndicatorDirective, descendants: true, read: TemplateRef }, { propertyName: "headerCollapseIndicatorTemplate", first: true, predicate: IgxHeaderCollapseIndicatorDirective, descendants: true, read: TemplateRef }, { propertyName: "excelStyleHeaderIconTemplate", first: true, predicate: IgxExcelStyleHeaderIconDirective, descendants: true, read: TemplateRef }, { propertyName: "excelStyleFilteringComponents", predicate: IgxGridExcelStyleFilteringComponent, read: IgxGridExcelStyleFilteringComponent }, { propertyName: "columnList", predicate: IgxColumnComponent, descendants: true, read: IgxColumnComponent }, { propertyName: "headSelectorsTemplates", predicate: IgxHeadSelectorDirective, read: IgxHeadSelectorDirective }, { propertyName: "rowSelectorsTemplates", predicate: IgxRowSelectorDirective, read: IgxRowSelectorDirective }, { propertyName: "dragGhostCustomTemplates", predicate: IgxRowDragGhostDirective, read: TemplateRef }, { propertyName: "rowEditCustomDirectives", predicate: IgxRowEditTemplateDirective, read: TemplateRef }, { propertyName: "rowEditTextDirectives", predicate: IgxRowEditTextDirective, read: TemplateRef }, { propertyName: "rowEditActionsDirectives", predicate: IgxRowEditActionsDirective, read: TemplateRef }, { propertyName: "dragIndicatorIconTemplates", predicate: IgxDragIndicatorIconDirective, read: TemplateRef }, { propertyName: "rowEditTabsCUSTOM", predicate: IgxRowEditTabStopDirective, descendants: true }, { propertyName: "toolbar", predicate: IgxGridToolbarComponent }, { propertyName: "paginationComponents", predicate: IgxPaginatorComponent }], viewQueries: [{ propertyName: "addRowSnackbar", first: true, predicate: IgxSnackbarComponent, descendants: true }, { propertyName: "resizeLine", first: true, predicate: IgxGridColumnResizerComponent, descendants: true }, { propertyName: "loadingOverlay", first: true, predicate: ["loadingOverlay"], descendants: true, read: IgxToggleDirective, static: true }, { propertyName: "loadingOutlet", first: true, predicate: ["igxLoadingOverlayOutlet"], descendants: true, read: IgxOverlayOutletDirective, static: true }, { propertyName: "emptyFilteredGridTemplate", first: true, predicate: ["emptyFilteredGrid"], descendants: true, read: TemplateRef, static: true }, { propertyName: "emptyGridDefaultTemplate", first: true, predicate: ["defaultEmptyGrid"], descendants: true, read: TemplateRef, static: true }, { propertyName: "loadingGridDefaultTemplate", first: true, predicate: ["defaultLoadingGrid"], descendants: true, read: TemplateRef, static: true }, { propertyName: "parentVirtDir", first: true, predicate: ["scrollContainer"], descendants: true, read: IgxGridForOfDirective, static: true }, { propertyName: "verticalScrollContainer", first: true, predicate: ["verticalScrollContainer"], descendants: true, read: IgxGridForOfDirective, static: true }, { propertyName: "verticalScroll", first: true, predicate: ["verticalScrollHolder"], descendants: true, read: IgxGridForOfDirective, static: true }, { propertyName: "scr", first: true, predicate: ["scr"], descendants: true, read: ElementRef, static: true }, { propertyName: "headerSelectorBaseTemplate", first: true, predicate: ["headSelectorBaseTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "footer", first: true, predicate: ["footer"], descendants: true, read: ElementRef }, { propertyName: "theadRow", first: true, predicate: IgxGridHeaderRowComponent, descendants: true, static: true }, { propertyName: "groupArea", first: true, predicate: IgxGridGroupByAreaComponent, descendants: true }, { propertyName: "tbody", first: true, predicate: ["tbody"], descendants: true, static: true }, { propertyName: "pinContainer", first: true, predicate: ["pinContainer"], descendants: true, read: ElementRef }, { propertyName: "tfoot", first: true, predicate: ["tfoot"], descendants: true, static: true }, { propertyName: "rowEditingOutletDirective", first: true, predicate: ["igxRowEditingOverlayOutlet"], descendants: true, read: IgxOverlayOutletDirective, static: true }, { propertyName: "dragIndicatorIconBase", first: true, predicate: ["dragIndicatorIconBase"], descendants: true, read: TemplateRef, static: true }, { propertyName: "rowEditingOverlay", first: true, predicate: ["rowEditingOverlay"], descendants: true, read: IgxToggleDirective }, { propertyName: "_outletDirective", first: true, predicate: ["igxFilteringOverlayOutlet"], descendants: true, read: IgxOverlayOutletDirective, static: true }, { propertyName: "defaultExpandedTemplate", first: true, predicate: ["defaultExpandedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultCollapsedTemplate", first: true, predicate: ["defaultCollapsedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultESFHeaderIconTemplate", first: true, predicate: ["defaultESFHeaderIcon"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultRowEditTemplate", first: true, predicate: ["defaultRowEditTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "tmpOutlets", predicate: IgxTemplateOutletDirective, descendants: true, read: IgxTemplateOutletDirective }, { propertyName: "rowEditTabsDEFAULT", predicate: IgxRowEditTabStopDirective, descendants: true }, { propertyName: "_summaryRowList", predicate: ["summaryRow"], descendants: true, read: IgxSummaryRowComponent }, { propertyName: "_rowList", predicate: ["row"], descendants: true }, { propertyName: "_pinnedRowList", predicate: ["pinnedRow"], descendants: true }, { propertyName: "_dataRowList", predicate: IgxRowDirective, descendants: true, read: IgxRowDirective }], usesInheritance: true, ngImport: i0 });
61656
- __decorate([
61657
- DeprecateProperty('`pageChange` is deprecated. Use the corresponding output exposed by the `igx-paginator` component instead.')
61658
- ], IgxGridBaseDirective.prototype, "pageChange", void 0);
61659
- __decorate([
61660
- DeprecateProperty('`perPageChange` is deprecated. Use the corresponding output exposed by the `igx-paginator` component instead.')
61661
- ], IgxGridBaseDirective.prototype, "perPageChange", void 0);
61662
- __decorate([
61663
- DeprecateProperty('`evenRowCSS` is deprecated. We suggest using `rowClasses` property instead.')
61664
- ], IgxGridBaseDirective.prototype, "evenRowCSS", void 0);
61665
- __decorate([
61666
- DeprecateProperty('`oddRowCSS` is deprecated. We suggest using `rowClasses` property instead.')
61667
- ], IgxGridBaseDirective.prototype, "oddRowCSS", void 0);
61668
62023
  __decorate([
61669
62024
  WatchChanges()
61670
62025
  ], IgxGridBaseDirective.prototype, "primaryKey", void 0);
61671
- __decorate([
61672
- DeprecateProperty('`pagingDone` is deprecated. Use the corresponding output exposed by the `igx-paginator` component instead.')
61673
- ], IgxGridBaseDirective.prototype, "pagingDone", void 0);
61674
62026
  __decorate([
61675
62027
  WatchChanges()
61676
62028
  ], IgxGridBaseDirective.prototype, "filteringLogic", null);
@@ -61680,15 +62032,6 @@ __decorate([
61680
62032
  __decorate([
61681
62033
  WatchChanges()
61682
62034
  ], IgxGridBaseDirective.prototype, "advancedFilteringExpressionsTree", null);
61683
- __decorate([
61684
- DeprecateProperty('`paging` is deprecated')
61685
- ], IgxGridBaseDirective.prototype, "paging", null);
61686
- __decorate([
61687
- DeprecateProperty('`page` is deprecated. Use `page` property form `paginator` component instead.')
61688
- ], IgxGridBaseDirective.prototype, "page", null);
61689
- __decorate([
61690
- DeprecateProperty('`perPage` is deprecated. Use `perPage` property from `paginator` component instead.')
61691
- ], IgxGridBaseDirective.prototype, "perPage", null);
61692
62035
  __decorate([
61693
62036
  WatchChanges()
61694
62037
  ], IgxGridBaseDirective.prototype, "hideRowSelectors", null);
@@ -61722,24 +62065,6 @@ __decorate([
61722
62065
  __decorate([
61723
62066
  WatchChanges()
61724
62067
  ], IgxGridBaseDirective.prototype, "columnSelection", null);
61725
- __decorate([
61726
- DeprecateProperty('`totalPages` is deprecated. Use the corresponding property exposed by the `igx-paginator`.')
61727
- ], IgxGridBaseDirective.prototype, "totalPages", null);
61728
- __decorate([
61729
- DeprecateProperty('`isFirstPage` is deprecated. Use the corresponding property exposed by the `igx-paginator`.')
61730
- ], IgxGridBaseDirective.prototype, "isFirstPage", null);
61731
- __decorate([
61732
- DeprecateMethod('Use the corresponding method exposed by the `igx-paginator`.')
61733
- ], IgxGridBaseDirective.prototype, "nextPage", null);
61734
- __decorate([
61735
- DeprecateMethod('Use the corresponding method exposed by the `igx-paginator`.')
61736
- ], IgxGridBaseDirective.prototype, "previousPage", null);
61737
- __decorate([
61738
- DeprecateProperty('`isLastPage` is deprecated. Use the corresponding property exposed by the `igx-paginator`.')
61739
- ], IgxGridBaseDirective.prototype, "isLastPage", null);
61740
- __decorate([
61741
- DeprecateMethod('Use the corresponding method exposed by the `igx-paginator`.')
61742
- ], IgxGridBaseDirective.prototype, "paginate", null);
61743
62068
  __decorate([
61744
62069
  WatchChanges()
61745
62070
  ], IgxGridBaseDirective.prototype, "selectRowOnClick", null);
@@ -62143,9 +62468,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
62143
62468
  type: Input
62144
62469
  }], outlet: [{
62145
62470
  type: Input
62146
- }], totalPages: [], isFirstPage: [], nextPage: [], previousPage: [], totalRecords: [{
62471
+ }], totalRecords: [{
62147
62472
  type: Input
62148
- }], isLastPage: [], paginate: [], selectRowOnClick: [{
62473
+ }], selectRowOnClick: [{
62149
62474
  type: Input
62150
62475
  }] } });
62151
62476
 
@@ -64637,7 +64962,8 @@ class IgxGridComponent extends IgxGridBaseDirective {
64637
64962
  return this._dropAreaMessage || this.resourceStrings.igx_grid_groupByArea_message;
64638
64963
  }
64639
64964
  /**
64640
- * @deprecated
64965
+ * @deprecated in version 12.1.0. Use `getCellByColumn` or `getCellByKey` instead
64966
+ *
64641
64967
  * Returns a `CellType` object that matches the conditions.
64642
64968
  *
64643
64969
  * @example
@@ -65366,9 +65692,6 @@ IgxGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versi
65366
65692
  IgxForOfSyncService,
65367
65693
  IgxForOfScrollSyncService
65368
65694
  ], queries: [{ propertyName: "detailTemplate", first: true, predicate: IgxGridDetailTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "groupTemplate", first: true, predicate: IgxGroupByRowTemplateDirective, descendants: true, read: IgxGroupByRowTemplateDirective }, { propertyName: "gridDetailsTemplate", first: true, predicate: IgxGridDetailTemplateDirective, descendants: true, read: IgxGridDetailTemplateDirective }, { propertyName: "groupByRowSelectorsTemplates", predicate: IgxGroupByRowSelectorDirective, read: IgxGroupByRowSelectorDirective }], viewQueries: [{ propertyName: "groupArea", first: true, predicate: IgxGridGroupByAreaComponent, descendants: true }, { propertyName: "recordTemplate", first: true, predicate: ["record_template"], descendants: true, read: TemplateRef, static: true }, { propertyName: "detailTemplateContainer", first: true, predicate: ["detail_template_container"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultGroupTemplate", first: true, predicate: ["group_template"], descendants: true, read: TemplateRef, static: true }, { propertyName: "summaryTemplate", first: true, predicate: ["summary_template"], descendants: true, read: TemplateRef, static: true }, { propertyName: "_groupsRowList", predicate: IgxGridGroupByRowComponent, descendants: true, read: IgxGridGroupByRowComponent }], usesInheritance: true, ngImport: i0, template: "<!-- Toolbar area -->\n<ng-content select=\"igx-grid-toolbar\"></ng-content>\n\n<!-- Group-by area -->\n<ng-container *ngIf=\"showGroupArea && (groupingExpressions.length > 0 || hasGroupableColumns)\">\n <igx-grid-group-by-area #groupArea [style.flex-basis.px]='outerWidth'\n [grid]=\"this\"\n [expressions]=\"groupingExpressions\"\n [sortingExpressions]=\"sortingExpressions\"\n [density]=\"displayDensity\"\n [dropAreaTemplate]=\"dropAreaTemplate\"\n [dropAreaMessage]=\"dropAreaMessage\"\n >\n </igx-grid-group-by-area>\n</ng-container>\n\n<!-- Grid table head row area -->\n<igx-grid-header-row class=\"igx-grid-thead\" tabindex=\"0\"\n [grid]=\"this\"\n [hasMRL]=\"hasColumnLayouts\"\n [density]=\"displayDensity\"\n [activeDescendant]=\"activeDescendant\"\n [width]=\"calcWidth\"\n [pinnedColumnCollection]=\"pinnedColumns\"\n [unpinnedColumnCollection]=\"unpinnedColumns\"\n (keydown.meta.c)=\"copyHandler($event)\"\n (keydown.control.c)=\"copyHandler($event)\"\n (copy)=\"copyHandler($event)\"\n (keydown)=\"navigation.headerNavigation($event)\"\n (scroll)=\"preventHeaderScroll($event)\"\n (focus)=\"navigation.focusFirstCell()\"\n>\n</igx-grid-header-row>\n\n<div igxGridBody (keydown.control.c)=\"copyHandler($event)\" (copy)=\"copyHandler($event)\" class=\"igx-grid__tbody\" role=\"rowgroup\">\n <div class=\"igx-grid__tbody-content\" tabindex=\"0\" [attr.role]=\"dataView.length ? null : 'row'\" (keydown)=\"navigation.handleNavigation($event)\" (focus)=\"navigation.focusTbody($event)\"\n (dragStop)=\"selectionService.dragMode = $event\" (scroll)='preventContainerScroll($event)'\n (dragScroll)=\"dragScroll($event)\" [igxGridDragSelect]=\"selectionService.dragMode\"\n [style.height.px]='totalHeight' [style.width.px]='calcWidth || null' #tbody [attr.aria-activedescendant]=\"activeDescendant\">\n <span *ngIf=\"hasMovableColumns && columnInDrag && pinnedColumns.length <= 0\"\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-left\"></span>\n <span *ngIf=\"hasMovableColumns && columnInDrag && pinnedColumns.length > 0\"\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-pinned\" [style.left.px]=\"pinnedWidth\"></span>\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\">\n </ng-container>\n <ng-template #pinnedRecordsTemplate>\n <ng-container *ngIf='data\n | gridTransaction:id:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | gridAddRow:true:pipeTrigger\n | gridRowPinning:id:true:pipeTrigger\n | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger:true\n | gridSort:sortingExpressions:sortStrategy:id:pipeTrigger:true as pinnedData'>\n <div #pinContainer *ngIf='pinnedData.length > 0'\n [ngClass]=\"{\n 'igx-grid__tr--pinned-bottom': !isRowPinningToTop,\n 'igx-grid__tr--pinned-top': isRowPinningToTop\n }\"\n class='igx-grid__tr--pinned' [style.width.px]='calcWidth'>\n <ng-container *ngFor=\"let rowData of pinnedData; let rowIndex = index\">\n <ng-container *ngTemplateOutlet=\"pinned_record_template; context: getContext(rowData, rowIndex, true)\">\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-template>\n <ng-template igxGridFor let-rowData [igxGridForOf]=\"data\n | gridTransaction:id:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger\n | gridSort:sortingExpressions:sortStrategy:id:pipeTrigger\n | gridGroupBy:groupingExpressions:groupingExpansionState:groupStrategy:groupsExpanded:id:groupsRecords:pipeTrigger\n | gridPaging:paginator?.page:paginator?.perPage:id:pipeTrigger\n | gridSummary:hasSummarizedColumns:summaryCalculationMode:summaryPosition:id:showSummaryOnCollapse:pipeTrigger:summaryPipeTrigger\n | gridDetails:hasDetails:expansionStates:pipeTrigger\n | gridAddRow:false:pipeTrigger\n | gridRowPinning:id:false:pipeTrigger\"\n let-rowIndex=\"index\" [igxForScrollOrientation]=\"'vertical'\" [igxForScrollContainer]='verticalScroll'\n [igxForContainerSize]='calcHeight'\n [igxForItemSize]=\"hasColumnLayouts ? rowHeight * multiRowLayoutRowSize + 1 : renderedRowHeight\"\n [igxForTrackBy]='trackChanges'\n #verticalScrollContainer (chunkPreload)=\"dataLoading($event)\">\n <ng-template\n [igxTemplateOutlet]='getRowTemplate(rowData)'\n [igxTemplateOutletContext]='getContext(rowData, rowIndex)'\n (cachedViewLoaded)='cachedViewLoaded($event)'\n (viewCreated)='viewCreatedHandler($event)'\n (viewMoved)='viewMovedHandler($event)'>\n </ng-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\">\n </ng-container>\n <ng-template #record_template let-rowIndex=\"index\" let-rowData let-disabledRow=\"disabled\">\n <igx-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [rowData]=\"rowData\" [disabled]=\"disabledRow\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:false:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row>\n </igx-grid-row>\n </ng-template>\n <ng-template #pinned_record_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [rowData]=\"rowData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:false:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\"#row #pinnedRow>\n </igx-grid-row>\n </ng-template>\n <ng-template #group_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-groupby-row [gridID]=\"id\" [index]=\"rowIndex\" [groupRow]=\"rowData\" [hideGroupRowSelectors]=\"hideRowSelectors\" [rowDraggable]=\"rowDraggable\" #row>\n </igx-grid-groupby-row>\n </ng-template>\n <ng-template #summary_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-summary-row role=\"row\" [gridID]=\"id\" [summaries]=\"rowData.summaries\" [index]=\"rowIndex\"\n class=\"igx-grid__summaries--body\" #summaryRow>\n </igx-grid-summary-row>\n </ng-template>\n <ng-template #detail_template_container let-rowIndex=\"index\" let-rowData>\n <div detail='true' style=\"overflow: auto; width: 100%;\" id=\"{{id}}_{{rowIndex}}\" (pointerdown)='detailsViewFocused(detailsContainer, rowIndex)' #detailsContainer [attr.data-rowindex]='rowIndex'\n [ngClass]=\"{\n 'igx-grid__tr-container': true,\n 'igx-grid__tr-container--active': isDetailActive(rowIndex)\n }\">\n <div class=\"igx-grid__hierarchical-indent\" style='display: flex;'>\n <ng-container *ngIf=\"this.groupingExpressions.length > 0\">\n <div class=\"igx-grid__row-indentation igx-grid__row-indentation--level-{{groupingExpressions.length}}\"></div>\n </ng-container>\n <ng-template\n [ngTemplateOutlet]='detailTemplate'\n [ngTemplateOutletContext]='getDetailsContext(rowData, rowIndex)'>\n </ng-template>\n </div>\n </div>\n </ng-template>\n\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n <div class=\"igx-grid__row-editing-outlet\" igxOverlayOutlet #igxRowEditingOverlayOutlet></div>\n <igc-trial-watermark></igc-trial-watermark>\n </div>\n <div igxToggle #loadingOverlay>\n <igx-circular-bar [indeterminate]=\"true\" *ngIf='shouldOverlayLoading'>\n </igx-circular-bar>\n </div>\n <span *ngIf=\"hasMovableColumns && columnInDrag\" [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\"\n id=\"right\" class=\"igx-grid__scroll-on-drag-right\"></span>\n <div [hidden]='!hasVerticalScroll()' class=\"igx-grid__tbody-scrollbar\" [style.width.px]=\"scrollSize\" (pointerdown)=\"$event.preventDefault()\">\n <div class=\"igx-grid__tbody-scrollbar-start\" [style.height.px]=' isRowPinningToTop ? pinnedRowHeight : 0'></div>\n <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]='calcHeight'>\n <ng-template igxGridFor [igxGridForOf]='[]' #verticalScrollHolder></ng-template>\n </div>\n <div class=\"igx-grid__tbody-scrollbar-end\" [style.height.px]='!isRowPinningToTop ? pinnedRowHeight : 0'></div>\n </div>\n\n <div class=\"igx-grid__addrow-snackbar\">\n <igx-snackbar #addRowSnackbar [outlet]=\"igxBodyOverlayOutlet\" [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\" [displayTime]='snackbarDisplayTime'>{{resourceStrings.igx_grid_snackbar_addrow_label}}</igx-snackbar>\n </div>\n\n <div #igxBodyOverlayOutlet=\"overlay-outlet\" igxOverlayOutlet></div>\n</div>\n\n\n<div class=\"igx-grid__tfoot\" role=\"rowgroup\" [style.height.px]='summariesHeight' #tfoot>\n <div tabindex=\"0\" (focus)=\"navigation.focusFirstCell(false)\" (keydown)=\"navigation.summaryNav($event)\" [attr.aria-activedescendant]=\"activeDescendant\">\n <igx-grid-summary-row [style.width.px]='calcWidth' [style.height.px]='summariesHeight'\n *ngIf=\"hasSummarizedColumns && rootSummariesEnabled\" [gridID]=\"id\" role=\"row\"\n [summaries]=\"id | igxGridSummaryDataPipe:summaryService.retriggerRootPipe\" [index]=\"dataView.length\"\n class=\"igx-grid__summaries\" #summaryRow>\n </igx-grid-summary-row>\n <div class=\"igx-grid__tfoot-thumb\" [hidden]='!hasVerticalScroll()' [style.height.px]='summariesHeight'\n [style.width.px]=\"scrollSize\"></div>\n </div>\n</div>\n\n<div class=\"igx-grid__scroll\" [style.height.px]=\"scrollSize\" #scr [hidden]=\"isHorizontalScrollHidden\" (pointerdown)=\"$event.preventDefault()\">\n <div class=\"igx-grid__scroll-start\" [style.width.px]='isPinningToStart ? pinnedWidth : headerFeaturesWidth' [style.min-width.px]='isPinningToStart ? pinnedWidth : headerFeaturesWidth'></div>\n <div class=\"igx-grid__scroll-main\" [style.width.px]='unpinnedWidth'>\n <ng-template igxGridFor [igxGridForOf]='EMPTY_DATA' #scrollContainer>\n </ng-template>\n </div>\n <div class=\"igx-grid__scroll-end\" [style.float]='\"right\"' [style.width.px]='pinnedWidth' [style.min-width.px]='pinnedWidth' [hidden]=\"pinnedWidth === 0 || isPinningToStart\"></div>\n</div>\n\n<div class=\"igx-grid__footer\" #footer>\n <ng-content select=\"igx-grid-footer\"></ng-content>\n <ng-container *ngIf=\"totalRecords || pagingMode === 1\">\n <ng-content select=\"igx-paginator\"></ng-content>\n </ng-container>\n</div>\n\n<ng-template #emptyFilteredGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyFilteredGridMessage}}</span>\n <span *ngIf='showAddButton'>\n <ng-container *ngTemplateOutlet='addRowEmptyTemplate || defaultAddRowEmptyTemplate'></ng-container>\n </span>\n </span>\n</ng-template>\n\n<ng-template #defaultEmptyGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyGridMessage}}</span>\n <span *ngIf='showAddButton'>\n <ng-container *ngTemplateOutlet='addRowEmptyTemplate || defaultAddRowEmptyTemplate'></ng-container>\n </span>\n </span>\n</ng-template>\n\n<ng-template #defaultAddRowEmptyTemplate>\n <button igxButton=\"raised\" igxRipple (click)=\"this.crudService.enterAddRowMode(null, false, $event)\">\n {{resourceStrings.igx_grid_add_row_label}}\n </button>\n</ng-template>\n\n<ng-template #defaultLoadingGrid>\n <div class=\"igx-grid__loading\">\n <igx-circular-bar [indeterminate]=\"true\">\n </igx-circular-bar>\n </div>\n</ng-template>\n\n<ng-template #defaultExpandedTemplate>\n <igx-icon role=\"button\" class=\"igx-grid__group-expand-btn\"\n [ngClass]=\"{\n 'igx-grid__group-expand-btn--push': filteringService.isFilterRowVisible\n}\">unfold_less</igx-icon>\n</ng-template>\n\n <ng-template #defaultCollapsedTemplate>\n <igx-icon role=\"button\" class=\"igx-grid__group-expand-btn\"\n [ngClass]=\"{\n 'igx-grid__group-expand-btn--push': filteringService.isFilterRowVisible\n}\">unfold_more</igx-icon>\n</ng-template>\n\n<div *ngIf=\"rowEditable\" igxToggle #rowEditingOverlay>\n <div [className]=\"bannerClass\">\n <ng-container\n *ngTemplateOutlet=\"rowEditContainer; context: { rowChangesCount: rowChangesCount, endEdit: this.endEdit.bind(this) }\">\n </ng-container>\n </div>\n</div>\n\n<ng-template #defaultRowEditText>\n You have {{ rowChangesCount }} changes in this row\n</ng-template>\n\n<ng-template #defaultRowEditActions>\n <button igxButton igxRowEditTabStop (click)=\"this.endRowEditTabStop(false, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}</button>\n <button igxButton igxRowEditTabStop (click)=\"this.endRowEditTabStop(true, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_done }}</button>\n</ng-template>\n\n<ng-template #defaultRowEditTemplate>\n <div class=\"igx-banner__message\">\n <span class=\"igx-banner__text\">\n <ng-container\n *ngTemplateOutlet=\"this.crudService.row?.getClassName() === 'IgxAddRow' ? rowAddText : rowEditText ? rowEditText : defaultRowEditText;\n context: { $implicit: this.crudService.row?.getClassName() !== 'IgxAddRow' ? rowChangesCount : null }\">\n </ng-container>\n </span>\n </div>\n <div class=\"igx-banner__actions\">\n <div class=\"igx-banner__row\">\n <ng-container\n *ngTemplateOutlet=\"rowEditActions ? rowEditActions : defaultRowEditActions; context: { $implicit: this.endEdit.bind(this) }\">\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #dragIndicatorIconBase>\n <igx-icon>drag_indicator</igx-icon>\n</ng-template>\n\n<igx-grid-column-resizer *ngIf=\"colResizingService.showResizer\"></igx-grid-column-resizer>\n<div class=\"igx-grid__loading-outlet\" #igxLoadingOverlayOutlet igxOverlayOutlet></div>\n<div class=\"igx-grid__outlet\" #igxFilteringOverlayOutlet igxOverlayOutlet></div>\n", components: [{ type: IgxGridGroupByAreaComponent, selector: "igx-grid-group-by-area", inputs: ["sortingExpressions", "grid"] }, { type: IgxGridHeaderRowComponent, selector: "igx-grid-header-row", inputs: ["grid", "pinnedColumnCollection", "unpinnedColumnCollection", "activeDescendant", "hasMRL", "width", "density"] }, { type: IgxGridRowComponent, selector: "igx-grid-row" }, { type: IgxGridGroupByRowComponent, selector: "igx-grid-groupby-row", inputs: ["hideGroupRowSelectors", "rowDraggable", "index", "gridID", "groupRow", "isFocused"] }, { type: IgxSummaryRowComponent, selector: "igx-grid-summary-row", inputs: ["summaries", "gridID", "index", "firstCellIndentation"] }, { type: IgxCircularProgressBarComponent, selector: "igx-circular-bar", inputs: ["id", "indeterminate", "textVisibility", "text", "value"] }, { type: IgxSnackbarComponent, selector: "igx-snackbar", inputs: ["id", "actionText", "positionSettings"], outputs: ["clicked", "animationStarted", "animationDone"] }, { type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { type: IgxGridColumnResizerComponent, selector: "igx-grid-column-resizer" }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: IgxGridBodyDirective, selector: "[igxGridBody]" }, { type: IgxGridDragSelectDirective, selector: "[igxGridDragSelect]", inputs: ["igxGridDragSelect"], outputs: ["dragStop", "dragScroll"] }, { type: IgxColumnMovingDropDirective, selector: "[igxColumnMovingDrop]", inputs: ["igxColumnMovingDrop"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: IgxGridForOfDirective, selector: "[igxGridFor][igxGridForOf]", inputs: ["igxGridForOf"], outputs: ["dataChanging"] }, { type: IgxTemplateOutletDirective, selector: "[igxTemplateOutlet]", inputs: ["igxTemplateOutletContext", "igxTemplateOutlet"], outputs: ["viewCreated", "viewMoved", "cachedViewLoaded", "beforeViewDetach"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: IgxOverlayOutletDirective, selector: "[igxOverlayOutlet]", exportAs: ["overlay-outlet"] }, { type: IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }, { type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { type: IgxRowEditTabStopDirective, selector: "[igxRowEditTabStop]" }], pipes: { "gridSort": IgxGridSortingPipe, "gridFiltering": IgxGridFilteringPipe, "gridRowPinning": IgxGridRowPinningPipe, "gridAddRow": IgxGridAddRowPipe, "visibleColumns": IgxHasVisibleColumnsPipe, "gridTransaction": IgxGridTransactionPipe, "gridDetails": IgxGridDetailsPipe, "gridSummary": IgxGridSummaryPipe, "gridPaging": IgxGridPagingPipe, "gridGroupBy": IgxGridGroupingPipe, "igxGridRowClasses": IgxGridRowClassesPipe, "igxGridRowStyles": IgxGridRowStylesPipe, "igxGridSummaryDataPipe": IgxSummaryDataPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
65369
- __decorate([
65370
- DeprecateMethod('`getCellByColumnVisibleIndex` is deprecated. Use `getCellByColumn` or `getCellByKey` instead')
65371
- ], IgxGridComponent.prototype, "getCellByColumnVisibleIndex", null);
65372
65695
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxGridComponent, decorators: [{
65373
65696
  type: Component,
65374
65697
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, providers: [
@@ -65446,7 +65769,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
65446
65769
  type: Input
65447
65770
  }], dropAreaMessage: [{
65448
65771
  type: Input
65449
- }], getCellByColumnVisibleIndex: [], showGroupArea: [{
65772
+ }], showGroupArea: [{
65450
65773
  type: Input
65451
65774
  }] } });
65452
65775
 
@@ -65526,7 +65849,7 @@ class IgxGridStateDirective {
65526
65849
  },
65527
65850
  columns: {
65528
65851
  getFeatureState: (context) => {
65529
- const gridColumns = context.currGrid.columns.map((c) => ({
65852
+ const gridColumns = context.currGrid.columnList.map((c) => ({
65530
65853
  pinned: c.pinned,
65531
65854
  sortable: c.sortable,
65532
65855
  filterable: c.filterable,
@@ -66217,14 +66540,14 @@ class IgxColumnLayoutComponent extends IgxColumnGroupComponent {
66217
66540
  set hidden(value) {
66218
66541
  this._hidden = value;
66219
66542
  this.children.forEach(child => child.hidden = value);
66220
- if (this.grid && this.grid.columns && this.grid.columns.length > 0) {
66543
+ if (this.grid && this.grid.columnList && this.grid.columnList.length > 0) {
66221
66544
  // reset indexes in case columns are hidden/shown runtime
66222
66545
  const columns = this.grid && this.grid.pinnedColumns && this.grid.unpinnedColumns ?
66223
66546
  this.grid.pinnedColumns.concat(this.grid.unpinnedColumns) : [];
66224
66547
  if (!this._hidden && !columns.find(c => c.field === this.field)) {
66225
66548
  this.grid.resetColumnCollections();
66226
66549
  }
66227
- this.grid.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
66550
+ this.grid.columnList.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
66228
66551
  }
66229
66552
  }
66230
66553
  /**
@@ -68753,7 +69076,8 @@ class IgxTreeGridComponent extends IgxGridBaseDirective {
68753
69076
  this.notifyChanges();
68754
69077
  }
68755
69078
  /**
68756
- * @deprecated
69079
+ * @deprecated in version 12.1.0. Use `getCellByColumn` or `getCellByKey` instead
69080
+ *
68757
69081
  * Returns a `CellType` object that matches the conditions.
68758
69082
  *
68759
69083
  * @example
@@ -69369,9 +69693,6 @@ IgxTreeGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
69369
69693
  IgxForOfSyncService,
69370
69694
  IgxForOfScrollSyncService
69371
69695
  ], queries: [{ propertyName: "groupArea", first: true, predicate: IgxTreeGridGroupByAreaComponent, descendants: true, read: IgxTreeGridGroupByAreaComponent }, { propertyName: "rowLoadingTemplate", first: true, predicate: IgxRowLoadingIndicatorTemplateDirective, descendants: true, read: IgxRowLoadingIndicatorTemplateDirective }], viewQueries: [{ propertyName: "dragIndicatorIconBase", first: true, predicate: ["dragIndicatorIconBase"], descendants: true, read: TemplateRef, static: true }, { propertyName: "recordTemplate", first: true, predicate: ["record_template"], descendants: true, read: TemplateRef, static: true }, { propertyName: "summaryTemplate", first: true, predicate: ["summary_template"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"igx-grid-toolbar\"></ng-content>\n<ng-content select=\"igx-tree-grid-group-by-area\"></ng-content>\n<igx-grid-header-row class=\"igx-grid-thead\" tabindex=\"0\"\n [grid]=\"this\"\n [hasMRL]=\"hasColumnLayouts\"\n [activeDescendant]=\"activeDescendant\"\n [width]=\"calcWidth\"\n [pinnedColumnCollection]=\"pinnedColumns\"\n [unpinnedColumnCollection]=\"unpinnedColumns\"\n (keydown.meta.c)=\"copyHandler($event)\"\n (keydown.control.c)=\"copyHandler($event)\"\n (copy)=\"copyHandler($event)\"\n (keydown)=\"navigation.headerNavigation($event)\"\n (focus)=\"navigation.focusFirstCell()\"\n>\n</igx-grid-header-row>\n\n<div igxGridBody (keydown.control.c)=\"copyHandler($event)\" (copy)=\"copyHandler($event)\" class=\"igx-grid__tbody\" role=\"rowgroup\">\n <div class=\"igx-grid__tbody-content\" tabindex=\"0\" (focus)=\"navigation.focusTbody($event)\" (keydown)=\"navigation.handleNavigation($event)\"\n (dragStop)=\"selectionService.dragMode = $event\" [attr.aria-activedescendant]=\"activeDescendant\" [attr.role]=\"dataView.length ? null : 'row'\"\n (dragScroll)=\"dragScroll($event)\" [igxGridDragSelect]=\"selectionService.dragMode\"\n [style.height.px]='totalHeight' [style.width.px]='calcWidth' #tbody (scroll)='preventContainerScroll($event)'>\n <span *ngIf=\"hasMovableColumns && columnInDrag && pinnedColumns.length <= 0\"\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-left\"></span>\n <span *ngIf=\"hasMovableColumns && columnInDrag && pinnedColumns.length > 0\"\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-pinned\" [style.left.px]=\"pinnedWidth\"></span>\n <ng-template #pinnedRecordsTemplate>\n <ng-container *ngIf='data\n | treeGridTransaction:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | treeGridNormalizeRecord:pipeTrigger\n | treeGridAddRow:true:pipeTrigger\n | gridRowPinning:id:true:pipeTrigger\n | treeGridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:pipeTrigger:filteringPipeTrigger:true\n | treeGridSorting:sortingExpressions:sortStrategy:pipeTrigger:true as pinnedData'>\n <div #pinContainer *ngIf='pinnedData.length > 0'\n [ngClass]=\"{\n 'igx-grid__tr--pinned-bottom': !isRowPinningToTop,\n 'igx-grid__tr--pinned-top': isRowPinningToTop\n }\"\n class='igx-grid__tr--pinned' [style.width.px]='calcWidth'>\n <ng-container *ngFor=\"let rowData of pinnedData;let rowIndex = index;\">\n <ng-container *ngTemplateOutlet=\"pinned_record_template; context: getContext(rowData, rowIndex, true)\">\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\"></ng-container>\n <ng-template igxGridFor let-rowData [igxGridForOf]=\"data\n | treeGridTransaction:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | treeGridHierarchizing:primaryKey:foreignKey:childDataKey:pipeTrigger\n | treeGridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:pipeTrigger:filteringPipeTrigger\n | treeGridSorting:sortingExpressions:sortStrategy:pipeTrigger\n | treeGridFlattening:expansionDepth:expansionStates:pipeTrigger\n | treeGridPaging:paginator?.page:paginator?.perPage:pipeTrigger\n | treeGridSummary:hasSummarizedColumns:summaryCalculationMode:summaryPosition:showSummaryOnCollapse:pipeTrigger:summaryPipeTrigger\n | treeGridAddRow:false:pipeTrigger\n | gridRowPinning:id:false:pipeTrigger\"\n let-rowIndex=\"index\" [igxForScrollOrientation]=\"'vertical'\" [igxForScrollContainer]='verticalScroll'\n [igxForContainerSize]='calcHeight' [igxForItemSize]=\"renderedRowHeight\" #verticalScrollContainer>\n <ng-template [igxTemplateOutlet]='isSummaryRow(rowData) ? summary_template : record_template'\n [igxTemplateOutletContext]='getContext(rowData, rowIndex, false)'\n (cachedViewLoaded)='cachedViewLoaded($event)'>\n </ng-template>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\"></ng-container>\n <ng-template #record_template let-rowIndex=\"index\" let-disabledRow=\"disabled\" let-rowData>\n <igx-tree-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [treeRow]=\"rowData\" [disabled]=\"disabledRow\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:row.treeRow.isFilteredOutParent:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row>\n </igx-tree-grid-row>\n </ng-template>\n <ng-template #pinned_record_template let-rowIndex=\"index\" let-rowData>\n <igx-tree-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [treeRow]=\"rowData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:row.treeRow.isFilteredOutParent:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\"#row #pinnedRow>\n </igx-tree-grid-row>\n </ng-template>\n <ng-template #summary_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-summary-row [gridID]=\"id\" [summaries]=\"rowData.summaries\"\n [firstCellIndentation]=\"rowData.cellIndentation\" [index]=\"rowIndex\"\n class=\"igx-grid__summaries--body\" role=\"row\" #summaryRow>\n </igx-grid-summary-row>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n <div class=\"igx-grid__row-editing-outlet\" igxOverlayOutlet #igxRowEditingOverlayOutlet></div>\n <igc-trial-watermark></igc-trial-watermark>\n </div>\n <div igxToggle #loadingOverlay>\n <igx-circular-bar [indeterminate]=\"true\" *ngIf='shouldOverlayLoading'>\n </igx-circular-bar>\n </div>\n <span *ngIf=\"hasMovableColumns && columnInDrag\" [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\"\n id=\"right\" class=\"igx-grid__scroll-on-drag-right\"></span>\n <div [hidden]='!hasVerticalScroll()' class=\"igx-grid__tbody-scrollbar\" [style.width.px]=\"scrollSize\" (pointerdown)=\"$event.preventDefault()\"\n [style.height.px]='calcHeight'>\n <div class=\"igx-grid__tbody-scrollbar-start\" [style.height.px]=' isRowPinningToTop ? pinnedRowHeight : 0'></div>\n <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]='calcHeight'>\n <ng-template igxGridFor [igxGridForOf]='[]' #verticalScrollHolder></ng-template>\n </div>\n <div class=\"igx-grid__tbody-scrollbar-end\" [style.height.px]='!isRowPinningToTop ? pinnedRowHeight : 0'></div>\n </div>\n <div class=\"igx-grid__addrow-snackbar\">\n <igx-snackbar #addRowSnackbar [outlet]=\"igxBodyOverlayOutlet\" [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\" [displayTime]='snackbarDisplayTime'>{{resourceStrings.igx_grid_snackbar_addrow_label}}</igx-snackbar>\n </div>\n\n <div igxOverlayOutlet #igxBodyOverlayOutlet=\"overlay-outlet\"></div>\n</div>\n\n<div class=\"igx-grid__tfoot\" role=\"rowgroup\" [style.height.px]='summariesHeight' #tfoot>\n <div tabindex=\"0\" (focus)=\"navigation.focusFirstCell(false)\"\n (keydown)=\"navigation.summaryNav($event)\" [attr.aria-activedescendant]=\"activeDescendant\">\n <igx-grid-summary-row [style.width.px]='calcWidth' [style.height.px]='summariesHeight'\n *ngIf=\"hasSummarizedColumns && rootSummariesEnabled\" [gridID]=\"id\" role=\"row\"\n [summaries]=\"id | igxGridSummaryDataPipe:summaryService.retriggerRootPipe\" [index]=\"dataView.length\"\n class=\"igx-grid__summaries\" #summaryRow>\n </igx-grid-summary-row>\n <div class=\"igx-grid__tfoot-thumb\" [hidden]='!hasVerticalScroll()' [style.height.px]='summariesHeight'\n [style.width.px]=\"scrollSize\"></div>\n </div>\n</div>\n\n<div class=\"igx-grid__scroll\" [style.height.px]=\"scrollSize\" #scr [hidden]=\"isHorizontalScrollHidden\" (pointerdown)=\"$event.preventDefault()\">\n <div class=\"igx-grid__scroll-start\" [style.width.px]='isPinningToStart ? pinnedWidth : headerFeaturesWidth' [style.min-width.px]='isPinningToStart ? pinnedWidth : headerFeaturesWidth'></div>\n <div class=\"igx-grid__scroll-main\" [style.width.px]='unpinnedWidth'>\n <ng-template igxGridFor [igxGridForOf]='[]' #scrollContainer>\n </ng-template>\n </div>\n <div class=\"igx-grid__scroll-end\" [style.float]='\"right\"' [style.width.px]='pinnedWidth' [style.min-width.px]='pinnedWidth' [hidden]=\"pinnedWidth === 0 || isPinningToStart\"></div>\n</div>\n\n<div class=\"igx-grid__footer\" #footer>\n <ng-content select=\"igx-grid-footer\"></ng-content>\n <ng-container *ngIf=\"totalRecords || pagingMode === 1\">\n <ng-content select=\"igx-paginator\"></ng-content>\n </ng-container>\n</div>\n\n<ng-template #emptyFilteredGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyFilteredGridMessage}}</span>\n <span *ngIf='showAddButton'>\n <ng-container *ngTemplateOutlet='addRowEmptyTemplate || defaultAddRowEmptyTemplate'></ng-container>\n </span>\n </span>\n</ng-template>\n\n<ng-template #defaultEmptyGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyGridMessage}}</span>\n <span *ngIf='showAddButton'>\n <ng-container *ngTemplateOutlet='addRowEmptyTemplate || defaultAddRowEmptyTemplate'></ng-container>\n </span>\n </span>\n</ng-template>\n\n<ng-template #defaultAddRowEmptyTemplate>\n <button igxButton=\"raised\" igxRipple (click)=\"this.crudService.enterAddRowMode(null, false, $event)\">\n {{resourceStrings.igx_grid_add_row_label}}\n </button>\n</ng-template>\n\n<ng-template #defaultLoadingGrid>\n <div class=\"igx-grid__loading\">\n <igx-circular-bar [indeterminate]=\"true\">\n </igx-circular-bar>\n </div>\n</ng-template>\n\n<div *ngIf=\"rowEditable\" igxToggle #rowEditingOverlay>\n <div [className]=\"bannerClass\">\n <ng-container\n *ngTemplateOutlet=\"rowEditContainer; context: { rowChangesCount: rowChangesCount, endEdit: this.crudService.endEdit.bind(this) }\">\n </ng-container>\n </div>\n</div>\n\n<ng-template #defaultRowEditText>\n You have {{ rowChangesCount }} changes in this row\n</ng-template>\n\n<ng-template #defaultRowEditActions>\n <button igxButton igxRowEditTabStop (click)=\"this.endRowEditTabStop(false, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}</button>\n <button igxButton igxRowEditTabStop (click)=\"this.endRowEditTabStop(true, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_done }}</button>\n</ng-template>\n\n<ng-template #defaultRowEditTemplate>\n <div class=\"igx-banner__message\">\n <span class=\"igx-banner__text\">\n <ng-container\n *ngTemplateOutlet=\"this.crudService.row?.getClassName() === 'IgxAddRow' ? rowAddText : rowEditText ? rowEditText : defaultRowEditText;\n context: { $implicit: this.crudService.row?.getClassName() !== 'IgxAddRow' ? rowChangesCount : null }\">\n </ng-container>\n </span>\n </div>\n <div class=\"igx-banner__actions\">\n <div class=\"igx-banner__row\">\n <ng-container\n *ngTemplateOutlet=\"rowEditActions ? rowEditActions : defaultRowEditActions; context: { $implicit: this.endEdit.bind(this) }\">\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #dragIndicatorIconBase>\n <igx-icon>drag_indicator</igx-icon>\n</ng-template>\n\n<igx-grid-column-resizer *ngIf=\"colResizingService.showResizer\"></igx-grid-column-resizer>\n<div class=\"igx-grid__loading-outlet\" #igxLoadingOverlayOutlet igxOverlayOutlet></div>\n<div class=\"igx-grid__outlet\" #igxFilteringOverlayOutlet igxOverlayOutlet></div>\n", components: [{ type: IgxGridHeaderRowComponent, selector: "igx-grid-header-row", inputs: ["grid", "pinnedColumnCollection", "unpinnedColumnCollection", "activeDescendant", "hasMRL", "width", "density"] }, { type: IgxTreeGridRowComponent, selector: "igx-tree-grid-row", inputs: ["treeRow"] }, { type: IgxSummaryRowComponent, selector: "igx-grid-summary-row", inputs: ["summaries", "gridID", "index", "firstCellIndentation"] }, { type: IgxCircularProgressBarComponent, selector: "igx-circular-bar", inputs: ["id", "indeterminate", "textVisibility", "text", "value"] }, { type: IgxSnackbarComponent, selector: "igx-snackbar", inputs: ["id", "actionText", "positionSettings"], outputs: ["clicked", "animationStarted", "animationDone"] }, { type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { type: IgxGridColumnResizerComponent, selector: "igx-grid-column-resizer" }], directives: [{ type: IgxGridBodyDirective, selector: "[igxGridBody]" }, { type: IgxGridDragSelectDirective, selector: "[igxGridDragSelect]", inputs: ["igxGridDragSelect"], outputs: ["dragStop", "dragScroll"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: IgxColumnMovingDropDirective, selector: "[igxColumnMovingDrop]", inputs: ["igxColumnMovingDrop"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: IgxGridForOfDirective, selector: "[igxGridFor][igxGridForOf]", inputs: ["igxGridForOf"], outputs: ["dataChanging"] }, { type: IgxTemplateOutletDirective, selector: "[igxTemplateOutlet]", inputs: ["igxTemplateOutletContext", "igxTemplateOutlet"], outputs: ["viewCreated", "viewMoved", "cachedViewLoaded", "beforeViewDetach"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: IgxOverlayOutletDirective, selector: "[igxOverlayOutlet]", exportAs: ["overlay-outlet"] }, { type: IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }, { type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { type: IgxRowEditTabStopDirective, selector: "[igxRowEditTabStop]" }], pipes: { "treeGridSorting": IgxTreeGridSortingPipe, "treeGridFiltering": IgxTreeGridFilteringPipe, "gridRowPinning": IgxGridRowPinningPipe, "treeGridAddRow": IgxTreeGridAddRowPipe, "treeGridNormalizeRecord": IgxTreeGridNormalizeRecordsPipe, "visibleColumns": IgxHasVisibleColumnsPipe, "treeGridTransaction": IgxTreeGridTransactionPipe, "treeGridSummary": IgxTreeGridSummaryPipe, "treeGridPaging": IgxTreeGridPagingPipe, "treeGridFlattening": IgxTreeGridFlatteningPipe, "treeGridHierarchizing": IgxTreeGridHierarchizingPipe, "igxGridRowClasses": IgxGridRowClassesPipe, "igxGridRowStyles": IgxGridRowStylesPipe, "igxGridSummaryDataPipe": IgxSummaryDataPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
69372
- __decorate([
69373
- DeprecateMethod('`getCellByColumnVisibleIndex` is deprecated. Use `getCellByColumn` or `getCellByKey` instead')
69374
- ], IgxTreeGridComponent.prototype, "getCellByColumnVisibleIndex", null);
69375
69696
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxTreeGridComponent, decorators: [{
69376
69697
  type: Component,
69377
69698
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-tree-grid', providers: [
@@ -69449,7 +69770,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
69449
69770
  type: Input
69450
69771
  }], rowLoadingIndicatorTemplate: [{
69451
69772
  type: Input
69452
- }], getCellByColumnVisibleIndex: [] } });
69773
+ }] } });
69453
69774
 
69454
69775
  const HIDDEN_FIELD_NAME = '_Igx_Hidden_Data_';
69455
69776
  /**
@@ -71339,7 +71660,8 @@ class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirective {
71339
71660
  return this._defaultExpandState;
71340
71661
  }
71341
71662
  /**
71342
- * @deprecated
71663
+ * @deprecated in version 12.1.0. Use `getCellByColumn` or `getCellByKey` instead
71664
+ *
71343
71665
  * Returns a `CellType` object that matches the conditions.
71344
71666
  *
71345
71667
  * @example
@@ -71958,9 +72280,6 @@ IgxHierarchicalGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
71958
72280
  IgxForOfScrollSyncService,
71959
72281
  IgxRowIslandAPIService
71960
72282
  ], queries: [{ propertyName: "toolbarTemplate", first: true, predicate: IgxGridToolbarDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "childLayoutList", predicate: IgxRowIslandComponent, read: IgxRowIslandComponent }, { propertyName: "allLayoutList", predicate: IgxRowIslandComponent, descendants: true, read: IgxRowIslandComponent }, { propertyName: "paginatorList", predicate: IgxPaginatorComponent, descendants: true }], viewQueries: [{ propertyName: "toolbarOutlet", first: true, predicate: ["toolbarOutlet"], descendants: true, read: ViewContainerRef }, { propertyName: "paginatorOutlet", first: true, predicate: ["paginatorOutlet"], descendants: true, read: ViewContainerRef }, { propertyName: "hierarchicalRecordTemplate", first: true, predicate: ["hierarchical_record_template"], descendants: true, read: TemplateRef, static: true }, { propertyName: "childTemplate", first: true, predicate: ["child_record_template"], descendants: true, read: TemplateRef, static: true }, { propertyName: "templateOutlets", predicate: IgxTemplateOutletDirective, descendants: true, read: IgxTemplateOutletDirective }, { propertyName: "hierarchicalRows", predicate: IgxChildGridRowComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"igx-grid-toolbar\"></ng-content>\n<ng-container #toolbarOutlet></ng-container>\n\n<igx-grid-header-row class=\"igx-grid-thead\" tabindex=\"0\"\n [grid]=\"this\"\n [hasMRL]=\"hasColumnLayouts\"\n [activeDescendant]=\"activeDescendant\"\n [width]=\"calcWidth\"\n [pinnedColumnCollection]=\"pinnedColumns\"\n [unpinnedColumnCollection]=\"unpinnedColumns\"\n (keydown.meta.c)=\"copyHandler($event)\"\n (keydown.control.c)=\"copyHandler($event)\"\n (copy)=\"copyHandler($event)\"\n (keydown)=\"navigation.headerNavigation($event)\"\n (focus)=\"navigation.focusFirstCell()\"\n>\n</igx-grid-header-row>\n\n<div igxGridBody (keydown.control.c)=\"copyHandler($event)\" (copy)=\"copyHandler($event)\" class=\"igx-grid__tbody\" role=\"rowgroup\">\n <div class=\"igx-grid__tbody-content\" tabindex=\"0\" (focus)=\"navigation.focusTbody($event)\"\n (keydown)=\"navigation.handleNavigation($event)\" (dragStop)=\"selectionService.dragMode = $event\"\n (dragScroll)=\"dragScroll($event)\" [igxGridDragSelect]=\"selectionService.dragMode\" [attr.aria-activedescendant]=\"activeDescendant\" [attr.role]=\"dataView.length ? null : 'row'\"\n [style.height.px]='totalHeight' [style.width.px]='calcWidth' #tbody (scroll)='preventContainerScroll($event)'>\n <span *ngIf=\"hasMovableColumns && columnInDrag && pinnedColumns.length <= 0\"\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-left\"></span>\n <span *ngIf=\"hasMovableColumns && columnInDrag && pinnedColumns.length > 0\"\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-pinned\" [style.left.px]=\"pinnedWidth\"></span>\n <ng-template #pinnedRecordsTemplate>\n <ng-container *ngIf=\"data\n | gridTransaction:id:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | gridAddRow:true:pipeTrigger\n | gridRowPinning:id:true:pipeTrigger\n | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger:true\n | gridSort:sortingExpressions:sortStrategy:id:pipeTrigger:true as pinnedData\">\n <div #pinContainer *ngIf='pinnedData.length > 0' class='igx-grid__tr--pinned'\n [ngClass]=\"{ 'igx-grid__tr--pinned-bottom': !isRowPinningToTop, 'igx-grid__tr--pinned-top': isRowPinningToTop }\"\n [style.width.px]='calcWidth'>\n <ng-container *ngFor=\"let rowData of pinnedData; let rowIndex = index\">\n <ng-container *ngTemplateOutlet=\"pinned_hierarchical_record_template; context: getContext(rowData, rowIndex, true)\">\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\">\n </ng-container>\n <ng-template igxGridFor let-rowData let-rowIndex=\"index\" [igxGridForOf]=\"data\n | gridTransaction:id:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger\n | gridSort:sortingExpressions:sortStrategy:id:pipeTrigger\n | gridHierarchicalPaging:paginator?.page:paginator?.perPage:id:pipeTrigger\n | gridHierarchical:expansionStates:id:primaryKey:childLayoutKeys:pipeTrigger\n | gridAddRow:false:pipeTrigger\n | gridRowPinning:id:false:pipeTrigger\"\n [igxForScrollOrientation]=\"'vertical'\" [igxForScrollContainer]='verticalScroll'\n [igxForContainerSize]='calcHeight' [igxForItemSize]=\"renderedRowHeight\" [igxForTrackBy]='trackChanges'\n #verticalScrollContainer (chunkPreload)=\"dataLoading($event)\">\n <ng-template\n [igxTemplateOutlet]='(isHierarchicalRecord(rowData) ? hierarchical_record_template : (isChildGridRecord(rowData) ? child_record_template : hierarchical_record_template))'\n [igxTemplateOutletContext]='getContext(rowData, rowIndex, false)' (viewCreated)='viewCreatedHandler($event)'\n (viewMoved)='viewMovedHandler($event)' (cachedViewLoaded)='cachedViewLoaded($event)'>\n </ng-template>\n <!-- <ng-container *igxTemplateOutlet=\"(isHierarchicalRecord(rowData) ? hierarchical_record_template : (isChildGridRecord(rowData) && isExpanded(rowData) ? child_record_template : hierarchical_record_template)); context: getContext(rowData)\"></ng-container> -->\n </ng-template>\n <ng-template #hierarchical_record_template let-rowIndex=\"index\" let-disabledRow=\"disabled\" let-rowData>\n <igx-hierarchical-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [disabled]=\"disabledRow\" [rowData]=\"rowData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:false:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row>\n </igx-hierarchical-grid-row>\n </ng-template>\n\n <ng-template #pinned_hierarchical_record_template let-rowIndex=\"index\" let-rowData>\n <igx-hierarchical-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [rowData]=\"rowData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:false:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row #pinnedRow>\n </igx-hierarchical-grid-row>\n </ng-template>\n <ng-template #child_record_template let-rowIndex=\"index\" let-rowData>\n <div style=\"overflow: auto; width: 100%;\" [attr.data-rowindex]='rowIndex' (scroll)='onContainerScroll()'\n [ngClass]=\"{\n 'igx-grid__tr-container': true,\n 'igx-grid__tr--highlighted':isRowHighlighted(rowData)\n }\">\n <igx-child-grid-row *ngFor=\"let layout of childLayoutList\" [parentGridID]=\"id\" [index]=\"rowIndex\"\n [rowData]=\"rowData\" [layout]='layout' #row>\n </igx-child-grid-row>\n </div>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\">\n </ng-container>\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n <span *ngIf=\"hasMovableColumns && columnInDrag\" [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\"\n id=\"right\" class=\"igx-grid__scroll-on-drag-right\"></span>\n <div class=\"igx-grid__row-editing-outlet\" igxOverlayOutlet #igxRowEditingOverlayOutlet></div>\n <igc-trial-watermark *ngIf=\"!this.parent\"></igc-trial-watermark>\n </div>\n <div igxToggle #loadingOverlay>\n <igx-circular-bar [indeterminate]=\"true\" *ngIf='shouldOverlayLoading'>\n </igx-circular-bar>\n </div>\n <span *ngIf=\"hasMovableColumns && columnInDrag\" [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\"\n id=\"right\" class=\"igx-grid__scroll-on-drag-right\"></span>\n <div [hidden]='!hasVerticalScroll()' class=\"igx-grid__tbody-scrollbar\" [style.width.px]=\"scrollSize\" (pointerdown)=\"$event.preventDefault()\">\n <div class=\"igx-grid__tbody-scrollbar-start\" [style.height.px]=' isRowPinningToTop ? pinnedRowHeight : 0'></div>\n <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]='calcHeight'>\n <ng-template igxGridFor [igxGridForOf]='[]' #verticalScrollHolder></ng-template>\n </div>\n <div class=\"igx-grid__tbody-scrollbar-end\" [style.height.px]='!isRowPinningToTop ? pinnedRowHeight : 0'></div>\n </div>\n <div class=\"igx-grid__addrow-snackbar\">\n <igx-snackbar #addRowSnackbar [outlet]=\"igxBodyOverlayOutlet\" [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\" [displayTime]='snackbarDisplayTime'>{{resourceStrings.igx_grid_snackbar_addrow_label}}</igx-snackbar>\n </div>\n\n <div igxOverlayOutlet #igxBodyOverlayOutlet=\"overlay-outlet\"></div>\n</div>\n\n<div class=\"igx-grid__tfoot\" role=\"rowgroup\" [style.height.px]='summariesHeight' #tfoot>\n <div tabindex=\"0\" (focus)=\"navigation.focusFirstCell(false)\" [attr.aria-activedescendant]=\"activeDescendant\"\n (keydown)=\"navigation.summaryNav($event)\">\n <igx-grid-summary-row [style.width.px]='calcWidth' [style.height.px]='summariesHeight'\n *ngIf=\"hasSummarizedColumns && rootSummariesEnabled\" [gridID]=\"id\" role=\"row\"\n [summaries]=\"id | igxGridSummaryDataPipe:summaryService.retriggerRootPipe\" [index]=\"dataView.length\"\n class=\"igx-grid__summaries\" #summaryRow>\n </igx-grid-summary-row>\n <div class=\"igx-grid__tfoot-thumb\" [hidden]='!hasVerticalScroll()' [style.height.px]='summariesHeight'\n [style.width.px]=\"scrollSize\"></div>\n </div>\n</div>\n\n<div class=\"igx-grid__scroll\" [style.height.px]=\"scrollSize\" #scr [hidden]=\"isHorizontalScrollHidden\" (pointerdown)=\"$event.preventDefault()\">\n <div class=\"igx-grid__scroll-start\" [style.width.px]='isPinningToStart ? pinnedWidth : headerFeaturesWidth' [style.min-width.px]='isPinningToStart ? pinnedWidth : headerFeaturesWidth'></div>\n <div class=\"igx-grid__scroll-main\" [style.width.px]='unpinnedWidth'>\n <ng-template igxGridFor [igxGridForOf]='[]' #scrollContainer>\n </ng-template>\n </div>\n <div class=\"igx-grid__scroll-end\" [style.float]='\"right\"' [style.width.px]='pinnedWidth' [style.min-width.px]='pinnedWidth' [hidden]=\"pinnedWidth === 0 || isPinningToStart\"></div>\n</div>\n\n<div class=\"igx-grid__footer\" #footer>\n <ng-content select=\"igx-grid-footer\"></ng-content>\n <ng-content *ngIf=\"totalRecords || pagingMode === 1\" select=\"igx-paginator\"></ng-content>\n <ng-container #paginatorOutlet></ng-container>\n</div>\n\n<ng-template #emptyFilteredGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyFilteredGridMessage}}</span>\n <span *ngIf='showAddButton'>\n <ng-container *ngTemplateOutlet='addRowEmptyTemplate || defaultAddRowEmptyTemplate'></ng-container>\n </span>\n </span>\n</ng-template>\n\n<ng-template #defaultEmptyGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyGridMessage}}</span>\n <span *ngIf='showAddButton'>\n <ng-container *ngTemplateOutlet='addRowEmptyTemplate || defaultAddRowEmptyTemplate'></ng-container>\n </span>\n </span>\n</ng-template>\n\n<ng-template #defaultAddRowEmptyTemplate>\n <button igxButton=\"raised\" igxRipple (click)=\"this.crudService.enterAddRowMode(null, false, $event)\">\n {{resourceStrings.igx_grid_add_row_label}}\n </button>\n</ng-template>\n\n<ng-template #defaultLoadingGrid>\n <div class=\"igx-grid__loading\">\n <igx-circular-bar [indeterminate]=\"true\">\n </igx-circular-bar>\n </div>\n</ng-template>\n\n<ng-template #defaultCollapsedTemplate>\n <igx-icon role=\"button\">unfold_more</igx-icon>\n</ng-template>\n\n<ng-template #defaultExpandedTemplate>\n <igx-icon role=\"button\" [active]='hasExpandedRecords() && hasExpandableChildren'>unfold_less</igx-icon>\n</ng-template>\n\n<div *ngIf=\"rowEditable\" igxToggle #rowEditingOverlay>\n <div [className]=\"bannerClass\">\n <ng-container\n *ngTemplateOutlet=\"resolveRowEditContainer; context: { rowChangesCount: rowChangesCount, endEdit: this.crudService.endEdit.bind(this) }\">\n </ng-container>\n </div>\n</div>\n<ng-template #defaultRowEditText>\n You have {{ rowChangesCount }} changes in this row\n</ng-template>\n<ng-template #defaultRowEditActions>\n <button igxButton igxRowEditTabStop (click)=\"this.endRowEditTabStop(false, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}</button>\n <button igxButton igxRowEditTabStop (click)=\"this.endRowEditTabStop(true, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_done }}</button>\n</ng-template>\n<ng-template #defaultRowEditTemplate>\n <div class=\"igx-banner__message\">\n <span class=\"igx-banner__text\">\n <ng-container\n *ngTemplateOutlet=\"this.crudService.row?.getClassName() === 'IgxAddRow' ? rowAddText : resolveRowEditText || defaultRowEditText;\n context: { $implicit: this.crudService.row?.getClassName() !== 'IgxAddRow' ? rowChangesCount : null }\">\n </ng-container>\n </span>\n </div>\n <div class=\"igx-banner__actions\">\n <div class=\"igx-banner__row\">\n <ng-container\n *ngTemplateOutlet=\"resolveRowEditActions || defaultRowEditActions; context: { $implicit: this.endEdit.bind(this) }\">\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #dragIndicatorIconBase>\n <igx-icon>drag_indicator</igx-icon>\n</ng-template>\n\n<igx-grid-column-resizer *ngIf=\"colResizingService.showResizer\"></igx-grid-column-resizer>\n<div class=\"igx-grid__loading-outlet\" #igxLoadingOverlayOutlet igxOverlayOutlet></div>\n<div class=\"igx-grid__outlet\" #igxFilteringOverlayOutlet igxOverlayOutlet></div>\n", components: [{ type: IgxGridHeaderRowComponent, selector: "igx-grid-header-row", inputs: ["grid", "pinnedColumnCollection", "unpinnedColumnCollection", "activeDescendant", "hasMRL", "width", "density"] }, { type: IgxHierarchicalRowComponent, selector: "igx-hierarchical-grid-row" }, { type: IgxChildGridRowComponent, selector: "igx-child-grid-row", inputs: ["layout", "parentGridID", "rowData", "index"] }, { type: IgxCircularProgressBarComponent, selector: "igx-circular-bar", inputs: ["id", "indeterminate", "textVisibility", "text", "value"] }, { type: IgxSnackbarComponent, selector: "igx-snackbar", inputs: ["id", "actionText", "positionSettings"], outputs: ["clicked", "animationStarted", "animationDone"] }, { type: IgxSummaryRowComponent, selector: "igx-grid-summary-row", inputs: ["summaries", "gridID", "index", "firstCellIndentation"] }, { type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { type: IgxGridColumnResizerComponent, selector: "igx-grid-column-resizer" }], directives: [{ type: IgxGridBodyDirective, selector: "[igxGridBody]" }, { type: IgxGridDragSelectDirective, selector: "[igxGridDragSelect]", inputs: ["igxGridDragSelect"], outputs: ["dragStop", "dragScroll"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: IgxColumnMovingDropDirective, selector: "[igxColumnMovingDrop]", inputs: ["igxColumnMovingDrop"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: IgxGridForOfDirective, selector: "[igxGridFor][igxGridForOf]", inputs: ["igxGridForOf"], outputs: ["dataChanging"] }, { type: IgxTemplateOutletDirective, selector: "[igxTemplateOutlet]", inputs: ["igxTemplateOutletContext", "igxTemplateOutlet"], outputs: ["viewCreated", "viewMoved", "cachedViewLoaded", "beforeViewDetach"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: IgxOverlayOutletDirective, selector: "[igxOverlayOutlet]", exportAs: ["overlay-outlet"] }, { type: IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }, { type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { type: IgxRowEditTabStopDirective, selector: "[igxRowEditTabStop]" }], pipes: { "gridSort": IgxGridSortingPipe, "gridFiltering": IgxGridFilteringPipe, "gridRowPinning": IgxGridRowPinningPipe, "gridAddRow": IgxGridAddRowPipe, "visibleColumns": IgxHasVisibleColumnsPipe, "gridTransaction": IgxGridTransactionPipe, "gridHierarchical": IgxGridHierarchicalPipe, "gridHierarchicalPaging": IgxGridHierarchicalPagingPipe, "igxGridRowClasses": IgxGridRowClassesPipe, "igxGridRowStyles": IgxGridRowStylesPipe, "igxGridSummaryDataPipe": IgxSummaryDataPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
71961
- __decorate([
71962
- DeprecateMethod('`getCellByColumnVisibleIndex` is deprecated. Use `getCellByColumn` or `getCellByKey` instead')
71963
- ], IgxHierarchicalGridComponent.prototype, "getCellByColumnVisibleIndex", null);
71964
72283
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxHierarchicalGridComponent, decorators: [{
71965
72284
  type: Component,
71966
72285
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-hierarchical-grid', providers: [
@@ -72017,7 +72336,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
72017
72336
  type: Input
72018
72337
  }], expandChildren: [{
72019
72338
  type: Input
72020
- }], getCellByColumnVisibleIndex: [] } });
72339
+ }] } });
72021
72340
 
72022
72341
  /**
72023
72342
  * @hidden
@@ -76519,6 +76838,8 @@ class IgxToastComponent extends IgxNotificationsDirective {
76519
76838
  };
76520
76839
  }
76521
76840
  /**
76841
+ * @deprecated in version 12.2.3. We suggest using `positionSettings` property instead
76842
+ *
76522
76843
  * Sets/gets the position of the toast.
76523
76844
  * If not set, the `position` attribute will have value `IgxToastPosition.Bottom`.
76524
76845
  * ```html
@@ -76644,9 +76965,6 @@ class IgxToastComponent extends IgxNotificationsDirective {
76644
76965
  }
76645
76966
  IgxToastComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxToastComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxNavigationService, optional: true }, { token: IgxOverlayService }], target: i0.ɵɵFactoryTarget.Component });
76646
76967
  IgxToastComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxToastComponent, selector: "igx-toast", inputs: { id: "id", role: "role", position: "position", positionSettings: "positionSettings" }, outputs: { isVisibleChange: "isVisibleChange" }, host: { properties: { "class.igx-toast": "this.cssClass", "attr.id": "this.id", "attr.role": "this.role" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-content></ng-content>\n<span>{{ textMessage }}</span>\n\n" });
76647
- __decorate([
76648
- DeprecateProperty('`position` is deprecated. We suggest using `positionSettings` property instead.')
76649
- ], IgxToastComponent.prototype, "position", null);
76650
76968
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxToastComponent, decorators: [{
76651
76969
  type: Component,
76652
76970
  args: [{ selector: 'igx-toast', template: "<ng-content></ng-content>\n<span>{{ textMessage }}</span>\n\n" }]
@@ -81658,5 +81976,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
81658
81976
  * Generated bundle index. Do not edit.
81659
81977
  */
81660
81978
 
81661
- export { AbsolutePosition, AbsoluteScrollStrategy, AutoPositionStrategy, BaseFilteringStrategy, BaseProgressDirective, BlockScrollStrategy, ButtonGroupAlignment, Calendar, CalendarHammerConfig, CalendarSelection, CalendarView, CarouselHammerConfig, CarouselIndicatorsOrientation, CloseScrollStrategy, ColumnDisplayOrder, ColumnPinningPosition, ConnectedPositioningStrategy, ContainerPositionStrategy, CsvFileTypes, DEFAULT_OWNER, DataUtil, DatePart, DateRangePickerFormatPipe, DateRangeType, DefaultSortingStrategy, Direction, DisplayDensity, DisplayDensityBase, DisplayDensityToken, DragDirection, ElasticPositionStrategy, ExpansionPanelHeaderIconPosition, ExportRecordType, FilterMode, FilteringExpressionsTree, FilteringExpressionsTreeType, FilteringLogic, FilteringStrategy, FormattedValuesFilteringStrategy, GlobalPositionStrategy, GridBaseAPIService, GridColumnDataType, GridInstanceType, GridPagingMode, GridSelectionMode, GridSummaryCalculationMode, GridSummaryPosition, GroupedRecords, HeaderType, HorizontalAlignment, HorizontalAnimationType, IGX_CHECKBOX_REQUIRED_VALIDATOR, IGX_INPUT_GROUP_TYPE, IGX_STEPPER_COMPONENT, IGX_STEP_COMPONENT, IGX_SWITCH_REQUIRED_VALIDATOR, ITreeGridAggregation, IgxAccordionComponent, IgxAccordionModule, IgxActionStripComponent, IgxActionStripMenuItemDirective, IgxActionStripModule, IgxAdvancedFilteringDialogComponent, IgxAppendDropStrategy, IgxAutocompleteDirective, IgxAutocompleteModule, IgxAvatarComponent, IgxAvatarModule, IgxAvatarSize, IgxAvatarType, IgxBadgeComponent, IgxBadgeModule, IgxBadgeType, IgxBannerActionsDirective, IgxBannerComponent, IgxBannerModule, IgxBaseExporter, IgxBaseTransactionService, IgxBooleanFilteringOperand, IgxBottomNavComponent, IgxBottomNavContentComponent, IgxBottomNavHeaderComponent, IgxBottomNavHeaderIconDirective, IgxBottomNavHeaderLabelDirective, IgxBottomNavItemComponent, IgxBottomNavModule, IgxButtonDirective, IgxButtonGroupComponent, IgxButtonGroupModule, IgxButtonModule, IgxCSVTextDirective, IgxCalendarBaseDirective, IgxCalendarComponent, IgxCalendarHeaderTemplateDirective, IgxCalendarModule, IgxCalendarMonthDirective, IgxCalendarScrollMonthDirective, IgxCalendarSubheaderTemplateDirective, IgxCalendarView, IgxCalendarYearDirective, IgxCardActionsComponent, IgxCardActionsLayout, IgxCardComponent, IgxCardContentDirective, IgxCardFooterDirective, IgxCardHeaderComponent, IgxCardHeaderSubtitleDirective, IgxCardHeaderTitleDirective, IgxCardMediaDirective, IgxCardModule, IgxCardThumbnailDirective, IgxCardType, IgxCarouselComponent, IgxCarouselComponentBase, IgxCarouselIndicatorDirective, IgxCarouselModule, IgxCarouselNextButtonDirective, IgxCarouselPrevButtonDirective, IgxCellEditorTemplateDirective, IgxCellFooterTemplateDirective, IgxCellHeaderTemplateDirective, IgxCellTemplateDirective, IgxCheckboxComponent, IgxCheckboxModule, IgxCheckboxRequiredDirective, IgxChildGridRowComponent, IgxChipComponent, IgxChipsAreaComponent, IgxChipsModule, IgxCircularProgressBarComponent, IgxCollapsibleIndicatorTemplateDirective, IgxColumnActionEnabledPipe, IgxColumnActionsBaseDirective, IgxColumnActionsComponent, IgxColumnActionsModule, IgxColumnComponent, IgxColumnFormatterPipe, IgxColumnGroupComponent, IgxColumnHidingDirective, IgxColumnLayoutComponent, IgxColumnMovingDragDirective, IgxColumnMovingDropDirective, IgxColumnMovingModule, IgxColumnPinningDirective, IgxColumnResizerDirective, IgxComboAddItemDirective, IgxComboClearIconDirective, IgxComboComponent, IgxComboEmptyDirective, IgxComboFooterDirective, IgxComboHeaderDirective, IgxComboHeaderItemDirective, IgxComboItemDirective, IgxComboModule, IgxComboState, IgxComboToggleIconDirective, IgxCsvExporterOptions, IgxCsvExporterService, IgxDataLoadingTemplateDirective, IgxDataRecordSorting, IgxDateFilteringOperand, IgxDatePickerComponent, IgxDatePickerModule, IgxDateRangeEndComponent, IgxDateRangeInputsBaseComponent, IgxDateRangePickerComponent, IgxDateRangePickerModule, IgxDateRangeSeparatorDirective, IgxDateRangeStartComponent, IgxDateSummaryOperand, IgxDateTimeEditorDirective, IgxDateTimeEditorModule, IgxDateTimeFilteringOperand, IgxDaysViewComponent, IgxDefaultDropStrategy, IgxDialogActionsDirective, IgxDialogComponent, IgxDialogModule, IgxDialogTitleDirective, IgxDisplayDensityModule, IgxDividerDirective, IgxDividerModule, IgxDividerType, IgxDragDirective, IgxDragDropModule, IgxDragHandleDirective, IgxDragIgnoreDirective, IgxDragIndicatorIconDirective, IgxDragLocation, IgxDropDirective, IgxDropDownBaseDirective, IgxDropDownComponent, IgxDropDownGroupComponent, IgxDropDownItemBaseDirective, IgxDropDownItemComponent, IgxDropDownItemNavigationDirective, IgxDropDownModule, IgxEmptyListTemplateDirective, IgxExcelExporterOptions, IgxExcelExporterService, IgxExcelStyleClearFiltersComponent, IgxExcelStyleColumnOperationsTemplateDirective, IgxExcelStyleConditionalFilterComponent, IgxExcelStyleDateExpressionComponent, IgxExcelStyleFilterOperationsTemplateDirective, IgxExcelStyleHeaderComponent, IgxExcelStyleHeaderIconDirective, IgxExcelStyleHidingComponent, IgxExcelStyleLoadingValuesTemplateDirective, IgxExcelStyleMovingComponent, IgxExcelStylePinningComponent, IgxExcelStyleSearchComponent, IgxExcelStyleSelectingComponent, IgxExcelStyleSortingComponent, IgxExcelTextDirective, IgxExpansionPanelBodyComponent, IgxExpansionPanelComponent, IgxExpansionPanelDescriptionDirective, IgxExpansionPanelHeaderComponent, IgxExpansionPanelIconDirective, IgxExpansionPanelModule, IgxExpansionPanelTitleDirective, IgxExporterOptionsBase, IgxFilterActionColumnsPipe, IgxFilterCellTemplateDirective, IgxFilterDirective, IgxFilterModule, IgxFilterOptions, IgxFilterPipe, IgxFilteringOperand, IgxFlatTransactionFactory, IgxFlexDirective, IgxFocusDirective, IgxFocusModule, IgxForOfContext, IgxForOfDirective, IgxForOfModule, IgxGridAPIService, IgxGridActionButtonComponent, IgxGridActionsBaseDirective, IgxGridAddRowPipe, IgxGridBaseDirective, IgxGridBodyDirective, IgxGridCell, IgxGridCellStyleClassesPipe, IgxGridCellStylesPipe, IgxGridColumnModule, IgxGridColumnResizerComponent, IgxGridCommonModule, IgxGridComponent, IgxGridDataMapperPipe, IgxGridDetailTemplateDirective, IgxGridDetailsPipe, IgxGridDragSelectDirective, IgxGridEditingActionsComponent, IgxGridExcelStyleFilteringComponent, IgxGridExcelStyleFilteringModule, IgxGridExpandableCellComponent, IgxGridFilterConditionPipe, IgxGridFilteringModule, IgxGridFilteringPipe, IgxGridFooterComponent, IgxGridForOfDirective, IgxGridGroupByAreaComponent, IgxGridGroupByRowComponent, IgxGridGroupingPipe, IgxGridHeaderComponent, IgxGridHeaderGroupComponent, IgxGridHeaderRowComponent, IgxGridHeadersModule, IgxGridHierarchicalPagingPipe, IgxGridHierarchicalPipe, IgxGridModule, IgxGridNotGroupedPipe, IgxGridPaginatorOptionsPipe, IgxGridPagingPipe, IgxGridPinningActionsComponent, IgxGridPipesModule, IgxGridResizingModule, IgxGridRow, IgxGridRowClassesPipe, IgxGridRowPinningPipe, IgxGridRowStylesPipe, IgxGridSelectionModule, IgxGridSharedModules, IgxGridSortingPipe, IgxGridStateDirective, IgxGridStateModule, IgxGridSummaryModule, IgxGridSummaryPipe, IgxGridToolbarActionsDirective, IgxGridToolbarAdvancedFilteringComponent, IgxGridToolbarComponent, IgxGridToolbarDirective, IgxGridToolbarExporterComponent, IgxGridToolbarHidingComponent, IgxGridToolbarModule, IgxGridToolbarPinningComponent, IgxGridToolbarTitleDirective, IgxGridTopLevelColumns, IgxGridTransactionPipe, IgxGridTransactionStatePipe, IgxGroupAreaDropDirective, IgxGroupByAreaDirective, IgxGroupByMetaPipe, IgxGroupByRow, IgxGroupByRowSelectorDirective, IgxGroupByRowTemplateDirective, IgxGroupedTreeGridSorting, IgxGrouping, IgxHasVisibleColumnsPipe, IgxHeadSelectorDirective, IgxHeaderCollapseIndicatorDirective, IgxHeaderExpandIndicatorDirective, IgxHeaderGroupStylePipe, IgxHeaderGroupWidthPipe, IgxHierarchicalGridAPIService, IgxHierarchicalGridBaseDirective, IgxHierarchicalGridComponent, IgxHierarchicalGridModule, IgxHierarchicalGridRow, IgxHierarchicalRowComponent, IgxHierarchicalTransactionFactory, IgxHierarchicalTransactionService, IgxHierarchicalTransactionServiceFactory, IgxHintDirective, IgxIconComponent, IgxIconModule, IgxIconService, IgxInputDirective, IgxInputGroupComponent, IgxInputGroupModule, IgxInputState, IgxInsertDropStrategy, IgxItemListDirective, IgxLabelDirective, IgxLayoutDirective, IgxLayoutModule, IgxLinearProgressBarComponent, IgxListActionDirective, IgxListBaseDirective, IgxListComponent, IgxListItemComponent, IgxListItemLeftPanningTemplateDirective, IgxListItemRightPanningTemplateDirective, IgxListLineDirective, IgxListLineSubTitleDirective, IgxListLineTitleDirective, IgxListModule, IgxListPanState, IgxListThumbnailDirective, IgxMaskDirective, IgxMaskModule, IgxMonthPickerBaseDirective, IgxMonthPickerComponent, IgxMonthsViewComponent, IgxNavDrawerItemDirective, IgxNavDrawerMiniTemplateDirective, IgxNavDrawerTemplateDirective, IgxNavbarActionDirective, IgxNavbarComponent, IgxNavbarModule, IgxNavbarTitleDirective, IgxNavigationCloseDirective, IgxNavigationDrawerComponent, IgxNavigationDrawerModule, IgxNavigationModule, IgxNavigationService, IgxNavigationToggleDirective, IgxNumberFilteringOperand, IgxNumberSummaryOperand, IgxOverlayOutletDirective, IgxOverlayService, IgxPageNavigationComponent, IgxPageSizeSelectorComponent, IgxPaginatorComponent, IgxPaginatorDirective, IgxPaginatorModule, IgxPaginatorTemplateDirective, IgxPickerActionsDirective, IgxPickerClearComponent, IgxPickerToggleComponent, IgxPickersCommonModule, IgxPrefixDirective, IgxPrefixModule, IgxPrependDropStrategy, IgxProcessBarTextTemplateDirective, IgxProgressBarGradientDirective, IgxProgressBarModule, IgxProgressType, IgxRadioComponent, IgxRadioGroupDirective, IgxRadioModule, IgxResizeHandleDirective, IgxRippleDirective, IgxRippleModule, IgxRowAddTextDirective, IgxRowCollapsedIndicatorDirective, IgxRowDragDirective, IgxRowDragGhostDirective, IgxRowDragModule, IgxRowEditActionsDirective, IgxRowEditTabStopDirective, IgxRowEditTemplateDirective, IgxRowEditTextDirective, IgxRowExpandedIndicatorDirective, IgxRowIslandAPIService, IgxRowIslandComponent, IgxRowLoadingIndicatorTemplateDirective, IgxRowSelectorDirective, IgxSelectComponent, IgxSelectFooterDirective, IgxSelectGroupComponent, IgxSelectHeaderDirective, IgxSelectItemComponent, IgxSelectItemNavigationDirective, IgxSelectModule, IgxSelectToggleIconDirective, IgxSlideComponent, IgxSliderComponent, IgxSliderModule, IgxSliderType, IgxSnackbarComponent, IgxSnackbarModule, IgxSortActionColumnsPipe, IgxSorting, IgxSplitBarComponent, IgxSplitterComponent, IgxSplitterModule, IgxSplitterPaneComponent, IgxStepActiveIndicatorDirective, IgxStepCompletedIndicatorDirective, IgxStepComponent, IgxStepContentDirective, IgxStepIndicatorDirective, IgxStepInvalidIndicatorDirective, IgxStepSubTitleDirective, IgxStepTitleDirective, IgxStepType, IgxStepperComponent, IgxStepperModule, IgxStepperOrientation, IgxStepperTitlePosition, IgxStringFilteringOperand, IgxStringReplacePipe, IgxSuffixDirective, IgxSuffixModule, IgxSummaryCellComponent, IgxSummaryDataPipe, IgxSummaryFormatterPipe, IgxSummaryOperand, IgxSummaryRow, IgxSummaryRowComponent, IgxSwitchComponent, IgxSwitchModule, IgxSwitchRequiredDirective, IgxTabContentComponent, IgxTabContentDirective, IgxTabHeaderComponent, IgxTabHeaderDirective, IgxTabHeaderIconDirective, IgxTabHeaderLabelDirective, IgxTabItemComponent, IgxTabItemDirective, IgxTabsAlignment, IgxTabsComponent, IgxTabsDirective, IgxTabsModule, IgxTemplateOutletDirective, IgxTemplateOutletModule, IgxTextAlign, IgxTextHighlightDirective, IgxTextHighlightModule, IgxTextSelectionDirective, IgxTextSelectionModule, IgxThumbFromTemplateDirective, IgxThumbToTemplateDirective, IgxTickLabelTemplateDirective, IgxTimeFilteringOperand, IgxTimeItemDirective, IgxTimePickerActionsDirective, IgxTimePickerComponent, IgxTimePickerModule, IgxTimePickerTemplateDirective, IgxTimeSummaryOperand, IgxToastComponent, IgxToastModule, IgxToastPosition, IgxToggleActionDirective, IgxToggleDirective, IgxToggleModule, IgxTooltipDirective, IgxTooltipModule, IgxTooltipTargetDirective, IgxTransactionService, IgxTreeComponent, IgxTreeExpandIndicatorDirective, IgxTreeGridAPIService, IgxTreeGridAddRowPipe, IgxTreeGridComponent, IgxTreeGridGroupByAreaComponent, IgxTreeGridGroupingPipe, IgxTreeGridModule, IgxTreeGridRow, IgxTreeModule, IgxTreeNodeComponent, IgxTreeNodeLinkDirective, IgxTreeSelectMarkerDirective, IgxTreeSelectionType, IgxYearsViewComponent, LabelPosition, NoOpScrollStrategy, NoopFilteringStrategy, NoopSortingStrategy, PagingError, PickerInteractionMode, Point, RadioGroupAlignment, RadioLabelPosition, RelativePosition, RelativePositionStrategy, RowEditPositionStrategy, RowPinningPosition, SPLITTER_INTERACTION_KEYS, ScrollMonth, ScrollStrategy, SliderHandle, SortingDirection, SortingIndexPipe, SplitterType, SwitchLabelPosition, TickLabelsOrientation, TicksOrientation, TransactionEventOrigin, TransactionType, TreeGridFilteringStrategy, TreeGridFormattedValuesFilteringStrategy, TreeGridMatchingRecordsOnlyFilteringStrategy, VerticalAlignment, VerticalAnimationType, WEEKDAYS, blink, changei18n, fadeIn, fadeOut, filteringStateDefaults, flipBottom, flipHorBck, flipHorFwd, flipLeft, flipRight, flipTop, flipVerBck, flipVerFwd, getCurrentResourceStrings, getTypeNameForDebugging, growVerIn, growVerOut, heartbeat, hierarchicalTransactionServiceFactory, isDateInRanges, isLeap, monthRange, pulsateBck, pulsateFwd, range, rotateInBl, rotateInBottom, rotateInBr, rotateInCenter, rotateInDiagonal1, rotateInDiagonal2, rotateInHor, rotateInLeft, rotateInRight, rotateInTl, rotateInTop, rotateInTr, rotateInVer, rotateOutBl, rotateOutBottom, rotateOutBr, rotateOutCenter, rotateOutDiagonal1, rotateOutDiagonal2, rotateOutHor, rotateOutLeft, rotateOutRight, rotateOutTl, rotateOutTop, rotateOutTr, rotateOutVer, scaleInBl, scaleInBottom, scaleInBr, scaleInCenter, scaleInHorCenter, scaleInHorLeft, scaleInHorRight, scaleInLeft, scaleInRight, scaleInTl, scaleInTop, scaleInTr, scaleInVerBottom, scaleInVerCenter, scaleInVerTop, scaleOutBl, scaleOutBottom, scaleOutBr, scaleOutCenter, scaleOutHorCenter, scaleOutHorLeft, scaleOutHorRight, scaleOutLeft, scaleOutRight, scaleOutTl, scaleOutTop, scaleOutTr, scaleOutVerBottom, scaleOutVerCenter, scaleOutVerTop, shakeBl, shakeBottom, shakeBr, shakeCenter, shakeHor, shakeLeft, shakeRight, shakeTl, shakeTop, shakeTr, shakeVer, slideInBl, slideInBottom, slideInBr, slideInLeft, slideInRight, slideInTl, slideInTop, slideInTr, slideOutBl, slideOutBottom, slideOutBr, slideOutLeft, slideOutRight, slideOutTl, slideOutTop, slideOutTr, swingInBottomBck, swingInBottomFwd, swingInLeftBck, swingInLeftFwd, swingInRightBck, swingInRightFwd, swingInTopBck, swingInTopFwd, swingOutBottomBck, swingOutBottomFwd, swingOutLeftBck, swingOutLefttFwd, swingOutRightBck, swingOutRightFwd, swingOutTopBck, swingOutTopFwd, toPercent, valueInRange, weekDay, IgxGridFilteringCellComponent as θIgxGridFilteringCellComponent, IgxGridFilteringRowComponent as θIgxGridFilteringRowComponent, IgxHierarchicalGridCellComponent as θIgxHierarchicalGridCellComponent, IgxTreeGridCellComponent as θIgxTreeGridCellComponent, IgxTreeGridRowComponent as θIgxTreeGridRowComponent, IgxGridCellComponent as ϴIgxGridCellComponent, IgxGridRowComponent as ϴIgxGridRowComponent };
81979
+ export { AbsolutePosition, AbsoluteScrollStrategy, AutoPositionStrategy, BaseFilteringStrategy, BaseProgressDirective, BlockScrollStrategy, ButtonGroupAlignment, Calendar, CalendarHammerConfig, CalendarSelection, CalendarView, CarouselHammerConfig, CarouselIndicatorsOrientation, CloseScrollStrategy, ColumnDisplayOrder, ColumnPinningPosition, ConnectedPositioningStrategy, ContainerPositionStrategy, CsvFileTypes, DEFAULT_OWNER, DataUtil, DatePart, DateRangePickerFormatPipe, DateRangeType, DefaultSortingStrategy, Direction, DisplayDensity, DisplayDensityBase, DisplayDensityToken, DragDirection, ElasticPositionStrategy, ExpansionPanelHeaderIconPosition, ExportRecordType, FilterMode, FilteringExpressionsTree, FilteringExpressionsTreeType, FilteringLogic, FilteringStrategy, FormattedValuesFilteringStrategy, GlobalPositionStrategy, GridBaseAPIService, GridColumnDataType, GridInstanceType, GridPagingMode, GridSelectionMode, GridSummaryCalculationMode, GridSummaryPosition, GroupedRecords, HeaderType, HorizontalAlignment, HorizontalAnimationType, IGX_CHECKBOX_REQUIRED_VALIDATOR, IGX_INPUT_GROUP_TYPE, IGX_STEPPER_COMPONENT, IGX_STEP_COMPONENT, IGX_SWITCH_REQUIRED_VALIDATOR, ITreeGridAggregation, IgxAccordionComponent, IgxAccordionModule, IgxActionStripComponent, IgxActionStripMenuItemDirective, IgxActionStripModule, IgxAdvancedFilteringDialogComponent, IgxAppendDropStrategy, IgxAutocompleteDirective, IgxAutocompleteModule, IgxAvatarComponent, IgxAvatarModule, IgxAvatarSize, IgxAvatarType, IgxBadgeComponent, IgxBadgeModule, IgxBadgeType, IgxBannerActionsDirective, IgxBannerComponent, IgxBannerModule, IgxBaseExporter, IgxBaseTransactionService, IgxBooleanFilteringOperand, IgxBottomNavComponent, IgxBottomNavContentComponent, IgxBottomNavHeaderComponent, IgxBottomNavHeaderIconDirective, IgxBottomNavHeaderLabelDirective, IgxBottomNavItemComponent, IgxBottomNavModule, IgxButtonDirective, IgxButtonGroupComponent, IgxButtonGroupModule, IgxButtonModule, IgxCSVTextDirective, IgxCalendarBaseDirective, IgxCalendarComponent, IgxCalendarHeaderTemplateDirective, IgxCalendarModule, IgxCalendarMonthDirective, IgxCalendarScrollMonthDirective, IgxCalendarSubheaderTemplateDirective, IgxCalendarView, IgxCalendarYearDirective, IgxCardActionsComponent, IgxCardActionsLayout, IgxCardComponent, IgxCardContentDirective, IgxCardFooterDirective, IgxCardHeaderComponent, IgxCardHeaderSubtitleDirective, IgxCardHeaderTitleDirective, IgxCardMediaDirective, IgxCardModule, IgxCardThumbnailDirective, IgxCardType, IgxCarouselComponent, IgxCarouselComponentBase, IgxCarouselIndicatorDirective, IgxCarouselModule, IgxCarouselNextButtonDirective, IgxCarouselPrevButtonDirective, IgxCellEditorTemplateDirective, IgxCellFooterTemplateDirective, IgxCellHeaderTemplateDirective, IgxCellTemplateDirective, IgxCheckboxComponent, IgxCheckboxModule, IgxCheckboxRequiredDirective, IgxChildGridRowComponent, IgxChipComponent, IgxChipsAreaComponent, IgxChipsModule, IgxCircularProgressBarComponent, IgxCollapsibleIndicatorTemplateDirective, IgxColumnActionEnabledPipe, IgxColumnActionsBaseDirective, IgxColumnActionsComponent, IgxColumnActionsModule, IgxColumnComponent, IgxColumnFormatterPipe, IgxColumnGroupComponent, IgxColumnHidingDirective, IgxColumnLayoutComponent, IgxColumnMovingDragDirective, IgxColumnMovingDropDirective, IgxColumnMovingModule, IgxColumnPinningDirective, IgxColumnResizerDirective, IgxComboAddItemComponent, IgxComboAddItemDirective, IgxComboClearIconDirective, IgxComboComponent, IgxComboDropDownComponent, IgxComboEmptyDirective, IgxComboFilteringPipe, IgxComboFooterDirective, IgxComboGroupingPipe, IgxComboHeaderDirective, IgxComboHeaderItemDirective, IgxComboItemComponent, IgxComboItemDirective, IgxComboModule, IgxComboToggleIconDirective, IgxCsvExporterOptions, IgxCsvExporterService, IgxDataLoadingTemplateDirective, IgxDataRecordSorting, IgxDateFilteringOperand, IgxDatePickerComponent, IgxDatePickerModule, IgxDateRangeEndComponent, IgxDateRangeInputsBaseComponent, IgxDateRangePickerComponent, IgxDateRangePickerModule, IgxDateRangeSeparatorDirective, IgxDateRangeStartComponent, IgxDateSummaryOperand, IgxDateTimeEditorDirective, IgxDateTimeEditorModule, IgxDateTimeFilteringOperand, IgxDaysViewComponent, IgxDefaultDropStrategy, IgxDialogActionsDirective, IgxDialogComponent, IgxDialogModule, IgxDialogTitleDirective, IgxDisplayDensityModule, IgxDividerDirective, IgxDividerModule, IgxDividerType, IgxDragDirective, IgxDragDropModule, IgxDragHandleDirective, IgxDragIgnoreDirective, IgxDragIndicatorIconDirective, IgxDragLocation, IgxDropDirective, IgxDropDownBaseDirective, IgxDropDownComponent, IgxDropDownGroupComponent, IgxDropDownItemBaseDirective, IgxDropDownItemComponent, IgxDropDownItemNavigationDirective, IgxDropDownModule, IgxEmptyListTemplateDirective, IgxExcelExporterOptions, IgxExcelExporterService, IgxExcelStyleClearFiltersComponent, IgxExcelStyleColumnOperationsTemplateDirective, IgxExcelStyleConditionalFilterComponent, IgxExcelStyleDateExpressionComponent, IgxExcelStyleFilterOperationsTemplateDirective, IgxExcelStyleHeaderComponent, IgxExcelStyleHeaderIconDirective, IgxExcelStyleHidingComponent, IgxExcelStyleLoadingValuesTemplateDirective, IgxExcelStyleMovingComponent, IgxExcelStylePinningComponent, IgxExcelStyleSearchComponent, IgxExcelStyleSelectingComponent, IgxExcelStyleSortingComponent, IgxExcelTextDirective, IgxExpansionPanelBodyComponent, IgxExpansionPanelComponent, IgxExpansionPanelDescriptionDirective, IgxExpansionPanelHeaderComponent, IgxExpansionPanelIconDirective, IgxExpansionPanelModule, IgxExpansionPanelTitleDirective, IgxExporterOptionsBase, IgxFilterActionColumnsPipe, IgxFilterCellTemplateDirective, IgxFilterDirective, IgxFilterModule, IgxFilterOptions, IgxFilterPipe, IgxFilteringOperand, IgxFlatTransactionFactory, IgxFlexDirective, IgxFocusDirective, IgxFocusModule, IgxFocusTrapDirective, IgxFocusTrapModule, IgxForOfContext, IgxForOfDirective, IgxForOfModule, IgxGridAPIService, IgxGridActionButtonComponent, IgxGridActionsBaseDirective, IgxGridAddRowPipe, IgxGridBaseDirective, IgxGridBodyDirective, IgxGridCell, IgxGridCellStyleClassesPipe, IgxGridCellStylesPipe, IgxGridColumnModule, IgxGridColumnResizerComponent, IgxGridCommonModule, IgxGridComponent, IgxGridDataMapperPipe, IgxGridDetailTemplateDirective, IgxGridDetailsPipe, IgxGridDragSelectDirective, IgxGridEditingActionsComponent, IgxGridExcelStyleFilteringComponent, IgxGridExcelStyleFilteringModule, IgxGridExpandableCellComponent, IgxGridFilterConditionPipe, IgxGridFilteringModule, IgxGridFilteringPipe, IgxGridFooterComponent, IgxGridForOfDirective, IgxGridGroupByAreaComponent, IgxGridGroupByRowComponent, IgxGridGroupingPipe, IgxGridHeaderComponent, IgxGridHeaderGroupComponent, IgxGridHeaderRowComponent, IgxGridHeadersModule, IgxGridHierarchicalPagingPipe, IgxGridHierarchicalPipe, IgxGridModule, IgxGridNotGroupedPipe, IgxGridPaginatorOptionsPipe, IgxGridPagingPipe, IgxGridPinningActionsComponent, IgxGridPipesModule, IgxGridResizingModule, IgxGridRow, IgxGridRowClassesPipe, IgxGridRowPinningPipe, IgxGridRowStylesPipe, IgxGridSelectionModule, IgxGridSharedModules, IgxGridSortingPipe, IgxGridStateDirective, IgxGridStateModule, IgxGridSummaryModule, IgxGridSummaryPipe, IgxGridToolbarActionsDirective, IgxGridToolbarAdvancedFilteringComponent, IgxGridToolbarComponent, IgxGridToolbarDirective, IgxGridToolbarExporterComponent, IgxGridToolbarHidingComponent, IgxGridToolbarModule, IgxGridToolbarPinningComponent, IgxGridToolbarTitleDirective, IgxGridTopLevelColumns, IgxGridTransactionPipe, IgxGridTransactionStatePipe, IgxGroupAreaDropDirective, IgxGroupByAreaDirective, IgxGroupByMetaPipe, IgxGroupByRow, IgxGroupByRowSelectorDirective, IgxGroupByRowTemplateDirective, IgxGroupedTreeGridSorting, IgxGrouping, IgxHasVisibleColumnsPipe, IgxHeadSelectorDirective, IgxHeaderCollapseIndicatorDirective, IgxHeaderExpandIndicatorDirective, IgxHeaderGroupStylePipe, IgxHeaderGroupWidthPipe, IgxHierarchicalGridAPIService, IgxHierarchicalGridBaseDirective, IgxHierarchicalGridComponent, IgxHierarchicalGridModule, IgxHierarchicalGridRow, IgxHierarchicalRowComponent, IgxHierarchicalTransactionFactory, IgxHierarchicalTransactionService, IgxHierarchicalTransactionServiceFactory, IgxHintDirective, IgxIconComponent, IgxIconModule, IgxIconService, IgxInputDirective, IgxInputGroupComponent, IgxInputGroupModule, IgxInputState, IgxInsertDropStrategy, IgxItemListDirective, IgxLabelDirective, IgxLayoutDirective, IgxLayoutModule, IgxLinearProgressBarComponent, IgxListActionDirective, IgxListBaseDirective, IgxListComponent, IgxListItemComponent, IgxListItemLeftPanningTemplateDirective, IgxListItemRightPanningTemplateDirective, IgxListLineDirective, IgxListLineSubTitleDirective, IgxListLineTitleDirective, IgxListModule, IgxListPanState, IgxListThumbnailDirective, IgxMaskDirective, IgxMaskModule, IgxMonthPickerBaseDirective, IgxMonthPickerComponent, IgxMonthsViewComponent, IgxNavDrawerItemDirective, IgxNavDrawerMiniTemplateDirective, IgxNavDrawerTemplateDirective, IgxNavbarActionDirective, IgxNavbarComponent, IgxNavbarModule, IgxNavbarTitleDirective, IgxNavigationCloseDirective, IgxNavigationDrawerComponent, IgxNavigationDrawerModule, IgxNavigationModule, IgxNavigationService, IgxNavigationToggleDirective, IgxNumberFilteringOperand, IgxNumberSummaryOperand, IgxOverlayOutletDirective, IgxOverlayService, IgxPageNavigationComponent, IgxPageSizeSelectorComponent, IgxPaginatorComponent, IgxPaginatorDirective, IgxPaginatorModule, IgxPaginatorTemplateDirective, IgxPickerActionsDirective, IgxPickerClearComponent, IgxPickerToggleComponent, IgxPickersCommonModule, IgxPrefixDirective, IgxPrefixModule, IgxPrependDropStrategy, IgxProcessBarTextTemplateDirective, IgxProgressBarGradientDirective, IgxProgressBarModule, IgxProgressType, IgxRadioComponent, IgxRadioGroupDirective, IgxRadioModule, IgxResizeHandleDirective, IgxRippleDirective, IgxRippleModule, IgxRowAddTextDirective, IgxRowCollapsedIndicatorDirective, IgxRowDragDirective, IgxRowDragGhostDirective, IgxRowDragModule, IgxRowEditActionsDirective, IgxRowEditTabStopDirective, IgxRowEditTemplateDirective, IgxRowEditTextDirective, IgxRowExpandedIndicatorDirective, IgxRowIslandAPIService, IgxRowIslandComponent, IgxRowLoadingIndicatorTemplateDirective, IgxRowSelectorDirective, IgxSelectComponent, IgxSelectFooterDirective, IgxSelectGroupComponent, IgxSelectHeaderDirective, IgxSelectItemComponent, IgxSelectItemNavigationDirective, IgxSelectModule, IgxSelectToggleIconDirective, IgxSimpleComboComponent, IgxSimpleComboModule, IgxSlideComponent, IgxSliderComponent, IgxSliderModule, IgxSliderType, IgxSnackbarComponent, IgxSnackbarModule, IgxSortActionColumnsPipe, IgxSorting, IgxSplitBarComponent, IgxSplitterComponent, IgxSplitterModule, IgxSplitterPaneComponent, IgxStepActiveIndicatorDirective, IgxStepCompletedIndicatorDirective, IgxStepComponent, IgxStepContentDirective, IgxStepIndicatorDirective, IgxStepInvalidIndicatorDirective, IgxStepSubTitleDirective, IgxStepTitleDirective, IgxStepType, IgxStepperComponent, IgxStepperModule, IgxStepperOrientation, IgxStepperTitlePosition, IgxStringFilteringOperand, IgxStringReplacePipe, IgxSuffixDirective, IgxSuffixModule, IgxSummaryCellComponent, IgxSummaryDataPipe, IgxSummaryFormatterPipe, IgxSummaryOperand, IgxSummaryRow, IgxSummaryRowComponent, IgxSwitchComponent, IgxSwitchModule, IgxSwitchRequiredDirective, IgxTabContentComponent, IgxTabContentDirective, IgxTabHeaderComponent, IgxTabHeaderDirective, IgxTabHeaderIconDirective, IgxTabHeaderLabelDirective, IgxTabItemComponent, IgxTabItemDirective, IgxTabsAlignment, IgxTabsComponent, IgxTabsDirective, IgxTabsModule, IgxTemplateOutletDirective, IgxTemplateOutletModule, IgxTextAlign, IgxTextHighlightDirective, IgxTextHighlightModule, IgxTextSelectionDirective, IgxTextSelectionModule, IgxThumbFromTemplateDirective, IgxThumbToTemplateDirective, IgxTickLabelTemplateDirective, IgxTimeFilteringOperand, IgxTimeItemDirective, IgxTimePickerActionsDirective, IgxTimePickerComponent, IgxTimePickerModule, IgxTimePickerTemplateDirective, IgxTimeSummaryOperand, IgxToastComponent, IgxToastModule, IgxToastPosition, IgxToggleActionDirective, IgxToggleDirective, IgxToggleModule, IgxTooltipDirective, IgxTooltipModule, IgxTooltipTargetDirective, IgxTransactionService, IgxTreeComponent, IgxTreeExpandIndicatorDirective, IgxTreeGridAPIService, IgxTreeGridAddRowPipe, IgxTreeGridComponent, IgxTreeGridGroupByAreaComponent, IgxTreeGridGroupingPipe, IgxTreeGridModule, IgxTreeGridRow, IgxTreeModule, IgxTreeNodeComponent, IgxTreeNodeLinkDirective, IgxTreeSelectMarkerDirective, IgxTreeSelectionType, IgxYearsViewComponent, LabelPosition, NoOpScrollStrategy, NoopFilteringStrategy, NoopSortingStrategy, PagingError, PickerInteractionMode, Point, RadioGroupAlignment, RadioLabelPosition, RelativePosition, RelativePositionStrategy, RowEditPositionStrategy, RowPinningPosition, SPLITTER_INTERACTION_KEYS, ScrollMonth, ScrollStrategy, SliderHandle, SortingDirection, SortingIndexPipe, SplitterType, SwitchLabelPosition, TickLabelsOrientation, TicksOrientation, TransactionEventOrigin, TransactionType, TreeGridFilteringStrategy, TreeGridFormattedValuesFilteringStrategy, TreeGridMatchingRecordsOnlyFilteringStrategy, VerticalAlignment, VerticalAnimationType, WEEKDAYS, blink, changei18n, fadeIn, fadeOut, filteringStateDefaults, flipBottom, flipHorBck, flipHorFwd, flipLeft, flipRight, flipTop, flipVerBck, flipVerFwd, getCurrentResourceStrings, getTypeNameForDebugging, growVerIn, growVerOut, heartbeat, hierarchicalTransactionServiceFactory, isDateInRanges, isLeap, monthRange, pulsateBck, pulsateFwd, range, rotateInBl, rotateInBottom, rotateInBr, rotateInCenter, rotateInDiagonal1, rotateInDiagonal2, rotateInHor, rotateInLeft, rotateInRight, rotateInTl, rotateInTop, rotateInTr, rotateInVer, rotateOutBl, rotateOutBottom, rotateOutBr, rotateOutCenter, rotateOutDiagonal1, rotateOutDiagonal2, rotateOutHor, rotateOutLeft, rotateOutRight, rotateOutTl, rotateOutTop, rotateOutTr, rotateOutVer, scaleInBl, scaleInBottom, scaleInBr, scaleInCenter, scaleInHorCenter, scaleInHorLeft, scaleInHorRight, scaleInLeft, scaleInRight, scaleInTl, scaleInTop, scaleInTr, scaleInVerBottom, scaleInVerCenter, scaleInVerTop, scaleOutBl, scaleOutBottom, scaleOutBr, scaleOutCenter, scaleOutHorCenter, scaleOutHorLeft, scaleOutHorRight, scaleOutLeft, scaleOutRight, scaleOutTl, scaleOutTop, scaleOutTr, scaleOutVerBottom, scaleOutVerCenter, scaleOutVerTop, shakeBl, shakeBottom, shakeBr, shakeCenter, shakeHor, shakeLeft, shakeRight, shakeTl, shakeTop, shakeTr, shakeVer, slideInBl, slideInBottom, slideInBr, slideInLeft, slideInRight, slideInTl, slideInTop, slideInTr, slideOutBl, slideOutBottom, slideOutBr, slideOutLeft, slideOutRight, slideOutTl, slideOutTop, slideOutTr, swingInBottomBck, swingInBottomFwd, swingInLeftBck, swingInLeftFwd, swingInRightBck, swingInRightFwd, swingInTopBck, swingInTopFwd, swingOutBottomBck, swingOutBottomFwd, swingOutLeftBck, swingOutLefttFwd, swingOutRightBck, swingOutRightFwd, swingOutTopBck, swingOutTopFwd, toPercent, valueInRange, weekDay, IgxGridFilteringCellComponent as θIgxGridFilteringCellComponent, IgxGridFilteringRowComponent as θIgxGridFilteringRowComponent, IgxHierarchicalGridCellComponent as θIgxHierarchicalGridCellComponent, IgxTreeGridCellComponent as θIgxTreeGridCellComponent, IgxTreeGridRowComponent as θIgxTreeGridRowComponent, IgxGridCellComponent as ϴIgxGridCellComponent, IgxGridRowComponent as ϴIgxGridRowComponent };
81662
81980
  //# sourceMappingURL=igniteui-angular.mjs.map