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';
@@ -13,8 +13,8 @@ import * as JSZip from 'jszip';
13
13
  import * as i1$1 from '@angular/platform-browser';
14
14
  import { HammerGestureConfig, HAMMER_GESTURE_CONFIG, ɵgetDOM } from '@angular/platform-browser';
15
15
  import * as i2 from '@angular/common/http';
16
- import { __decorate, __param } from 'tslib';
17
16
  import { addRow, addChild, pinLeft, unpinLeft, jumpDown, jumpUp, caseSensitive, editor } from '@igniteui/material-icons-extended';
17
+ import { __decorate, __param } from 'tslib';
18
18
  import 'igniteui-trial-watermark';
19
19
  import { v4 } from 'uuid';
20
20
 
@@ -1423,6 +1423,15 @@ function clearImmediate(id) {
1423
1423
  delete queue[id];
1424
1424
  }
1425
1425
 
1426
+ /**
1427
+ * @hidden
1428
+ */
1429
+ const showMessage = (message, isMessageShown) => {
1430
+ if (!isMessageShown && isDevMode()) {
1431
+ console.warn(message);
1432
+ }
1433
+ return true;
1434
+ };
1426
1435
  const mkenum = (x) => x;
1427
1436
  /**
1428
1437
  *
@@ -7993,104 +8002,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
7993
8002
  }]
7994
8003
  }] });
7995
8004
 
7996
- /**
7997
- * @hidden
7998
- */
7999
- const DeprecateClass = (message) => {
8000
- let isMessageShown = false;
8001
- return (originalClass) => class extends originalClass {
8002
- constructor(...args) {
8003
- const target = originalClass;
8004
- const targetName = typeof target === 'function' ? target.name : target.constructor.name;
8005
- isMessageShown = showMessage(`${targetName}: ${message}`, isMessageShown);
8006
- super(...args);
8007
- }
8008
- };
8009
- };
8010
- /**
8011
- * @hidden
8012
- */
8013
- function DeprecateMethod(message) {
8014
- let isMessageShown = false;
8015
- return function (target, key, descriptor) {
8016
- if (descriptor && descriptor.value) {
8017
- const originalMethod = descriptor.value;
8018
- descriptor.value = function () {
8019
- const targetName = typeof target === 'function' ? target.name : target.constructor.name;
8020
- isMessageShown = showMessage(`${targetName}.${key}: ${message}`, isMessageShown);
8021
- const args = [];
8022
- for (const x of arguments) {
8023
- args.push(x);
8024
- }
8025
- return originalMethod.call(this, ...args);
8026
- };
8027
- return descriptor;
8028
- }
8029
- };
8030
- }
8031
- /**
8032
- * @hidden
8033
- */
8034
- function DeprecateProperty(message) {
8035
- return function (target, key) {
8036
- let isMessageShown = false;
8037
- const messageToDisplay = `${target.constructor.name}.${key}: ${message}`;
8038
- // if the target already has the property defined
8039
- const originalDescriptor = Object.getOwnPropertyDescriptor(target, key);
8040
- if (originalDescriptor) {
8041
- const getter = originalDescriptor.get;
8042
- const setter = originalDescriptor.set;
8043
- if (getter) {
8044
- originalDescriptor.get = function () {
8045
- isMessageShown = showMessage(messageToDisplay, isMessageShown);
8046
- return getter.call(this);
8047
- };
8048
- }
8049
- if (setter) {
8050
- originalDescriptor.set = function (value) {
8051
- isMessageShown = showMessage(messageToDisplay, isMessageShown);
8052
- setter.call(this, value);
8053
- };
8054
- }
8055
- return originalDescriptor;
8056
- }
8057
- // the target doesn't contain a descriptor for that property, so create one
8058
- // use backing field to set/get the value of the property to ensure there won't be infinite recursive calls
8059
- const newKey = generateUniqueKey(target, key);
8060
- Object.defineProperty(target, key, {
8061
- configurable: true,
8062
- enumerable: true,
8063
- set(value) {
8064
- isMessageShown = showMessage(messageToDisplay, isMessageShown);
8065
- this[newKey] = value;
8066
- },
8067
- get() {
8068
- isMessageShown = showMessage(messageToDisplay, isMessageShown);
8069
- return this[newKey];
8070
- }
8071
- });
8072
- };
8073
- }
8074
- /**
8075
- * @hidden
8076
- */
8077
- const generateUniqueKey = (target, key) => {
8078
- let newKey = '_' + key;
8079
- while (target.hasOwnProperty(newKey)) {
8080
- newKey = '_' + newKey;
8081
- }
8082
- return newKey;
8083
- };
8084
- /**
8085
- * @hidden
8086
- */
8087
- const showMessage = (message, isMessageShown) => {
8088
- if (!isMessageShown && isDevMode()) {
8089
- console.warn(message);
8090
- }
8091
- return true;
8092
- };
8093
-
8094
8005
  let NEXT_ID$u = 0;
8095
8006
  /**
8096
8007
  * The `<igx-drop-down-item>` is a container intended for row items in
@@ -8178,7 +8089,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
8178
8089
  }] } });
8179
8090
 
8180
8091
  let NEXT_ID$t = 0;
8181
- let warningShown = false;
8182
8092
  /**
8183
8093
  * An abstract class defining a drop-down item:
8184
8094
  * With properties / styles for selection, highlight, height
@@ -8243,8 +8153,6 @@ class IgxDropDownItemBaseDirective {
8243
8153
  */
8244
8154
  get index() {
8245
8155
  if (this._index === null) {
8246
- warningShown = showMessage('IgxDropDownItemBaseDirective: Automatic index is deprecated.' +
8247
- 'Bind in the template instead using `<igx-drop-down-item [index]="i"` instead.`', warningShown);
8248
8156
  return this.itemIndex;
8249
8157
  }
8250
8158
  return this._index;
@@ -9877,7 +9785,7 @@ class IgxForOfDirective {
9877
9785
  this.dc.instance.scrollContainer = this.scrollComponent.nativeElement;
9878
9786
  });
9879
9787
  const destructor = takeUntil(this.destroy$);
9880
- 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()));
9788
+ 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()));
9881
9789
  }
9882
9790
  if (this.igxForScrollOrientation === 'horizontal') {
9883
9791
  this.func = (evt) => this.onHScroll(evt);
@@ -16333,6 +16241,113 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
16333
16241
  }]
16334
16242
  }] });
16335
16243
 
16244
+ class IgxFocusTrapDirective {
16245
+ /** @hidden */
16246
+ constructor(elementRef, platformUtil) {
16247
+ this.elementRef = elementRef;
16248
+ this.platformUtil = platformUtil;
16249
+ this.destroy$ = new Subject();
16250
+ this._focusTrap = true;
16251
+ }
16252
+ /** @hidden */
16253
+ get element() {
16254
+ return this.elementRef.nativeElement;
16255
+ }
16256
+ /**
16257
+ * Sets whether the Tab key focus is trapped within the element.
16258
+ *
16259
+ * @example
16260
+ * ```html
16261
+ * <div igxFocusTrap="true"></div>
16262
+ * ```
16263
+ */
16264
+ set focusTrap(focusTrap) {
16265
+ this._focusTrap = focusTrap;
16266
+ }
16267
+ /** @hidden */
16268
+ get focusTrap() {
16269
+ return this._focusTrap;
16270
+ }
16271
+ /** @hidden */
16272
+ ngAfterViewInit() {
16273
+ fromEvent(this.element, 'keydown')
16274
+ .pipe(takeUntil(this.destroy$))
16275
+ .subscribe((event) => {
16276
+ if (this._focusTrap && event.key === this.platformUtil.KEYMAP.TAB) {
16277
+ this.handleTab(event);
16278
+ }
16279
+ });
16280
+ }
16281
+ /** @hidden */
16282
+ ngOnDestroy() {
16283
+ this.destroy$.complete();
16284
+ }
16285
+ handleTab(event) {
16286
+ const elements = this.getFocusableElements(this.element);
16287
+ if (elements.length > 0) {
16288
+ const focusedElement = this.getFocusedElement();
16289
+ const focusedElementIndex = elements.findIndex((element) => element === focusedElement);
16290
+ const direction = event.shiftKey ? -1 : 1;
16291
+ let nextFocusableElementIndex = focusedElementIndex + direction;
16292
+ if (nextFocusableElementIndex < 0) {
16293
+ nextFocusableElementIndex = elements.length - 1;
16294
+ }
16295
+ if (nextFocusableElementIndex >= elements.length) {
16296
+ nextFocusableElementIndex = 0;
16297
+ }
16298
+ elements[nextFocusableElementIndex].focus();
16299
+ }
16300
+ else {
16301
+ this.element.focus();
16302
+ }
16303
+ event.preventDefault();
16304
+ }
16305
+ getFocusableElements(element) {
16306
+ 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'));
16307
+ }
16308
+ getFocusedElement() {
16309
+ let activeElement = typeof document !== 'undefined' && document
16310
+ ? document.activeElement
16311
+ : null;
16312
+ while (activeElement && activeElement.shadowRoot) {
16313
+ const newActiveElement = activeElement.shadowRoot.activeElement;
16314
+ if (newActiveElement === activeElement) {
16315
+ break;
16316
+ }
16317
+ else {
16318
+ activeElement = newActiveElement;
16319
+ }
16320
+ }
16321
+ return activeElement;
16322
+ }
16323
+ }
16324
+ 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 });
16325
+ IgxFocusTrapDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxFocusTrapDirective, selector: "[igxFocusTrap]", inputs: { focusTrap: ["igxFocusTrap", "focusTrap"] }, ngImport: i0 });
16326
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxFocusTrapDirective, decorators: [{
16327
+ type: Directive,
16328
+ args: [{
16329
+ selector: '[igxFocusTrap]'
16330
+ }]
16331
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: PlatformUtil }]; }, propDecorators: { focusTrap: [{
16332
+ type: Input,
16333
+ args: ['igxFocusTrap']
16334
+ }] } });
16335
+ /**
16336
+ * @hidden
16337
+ */
16338
+ class IgxFocusTrapModule {
16339
+ }
16340
+ IgxFocusTrapModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxFocusTrapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
16341
+ IgxFocusTrapModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxFocusTrapModule, declarations: [IgxFocusTrapDirective], exports: [IgxFocusTrapDirective] });
16342
+ IgxFocusTrapModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxFocusTrapModule });
16343
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxFocusTrapModule, decorators: [{
16344
+ type: NgModule,
16345
+ args: [{
16346
+ declarations: [IgxFocusTrapDirective],
16347
+ exports: [IgxFocusTrapDirective]
16348
+ }]
16349
+ }] });
16350
+
16336
16351
  class IgxLayoutDirective {
16337
16352
  constructor() {
16338
16353
  /**
@@ -17903,10 +17918,10 @@ class IgxRadioGroupDirective {
17903
17918
  this._setRadioButtonsRequired();
17904
17919
  }
17905
17920
  /**
17906
- * An @Input property that allows you to disable the radio group. By default it's false.
17907
- *
17908
17921
  * @deprecated in version 12.2.0
17909
17922
  *
17923
+ * An input property that allows you to disable the radio group. By default it's false.
17924
+ *
17910
17925
  * @example
17911
17926
  * ```html
17912
17927
  * <igx-radio-group disabled></igx-radio-group>
@@ -17920,10 +17935,10 @@ class IgxRadioGroupDirective {
17920
17935
  this.setDisabledState(value);
17921
17936
  }
17922
17937
  /**
17923
- * Sets/gets the position of the `label` in the child radio buttons.
17924
- *
17925
17938
  * @deprecated in version 12.2.0
17926
17939
  *
17940
+ * Sets/gets the position of the `label` in the child radio buttons.
17941
+ *
17927
17942
  * @remarks
17928
17943
  * If not set, `labelPosition` will have value `"after"`.
17929
17944
  *
@@ -18155,12 +18170,6 @@ class IgxRadioGroupDirective {
18155
18170
  }
18156
18171
  IgxRadioGroupDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxRadioGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
18157
18172
  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 });
18158
- __decorate([
18159
- DeprecateProperty('`disabled` is deprecated.')
18160
- ], IgxRadioGroupDirective.prototype, "disabled", null);
18161
- __decorate([
18162
- DeprecateProperty('`labelPosition` is deprecated.')
18163
- ], IgxRadioGroupDirective.prototype, "labelPosition", null);
18164
18173
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxRadioGroupDirective, decorators: [{
18165
18174
  type: Directive,
18166
18175
  args: [{
@@ -22202,7 +22211,7 @@ class IgxRowAddCrudState extends IgxRowCrudState {
22202
22211
  * @hidden @internal
22203
22212
  */
22204
22213
  createAddRowParent(row, newRowAsChild) {
22205
- const rowIndex = row ? row.index : this.grid.rowList.length - 1;
22214
+ const rowIndex = row ? row.index : -1;
22206
22215
  const rowId = row ? row.rowID : (rowIndex >= 0 ? this.grid.rowList.last.rowID : null);
22207
22216
  const isInPinnedArea = this.grid.isRecordPinnedByViewIndex(rowIndex);
22208
22217
  const pinIndex = this.grid.pinnedRecords.findIndex(x => x[this.primaryKey] === rowId);
@@ -33372,9 +33381,7 @@ IgxComboHeaderDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0",
33372
33381
  IgxComboHeaderDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboHeaderDirective, selector: "[igxComboHeader]", ngImport: i0 });
33373
33382
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboHeaderDirective, decorators: [{
33374
33383
  type: Directive,
33375
- args: [{
33376
- selector: '[igxComboHeader]'
33377
- }]
33384
+ args: [{ selector: '[igxComboHeader]' }]
33378
33385
  }] });
33379
33386
  /**
33380
33387
  * @hidden
@@ -33385,9 +33392,7 @@ IgxComboFooterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0",
33385
33392
  IgxComboFooterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboFooterDirective, selector: "[igxComboFooter]", ngImport: i0 });
33386
33393
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboFooterDirective, decorators: [{
33387
33394
  type: Directive,
33388
- args: [{
33389
- selector: '[igxComboFooter]'
33390
- }]
33395
+ args: [{ selector: '[igxComboFooter]' }]
33391
33396
  }] });
33392
33397
  /**
33393
33398
  * @hidden
@@ -33398,9 +33403,7 @@ IgxComboItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", ve
33398
33403
  IgxComboItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboItemDirective, selector: "[igxComboItem]", ngImport: i0 });
33399
33404
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboItemDirective, decorators: [{
33400
33405
  type: Directive,
33401
- args: [{
33402
- selector: '[igxComboItem]'
33403
- }]
33406
+ args: [{ selector: '[igxComboItem]' }]
33404
33407
  }] });
33405
33408
  /**
33406
33409
  * @hidden
@@ -33411,9 +33414,7 @@ IgxComboEmptyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", v
33411
33414
  IgxComboEmptyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboEmptyDirective, selector: "[igxComboEmpty]", ngImport: i0 });
33412
33415
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboEmptyDirective, decorators: [{
33413
33416
  type: Directive,
33414
- args: [{
33415
- selector: '[igxComboEmpty]'
33416
- }]
33417
+ args: [{ selector: '[igxComboEmpty]' }]
33417
33418
  }] });
33418
33419
  /**
33419
33420
  * @hidden
@@ -33424,9 +33425,7 @@ IgxComboHeaderItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.
33424
33425
  IgxComboHeaderItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboHeaderItemDirective, selector: "[igxComboHeaderItem]", ngImport: i0 });
33425
33426
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboHeaderItemDirective, decorators: [{
33426
33427
  type: Directive,
33427
- args: [{
33428
- selector: '[igxComboHeaderItem]'
33429
- }]
33428
+ args: [{ selector: '[igxComboHeaderItem]' }]
33430
33429
  }] });
33431
33430
  /**
33432
33431
  * @hidden
@@ -33437,9 +33436,7 @@ IgxComboAddItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0",
33437
33436
  IgxComboAddItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboAddItemDirective, selector: "[igxComboAddItem]", ngImport: i0 });
33438
33437
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboAddItemDirective, decorators: [{
33439
33438
  type: Directive,
33440
- args: [{
33441
- selector: '[igxComboAddItem]'
33442
- }]
33439
+ args: [{ selector: '[igxComboAddItem]' }]
33443
33440
  }] });
33444
33441
  /**
33445
33442
  * @hidden
@@ -33450,9 +33447,7 @@ IgxComboToggleIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.
33450
33447
  IgxComboToggleIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboToggleIconDirective, selector: "[igxComboToggleIcon]", ngImport: i0 });
33451
33448
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboToggleIconDirective, decorators: [{
33452
33449
  type: Directive,
33453
- args: [{
33454
- selector: '[igxComboToggleIcon]'
33455
- }]
33450
+ args: [{ selector: '[igxComboToggleIcon]' }]
33456
33451
  }] });
33457
33452
  /**
33458
33453
  * @hidden
@@ -33463,9 +33458,7 @@ IgxComboClearIconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0
33463
33458
  IgxComboClearIconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxComboClearIconDirective, selector: "[igxComboClearIcon]", ngImport: i0 });
33464
33459
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboClearIconDirective, decorators: [{
33465
33460
  type: Directive,
33466
- args: [{
33467
- selector: '[igxComboClearIcon]'
33468
- }]
33461
+ args: [{ selector: '[igxComboClearIcon]' }]
33469
33462
  }] });
33470
33463
 
33471
33464
  /**
@@ -33505,10 +33498,10 @@ class IgxComboAPIService {
33505
33498
  return;
33506
33499
  }
33507
33500
  if (!selected) {
33508
- this.combo.selectItems([itemID], false, event);
33501
+ this.combo.select([itemID], false, event);
33509
33502
  }
33510
33503
  else {
33511
- this.combo.deselectItems([itemID], event);
33504
+ this.combo.deselect([itemID], event);
33512
33505
  }
33513
33506
  }
33514
33507
  is_item_selected(itemID) {
@@ -33604,10 +33597,10 @@ class IgxComboItemComponent extends IgxDropDownItemComponent {
33604
33597
  }
33605
33598
  }
33606
33599
  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 });
33607
- 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"] }] });
33600
+ 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"] }] });
33608
33601
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboItemComponent, decorators: [{
33609
33602
  type: Component,
33610
- 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" }]
33603
+ 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" }]
33611
33604
  }], ctorParameters: function () { return [{ type: IgxComboAPIService }, { type: undefined, decorators: [{
33612
33605
  type: Inject,
33613
33606
  args: [IGX_DROPDOWN_BASE]
@@ -33619,316 +33612,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
33619
33612
  }, {
33620
33613
  type: HostBinding,
33621
33614
  args: ['style.height.px']
33615
+ }], singleMode: [{
33616
+ type: Input
33622
33617
  }] } });
33623
33618
 
33624
33619
  const IGX_COMBO_COMPONENT = new InjectionToken('IgxComboComponentToken');
33625
-
33626
- /**
33627
- * @hidden
33628
- */
33629
- class IgxComboAddItemComponent extends IgxComboItemComponent {
33630
- get selected() {
33631
- return false;
33632
- }
33633
- set selected(value) {
33634
- }
33635
- /**
33636
- * @inheritdoc
33637
- */
33638
- clicked(event) {
33639
- this.comboAPI.disableTransitions = false;
33640
- this.comboAPI.add_custom_item();
33641
- }
33642
- }
33643
- IgxComboAddItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboAddItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
33644
- 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 });
33645
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboAddItemComponent, decorators: [{
33646
- type: Component,
33647
- args: [{
33648
- selector: 'igx-combo-add-item',
33649
- template: '<ng-content></ng-content>',
33650
- providers: [{ provide: IgxComboItemComponent, useExisting: IgxComboAddItemComponent }]
33651
- }]
33652
- }] });
33653
-
33654
- /** @hidden */
33655
- class IgxComboDropDownComponent extends IgxDropDownComponent {
33656
- constructor(elementRef, cdr, selection, combo, comboAPI, _displayDensityOptions) {
33657
- super(elementRef, cdr, selection, _displayDensityOptions);
33658
- this.elementRef = elementRef;
33659
- this.cdr = cdr;
33660
- this.selection = selection;
33661
- this.combo = combo;
33662
- this.comboAPI = comboAPI;
33663
- this._displayDensityOptions = _displayDensityOptions;
33664
- /**
33665
- * @hidden
33666
- * @internal
33667
- */
33668
- this.children = null;
33669
- this.scrollHandler = () => {
33670
- this.comboAPI.disableTransitions = true;
33671
- };
33672
- }
33673
- /** @hidden @internal */
33674
- get scrollContainer() {
33675
- return this.virtDir.dc.location.nativeElement;
33676
- }
33677
- get isScrolledToLast() {
33678
- const scrollTop = this.virtDir.scrollPosition;
33679
- const scrollHeight = this.virtDir.getScroll().scrollHeight;
33680
- return Math.floor(scrollTop + this.virtDir.igxForContainerSize) === scrollHeight;
33681
- }
33682
- get lastVisibleIndex() {
33683
- return this.combo.totalItemCount ?
33684
- Math.floor(this.combo.itemsMaxHeight / this.combo.itemHeight) :
33685
- this.items.length - 1;
33686
- }
33687
- get sortedChildren() {
33688
- if (this.children !== undefined) {
33689
- return this.children.toArray()
33690
- .sort((a, b) => a.index - b.index);
33691
- }
33692
- return null;
33693
- }
33694
- /**
33695
- * Get all non-header items
33696
- *
33697
- * ```typescript
33698
- * let myDropDownItems = this.dropdown.items;
33699
- * ```
33700
- */
33701
- get items() {
33702
- const items = [];
33703
- if (this.children !== undefined) {
33704
- const sortedChildren = this.sortedChildren;
33705
- for (const child of sortedChildren) {
33706
- if (!child.isHeader) {
33707
- items.push(child);
33708
- }
33709
- }
33710
- }
33711
- return items;
33712
- }
33713
- /**
33714
- * @hidden @internal
33715
- */
33716
- onFocus() {
33717
- this.focusedItem = this._focusedItem || this.items[0];
33718
- }
33719
- /**
33720
- * @hidden @internal
33721
- */
33722
- onBlur(_evt) {
33723
- this.focusedItem = null;
33724
- }
33725
- /**
33726
- * @hidden @internal
33727
- */
33728
- onToggleOpened() {
33729
- this.opened.emit();
33730
- }
33731
- /**
33732
- * @hidden
33733
- */
33734
- navigateFirst() {
33735
- this.navigateItem(this.virtDir.igxForOf.findIndex(e => !e.isHeader));
33736
- }
33737
- /**
33738
- * @hidden
33739
- */
33740
- navigatePrev() {
33741
- if (this._focusedItem && this._focusedItem.index === 0 && this.virtDir.state.startIndex === 0) {
33742
- this.combo.focusSearchInput(false);
33743
- }
33744
- else {
33745
- super.navigatePrev();
33746
- }
33747
- }
33748
- /**
33749
- * @hidden
33750
- */
33751
- navigateNext() {
33752
- const lastIndex = this.combo.totalItemCount ? this.combo.totalItemCount - 1 : this.virtDir.igxForOf.length - 1;
33753
- if (this._focusedItem && this._focusedItem.index === lastIndex) {
33754
- this.focusAddItemButton();
33755
- }
33756
- else {
33757
- super.navigateNext();
33758
- }
33759
- }
33760
- /**
33761
- * @hidden @internal
33762
- */
33763
- selectItem(item) {
33764
- if (item === null || item === undefined) {
33765
- return;
33766
- }
33767
- this.comboAPI.set_selected_item(item.itemID);
33768
- this._focusedItem = item;
33769
- }
33770
- /**
33771
- * @hidden @internal
33772
- */
33773
- updateScrollPosition() {
33774
- this.virtDir.getScroll().scrollTop = this._scrollPosition;
33775
- }
33776
- /**
33777
- * @hidden @internal
33778
- */
33779
- onItemActionKey(key) {
33780
- switch (key) {
33781
- case DropDownActionKey.ENTER:
33782
- this.handleEnter();
33783
- break;
33784
- case DropDownActionKey.SPACE:
33785
- this.handleSpace();
33786
- break;
33787
- case DropDownActionKey.ESCAPE:
33788
- this.close();
33789
- }
33790
- }
33791
- ngAfterViewInit() {
33792
- this.virtDir.getScroll().addEventListener('scroll', this.scrollHandler);
33793
- }
33794
- /**
33795
- * @hidden @internal
33796
- */
33797
- ngOnDestroy() {
33798
- this.virtDir.getScroll().removeEventListener('scroll', this.scrollHandler);
33799
- this.destroy$.next(true);
33800
- this.destroy$.complete();
33801
- }
33802
- scrollToHiddenItem(_newItem) { }
33803
- handleEnter() {
33804
- if (this.isAddItemFocused()) {
33805
- this.combo.addItemToCollection();
33806
- }
33807
- else {
33808
- this.close();
33809
- }
33810
- }
33811
- handleSpace() {
33812
- if (this.isAddItemFocused()) {
33813
- return;
33814
- }
33815
- else {
33816
- this.selectItem(this.focusedItem);
33817
- }
33818
- }
33819
- isAddItemFocused() {
33820
- return this.focusedItem instanceof IgxComboAddItemComponent;
33821
- }
33822
- focusAddItemButton() {
33823
- if (this.combo.isAddButtonVisible()) {
33824
- this.focusedItem = this.items[this.items.length - 1];
33825
- }
33826
- }
33827
- }
33828
- 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 });
33829
- 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"] }] });
33830
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboDropDownComponent, decorators: [{
33831
- type: Component,
33832
- 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" }]
33833
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: undefined, decorators: [{
33834
- type: Inject,
33835
- args: [IGX_COMBO_COMPONENT]
33836
- }] }, { type: IgxComboAPIService }, { type: undefined, decorators: [{
33837
- type: Optional
33838
- }, {
33839
- type: Inject,
33840
- args: [DisplayDensityToken]
33841
- }] }]; }, propDecorators: { children: [{
33842
- type: ContentChildren,
33843
- args: [IgxComboItemComponent, { descendants: true }]
33844
- }] } });
33845
-
33846
- /**
33847
- * @hidden
33848
- */
33849
- class IgxComboFilteringPipe {
33850
- transform(collection, searchValue, displayKey, shouldFilter, filteringOptions) {
33851
- if (!collection) {
33852
- return [];
33853
- }
33854
- if (!searchValue || !shouldFilter) {
33855
- return collection;
33856
- }
33857
- else {
33858
- const searchTerm = filteringOptions.caseSensitive ? searchValue.trim() : searchValue.toLowerCase().trim();
33859
- if (displayKey != null) {
33860
- return collection.filter(e => filteringOptions.caseSensitive ? e[displayKey].includes(searchTerm) :
33861
- e[displayKey].toString().toLowerCase().includes(searchTerm));
33862
- }
33863
- else {
33864
- return collection.filter(e => filteringOptions.caseSensitive ? e.includes(searchTerm) :
33865
- e.toLowerCase().includes(searchTerm));
33866
- }
33867
- }
33868
- }
33869
- }
33870
- IgxComboFilteringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboFilteringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
33871
- IgxComboFilteringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboFilteringPipe, name: "comboFiltering" });
33872
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboFilteringPipe, decorators: [{
33873
- type: Pipe,
33874
- args: [{
33875
- name: 'comboFiltering'
33876
- }]
33877
- }] });
33878
- /**
33879
- * @hidden
33880
- */
33881
- class IgxComboGroupingPipe {
33882
- constructor(combo) {
33883
- this.combo = combo;
33884
- }
33885
- transform(collection, groupKey, valueKey, sortingDirection) {
33886
- this.combo.filteredData = collection;
33887
- if ((!groupKey && groupKey !== 0) || !collection.length) {
33888
- return collection;
33889
- }
33890
- const sorted = DataUtil.sort(cloneArray(collection), [{
33891
- fieldName: groupKey,
33892
- dir: sortingDirection,
33893
- ignoreCase: true,
33894
- strategy: DefaultSortingStrategy.instance()
33895
- }]);
33896
- const data = cloneArray(sorted);
33897
- let inserts = 0;
33898
- let currentHeader = null;
33899
- for (let i = 0; i < sorted.length; i++) {
33900
- let insertFlag = 0;
33901
- if (currentHeader !== sorted[i][groupKey]) {
33902
- currentHeader = sorted[i][groupKey];
33903
- insertFlag = 1;
33904
- }
33905
- if (insertFlag) {
33906
- data.splice(i + inserts, 0, {
33907
- [valueKey]: currentHeader,
33908
- [groupKey]: currentHeader,
33909
- isHeader: true
33910
- });
33911
- inserts++;
33912
- }
33913
- }
33914
- return data;
33915
- }
33916
- }
33917
- 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 });
33918
- IgxComboGroupingPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboGroupingPipe, name: "comboGrouping" });
33919
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboGroupingPipe, decorators: [{
33920
- type: Pipe,
33921
- args: [{
33922
- name: 'comboGrouping'
33923
- }]
33924
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
33925
- type: Inject,
33926
- args: [IGX_COMBO_COMPONENT]
33927
- }] }]; } });
33928
-
33620
+ let NEXT_ID$d = 0;
33929
33621
  /**
33930
33622
  * @hidden
33623
+ * The default number of items that should be in the combo's
33624
+ * drop-down list if no `[itemsMaxHeight]` is specified
33931
33625
  */
33626
+ const itemsInContainer = 10; // TODO: make private readonly
33627
+ /** @hidden @internal */
33628
+ const ItemHeights = {
33629
+ comfortable: 40,
33630
+ cosy: 32,
33631
+ compact: 28,
33632
+ };
33633
+ /** @hidden @internal */
33932
33634
  var DataTypes;
33933
33635
  (function (DataTypes) {
33934
33636
  DataTypes["EMPTY"] = "empty";
@@ -33936,20 +33638,6 @@ var DataTypes;
33936
33638
  DataTypes["COMPLEX"] = "complex";
33937
33639
  DataTypes["PRIMARYKEY"] = "valueKey";
33938
33640
  })(DataTypes || (DataTypes = {}));
33939
- /**
33940
- * @hidden
33941
- */
33942
- const ItemHeights = {
33943
- comfortable: 40,
33944
- cosy: 32,
33945
- compact: 28,
33946
- };
33947
- /**
33948
- * @hidden
33949
- * The default number of items that should be in the combo's
33950
- * drop-down list if no `[itemsMaxHeight]` is specified
33951
- */
33952
- const itemsInContainer = 10;
33953
33641
  var IgxComboState;
33954
33642
  (function (IgxComboState) {
33955
33643
  /**
@@ -33965,46 +33653,12 @@ var IgxComboState;
33965
33653
  */
33966
33654
  IgxComboState[IgxComboState["INVALID"] = 2] = "INVALID";
33967
33655
  })(IgxComboState || (IgxComboState = {}));
33968
- /**
33969
- * When called with sets A & B, returns A - B (as array);
33970
- *
33971
- * @hidden
33972
- */
33973
- const diffInSets = (set1, set2) => {
33974
- const results = [];
33975
- set1.forEach(entry => {
33976
- if (!set2.has(entry)) {
33977
- results.push(entry);
33978
- }
33979
- });
33980
- return results;
33981
- };
33982
- let NEXT_ID$d = 0;
33983
- /**
33984
- * Represents a drop-down list that provides editable functionalities, allowing users to choose an option from a predefined list.
33985
- *
33986
- * @igxModule IgxComboModule
33987
- * @igxTheme igx-combo-theme
33988
- * @igxKeywords combobox, combo selection
33989
- * @igxGroup Grids & Lists
33990
- *
33991
- * @remarks
33992
- * It provides the ability to filter items as well as perform single or multiple seleciton with the provided data.
33993
- * Additionally, it exposes keyboard navigation and custom styling capabilities.
33994
- * @example
33995
- * ```html
33996
- * <igx-combo [itemsMaxHeight]="250" [data]="locationData"
33997
- * [displayKey]="'field'" [valueKey]="'field'"
33998
- * placeholder="Location(s)" searchPlaceholder="Search...">
33999
- * </igx-combo>
34000
- * ```
34001
- */
34002
- class IgxComboComponent extends DisplayDensityBase {
34003
- constructor(elementRef, cdr, selection, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector) {
33656
+ class IgxComboBaseDirective extends DisplayDensityBase {
33657
+ constructor(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector) {
34004
33658
  super(_displayDensityOptions);
34005
33659
  this.elementRef = elementRef;
34006
33660
  this.cdr = cdr;
34007
- this.selection = selection;
33661
+ this.selectionService = selectionService;
34008
33662
  this.comboAPI = comboAPI;
34009
33663
  this._iconService = _iconService;
34010
33664
  this._displayDensityOptions = _displayDensityOptions;
@@ -34028,9 +33682,123 @@ class IgxComboComponent extends DisplayDensityBase {
34028
33682
  */
34029
33683
  this.overlaySettings = null;
34030
33684
  /**
34031
- * @hidden @internal
33685
+ * Gets/gets combo id.
33686
+ *
33687
+ * ```typescript
33688
+ * // get
33689
+ * let id = this.combo.id;
33690
+ * ```
33691
+ *
33692
+ * ```html
33693
+ * <!--set-->
33694
+ * <igx-combo [id]='combo1'></igx-combo>
33695
+ * ```
34032
33696
  */
34033
- this.searchInput = null;
33697
+ this.id = `igx-combo-${NEXT_ID$d++}`;
33698
+ /**
33699
+ * Controls whether custom values can be added to the collection
33700
+ *
33701
+ * ```typescript
33702
+ * // get
33703
+ * let comboAllowsCustomValues = this.combo.allowCustomValues;
33704
+ * ```
33705
+ *
33706
+ * ```html
33707
+ * <!--set-->
33708
+ * <igx-combo [allowCustomValues]='true'></igx-combo>
33709
+ * ```
33710
+ */
33711
+ this.allowCustomValues = false;
33712
+ /**
33713
+ * Determines which column in the data source is used to determine the value.
33714
+ *
33715
+ * ```typescript
33716
+ * // get
33717
+ * let myComboValueKey = this.combo.valueKey;
33718
+ * ```
33719
+ *
33720
+ * ```html
33721
+ * <!--set-->
33722
+ * <igx-combo [valueKey]='myKey'></igx-combo>
33723
+ * ```
33724
+ */
33725
+ this.valueKey = null;
33726
+ /** @hidden @internal */
33727
+ this.cssClass = 'igx-combo'; // Independent of display density for the time being
33728
+ /** @hidden @internal */
33729
+ this.role = 'combobox';
33730
+ /**
33731
+ * An @Input property that enabled/disables combo. The default is `false`.
33732
+ * ```html
33733
+ * <igx-combo [disabled]="'true'">
33734
+ * ```
33735
+ */
33736
+ this.disabled = false;
33737
+ /**
33738
+ * Emitted when item selection is changing, before the selection completes
33739
+ *
33740
+ * ```html
33741
+ * <igx-combo (selectionChanging)='handleSelection()'></igx-combo>
33742
+ * ```
33743
+ */
33744
+ // TODO: any for old/new selection?
33745
+ this.selectionChanging = new EventEmitter();
33746
+ /**
33747
+ * Emitted before the dropdown is opened
33748
+ *
33749
+ * ```html
33750
+ * <igx-combo opening='handleOpening($event)'></igx-combo>
33751
+ * ```
33752
+ */
33753
+ this.opening = new EventEmitter();
33754
+ /**
33755
+ * Emitted after the dropdown is opened
33756
+ *
33757
+ * ```html
33758
+ * <igx-combo (opened)='handleOpened($event)'></igx-combo>
33759
+ * ```
33760
+ */
33761
+ this.opened = new EventEmitter();
33762
+ /**
33763
+ * Emitted before the dropdown is closed
33764
+ *
33765
+ * ```html
33766
+ * <igx-combo (closing)='handleClosing($event)'></igx-combo>
33767
+ * ```
33768
+ */
33769
+ this.closing = new EventEmitter();
33770
+ /**
33771
+ * Emitted after the dropdown is closed
33772
+ *
33773
+ * ```html
33774
+ * <igx-combo (closed)='handleClosed($event)'></igx-combo>
33775
+ * ```
33776
+ */
33777
+ this.closed = new EventEmitter();
33778
+ /**
33779
+ * Emitted when an item is being added to the data collection
33780
+ *
33781
+ * ```html
33782
+ * <igx-combo (addition)='handleAdditionEvent($event)'></igx-combo>
33783
+ * ```
33784
+ */
33785
+ this.addition = new EventEmitter();
33786
+ /**
33787
+ * Emitted when the value of the search input changes (e.g. typing, pasting, clear, etc.)
33788
+ *
33789
+ * ```html
33790
+ * <igx-combo (searchInputUpdate)='handleSearchInputEvent($event)'></igx-combo>
33791
+ * ```
33792
+ */
33793
+ this.searchInputUpdate = new EventEmitter();
33794
+ /**
33795
+ * Emitted when new chunk of data is loaded from the virtualization
33796
+ *
33797
+ * ```html
33798
+ * <igx-combo (dataPreLoad)='handleDataPreloadEvent($event)'></igx-combo>
33799
+ * ```
33800
+ */
33801
+ this.dataPreLoad = new EventEmitter();
34034
33802
  /**
34035
33803
  * The custom template, if any, that should be used when rendering ITEMS in the combo list
34036
33804
  *
@@ -34194,207 +33962,34 @@ class IgxComboComponent extends DisplayDensityBase {
34194
33962
  * ```
34195
33963
  */
34196
33964
  this.clearIconTemplate = null;
34197
- /**
34198
- * Emitted when item selection is changing, before the selection completes
34199
- *
34200
- * ```html
34201
- * <igx-combo (selectionChanging)='handleSelection()'></igx-combo>
34202
- * ```
34203
- */
34204
- this.selectionChanging = new EventEmitter();
34205
- /**
34206
- * Emitted before the dropdown is opened
34207
- *
34208
- * ```html
34209
- * <igx-combo opening='handleOpening($event)'></igx-combo>
34210
- * ```
34211
- */
34212
- this.opening = new EventEmitter();
34213
- /**
34214
- * Emitted after the dropdown is opened
34215
- *
34216
- * ```html
34217
- * <igx-combo (opened)='handleOpened($event)'></igx-combo>
34218
- * ```
34219
- */
34220
- this.opened = new EventEmitter();
34221
- /**
34222
- * Emitted before the dropdown is closed
34223
- *
34224
- * ```html
34225
- * <igx-combo (closing)='handleClosing($event)'></igx-combo>
34226
- * ```
34227
- */
34228
- this.closing = new EventEmitter();
34229
- /**
34230
- * Emitted after the dropdown is closed
34231
- *
34232
- * ```html
34233
- * <igx-combo (closed)='handleClosed($event)'></igx-combo>
34234
- * ```
34235
- */
34236
- this.closed = new EventEmitter();
34237
- /**
34238
- * Emitted when an item is being added to the data collection
34239
- *
34240
- * ```html
34241
- * <igx-combo (addition)='handleAdditionEvent($event)'></igx-combo>
34242
- * ```
34243
- */
34244
- this.addition = new EventEmitter();
34245
- /**
34246
- * Emitted when the value of the search input changes (e.g. typing, pasting, clear, etc.)
34247
- *
34248
- * ```html
34249
- * <igx-combo (searchInputUpdate)='handleSearchInputEvent($event)'></igx-combo>
34250
- * ```
34251
- */
34252
- this.searchInputUpdate = new EventEmitter();
34253
- /**
34254
- * Emitted when new chunk of data is loaded from the virtualization
34255
- *
34256
- * ```html
34257
- * <igx-combo (dataPreLoad)='handleDataPreloadEvent($event)'></igx-combo>
34258
- * ```
34259
- */
34260
- this.dataPreLoad = new EventEmitter();
34261
- /**
34262
- * Gets/gets combo id.
34263
- *
34264
- * ```typescript
34265
- * // get
34266
- * let id = this.combo.id;
34267
- * ```
34268
- *
34269
- * ```html
34270
- * <!--set-->
34271
- * <igx-combo [id]='combo1'></igx-combo>
34272
- * ```
34273
- */
34274
- this.id = `igx-combo-${NEXT_ID$d++}`;
34275
- /**
34276
- * @hidden @internal
34277
- */
34278
- this.cssClass = 'igx-combo'; // Independent of display density, at the time being
34279
- /**
34280
- * @hidden @internal
34281
- */
34282
- this.role = 'combobox';
34283
- /**
34284
- * Controls whether custom values can be added to the collection
34285
- *
34286
- * ```typescript
34287
- * // get
34288
- * let comboAllowsCustomValues = this.combo.allowCustomValues;
34289
- * ```
34290
- *
34291
- * ```html
34292
- * <!--set-->
34293
- * <igx-combo [allowCustomValues]='true'></igx-combo>
34294
- * ```
34295
- */
34296
- this.allowCustomValues = false;
34297
- /**
34298
- * Defines the placeholder value for the combo dropdown search field
34299
- *
34300
- * ```typescript
34301
- * // get
34302
- * let myComboSearchPlaceholder = this.combo.searchPlaceholder;
34303
- * ```
34304
- *
34305
- * ```html
34306
- * <!--set-->
34307
- * <igx-combo [searchPlaceholder]='newPlaceHolder'></igx-combo>
34308
- * ```
34309
- */
34310
- this.searchPlaceholder = 'Enter a Search Term';
34311
- /**
34312
- * Defines whether the caseSensitive icon should be shown in the search input
34313
- *
34314
- * ```typescript
34315
- * // get
34316
- * let myComboShowSearchCaseIcon = this.combo.showSearchCaseIcon;
34317
- * ```
34318
- *
34319
- * ```html
34320
- * <!--set-->
34321
- * <igx-combo [showSearchCaseIcon]='true'></igx-combo>
34322
- * ```
34323
- */
34324
- this.showSearchCaseIcon = false;
34325
- /**
34326
- * Combo value data source property.
34327
- *
34328
- * ```typescript
34329
- * // get
34330
- * let myComboValueKey = this.combo.valueKey;
34331
- * ```
34332
- *
34333
- * ```html
34334
- * <!--set-->
34335
- * <igx-combo [valueKey]='myKey'></igx-combo>
34336
- * ```
34337
- */
34338
- this.valueKey = null;
34339
- /**
34340
- * An @Input property that enabled/disables filtering in the list. The default is `true`.
34341
- * ```html
34342
- * <igx-combo [filterable]="false">
34343
- * ```
34344
- */
34345
- this.filterable = true;
34346
- /**
34347
- * An @Input property that enabled/disables combo. The default is `false`.
34348
- * ```html
34349
- * <igx-combo [disabled]="'true'">
34350
- * ```
34351
- */
34352
- this.disabled = false;
34353
- /**
34354
- * An @Input property that controls whether the combo's search box
34355
- * should be focused after the `opened` event is called
34356
- * When `false`, the combo's list item container will be focused instead
34357
- */
34358
- this.autoFocusSearch = true;
33965
+ /** @hidden @internal */
33966
+ this.searchInput = null;
34359
33967
  this.dropdownContainer = null;
34360
- /**
34361
- * @hidden @internal
34362
- */
33968
+ /** @hidden @internal */
34363
33969
  this.customValueFlag = true;
34364
- /**
34365
- * @hidden @internal
34366
- */
33970
+ /** @hidden @internal */
33971
+ this.filterValue = '';
33972
+ /** @hidden @internal */
34367
33973
  this.defaultFallbackGroup = 'Other';
34368
- /**
34369
- * @hidden @internal
34370
- */
33974
+ /** @hidden @internal */
34371
33975
  this.filteringOptions = {
34372
33976
  caseSensitive: false
34373
33977
  };
34374
- /**
34375
- * @hidden @internal
34376
- */
34377
- this.filteringLogic = FilteringLogic.Or;
34378
- /** @hidden @internal */
34379
- this.filterValue = '';
34380
- this.stringFilters = IgxStringFilteringOperand;
34381
- this.booleanFilters = IgxBooleanFilteringOperand;
33978
+ this._data = [];
33979
+ this._value = '';
34382
33980
  this._groupKey = '';
34383
- this._prevInputValue = '';
34384
- this._dataType = '';
34385
- this._searchValue = '';
34386
- this._type = null;
33981
+ this._filteredData = [];
33982
+ this._remoteSelection = {};
33983
+ this._valid = IgxComboState.INITIAL;
34387
33984
  this.ngControl = null;
34388
33985
  this.destroy$ = new Subject();
34389
- this._data = [];
34390
- this._filteredData = [];
33986
+ this._onTouchedCallback = noop;
33987
+ this._onChangeCallback = noop;
33988
+ this._type = null;
33989
+ this._dataType = '';
33990
+ this._searchValue = '';
34391
33991
  this._itemHeight = null;
34392
33992
  this._itemsMaxHeight = null;
34393
- this._remoteSelection = {};
34394
- this._onChangeCallback = noop;
34395
- this._onTouchedCallback = noop;
34396
- this._value = '';
34397
- this._valid = IgxComboState.INITIAL;
34398
33993
  this._groupSortingDirection = SortingDirection.Asc;
34399
33994
  this.onStatusChanged = () => {
34400
33995
  if ((this.ngControl.control.touched || this.ngControl.control.dirty) &&
@@ -34412,31 +34007,10 @@ class IgxComboComponent extends DisplayDensityBase {
34412
34007
  }
34413
34008
  this.manageRequiredAsterisk();
34414
34009
  };
34415
- this.comboAPI.register(this);
34416
- }
34417
- /**
34418
- * @hidden @internal
34419
- */
34420
- get displaySearchInput() {
34421
- return this.filterable || this.allowCustomValues;
34422
- }
34423
- /**
34424
- * @hidden @internal
34425
- */
34426
- get ariaExpanded() {
34427
- return !this.dropdown.collapsed;
34428
- }
34429
- /**
34430
- * @hidden @internal
34431
- */
34432
- get hasPopUp() {
34433
- return 'listbox';
34434
- }
34435
- /**
34436
- * @hidden @internal
34437
- */
34438
- get ariaOwns() {
34439
- return this.dropdown.id;
34010
+ this.findMatch = (element) => {
34011
+ const value = this.displayKey ? element[this.displayKey] : element;
34012
+ return value.toString().toLowerCase() === this.searchValue.trim().toLowerCase();
34013
+ };
34440
34014
  }
34441
34015
  /**
34442
34016
  * Configures the drop down list height
@@ -34482,12 +34056,6 @@ class IgxComboComponent extends DisplayDensityBase {
34482
34056
  set itemHeight(val) {
34483
34057
  this._itemHeight = val;
34484
34058
  }
34485
- /**
34486
- * @hidden @internal
34487
- */
34488
- get inputEmpty() {
34489
- return !this.value && !this.placeholder;
34490
- }
34491
34059
  /**
34492
34060
  * Combo data source.
34493
34061
  *
@@ -34506,7 +34074,7 @@ class IgxComboComponent extends DisplayDensityBase {
34506
34074
  this._displayKey = val;
34507
34075
  }
34508
34076
  /**
34509
- * Combo text data source property.
34077
+ * Determines which column in the data source is used to determine the display value.
34510
34078
  *
34511
34079
  * ```typescript
34512
34080
  * // get
@@ -34564,6 +34132,18 @@ class IgxComboComponent extends DisplayDensityBase {
34564
34132
  set groupSortingDirection(val) {
34565
34133
  this._groupSortingDirection = val;
34566
34134
  }
34135
+ /** @hidden @internal */
34136
+ get ariaExpanded() {
34137
+ return !this.dropdown.collapsed;
34138
+ }
34139
+ /** @hidden @internal */
34140
+ get hasPopUp() {
34141
+ return 'listbox';
34142
+ }
34143
+ /** @hidden @internal */
34144
+ get ariaOwns() {
34145
+ return this.dropdown.id;
34146
+ }
34567
34147
  /**
34568
34148
  * An @Input property that sets how the combo will be styled.
34569
34149
  * The allowed values are `line`, `box`, `border` and `search`. The default is `box`.
@@ -34577,6 +34157,27 @@ class IgxComboComponent extends DisplayDensityBase {
34577
34157
  set type(val) {
34578
34158
  this._type = val;
34579
34159
  }
34160
+ /** @hidden @internal */
34161
+ get searchValue() {
34162
+ return this._searchValue;
34163
+ }
34164
+ set searchValue(val) {
34165
+ this.filterValue = val;
34166
+ this._searchValue = val;
34167
+ }
34168
+ /** @hidden @internal */
34169
+ get isRemote() {
34170
+ return this.totalItemCount > 0 &&
34171
+ this.valueKey &&
34172
+ this.dataType === DataTypes.COMPLEX;
34173
+ }
34174
+ /** @hidden @internal */
34175
+ get dataType() {
34176
+ if (this.displayKey) {
34177
+ return DataTypes.COMPLEX;
34178
+ }
34179
+ return DataTypes.PRIMITIVE;
34180
+ }
34580
34181
  /**
34581
34182
  * Gets if control is valid, when used in a form
34582
34183
  *
@@ -34601,32 +34202,15 @@ class IgxComboComponent extends DisplayDensityBase {
34601
34202
  this.comboInput.valid = IgxInputState[IgxComboState[valid]];
34602
34203
  }
34603
34204
  /**
34604
- * @hidden @internal
34605
- */
34606
- get searchValue() {
34607
- return this._searchValue;
34608
- }
34609
- set searchValue(val) {
34610
- this.filterValue = val;
34611
- this._searchValue = val;
34612
- }
34613
- /**
34614
- * @hidden @internal
34615
- */
34616
- onArrowDown(event) {
34617
- event.preventDefault();
34618
- event.stopPropagation();
34619
- this.open();
34620
- }
34621
- /**
34622
- * @hidden @internal
34205
+ * The text displayed in the combo input
34206
+ *
34207
+ * ```typescript
34208
+ * // get
34209
+ * let comboValue = this.combo.value;
34210
+ * ```
34623
34211
  */
34624
- onInputClick(event) {
34625
- event.stopPropagation();
34626
- event.preventDefault();
34627
- if (!this.disabled) {
34628
- this.toggle();
34629
- }
34212
+ get value() {
34213
+ return this._value;
34630
34214
  }
34631
34215
  /**
34632
34216
  * Defines the current state of the virtualized data. It contains `startIndex` and `chunkSize`
@@ -34650,6 +34234,16 @@ class IgxComboComponent extends DisplayDensityBase {
34650
34234
  set virtualizationState(state) {
34651
34235
  this.virtDir.state = state;
34652
34236
  }
34237
+ /**
34238
+ * Gets drop down state.
34239
+ *
34240
+ * ```typescript
34241
+ * let state = this.combo.collapsed;
34242
+ * ```
34243
+ */
34244
+ get collapsed() {
34245
+ return this.dropdown.collapsed;
34246
+ }
34653
34247
  /**
34654
34248
  * Gets total count of the virtual data items, when using remote service.
34655
34249
  *
@@ -34672,34 +34266,865 @@ class IgxComboComponent extends DisplayDensityBase {
34672
34266
  set totalItemCount(count) {
34673
34267
  this.virtDir.totalItemCount = count;
34674
34268
  }
34269
+ /** @hidden @internal */
34270
+ get template() {
34271
+ this._dataType = this.dataType;
34272
+ if (this.itemTemplate) {
34273
+ return this.itemTemplate;
34274
+ }
34275
+ if (this._dataType === DataTypes.COMPLEX) {
34276
+ return this.complexTemplate;
34277
+ }
34278
+ return this.primitiveTemplate;
34279
+ }
34280
+ /** @hidden @internal */
34281
+ onArrowDown(event) {
34282
+ event.preventDefault();
34283
+ event.stopPropagation();
34284
+ this.open();
34285
+ }
34286
+ /** @hidden @internal */
34287
+ ngOnInit() {
34288
+ this.ngControl = this._injector.get(NgControl, null);
34289
+ const targetElement = this.elementRef.nativeElement;
34290
+ this._overlaySettings = {
34291
+ target: targetElement,
34292
+ scrollStrategy: new AbsoluteScrollStrategy(),
34293
+ positionStrategy: new AutoPositionStrategy(),
34294
+ modal: false,
34295
+ closeOnOutsideClick: true,
34296
+ excludeFromOutsideClick: [targetElement]
34297
+ };
34298
+ this.selectionService.set(this.id, new Set());
34299
+ this._iconService.addSvgIconFromText(caseSensitive.name, caseSensitive.value, 'imx-icons');
34300
+ }
34301
+ /** @hidden @internal */
34302
+ ngAfterViewInit() {
34303
+ this.filteredData = [...this.data];
34304
+ if (this.ngControl) {
34305
+ this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.onStatusChanged);
34306
+ this.manageRequiredAsterisk();
34307
+ this.cdr.detectChanges();
34308
+ }
34309
+ this.virtDir.chunkPreload.pipe(takeUntil(this.destroy$)).subscribe((e) => {
34310
+ const eventArgs = Object.assign({}, e, { owner: this });
34311
+ this.dataPreLoad.emit(eventArgs);
34312
+ });
34313
+ }
34314
+ /** @hidden @internal */
34315
+ ngOnDestroy() {
34316
+ this.destroy$.next();
34317
+ this.destroy$.complete();
34318
+ this.comboAPI.clear();
34319
+ this.selectionService.clear(this.id);
34320
+ }
34675
34321
  /**
34676
- * The text displayed in the combo input
34322
+ * A method that opens/closes the combo.
34677
34323
  *
34678
- * ```typescript
34679
- * // get
34680
- * let comboValue = this.combo.value;
34324
+ * ```html
34325
+ * <button (click)="combo.toggle()">Toggle Combo</button>
34326
+ * <igx-combo #combo></igx-combo>
34681
34327
  * ```
34682
34328
  */
34683
- get value() {
34684
- return this._value;
34329
+ toggle() {
34330
+ const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);
34331
+ this.dropdown.toggle(overlaySettings);
34685
34332
  }
34686
34333
  /**
34687
- * @hidden @internal
34334
+ * A method that opens the combo.
34335
+ *
34336
+ * ```html
34337
+ * <button (click)="combo.open()">Open Combo</button>
34338
+ * <igx-combo #combo></igx-combo>
34339
+ * ```
34688
34340
  */
34689
- get filteredData() {
34690
- return this.filterable ? this._filteredData : this.data;
34341
+ open() {
34342
+ const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);
34343
+ this.dropdown.open(overlaySettings);
34691
34344
  }
34692
34345
  /**
34693
- * @hidden @internal
34346
+ * A method that closes the combo.
34347
+ *
34348
+ * ```html
34349
+ * <button (click)="combo.close()">Close Combo</button>
34350
+ * <igx-combo #combo></igx-combo>
34351
+ * ```
34694
34352
  */
34695
- set filteredData(val) {
34696
- this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;
34353
+ close() {
34354
+ this.dropdown.close();
34355
+ }
34356
+ /**
34357
+ * Triggers change detection on the combo view
34358
+ */
34359
+ triggerCheck() {
34360
+ this.cdr.detectChanges();
34361
+ }
34362
+ /**
34363
+ * Get current selection state
34364
+ *
34365
+ * @returns Array of selected items
34366
+ * ```typescript
34367
+ * let selectedItems = this.combo.selectedItems();
34368
+ * ```
34369
+ */
34370
+ get selection() {
34371
+ const items = Array.from(this.selectionService.get(this.id));
34372
+ return items;
34373
+ }
34374
+ /**
34375
+ * Returns if the specified itemID is selected
34376
+ *
34377
+ * @hidden
34378
+ * @internal
34379
+ */
34380
+ isItemSelected(item) {
34381
+ return this.selectionService.is_item_selected(this.id, item);
34382
+ }
34383
+ /** @hidden @internal */
34384
+ addItemToCollection() {
34385
+ if (!this.searchValue) {
34386
+ return;
34387
+ }
34388
+ const newValue = this.searchValue.trim();
34389
+ const addedItem = this.displayKey ? {
34390
+ [this.valueKey]: newValue,
34391
+ [this.displayKey]: newValue
34392
+ } : newValue;
34393
+ if (this.groupKey) {
34394
+ Object.assign(addedItem, { [this.groupKey]: this.defaultFallbackGroup });
34395
+ }
34396
+ // expose shallow copy instead of this.data in event args so this.data can't be mutated
34397
+ const oldCollection = [...this.data];
34398
+ const newCollection = [...this.data, addedItem];
34399
+ const args = {
34400
+ oldCollection, addedItem, newCollection, owner: this, cancel: false
34401
+ };
34402
+ this.addition.emit(args);
34403
+ if (args.cancel) {
34404
+ return;
34405
+ }
34406
+ this.data.push(args.addedItem);
34407
+ // trigger re-render
34408
+ this.data = cloneArray(this.data);
34409
+ this.select(this.valueKey !== null && this.valueKey !== undefined ?
34410
+ [args.addedItem[this.valueKey]] : [args.addedItem], false);
34411
+ this.customValueFlag = false;
34412
+ this.searchInput?.nativeElement.focus();
34413
+ this.dropdown.focusedItem = null;
34414
+ this.virtDir.scrollTo(0);
34415
+ }
34416
+ /** @hidden @internal */
34417
+ isAddButtonVisible() {
34418
+ // This should always return a boolean value. If this.searchValue was '', it returns '' instead of false;
34419
+ return this.searchValue !== '' && this.customValueFlag;
34420
+ }
34421
+ /** @hidden @internal */
34422
+ handleInputChange(event) {
34423
+ if (event !== undefined) {
34424
+ const args = {
34425
+ searchText: typeof event === 'string' ? event : event.target.value,
34426
+ owner: this,
34427
+ cancel: false
34428
+ };
34429
+ this.searchInputUpdate.emit(args);
34430
+ if (args.cancel) {
34431
+ this.filterValue = null;
34432
+ }
34433
+ }
34434
+ this.checkMatch();
34435
+ }
34436
+ /**
34437
+ * Event handlers
34438
+ *
34439
+ * @hidden
34440
+ * @internal
34441
+ */
34442
+ handleOpening(e) {
34443
+ const args = { owner: this, event: e.event, cancel: e.cancel };
34444
+ this.opening.emit(args);
34445
+ e.cancel = args.cancel;
34446
+ }
34447
+ /** @hidden @internal */
34448
+ handleClosing(e) {
34449
+ const args = { owner: this, event: e.event, cancel: e.cancel };
34450
+ this.closing.emit(args);
34451
+ e.cancel = args.cancel;
34452
+ if (e.cancel) {
34453
+ return;
34454
+ }
34455
+ this.searchValue = '';
34456
+ if (!e.event) {
34457
+ this.comboInput?.nativeElement.focus();
34458
+ }
34459
+ }
34460
+ /** @hidden @internal */
34461
+ handleClosed() {
34462
+ this.closed.emit({ owner: this });
34463
+ }
34464
+ /** @hidden @internal */
34465
+ handleKeyDown(event) {
34466
+ if (event.key === 'ArrowUp' || event.key === 'Up') {
34467
+ event.preventDefault();
34468
+ event.stopPropagation();
34469
+ this.close();
34470
+ }
34471
+ }
34472
+ /** @hidden @internal */
34473
+ registerOnChange(fn) {
34474
+ this._onChangeCallback = fn;
34475
+ }
34476
+ /** @hidden @internal */
34477
+ registerOnTouched(fn) {
34478
+ this._onTouchedCallback = fn;
34479
+ }
34480
+ /** @hidden @internal */
34481
+ setDisabledState(isDisabled) {
34482
+ this.disabled = isDisabled;
34483
+ }
34484
+ /** @hidden @internal */
34485
+ onClick(event) {
34486
+ event.stopPropagation();
34487
+ event.preventDefault();
34488
+ if (!this.disabled) {
34489
+ this.toggle();
34490
+ }
34491
+ }
34492
+ /** @hidden @internal */
34493
+ onBlur() {
34494
+ if (this.collapsed) {
34495
+ this._onTouchedCallback();
34496
+ if (this.ngControl && this.ngControl.invalid) {
34497
+ this.valid = IgxComboState.INVALID;
34498
+ }
34499
+ else {
34500
+ this.valid = IgxComboState.INITIAL;
34501
+ }
34502
+ }
34503
+ }
34504
+ /** if there is a valueKey - map the keys to data items, else - just return the keys */
34505
+ convertKeysToItems(keys) {
34506
+ if (this.comboAPI.valueKey === null) {
34507
+ return keys;
34508
+ }
34509
+ // map keys vs. filter data to retain the order of the selected items
34510
+ return keys.map(key => this.data.find(entry => entry[this.valueKey] === key)).filter(e => e !== undefined);
34511
+ }
34512
+ checkMatch() {
34513
+ const itemMatch = this.filteredData.some(this.findMatch);
34514
+ this.customValueFlag = this.allowCustomValues && !itemMatch;
34515
+ }
34516
+ manageRequiredAsterisk() {
34517
+ if (this.ngControl && this.ngControl.control.validator) {
34518
+ // Run the validation with empty object to check if required is enabled.
34519
+ const error = this.ngControl.control.validator({});
34520
+ this.inputGroup.isRequired = error && error.required;
34521
+ }
34522
+ }
34523
+ /** Contains key-value pairs of the selected valueKeys and their resp. displayKeys */
34524
+ registerRemoteEntries(ids, add = true) {
34525
+ if (add) {
34526
+ const selection = this.getValueDisplayPairs(ids);
34527
+ for (const entry of selection) {
34528
+ this._remoteSelection[entry[this.valueKey]] = entry[this.displayKey];
34529
+ }
34530
+ }
34531
+ else {
34532
+ for (const entry of ids) {
34533
+ delete this._remoteSelection[entry];
34534
+ }
34535
+ }
34536
+ }
34537
+ /**
34538
+ * For `id: any[]` returns a mapped `{ [combo.valueKey]: any, [combo.displayKey]: any }[]`
34539
+ */
34540
+ getValueDisplayPairs(ids) {
34541
+ return this.data.filter(entry => ids.indexOf(entry[this.valueKey]) > -1).map(e => ({
34542
+ [this.valueKey]: e[this.valueKey],
34543
+ [this.displayKey]: e[this.displayKey]
34544
+ }));
34545
+ }
34546
+ getRemoteSelection(newSelection, oldSelection) {
34547
+ if (!newSelection.length) {
34548
+ // If new selection is empty, clear all items
34549
+ this.registerRemoteEntries(oldSelection, false);
34550
+ return '';
34551
+ }
34552
+ const removedItems = oldSelection.filter(e => newSelection.indexOf(e) < 0);
34553
+ const addedItems = newSelection.filter(e => oldSelection.indexOf(e) < 0);
34554
+ this.registerRemoteEntries(addedItems);
34555
+ this.registerRemoteEntries(removedItems, false);
34556
+ return Object.keys(this._remoteSelection).map(e => this._remoteSelection[e]).join(', ');
34557
+ }
34558
+ }
34559
+ 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 });
34560
+ 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 });
34561
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboBaseDirective, decorators: [{
34562
+ type: Directive
34563
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: IgxComboAPIService }, { type: IgxIconService }, { type: undefined, decorators: [{
34564
+ type: Optional
34565
+ }, {
34566
+ type: Inject,
34567
+ args: [DisplayDensityToken]
34568
+ }] }, { type: undefined, decorators: [{
34569
+ type: Optional
34570
+ }, {
34571
+ type: Inject,
34572
+ args: [IGX_INPUT_GROUP_TYPE]
34573
+ }] }, { type: i0.Injector, decorators: [{
34574
+ type: Optional
34575
+ }] }]; }, propDecorators: { overlaySettings: [{
34576
+ type: Input
34577
+ }], id: [{
34578
+ type: HostBinding,
34579
+ args: ['attr.id']
34580
+ }, {
34581
+ type: Input
34582
+ }], width: [{
34583
+ type: HostBinding,
34584
+ args: ['style.width']
34585
+ }, {
34586
+ type: Input
34587
+ }], allowCustomValues: [{
34588
+ type: Input
34589
+ }], itemsMaxHeight: [{
34590
+ type: Input
34591
+ }], itemHeight: [{
34592
+ type: Input
34593
+ }], itemsWidth: [{
34594
+ type: Input
34595
+ }], placeholder: [{
34596
+ type: Input
34597
+ }], data: [{
34598
+ type: Input
34599
+ }], valueKey: [{
34600
+ type: Input
34601
+ }], displayKey: [{
34602
+ type: Input
34603
+ }], groupKey: [{
34604
+ type: Input
34605
+ }], groupSortingDirection: [{
34606
+ type: Input
34607
+ }], ariaLabelledBy: [{
34608
+ type: Input
34609
+ }, {
34610
+ type: HostBinding,
34611
+ args: ['attr.aria-labelledby']
34612
+ }], cssClass: [{
34613
+ type: HostBinding,
34614
+ args: ['class.igx-combo']
34615
+ }], role: [{
34616
+ type: HostBinding,
34617
+ args: [`attr.role`]
34618
+ }], ariaExpanded: [{
34619
+ type: HostBinding,
34620
+ args: ['attr.aria-expanded']
34621
+ }], hasPopUp: [{
34622
+ type: HostBinding,
34623
+ args: ['attr.aria-haspopup']
34624
+ }], ariaOwns: [{
34625
+ type: HostBinding,
34626
+ args: ['attr.aria-owns']
34627
+ }], disabled: [{
34628
+ type: Input
34629
+ }], type: [{
34630
+ type: Input
34631
+ }], selectionChanging: [{
34632
+ type: Output
34633
+ }], opening: [{
34634
+ type: Output
34635
+ }], opened: [{
34636
+ type: Output
34637
+ }], closing: [{
34638
+ type: Output
34639
+ }], closed: [{
34640
+ type: Output
34641
+ }], addition: [{
34642
+ type: Output
34643
+ }], searchInputUpdate: [{
34644
+ type: Output
34645
+ }], dataPreLoad: [{
34646
+ type: Output
34647
+ }], itemTemplate: [{
34648
+ type: ContentChild,
34649
+ args: [IgxComboItemDirective, { read: TemplateRef }]
34650
+ }], headerTemplate: [{
34651
+ type: ContentChild,
34652
+ args: [IgxComboHeaderDirective, { read: TemplateRef }]
34653
+ }], footerTemplate: [{
34654
+ type: ContentChild,
34655
+ args: [IgxComboFooterDirective, { read: TemplateRef }]
34656
+ }], headerItemTemplate: [{
34657
+ type: ContentChild,
34658
+ args: [IgxComboHeaderItemDirective, { read: TemplateRef }]
34659
+ }], addItemTemplate: [{
34660
+ type: ContentChild,
34661
+ args: [IgxComboAddItemDirective, { read: TemplateRef }]
34662
+ }], emptyTemplate: [{
34663
+ type: ContentChild,
34664
+ args: [IgxComboEmptyDirective, { read: TemplateRef }]
34665
+ }], toggleIconTemplate: [{
34666
+ type: ContentChild,
34667
+ args: [IgxComboToggleIconDirective, { read: TemplateRef }]
34668
+ }], clearIconTemplate: [{
34669
+ type: ContentChild,
34670
+ args: [IgxComboClearIconDirective, { read: TemplateRef }]
34671
+ }], inputGroup: [{
34672
+ type: ViewChild,
34673
+ args: ['inputGroup', { read: IgxInputGroupComponent, static: true }]
34674
+ }], comboInput: [{
34675
+ type: ViewChild,
34676
+ args: ['comboInput', { read: IgxInputDirective, static: true }]
34677
+ }], searchInput: [{
34678
+ type: ViewChild,
34679
+ args: ['searchInput']
34680
+ }], virtualScrollContainer: [{
34681
+ type: ViewChild,
34682
+ args: [IgxForOfDirective, { static: true }]
34683
+ }], virtDir: [{
34684
+ type: ViewChild,
34685
+ args: [IgxForOfDirective, { read: IgxForOfDirective, static: true }]
34686
+ }], dropdownContainer: [{
34687
+ type: ViewChild,
34688
+ args: ['dropdownItemContainer', { static: true }]
34689
+ }], primitiveTemplate: [{
34690
+ type: ViewChild,
34691
+ args: ['primitive', { read: TemplateRef, static: true }]
34692
+ }], complexTemplate: [{
34693
+ type: ViewChild,
34694
+ args: ['complex', { read: TemplateRef, static: true }]
34695
+ }], onArrowDown: [{
34696
+ type: HostListener,
34697
+ args: ['keydown.ArrowDown', ['$event']]
34698
+ }, {
34699
+ type: HostListener,
34700
+ args: ['keydown.Alt.ArrowDown', ['$event']]
34701
+ }] } });
34702
+
34703
+ /**
34704
+ * @hidden
34705
+ */
34706
+ class IgxComboAddItemComponent extends IgxComboItemComponent {
34707
+ get selected() {
34708
+ return false;
34709
+ }
34710
+ set selected(value) {
34711
+ }
34712
+ /**
34713
+ * @inheritdoc
34714
+ */
34715
+ clicked(event) {
34716
+ this.comboAPI.disableTransitions = false;
34717
+ this.comboAPI.add_custom_item();
34718
+ }
34719
+ }
34720
+ IgxComboAddItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboAddItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
34721
+ 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 });
34722
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboAddItemComponent, decorators: [{
34723
+ type: Component,
34724
+ args: [{
34725
+ selector: 'igx-combo-add-item',
34726
+ template: '<ng-content></ng-content>',
34727
+ providers: [{ provide: IgxComboItemComponent, useExisting: IgxComboAddItemComponent }]
34728
+ }]
34729
+ }] });
34730
+
34731
+ /** @hidden */
34732
+ class IgxComboDropDownComponent extends IgxDropDownComponent {
34733
+ constructor(elementRef, cdr, selection, combo, comboAPI, _displayDensityOptions) {
34734
+ super(elementRef, cdr, selection, _displayDensityOptions);
34735
+ this.elementRef = elementRef;
34736
+ this.cdr = cdr;
34737
+ this.selection = selection;
34738
+ this.combo = combo;
34739
+ this.comboAPI = comboAPI;
34740
+ this._displayDensityOptions = _displayDensityOptions;
34741
+ /** @hidden @internal */
34742
+ this.singleMode = false;
34743
+ /**
34744
+ * @hidden
34745
+ * @internal
34746
+ */
34747
+ this.children = null;
34748
+ this.scrollHandler = () => {
34749
+ this.comboAPI.disableTransitions = true;
34750
+ };
34751
+ }
34752
+ /** @hidden @internal */
34753
+ get scrollContainer() {
34754
+ return this.virtDir.dc.location.nativeElement;
34755
+ }
34756
+ get isScrolledToLast() {
34757
+ const scrollTop = this.virtDir.scrollPosition;
34758
+ const scrollHeight = this.virtDir.getScroll().scrollHeight;
34759
+ return Math.floor(scrollTop + this.virtDir.igxForContainerSize) === scrollHeight;
34760
+ }
34761
+ get lastVisibleIndex() {
34762
+ return this.combo.totalItemCount ?
34763
+ Math.floor(this.combo.itemsMaxHeight / this.combo.itemHeight) :
34764
+ this.items.length - 1;
34765
+ }
34766
+ get sortedChildren() {
34767
+ if (this.children !== undefined) {
34768
+ return this.children.toArray()
34769
+ .sort((a, b) => a.index - b.index);
34770
+ }
34771
+ return null;
34772
+ }
34773
+ /**
34774
+ * Get all non-header items
34775
+ *
34776
+ * ```typescript
34777
+ * let myDropDownItems = this.dropdown.items;
34778
+ * ```
34779
+ */
34780
+ get items() {
34781
+ const items = [];
34782
+ if (this.children !== undefined) {
34783
+ const sortedChildren = this.sortedChildren;
34784
+ for (const child of sortedChildren) {
34785
+ if (!child.isHeader) {
34786
+ items.push(child);
34787
+ }
34788
+ }
34789
+ }
34790
+ return items;
34791
+ }
34792
+ /**
34793
+ * @hidden @internal
34794
+ */
34795
+ onFocus() {
34796
+ this.focusedItem = this._focusedItem || this.items[0];
34797
+ }
34798
+ /**
34799
+ * @hidden @internal
34800
+ */
34801
+ onBlur(_evt) {
34802
+ this.focusedItem = null;
34803
+ }
34804
+ /**
34805
+ * @hidden @internal
34806
+ */
34807
+ onToggleOpened() {
34808
+ this.opened.emit();
34809
+ }
34810
+ /**
34811
+ * @hidden
34812
+ */
34813
+ navigateFirst() {
34814
+ this.navigateItem(this.virtDir.igxForOf.findIndex(e => !e.isHeader));
34815
+ }
34816
+ /**
34817
+ * @hidden
34818
+ */
34819
+ navigatePrev() {
34820
+ if (this._focusedItem && this._focusedItem.index === 0 && this.virtDir.state.startIndex === 0) {
34821
+ this.combo.focusSearchInput(false);
34822
+ }
34823
+ else {
34824
+ super.navigatePrev();
34825
+ }
34826
+ }
34827
+ /**
34828
+ * @hidden
34829
+ */
34830
+ navigateNext() {
34831
+ const lastIndex = this.combo.totalItemCount ? this.combo.totalItemCount - 1 : this.virtDir.igxForOf.length - 1;
34832
+ if (this._focusedItem && this._focusedItem.index === lastIndex) {
34833
+ this.focusAddItemButton();
34834
+ }
34835
+ else {
34836
+ super.navigateNext();
34837
+ }
34838
+ }
34839
+ /**
34840
+ * @hidden @internal
34841
+ */
34842
+ selectItem(item) {
34843
+ if (item === null || item === undefined) {
34844
+ return;
34845
+ }
34846
+ this.comboAPI.set_selected_item(item.itemID);
34847
+ this._focusedItem = item;
34848
+ }
34849
+ /**
34850
+ * @hidden @internal
34851
+ */
34852
+ updateScrollPosition() {
34853
+ this.virtDir.getScroll().scrollTop = this._scrollPosition;
34854
+ }
34855
+ /**
34856
+ * @hidden @internal
34857
+ */
34858
+ onItemActionKey(key) {
34859
+ switch (key) {
34860
+ case DropDownActionKey.ENTER:
34861
+ this.handleEnter();
34862
+ break;
34863
+ case DropDownActionKey.SPACE:
34864
+ this.handleSpace();
34865
+ break;
34866
+ case DropDownActionKey.ESCAPE:
34867
+ this.close();
34868
+ }
34869
+ }
34870
+ ngAfterViewInit() {
34871
+ this.virtDir.getScroll().addEventListener('scroll', this.scrollHandler);
34872
+ }
34873
+ /**
34874
+ * @hidden @internal
34875
+ */
34876
+ ngOnDestroy() {
34877
+ this.virtDir.getScroll().removeEventListener('scroll', this.scrollHandler);
34878
+ this.destroy$.next(true);
34879
+ this.destroy$.complete();
34880
+ }
34881
+ scrollToHiddenItem(_newItem) { }
34882
+ handleEnter() {
34883
+ if (this.isAddItemFocused()) {
34884
+ this.combo.addItemToCollection();
34885
+ return;
34886
+ }
34887
+ if (this.singleMode && this.focusedItem) {
34888
+ this.combo.select(this.focusedItem.itemID);
34889
+ }
34890
+ this.close();
34891
+ }
34892
+ handleSpace() {
34893
+ if (this.isAddItemFocused()) {
34894
+ return;
34895
+ }
34896
+ else {
34897
+ this.selectItem(this.focusedItem);
34898
+ }
34899
+ }
34900
+ isAddItemFocused() {
34901
+ return this.focusedItem instanceof IgxComboAddItemComponent;
34902
+ }
34903
+ focusAddItemButton() {
34904
+ if (this.combo.isAddButtonVisible()) {
34905
+ this.focusedItem = this.items[this.items.length - 1];
34906
+ }
34907
+ }
34908
+ }
34909
+ 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 });
34910
+ 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"] }] });
34911
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboDropDownComponent, decorators: [{
34912
+ type: Component,
34913
+ 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" }]
34914
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: undefined, decorators: [{
34915
+ type: Inject,
34916
+ args: [IGX_COMBO_COMPONENT]
34917
+ }] }, { type: IgxComboAPIService }, { type: undefined, decorators: [{
34918
+ type: Optional
34919
+ }, {
34920
+ type: Inject,
34921
+ args: [DisplayDensityToken]
34922
+ }] }]; }, propDecorators: { singleMode: [{
34923
+ type: Input
34924
+ }], children: [{
34925
+ type: ContentChildren,
34926
+ args: [IgxComboItemComponent, { descendants: true }]
34927
+ }] } });
34928
+
34929
+ /**
34930
+ * @hidden
34931
+ */
34932
+ class IgxComboFilteringPipe {
34933
+ transform(collection, searchValue, displayKey, filteringOptions, shouldFilter = false) {
34934
+ if (!collection) {
34935
+ return [];
34936
+ }
34937
+ if (!searchValue || !shouldFilter) {
34938
+ return collection;
34939
+ }
34940
+ else {
34941
+ const searchTerm = filteringOptions.caseSensitive ? searchValue.trim() : searchValue.toLowerCase().trim();
34942
+ if (displayKey != null) {
34943
+ return collection.filter(e => filteringOptions.caseSensitive ? e[displayKey].includes(searchTerm) :
34944
+ e[displayKey].toString().toLowerCase().includes(searchTerm));
34945
+ }
34946
+ else {
34947
+ return collection.filter(e => filteringOptions.caseSensitive ? e.includes(searchTerm) :
34948
+ e.toString().toLowerCase().includes(searchTerm));
34949
+ }
34950
+ }
34951
+ }
34952
+ }
34953
+ IgxComboFilteringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboFilteringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
34954
+ IgxComboFilteringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboFilteringPipe, name: "comboFiltering" });
34955
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboFilteringPipe, decorators: [{
34956
+ type: Pipe,
34957
+ args: [{
34958
+ name: 'comboFiltering'
34959
+ }]
34960
+ }] });
34961
+ /**
34962
+ * @hidden
34963
+ */
34964
+ class IgxComboGroupingPipe {
34965
+ constructor(combo) {
34966
+ this.combo = combo;
34967
+ }
34968
+ transform(collection, groupKey, valueKey, sortingDirection) {
34969
+ this.combo.filteredData = collection;
34970
+ if ((!groupKey && groupKey !== 0) || !collection.length) {
34971
+ return collection;
34972
+ }
34973
+ const sorted = DataUtil.sort(cloneArray(collection), [{
34974
+ fieldName: groupKey,
34975
+ dir: sortingDirection,
34976
+ ignoreCase: true,
34977
+ strategy: DefaultSortingStrategy.instance()
34978
+ }]);
34979
+ const data = cloneArray(sorted);
34980
+ let inserts = 0;
34981
+ let currentHeader = null;
34982
+ for (let i = 0; i < sorted.length; i++) {
34983
+ let insertFlag = 0;
34984
+ if (currentHeader !== sorted[i][groupKey]) {
34985
+ currentHeader = sorted[i][groupKey];
34986
+ insertFlag = 1;
34987
+ }
34988
+ if (insertFlag) {
34989
+ data.splice(i + inserts, 0, {
34990
+ [valueKey]: currentHeader,
34991
+ [groupKey]: currentHeader,
34992
+ isHeader: true
34993
+ });
34994
+ inserts++;
34995
+ }
34996
+ }
34997
+ return data;
34998
+ }
34999
+ }
35000
+ 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 });
35001
+ IgxComboGroupingPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboGroupingPipe, name: "comboGrouping" });
35002
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboGroupingPipe, decorators: [{
35003
+ type: Pipe,
35004
+ args: [{ name: 'comboGrouping' }]
35005
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
35006
+ type: Inject,
35007
+ args: [IGX_COMBO_COMPONENT]
35008
+ }] }]; } });
35009
+
35010
+ /**
35011
+ * When called with sets A & B, returns A - B (as array);
35012
+ *
35013
+ * @hidden
35014
+ */
35015
+ const diffInSets = (set1, set2) => {
35016
+ const results = [];
35017
+ set1.forEach(entry => {
35018
+ if (!set2.has(entry)) {
35019
+ results.push(entry);
35020
+ }
35021
+ });
35022
+ return results;
35023
+ };
35024
+ /**
35025
+ * Represents a drop-down list that provides editable functionalities, allowing users to choose an option from a predefined list.
35026
+ *
35027
+ * @igxModule IgxComboModule
35028
+ * @igxTheme igx-combo-theme
35029
+ * @igxKeywords combobox, combo selection
35030
+ * @igxGroup Grids & Lists
35031
+ *
35032
+ * @remarks
35033
+ * It provides the ability to filter items as well as perform selection with the provided data.
35034
+ * Additionally, it exposes keyboard navigation and custom styling capabilities.
35035
+ * @example
35036
+ * ```html
35037
+ * <igx-combo [itemsMaxHeight]="250" [data]="locationData"
35038
+ * [displayKey]="'field'" [valueKey]="'field'"
35039
+ * placeholder="Location(s)" searchPlaceholder="Search...">
35040
+ * </igx-combo>
35041
+ * ```
35042
+ */
35043
+ class IgxComboComponent extends IgxComboBaseDirective {
35044
+ constructor(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector) {
35045
+ super(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector);
35046
+ this.elementRef = elementRef;
35047
+ this.cdr = cdr;
35048
+ this.selectionService = selectionService;
35049
+ this.comboAPI = comboAPI;
35050
+ this._iconService = _iconService;
35051
+ this._displayDensityOptions = _displayDensityOptions;
35052
+ this._inputGroupType = _inputGroupType;
35053
+ this._injector = _injector;
35054
+ /**
35055
+ * Defines whether the caseSensitive icon should be shown in the search input
35056
+ *
35057
+ * ```typescript
35058
+ * // get
35059
+ * let myComboShowSearchCaseIcon = this.combo.showSearchCaseIcon;
35060
+ * ```
35061
+ *
35062
+ * ```html
35063
+ * <!--set-->
35064
+ * <igx-combo [showSearchCaseIcon]='true'></igx-combo>
35065
+ * ```
35066
+ */
35067
+ this.showSearchCaseIcon = false;
35068
+ /**
35069
+ * An @Input property that controls whether the combo's search box
35070
+ * should be focused after the `opened` event is called
35071
+ * When `false`, the combo's list item container will be focused instead
35072
+ */
35073
+ this.autoFocusSearch = true;
35074
+ /**
35075
+ * An @Input property that enabled/disables filtering in the list. The default is `true`.
35076
+ * ```html
35077
+ * <igx-combo [filterable]="false">
35078
+ * ```
35079
+ */
35080
+ this.filterable = true;
35081
+ /**
35082
+ * Defines the placeholder value for the combo dropdown search field
35083
+ *
35084
+ * ```typescript
35085
+ * // get
35086
+ * let myComboSearchPlaceholder = this.combo.searchPlaceholder;
35087
+ * ```
35088
+ *
35089
+ * ```html
35090
+ * <!--set-->
35091
+ * <igx-combo [searchPlaceholder]='newPlaceHolder'></igx-combo>
35092
+ * ```
35093
+ */
35094
+ this.searchPlaceholder = 'Enter a Search Term';
35095
+ /**
35096
+ * @hidden @internal
35097
+ */
35098
+ this.filteringLogic = FilteringLogic.Or;
35099
+ this.stringFilters = IgxStringFilteringOperand;
35100
+ this.booleanFilters = IgxBooleanFilteringOperand;
35101
+ this._prevInputValue = '';
35102
+ this.comboAPI.register(this);
35103
+ }
35104
+ /**
35105
+ * @hidden @internal
35106
+ */
35107
+ get inputEmpty() {
35108
+ return !this.value && !this.placeholder;
35109
+ }
35110
+ /** @hidden @internal */
35111
+ get filteredData() {
35112
+ return this.filterable ? this._filteredData : this.data;
35113
+ }
35114
+ /** @hidden @internal */
35115
+ set filteredData(val) {
35116
+ this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;
34697
35117
  this.checkMatch();
34698
35118
  }
35119
+ /** @hidden @internal */
35120
+ get displaySearchInput() {
35121
+ return this.filterable || this.allowCustomValues;
35122
+ }
34699
35123
  /**
34700
35124
  * @hidden @internal
34701
35125
  */
34702
35126
  handleKeyUp(event) {
35127
+ // TODO: use PlatformUtil for keyboard navigation
34703
35128
  if (event.key === 'ArrowDown' || event.key === 'Down') {
34704
35129
  this.dropdown.focusedItem = this.dropdown.items[0];
34705
35130
  this.dropdownContainer.nativeElement.focus();
@@ -34708,72 +35133,6 @@ class IgxComboComponent extends DisplayDensityBase {
34708
35133
  this.toggle();
34709
35134
  }
34710
35135
  }
34711
- /**
34712
- * @hidden @internal
34713
- */
34714
- handleKeyDown(event) {
34715
- if (event.key === 'ArrowUp' || event.key === 'Up') {
34716
- event.preventDefault();
34717
- event.stopPropagation();
34718
- this.close();
34719
- }
34720
- }
34721
- /**
34722
- * @hidden @internal
34723
- */
34724
- handleInputChange(event) {
34725
- if (event !== undefined) {
34726
- const args = {
34727
- searchText: event,
34728
- owner: this,
34729
- cancel: false
34730
- };
34731
- this.searchInputUpdate.emit(args);
34732
- if (args.cancel) {
34733
- this.filterValue = null;
34734
- }
34735
- }
34736
- this.checkMatch();
34737
- }
34738
- /**
34739
- * @hidden @internal
34740
- */
34741
- get dataType() {
34742
- if (this.displayKey) {
34743
- return DataTypes.COMPLEX;
34744
- }
34745
- return DataTypes.PRIMITIVE;
34746
- }
34747
- /**
34748
- * @hidden @internal
34749
- */
34750
- get isRemote() {
34751
- return this.totalItemCount > 0 &&
34752
- this.valueKey &&
34753
- this.dataType === DataTypes.COMPLEX;
34754
- }
34755
- /**
34756
- * Returns if the specified itemID is selected
34757
- *
34758
- * @hidden
34759
- * @internal
34760
- */
34761
- isItemSelected(item) {
34762
- return this.selection.is_item_selected(this.id, item);
34763
- }
34764
- /**
34765
- * Triggers change detection on the combo view
34766
- */
34767
- triggerCheck() {
34768
- this.cdr.detectChanges();
34769
- }
34770
- /**
34771
- * @hidden @internal
34772
- */
34773
- isAddButtonVisible() {
34774
- // This should always return a boolean value. If this.searchValue was '', it returns '' instead of false;
34775
- return this.searchValue !== '' && this.customValueFlag;
34776
- }
34777
35136
  /**
34778
35137
  * @hidden @internal
34779
35138
  */
@@ -34785,140 +35144,15 @@ class IgxComboComponent extends DisplayDensityBase {
34785
35144
  this.deselectAllItems();
34786
35145
  }
34787
35146
  }
34788
- /**
34789
- * @hidden @internal
34790
- */
34791
- addItemToCollection() {
34792
- if (!this.searchValue) {
34793
- return;
34794
- }
34795
- const newValue = this.searchValue.trim();
34796
- const addedItem = this.displayKey ? {
34797
- [this.valueKey]: newValue,
34798
- [this.displayKey]: newValue
34799
- } : newValue;
34800
- if (this.groupKey) {
34801
- Object.assign(addedItem, { [this.groupKey]: this.defaultFallbackGroup });
34802
- }
34803
- // expose shallow copy instead of this.data in event args so this.data can't be mutated
34804
- const oldCollection = [...this.data];
34805
- const newCollection = [...this.data, addedItem];
34806
- const args = {
34807
- oldCollection, addedItem, newCollection, owner: this, cancel: false
34808
- };
34809
- this.addition.emit(args);
34810
- if (args.cancel) {
34811
- return;
34812
- }
34813
- this.data.push(args.addedItem);
34814
- // trigger re-render
34815
- this.data = cloneArray(this.data);
34816
- this.selectItems(this.valueKey !== null && this.valueKey !== undefined ?
34817
- [args.addedItem[this.valueKey]] : [args.addedItem], false);
34818
- this.customValueFlag = false;
34819
- this.searchInput.nativeElement.focus();
34820
- this.dropdown.focusedItem = null;
34821
- this.virtDir.scrollTo(0);
34822
- }
34823
- /**
34824
- * @hidden @internal
34825
- */
34826
- focusSearchInput(opening) {
34827
- if (this.displaySearchInput && this.searchInput) {
34828
- this.searchInput.nativeElement.focus();
34829
- }
34830
- else {
34831
- if (opening) {
34832
- this.dropdownContainer.nativeElement.focus();
34833
- }
34834
- else {
34835
- this.comboInput.nativeElement.focus();
34836
- this.toggle();
34837
- }
34838
- }
34839
- }
34840
- /**
34841
- * @hidden @internal
34842
- */
34843
- onBlur() {
34844
- if (this.collapsed) {
34845
- this._onTouchedCallback();
34846
- if (this.ngControl && this.ngControl.invalid) {
34847
- this.valid = IgxComboState.INVALID;
34848
- }
34849
- else {
34850
- this.valid = IgxComboState.INITIAL;
34851
- }
34852
- }
34853
- }
34854
- /**
34855
- * @hidden @internal
34856
- */
34857
- ngOnInit() {
34858
- this.ngControl = this._injector.get(NgControl, null);
34859
- const targetElement = this.elementRef.nativeElement;
34860
- this._overlaySettings = {
34861
- target: targetElement,
34862
- scrollStrategy: new AbsoluteScrollStrategy(),
34863
- positionStrategy: new AutoPositionStrategy(),
34864
- modal: false,
34865
- closeOnOutsideClick: true,
34866
- excludeFromOutsideClick: [targetElement]
34867
- };
34868
- this.selection.set(this.id, new Set());
34869
- this._iconService.addSvgIconFromText(caseSensitive.name, caseSensitive.value, 'imx-icons');
34870
- }
34871
- /**
34872
- * @hidden @internal
34873
- */
34874
- ngAfterViewInit() {
34875
- this.filteredData = [...this.data];
34876
- if (this.ngControl) {
34877
- this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.onStatusChanged);
34878
- this.manageRequiredAsterisk();
34879
- this.cdr.detectChanges();
34880
- }
34881
- this.virtDir.chunkPreload.pipe(takeUntil(this.destroy$)).subscribe((e) => {
34882
- const eventArgs = Object.assign({}, e, { owner: this });
34883
- this.dataPreLoad.emit(eventArgs);
34884
- });
34885
- }
34886
- /**
34887
- * @hidden @internal
34888
- */
34889
- ngOnDestroy() {
34890
- this.destroy$.next();
34891
- this.destroy$.complete();
34892
- this.comboAPI.clear();
34893
- this.selection.clear(this.id);
34894
- }
34895
35147
  /**
34896
35148
  * @hidden @internal
34897
35149
  */
34898
35150
  writeValue(value) {
34899
35151
  const selection = Array.isArray(value) ? value : [];
34900
- const oldSelection = this.selectedItems();
34901
- this.selection.select_items(this.id, selection, true);
35152
+ const oldSelection = this.selection;
35153
+ this.selectionService.select_items(this.id, selection, true);
34902
35154
  this.cdr.markForCheck();
34903
- this._value = this.createDisplayText(this.selectedItems(), oldSelection);
34904
- }
34905
- /**
34906
- * @hidden @internal
34907
- */
34908
- registerOnChange(fn) {
34909
- this._onChangeCallback = fn;
34910
- }
34911
- /**
34912
- * @hidden @internal
34913
- */
34914
- registerOnTouched(fn) {
34915
- this._onTouchedCallback = fn;
34916
- }
34917
- /**
34918
- * @hidden @internal
34919
- */
34920
- setDisabledState(isDisabled) {
34921
- this.disabled = isDisabled;
35155
+ this._value = this.createDisplayText(this.selection, oldSelection);
34922
35156
  }
34923
35157
  /**
34924
35158
  * @hidden
@@ -34926,19 +35160,6 @@ class IgxComboComponent extends DisplayDensityBase {
34926
35160
  getEditElement() {
34927
35161
  return this.comboInput.nativeElement;
34928
35162
  }
34929
- /**
34930
- * @hidden @internal
34931
- */
34932
- get template() {
34933
- this._dataType = this.dataType;
34934
- if (this.itemTemplate) {
34935
- return this.itemTemplate;
34936
- }
34937
- if (this._dataType === DataTypes.COMPLEX) {
34938
- return this.complexTemplate;
34939
- }
34940
- return this.primitiveTemplate;
34941
- }
34942
35163
  /**
34943
35164
  * @hidden @internal
34944
35165
  */
@@ -34963,75 +35184,18 @@ class IgxComboComponent extends DisplayDensityBase {
34963
35184
  }
34964
35185
  event.stopPropagation();
34965
35186
  }
34966
- /**
34967
- * A method that opens/closes the combo.
34968
- *
34969
- * ```html
34970
- * <button (click)="combo.toggle()">Toggle Combo</button>
34971
- * <igx-combo #combo></igx-combo>
34972
- * ```
34973
- */
34974
- toggle() {
34975
- const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);
34976
- this.dropdown.toggle(overlaySettings);
34977
- }
34978
- /**
34979
- * A method that opens the combo.
34980
- *
34981
- * ```html
34982
- * <button (click)="combo.open()">Open Combo</button>
34983
- * <igx-combo #combo></igx-combo>
34984
- * ```
34985
- */
34986
- open() {
34987
- const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);
34988
- this.dropdown.open(overlaySettings);
34989
- }
34990
- /**
34991
- * A method that closes the combo.
34992
- *
34993
- * ```html
34994
- * <button (click)="combo.close()">Close Combo</button>
34995
- * <igx-combo #combo></igx-combo>
34996
- * ```
34997
- */
34998
- close() {
34999
- this.dropdown.close();
35000
- }
35001
- /**
35002
- * Gets drop down state.
35003
- *
35004
- * ```typescript
35005
- * let state = this.combo.collapsed;
35006
- * ```
35007
- */
35008
- get collapsed() {
35009
- return this.dropdown.collapsed;
35010
- }
35011
- /**
35012
- * Get current selection state
35013
- *
35014
- * @returns Array of selected items
35015
- * ```typescript
35016
- * let selectedItems = this.combo.selectedItems();
35017
- * ```
35018
- */
35019
- selectedItems() {
35020
- const items = Array.from(this.selection.get(this.id));
35021
- return items;
35022
- }
35023
35187
  /**
35024
35188
  * Select defined items
35025
35189
  *
35026
35190
  * @param newItems new items to be selected
35027
35191
  * @param clearCurrentSelection if true clear previous selected items
35028
35192
  * ```typescript
35029
- * this.combo.selectItems(["New York", "New Jersey"]);
35193
+ * this.combo.select(["New York", "New Jersey"]);
35030
35194
  * ```
35031
35195
  */
35032
- selectItems(newItems, clearCurrentSelection, event) {
35196
+ select(newItems, clearCurrentSelection, event) {
35033
35197
  if (newItems) {
35034
- const newSelection = this.selection.add_items(this.id, newItems, clearCurrentSelection);
35198
+ const newSelection = this.selectionService.add_items(this.id, newItems, clearCurrentSelection);
35035
35199
  this.setSelection(newSelection, event);
35036
35200
  }
35037
35201
  }
@@ -35040,12 +35204,12 @@ class IgxComboComponent extends DisplayDensityBase {
35040
35204
  *
35041
35205
  * @param items items to deselected
35042
35206
  * ```typescript
35043
- * this.combo.deselectItems(["New York", "New Jersey"]);
35207
+ * this.combo.deselect(["New York", "New Jersey"]);
35044
35208
  * ```
35045
35209
  */
35046
- deselectItems(items, event) {
35210
+ deselect(items, event) {
35047
35211
  if (items) {
35048
- const newSelection = this.selection.delete_items(this.id, items);
35212
+ const newSelection = this.selectionService.delete_items(this.id, items);
35049
35213
  this.setSelection(newSelection, event);
35050
35214
  }
35051
35215
  }
@@ -35058,8 +35222,8 @@ class IgxComboComponent extends DisplayDensityBase {
35058
35222
  * ```
35059
35223
  */
35060
35224
  selectAllItems(ignoreFilter, event) {
35061
- const allVisible = this.selection.get_all_ids(ignoreFilter ? this.data : this.filteredData, this.valueKey);
35062
- const newSelection = this.selection.add_items(this.id, allVisible);
35225
+ const allVisible = this.selectionService.get_all_ids(ignoreFilter ? this.data : this.filteredData, this.valueKey);
35226
+ const newSelection = this.selectionService.add_items(this.id, allVisible);
35063
35227
  this.setSelection(newSelection, event);
35064
35228
  }
35065
35229
  /**
@@ -35071,9 +35235,9 @@ class IgxComboComponent extends DisplayDensityBase {
35071
35235
  * ```
35072
35236
  */
35073
35237
  deselectAllItems(ignoreFilter, event) {
35074
- let newSelection = this.selection.get_empty();
35238
+ let newSelection = this.selectionService.get_empty();
35075
35239
  if (this.filteredData.length !== this.data.length && !ignoreFilter) {
35076
- newSelection = this.selection.delete_items(this.id, this.selection.get_all_ids(this.filteredData, this.valueKey));
35240
+ newSelection = this.selectionService.delete_items(this.id, this.selectionService.get_all_ids(this.filteredData, this.valueKey));
35077
35241
  }
35078
35242
  this.setSelection(newSelection, event);
35079
35243
  }
@@ -35101,26 +35265,19 @@ class IgxComboComponent extends DisplayDensityBase {
35101
35265
  return;
35102
35266
  }
35103
35267
  if (select) {
35104
- this.selectItems([itemID], false, event);
35268
+ this.select([itemID], false, event);
35105
35269
  }
35106
35270
  else {
35107
- this.deselectItems([itemID], event);
35271
+ this.deselect([itemID], event);
35108
35272
  }
35109
35273
  }
35110
- /**
35111
- * Event handlers
35112
- *
35113
- * @hidden
35114
- * @internal
35115
- */
35116
- handleOpening(e) {
35117
- const args = { owner: this, event: e.event, cancel: e.cancel };
35118
- this.opening.emit(args);
35119
- e.cancel = args.cancel;
35120
- }
35121
35274
  /**
35122
35275
  * @hidden @internal
35123
35276
  */
35277
+ toggleCaseSensitive() {
35278
+ this.filteringOptions = { caseSensitive: !this.filteringOptions.caseSensitive };
35279
+ }
35280
+ /** @hidden @internal */
35124
35281
  handleOpened() {
35125
35282
  this.triggerCheck();
35126
35283
  // Disabling focus of the search input should happen only when drop down opens.
@@ -35134,36 +35291,26 @@ class IgxComboComponent extends DisplayDensityBase {
35134
35291
  }
35135
35292
  this.opened.emit({ owner: this });
35136
35293
  }
35137
- /**
35138
- * @hidden @internal
35139
- */
35140
- handleClosing(e) {
35141
- const args = { owner: this, event: e.event, cancel: e.cancel };
35142
- this.closing.emit(args);
35143
- e.cancel = args.cancel;
35144
- if (e.cancel) {
35145
- return;
35294
+ /** @hidden @internal */
35295
+ focusSearchInput(opening) {
35296
+ if (this.displaySearchInput && this.searchInput) {
35297
+ this.searchInput.nativeElement.focus();
35298
+ }
35299
+ else {
35300
+ if (opening) {
35301
+ this.dropdownContainer.nativeElement.focus();
35302
+ }
35303
+ else {
35304
+ this.comboInput.nativeElement.focus();
35305
+ this.toggle();
35306
+ }
35146
35307
  }
35147
- this.searchValue = '';
35148
- this.comboInput.nativeElement.focus();
35149
- }
35150
- /**
35151
- * @hidden @internal
35152
- */
35153
- handleClosed() {
35154
- this.closed.emit({ owner: this });
35155
- }
35156
- /**
35157
- * @hidden @internal
35158
- */
35159
- toggleCaseSensitive() {
35160
- this.filteringOptions = { caseSensitive: !this.filteringOptions.caseSensitive };
35161
35308
  }
35162
35309
  setSelection(newSelection, event) {
35163
- const removed = diffInSets(this.selection.get(this.id), newSelection);
35164
- const added = diffInSets(newSelection, this.selection.get(this.id));
35310
+ const removed = diffInSets(this.selectionService.get(this.id), newSelection);
35311
+ const added = diffInSets(newSelection, this.selectionService.get(this.id));
35165
35312
  const newSelectionAsArray = Array.from(newSelection);
35166
- const oldSelectionAsArray = Array.from(this.selection.get(this.id) || []);
35313
+ const oldSelectionAsArray = Array.from(this.selectionService.get(this.id) || []);
35167
35314
  const displayText = this.createDisplayText(newSelectionAsArray, oldSelectionAsArray);
35168
35315
  const args = {
35169
35316
  newSelection: newSelectionAsArray,
@@ -35177,7 +35324,7 @@ class IgxComboComponent extends DisplayDensityBase {
35177
35324
  };
35178
35325
  this.selectionChanging.emit(args);
35179
35326
  if (!args.cancel) {
35180
- this.selection.select_items(this.id, args.newSelection, true);
35327
+ this.selectionService.select_items(this.id, args.newSelection, true);
35181
35328
  if (displayText !== args.displayText) {
35182
35329
  this._value = args.displayText;
35183
35330
  }
@@ -35187,44 +35334,10 @@ class IgxComboComponent extends DisplayDensityBase {
35187
35334
  this._onChangeCallback(args.newSelection);
35188
35335
  }
35189
35336
  }
35190
- manageRequiredAsterisk() {
35191
- if (this.ngControl && this.ngControl.control.validator) {
35192
- // Run the validation with empty object to check if required is enabled.
35193
- const error = this.ngControl.control.validator({});
35194
- this.inputGroup.isRequired = error && error.required;
35195
- }
35196
- }
35197
- /** Contains key-value pairs of the selected valueKeys and their resp. displayKeys */
35198
- registerRemoteEntries(ids, add = true) {
35199
- if (add) {
35200
- const selection = this.getValueDisplayPairs(ids);
35201
- for (const entry of selection) {
35202
- this._remoteSelection[entry[this.valueKey]] = entry[this.displayKey];
35203
- }
35204
- }
35205
- else {
35206
- for (const entry of ids) {
35207
- delete this._remoteSelection[entry];
35208
- }
35209
- }
35210
- }
35211
- /**
35212
- * For `id: any[]` returns a mapped `{ [combo.valueKey]: any, [combo.displayKey]: any }[]`
35213
- */
35214
- getValueDisplayPairs(ids) {
35215
- return this.data.filter(entry => ids.indexOf(entry[this.valueKey]) > -1).map(e => ({
35216
- [this.valueKey]: e[this.valueKey],
35217
- [this.displayKey]: e[this.displayKey]
35218
- }));
35219
- }
35220
- checkMatch() {
35221
- const displayKey = this.displayKey;
35222
- const matchFn = (e) => {
35223
- const value = displayKey ? e[displayKey] : e;
35224
- return value.toString().toLowerCase() === this.searchValue.trim().toLowerCase();
35225
- };
35226
- const itemMatch = this.filteredData.some(matchFn);
35227
- this.customValueFlag = this.allowCustomValues && !itemMatch;
35337
+ createDisplayText(newSelection, oldSelection) {
35338
+ return this.isRemote
35339
+ ? this.getRemoteSelection(newSelection, oldSelection)
35340
+ : this.concatDisplayText(newSelection);
35228
35341
  }
35229
35342
  /** Returns a string that should be populated in the combo's text box */
35230
35343
  concatDisplayText(selection) {
@@ -35233,53 +35346,20 @@ class IgxComboComponent extends DisplayDensityBase {
35233
35346
  selection.join(', ');
35234
35347
  return value;
35235
35348
  }
35236
- /**
35237
- * Constructs the combo display value
35238
- * If remote, caches the key displayText
35239
- * If not, just combine the object.displayKeys
35240
- */
35241
- createDisplayText(newSelection, oldSelection) {
35242
- let value = '';
35243
- if (this.isRemote) {
35244
- if (newSelection.length) {
35245
- const removedItems = oldSelection.filter(e => newSelection.indexOf(e) < 0);
35246
- const addedItems = newSelection.filter(e => oldSelection.indexOf(e) < 0);
35247
- this.registerRemoteEntries(addedItems);
35248
- this.registerRemoteEntries(removedItems, false);
35249
- value = Object.keys(this._remoteSelection).map(e => this._remoteSelection[e]).join(', ');
35250
- }
35251
- else {
35252
- // If new selection is empty, clear all items
35253
- this.registerRemoteEntries(oldSelection, false);
35254
- }
35255
- }
35256
- else {
35257
- value = this.concatDisplayText(newSelection);
35258
- }
35259
- return value;
35260
- }
35261
- /** if there is a valueKey - map the keys to data items, else - just return the keys */
35262
- convertKeysToItems(keys) {
35263
- if (this.comboAPI.valueKey === null) {
35264
- return keys;
35265
- }
35266
- // map keys vs. filter data to retain the order of the selected items
35267
- return keys.map(key => this.data.find(entry => entry[this.valueKey] === key)).filter(e => e !== undefined);
35268
- }
35269
35349
  }
35270
35350
  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 });
35271
- 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: [
35351
+ 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: [
35272
35352
  IgxComboAPIService,
35273
35353
  { provide: IGX_COMBO_COMPONENT, useExisting: IgxComboComponent },
35274
35354
  { provide: NG_VALUE_ACCESSOR, useExisting: IgxComboComponent, multi: true }
35275
- ], 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; }) } });
35355
+ ], 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; }) } });
35276
35356
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxComboComponent, decorators: [{
35277
35357
  type: Component,
35278
35358
  args: [{ selector: 'igx-combo', providers: [
35279
35359
  IgxComboAPIService,
35280
35360
  { provide: IGX_COMBO_COMPONENT, useExisting: IgxComboComponent },
35281
35361
  { provide: NG_VALUE_ACCESSOR, useExisting: IgxComboComponent, multi: true }
35282
- ], 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" }]
35362
+ ], 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" }]
35283
35363
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: IgxComboAPIService }, { type: IgxIconService }, { type: undefined, decorators: [{
35284
35364
  type: Optional
35285
35365
  }, {
@@ -35292,143 +35372,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
35292
35372
  args: [IGX_INPUT_GROUP_TYPE]
35293
35373
  }] }, { type: i0.Injector, decorators: [{
35294
35374
  type: Optional
35295
- }] }]; }, propDecorators: { overlaySettings: [{
35296
- type: Input
35297
- }], inputGroup: [{
35298
- type: ViewChild,
35299
- args: ['inputGroup', { read: IgxInputGroupComponent, static: true }]
35300
- }], comboInput: [{
35301
- type: ViewChild,
35302
- args: ['comboInput', { read: IgxInputDirective, static: true }]
35303
- }], dropdown: [{
35304
- type: ViewChild,
35305
- args: [IgxComboDropDownComponent, { read: IgxComboDropDownComponent, static: true }]
35306
- }], searchInput: [{
35307
- type: ViewChild,
35308
- args: ['searchInput']
35309
- }], itemTemplate: [{
35310
- type: ContentChild,
35311
- args: [IgxComboItemDirective, { read: TemplateRef }]
35312
- }], headerTemplate: [{
35313
- type: ContentChild,
35314
- args: [IgxComboHeaderDirective, { read: TemplateRef }]
35315
- }], footerTemplate: [{
35316
- type: ContentChild,
35317
- args: [IgxComboFooterDirective, { read: TemplateRef }]
35318
- }], headerItemTemplate: [{
35319
- type: ContentChild,
35320
- args: [IgxComboHeaderItemDirective, { read: TemplateRef }]
35321
- }], addItemTemplate: [{
35322
- type: ContentChild,
35323
- args: [IgxComboAddItemDirective, { read: TemplateRef }]
35324
- }], emptyTemplate: [{
35325
- type: ContentChild,
35326
- args: [IgxComboEmptyDirective, { read: TemplateRef }]
35327
- }], toggleIconTemplate: [{
35328
- type: ContentChild,
35329
- args: [IgxComboToggleIconDirective, { read: TemplateRef }]
35330
- }], clearIconTemplate: [{
35331
- type: ContentChild,
35332
- args: [IgxComboClearIconDirective, { read: TemplateRef }]
35333
- }], virtualScrollContainer: [{
35334
- type: ViewChild,
35335
- args: [IgxForOfDirective, { static: true }]
35336
- }], selectionChanging: [{
35337
- type: Output
35338
- }], opening: [{
35339
- type: Output
35340
- }], opened: [{
35341
- type: Output
35342
- }], closing: [{
35343
- type: Output
35344
- }], closed: [{
35345
- type: Output
35346
- }], addition: [{
35347
- type: Output
35348
- }], searchInputUpdate: [{
35349
- type: Output
35350
- }], dataPreLoad: [{
35351
- type: Output
35352
- }], id: [{
35353
- type: HostBinding,
35354
- args: ['attr.id']
35355
- }, {
35356
- type: Input
35357
- }], width: [{
35358
- type: HostBinding,
35359
- args: ['style.width']
35360
- }, {
35361
- type: Input
35362
- }], cssClass: [{
35363
- type: HostBinding,
35364
- args: ['class.igx-combo']
35365
- }], role: [{
35366
- type: HostBinding,
35367
- args: [`attr.role`]
35368
- }], ariaExpanded: [{
35369
- type: HostBinding,
35370
- args: ['attr.aria-expanded']
35371
- }], hasPopUp: [{
35372
- type: HostBinding,
35373
- args: ['attr.aria-haspopup']
35374
- }], ariaOwns: [{
35375
- type: HostBinding,
35376
- args: ['attr.aria-owns']
35377
- }], allowCustomValues: [{
35378
- type: Input
35379
- }], itemsMaxHeight: [{
35380
- type: Input
35381
- }], itemsWidth: [{
35382
- type: Input
35383
- }], itemHeight: [{
35384
- type: Input
35385
- }], placeholder: [{
35375
+ }] }]; }, propDecorators: { showSearchCaseIcon: [{
35386
35376
  type: Input
35387
- }], searchPlaceholder: [{
35388
- type: Input
35389
- }], showSearchCaseIcon: [{
35390
- type: Input
35391
- }], data: [{
35392
- type: Input
35393
- }], valueKey: [{
35394
- type: Input
35395
- }], displayKey: [{
35396
- type: Input
35397
- }], groupKey: [{
35377
+ }], autoFocusSearch: [{
35398
35378
  type: Input
35399
35379
  }], filterable: [{
35400
35380
  type: Input
35401
- }], groupSortingDirection: [{
35402
- type: Input
35403
- }], ariaLabelledBy: [{
35404
- type: Input
35405
- }, {
35406
- type: HostBinding,
35407
- args: ['attr.aria-labelledby']
35408
- }], disabled: [{
35409
- type: Input
35410
- }], type: [{
35411
- type: Input
35412
- }], autoFocusSearch: [{
35381
+ }], searchPlaceholder: [{
35413
35382
  type: Input
35414
- }], dropdownContainer: [{
35415
- type: ViewChild,
35416
- args: ['dropdownItemContainer', { static: true }]
35417
- }], primitiveTemplate: [{
35418
- type: ViewChild,
35419
- args: ['primitive', { read: TemplateRef, static: true }]
35420
- }], complexTemplate: [{
35421
- type: ViewChild,
35422
- args: ['complex', { read: TemplateRef, static: true }]
35423
- }], virtDir: [{
35383
+ }], dropdown: [{
35424
35384
  type: ViewChild,
35425
- args: [IgxForOfDirective, { read: IgxForOfDirective, static: true }]
35426
- }], onArrowDown: [{
35427
- type: HostListener,
35428
- args: ['keydown.ArrowDown', ['$event']]
35429
- }, {
35430
- type: HostListener,
35431
- args: ['keydown.Alt.ArrowDown', ['$event']]
35385
+ args: [IgxComboDropDownComponent, { static: true }]
35432
35386
  }] } });
35433
35387
  /**
35434
35388
  * @hidden
@@ -35457,11 +35411,16 @@ IgxComboModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
35457
35411
  IgxInputGroupModule,
35458
35412
  IgxRippleModule,
35459
35413
  IgxToggleModule,
35460
- ReactiveFormsModule], exports: [IgxComboAddItemDirective,
35461
- IgxComboClearIconDirective, IgxComboComponent, IgxComboEmptyDirective,
35414
+ ReactiveFormsModule], exports: [IgxComboAddItemComponent,
35415
+ IgxComboAddItemDirective,
35416
+ IgxComboClearIconDirective, IgxComboComponent, IgxComboDropDownComponent,
35417
+ IgxComboEmptyDirective,
35418
+ IgxComboFilteringPipe,
35462
35419
  IgxComboFooterDirective,
35420
+ IgxComboGroupingPipe,
35463
35421
  IgxComboHeaderDirective,
35464
35422
  IgxComboHeaderItemDirective,
35423
+ IgxComboItemComponent,
35465
35424
  IgxComboItemDirective,
35466
35425
  IgxComboToggleIconDirective,
35467
35426
  IgxInputGroupModule] });
@@ -35498,13 +35457,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
35498
35457
  IgxComboToggleIconDirective
35499
35458
  ],
35500
35459
  exports: [
35460
+ IgxComboAddItemComponent,
35501
35461
  IgxComboAddItemDirective,
35502
35462
  IgxComboClearIconDirective,
35503
35463
  IgxComboComponent,
35464
+ IgxComboDropDownComponent,
35504
35465
  IgxComboEmptyDirective,
35466
+ IgxComboFilteringPipe,
35505
35467
  IgxComboFooterDirective,
35468
+ IgxComboGroupingPipe,
35506
35469
  IgxComboHeaderDirective,
35507
35470
  IgxComboHeaderItemDirective,
35471
+ IgxComboItemComponent,
35508
35472
  IgxComboItemDirective,
35509
35473
  IgxComboToggleIconDirective,
35510
35474
  IgxInputGroupModule
@@ -35525,6 +35489,344 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
35525
35489
  }]
35526
35490
  }] });
35527
35491
 
35492
+ /**
35493
+ * Represents a drop-down list that provides filtering functionality, allowing users to choose a single option from a predefined list.
35494
+ *
35495
+ * @igxModule IgxSimpleComboModule
35496
+ * @igxTheme igx-combo-theme
35497
+ * @igxKeywords combobox, single combo selection
35498
+ * @igxGroup Grids & Lists
35499
+ *
35500
+ * @remarks
35501
+ * It provides the ability to filter items as well as perform single selection on the provided data.
35502
+ * Additionally, it exposes keyboard navigation and custom styling capabilities.
35503
+ * @example
35504
+ * ```html
35505
+ * <igx-simple-combo [itemsMaxHeight]="250" [data]="locationData"
35506
+ * [displayKey]="'field'" [valueKey]="'field'"
35507
+ * placeholder="Location" searchPlaceholder="Search...">
35508
+ * </igx-simple-combo>
35509
+ * ```
35510
+ */
35511
+ class IgxSimpleComboComponent extends IgxComboBaseDirective {
35512
+ constructor(elementRef, cdr, selectionService, comboAPI, _iconService, platformUtil, _displayDensityOptions, _inputGroupType, _injector) {
35513
+ super(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector);
35514
+ this.elementRef = elementRef;
35515
+ this.cdr = cdr;
35516
+ this.selectionService = selectionService;
35517
+ this.comboAPI = comboAPI;
35518
+ this._iconService = _iconService;
35519
+ this.platformUtil = platformUtil;
35520
+ this._displayDensityOptions = _displayDensityOptions;
35521
+ this._inputGroupType = _inputGroupType;
35522
+ this._injector = _injector;
35523
+ /**
35524
+ * Emitted when item selection is changing, before the selection completes
35525
+ *
35526
+ * ```html
35527
+ * <igx-simple-combo (selectionChanging)='handleSelection()'></igx-simple-combo>
35528
+ * ```
35529
+ */
35530
+ this.selectionChanging = new EventEmitter();
35531
+ /** @hidden @internal */
35532
+ this.composing = false;
35533
+ this._updateInput = true;
35534
+ this.findMatch = (element) => {
35535
+ const value = this.displayKey ? element[this.displayKey] : element;
35536
+ return value.toString().toLowerCase().includes(this.searchValue.trim().toLowerCase());
35537
+ };
35538
+ this.comboAPI.register(this);
35539
+ }
35540
+ /** @hidden @internal */
35541
+ get filteredData() {
35542
+ return this._filteredData;
35543
+ }
35544
+ /** @hidden @internal */
35545
+ set filteredData(val) {
35546
+ this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;
35547
+ this.checkMatch();
35548
+ }
35549
+ /**
35550
+ * Select a defined item
35551
+ *
35552
+ * @param item the item to be selected
35553
+ * ```typescript
35554
+ * this.combo.select("New York");
35555
+ * ```
35556
+ */
35557
+ select(item) {
35558
+ if (item !== null && item !== undefined) {
35559
+ const newSelection = this.selectionService.add_items(this.id, item instanceof Array ? item : [item], true);
35560
+ this.setSelection(newSelection);
35561
+ }
35562
+ }
35563
+ /**
35564
+ * Deselect the currently selected item
35565
+ *
35566
+ * @param item the items to be deselected
35567
+ * ```typescript
35568
+ * this.combo.deselect("New York");
35569
+ * ```
35570
+ */
35571
+ deselect() {
35572
+ this.clearSelection();
35573
+ }
35574
+ /** @hidden @internal */
35575
+ writeValue(value) {
35576
+ const oldSelection = this.selection;
35577
+ this.selectionService.select_items(this.id, value ? [value] : [], true);
35578
+ this.cdr.markForCheck();
35579
+ this._value = this.createDisplayText(this.selection, oldSelection);
35580
+ }
35581
+ /** @hidden @internal */
35582
+ ngAfterViewInit() {
35583
+ this.virtDir.contentSizeChange.pipe(takeUntil(this.destroy$)).subscribe(() => {
35584
+ if (this.selection.length > 0) {
35585
+ const index = this.virtDir.igxForOf.findIndex(e => {
35586
+ let current = e[this.valueKey];
35587
+ if (this.valueKey === null || this.valueKey === undefined) {
35588
+ current = e;
35589
+ }
35590
+ return current === this.selection[0];
35591
+ });
35592
+ this.dropdown.navigateItem(index);
35593
+ }
35594
+ });
35595
+ this.dropdown.opened.pipe(takeUntil(this.destroy$)).subscribe(() => {
35596
+ if (this.composing) {
35597
+ this.comboInput.focus();
35598
+ }
35599
+ if (this.comboInput.value.length === 0) {
35600
+ this.dropdown.navigateFirst();
35601
+ this.dropdownContainer.nativeElement.focus();
35602
+ }
35603
+ });
35604
+ super.ngAfterViewInit();
35605
+ }
35606
+ /** @hidden @internal */
35607
+ handleInputChange(event) {
35608
+ this.searchValue = event.target.value;
35609
+ this._onChangeCallback(this.searchValue);
35610
+ if (this.collapsed) {
35611
+ this.open();
35612
+ this.dropdown.navigateFirst();
35613
+ }
35614
+ if (!this.comboInput.value.trim()) {
35615
+ // handle clearing of input by space
35616
+ this.clearSelection();
35617
+ this._onChangeCallback(null);
35618
+ }
35619
+ super.handleInputChange(event);
35620
+ this.composing = true;
35621
+ }
35622
+ /** @hidden @internal */
35623
+ handleKeyDown(event) {
35624
+ if (event.key === this.platformUtil.KEYMAP.ENTER) {
35625
+ const filtered = this.filteredData.find(this.findMatch);
35626
+ if (filtered === null || filtered === undefined) {
35627
+ return;
35628
+ }
35629
+ this.select(this.dropdown.items[0].itemID);
35630
+ event.preventDefault();
35631
+ event.stopPropagation();
35632
+ this.close();
35633
+ // manually trigger text selection as it will not be triggered during editing
35634
+ this.textSelection.trigger();
35635
+ return;
35636
+ }
35637
+ if (event.key === this.platformUtil.KEYMAP.BACKSPACE
35638
+ || event.key === this.platformUtil.KEYMAP.DELETE) {
35639
+ this._updateInput = false;
35640
+ this.clearSelection();
35641
+ }
35642
+ super.handleKeyDown(event);
35643
+ }
35644
+ /** @hidden @internal */
35645
+ handleKeyUp(event) {
35646
+ if (event.key === this.platformUtil.KEYMAP.ARROW_DOWN) {
35647
+ const firstItem = this.selectionService.first_item(this.id);
35648
+ this.dropdown.focusedItem = firstItem && this.filteredData.length > 0
35649
+ ? this.dropdown.items.find(i => i.itemID === firstItem)
35650
+ : this.dropdown.items[0];
35651
+ this.dropdownContainer.nativeElement.focus();
35652
+ }
35653
+ }
35654
+ /** @hidden @internal */
35655
+ handleItemKeyDown(event) {
35656
+ if (event.key === this.platformUtil.KEYMAP.ARROW_UP && event.altKey) {
35657
+ this.close();
35658
+ }
35659
+ }
35660
+ /** @hidden @internal */
35661
+ getEditElement() {
35662
+ return this.comboInput.nativeElement;
35663
+ }
35664
+ /** @hidden @internal */
35665
+ handleClear(event) {
35666
+ if (this.disabled) {
35667
+ return;
35668
+ }
35669
+ this.clearSelection(true);
35670
+ if (this.collapsed) {
35671
+ this.open();
35672
+ this.dropdown.navigateFirst();
35673
+ }
35674
+ else {
35675
+ this.focusSearchInput(true);
35676
+ }
35677
+ event.stopPropagation();
35678
+ this.comboInput.value = this.filterValue = this.searchValue = '';
35679
+ this.dropdown.focusedItem = null;
35680
+ this.composing = false;
35681
+ this.comboInput.focus();
35682
+ }
35683
+ /** @hidden @internal */
35684
+ handleOpened() {
35685
+ this.triggerCheck();
35686
+ this.dropdownContainer.nativeElement.focus();
35687
+ this.opened.emit({ owner: this });
35688
+ }
35689
+ /** @hidden @internal */
35690
+ handleClosing(e) {
35691
+ const args = { owner: this, event: e.event, cancel: e.cancel };
35692
+ this.closing.emit(args);
35693
+ e.cancel = args.cancel;
35694
+ if (e.cancel) {
35695
+ return;
35696
+ }
35697
+ this.composing = false;
35698
+ // explicitly update selection and trigger text selection so that we don't have to force CD
35699
+ this.textSelection.selected = true;
35700
+ this.textSelection.trigger();
35701
+ const selection = this.selectionService.first_item(this.id);
35702
+ this._value = selection !== undefined && selection !== null ? selection : '';
35703
+ this.comboInput.focus();
35704
+ this._onChangeCallback(selection);
35705
+ }
35706
+ /** @hidden @internal */
35707
+ focusSearchInput(opening) {
35708
+ if (opening) {
35709
+ this.dropdownContainer.nativeElement.focus();
35710
+ }
35711
+ else {
35712
+ this.comboInput.nativeElement.focus();
35713
+ this.toggle();
35714
+ }
35715
+ }
35716
+ /** @hidden @internal */
35717
+ onClick(event) {
35718
+ super.onClick(event);
35719
+ if (this.comboInput.value.length === 0) {
35720
+ this.virtDir.scrollTo(0);
35721
+ }
35722
+ }
35723
+ setSelection(newSelection) {
35724
+ const newSelectionAsArray = newSelection ? Array.from(newSelection) : [];
35725
+ const oldSelectionAsArray = Array.from(this.selectionService.get(this.id) || []);
35726
+ const displayText = this.createDisplayText(newSelectionAsArray, oldSelectionAsArray);
35727
+ const args = {
35728
+ newSelection: newSelectionAsArray[0],
35729
+ oldSelection: oldSelectionAsArray[0],
35730
+ displayText,
35731
+ owner: this,
35732
+ cancel: false
35733
+ };
35734
+ this.selectionChanging.emit(args);
35735
+ if (!args.cancel) {
35736
+ const argsSelection = args.newSelection !== undefined
35737
+ && args.newSelection !== null
35738
+ ? [args.newSelection]
35739
+ : [];
35740
+ this.selectionService.select_items(this.id, argsSelection, true);
35741
+ if (this._updateInput) {
35742
+ this.comboInput.value = this._value = displayText !== args.displayText
35743
+ ? args.displayText
35744
+ : this.createDisplayText([args.newSelection], [args.oldSelection]);
35745
+ }
35746
+ this._onChangeCallback(args.newSelection);
35747
+ this._updateInput = true;
35748
+ }
35749
+ }
35750
+ createDisplayText(newSelection, oldSelection) {
35751
+ if (this.isRemote) {
35752
+ return this.getRemoteSelection(newSelection, oldSelection);
35753
+ }
35754
+ return this.displayKey !== null && this.displayKey !== undefined
35755
+ ? this.convertKeysToItems(newSelection).map(e => e[this.displayKey])[0]
35756
+ : newSelection[0];
35757
+ }
35758
+ clearSelection(ignoreFilter) {
35759
+ let newSelection = this.selectionService.get_empty();
35760
+ if (this.filteredData.length !== this.data.length && !ignoreFilter) {
35761
+ newSelection = this.selectionService.delete_items(this.id, this.selectionService.get_all_ids(this.filteredData, this.valueKey));
35762
+ }
35763
+ this.setSelection(newSelection);
35764
+ }
35765
+ }
35766
+ 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 });
35767
+ IgxSimpleComboComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxSimpleComboComponent, selector: "igx-simple-combo", outputs: { selectionChanging: "selectionChanging" }, providers: [
35768
+ IgxComboAPIService,
35769
+ { provide: IGX_COMBO_COMPONENT, useExisting: IgxSimpleComboComponent },
35770
+ { provide: NG_VALUE_ACCESSOR, useExisting: IgxSimpleComboComponent, multi: true }
35771
+ ], 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 } });
35772
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxSimpleComboComponent, decorators: [{
35773
+ type: Component,
35774
+ args: [{ selector: 'igx-simple-combo', providers: [
35775
+ IgxComboAPIService,
35776
+ { provide: IGX_COMBO_COMPONENT, useExisting: IgxSimpleComboComponent },
35777
+ { provide: NG_VALUE_ACCESSOR, useExisting: IgxSimpleComboComponent, multi: true }
35778
+ ], 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" }]
35779
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: IgxSelectionAPIService }, { type: IgxComboAPIService }, { type: IgxIconService }, { type: PlatformUtil }, { type: undefined, decorators: [{
35780
+ type: Optional
35781
+ }, {
35782
+ type: Inject,
35783
+ args: [DisplayDensityToken]
35784
+ }] }, { type: undefined, decorators: [{
35785
+ type: Optional
35786
+ }, {
35787
+ type: Inject,
35788
+ args: [IGX_INPUT_GROUP_TYPE]
35789
+ }] }, { type: i0.Injector, decorators: [{
35790
+ type: Optional
35791
+ }] }]; }, propDecorators: { dropdown: [{
35792
+ type: ViewChild,
35793
+ args: [IgxComboDropDownComponent, { static: true }]
35794
+ }], selectionChanging: [{
35795
+ type: Output
35796
+ }], textSelection: [{
35797
+ type: ViewChild,
35798
+ args: [IgxTextSelectionDirective, { static: true }]
35799
+ }] } });
35800
+ class IgxSimpleComboModule {
35801
+ }
35802
+ IgxSimpleComboModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxSimpleComboModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
35803
+ IgxSimpleComboModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxSimpleComboModule, declarations: [IgxSimpleComboComponent], imports: [IgxComboModule, IgxRippleModule, CommonModule,
35804
+ IgxInputGroupModule, FormsModule, ReactiveFormsModule,
35805
+ IgxForOfModule, IgxToggleModule, IgxCheckboxModule,
35806
+ IgxDropDownModule, IgxButtonModule, IgxIconModule,
35807
+ IgxTextSelectionModule], exports: [IgxSimpleComboComponent, IgxComboModule] });
35808
+ IgxSimpleComboModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxSimpleComboModule, imports: [[
35809
+ IgxComboModule, IgxRippleModule, CommonModule,
35810
+ IgxInputGroupModule, FormsModule, ReactiveFormsModule,
35811
+ IgxForOfModule, IgxToggleModule, IgxCheckboxModule,
35812
+ IgxDropDownModule, IgxButtonModule, IgxIconModule,
35813
+ IgxTextSelectionModule
35814
+ ], IgxComboModule] });
35815
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxSimpleComboModule, decorators: [{
35816
+ type: NgModule,
35817
+ args: [{
35818
+ declarations: [IgxSimpleComboComponent],
35819
+ imports: [
35820
+ IgxComboModule, IgxRippleModule, CommonModule,
35821
+ IgxInputGroupModule, FormsModule, ReactiveFormsModule,
35822
+ IgxForOfModule, IgxToggleModule, IgxCheckboxModule,
35823
+ IgxDropDownModule, IgxButtonModule, IgxIconModule,
35824
+ IgxTextSelectionModule
35825
+ ],
35826
+ exports: [IgxSimpleComboComponent, IgxComboModule]
35827
+ }]
35828
+ }] });
35829
+
35528
35830
  /** Header orientation in `dialog` mode. */
35529
35831
  const PickerHeaderOrientation = mkenum({
35530
35832
  Horizontal: 'horizontal',
@@ -36812,6 +37114,14 @@ class IgxDialogComponent {
36812
37114
  * ```
36813
37115
  */
36814
37116
  this.id = `igx-dialog-${DIALOG_ID++}`;
37117
+ /**
37118
+ * An @Input property to set whether the Tab key focus is trapped within the dialog when opened.
37119
+ * Defaults to `true`.
37120
+ * ```html
37121
+ * <igx-dialog focusTrap="false""></igx-dialog>
37122
+ * ```
37123
+ */
37124
+ this.focusTrap = true;
36815
37125
  /**
36816
37126
  * An @Input property controlling the `title` of the dialog.
36817
37127
  * ```html
@@ -37259,10 +37569,10 @@ class IgxDialogComponent {
37259
37569
  IgxDialogComponent.NEXT_ID = 1;
37260
37570
  IgxDialogComponent.DIALOG_CLASS = 'igx-dialog';
37261
37571
  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 });
37262
- 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"] }] });
37572
+ 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"] }] });
37263
37573
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxDialogComponent, decorators: [{
37264
37574
  type: Component,
37265
- 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" }]
37575
+ 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" }]
37266
37576
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: IgxNavigationService, decorators: [{
37267
37577
  type: Optional
37268
37578
  }] }]; }, propDecorators: { toggleRef: [{
@@ -37277,6 +37587,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
37277
37587
  type: Input
37278
37588
  }], closeOnEscape: [{
37279
37589
  type: Input
37590
+ }], focusTrap: [{
37591
+ type: Input
37280
37592
  }], title: [{
37281
37593
  type: Input
37282
37594
  }], message: [{
@@ -37338,14 +37650,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
37338
37650
  class IgxDialogModule {
37339
37651
  }
37340
37652
  IgxDialogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
37341
- 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] });
37342
- IgxDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxDialogModule, imports: [[CommonModule, IgxToggleModule, IgxButtonModule, IgxRippleModule, IgxFocusModule]] });
37653
+ 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] });
37654
+ IgxDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxDialogModule, imports: [[CommonModule, IgxToggleModule, IgxButtonModule, IgxRippleModule, IgxFocusModule, IgxFocusTrapModule]] });
37343
37655
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxDialogModule, decorators: [{
37344
37656
  type: NgModule,
37345
37657
  args: [{
37346
37658
  declarations: [IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective],
37347
37659
  exports: [IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective],
37348
- imports: [CommonModule, IgxToggleModule, IgxButtonModule, IgxRippleModule, IgxFocusModule]
37660
+ imports: [CommonModule, IgxToggleModule, IgxButtonModule, IgxRippleModule, IgxFocusModule, IgxFocusTrapModule]
37349
37661
  }]
37350
37662
  }] });
37351
37663
 
@@ -45646,7 +45958,7 @@ class IgxColumnComponent {
45646
45958
  * @memberof IgxColumnComponent
45647
45959
  */
45648
45960
  get index() {
45649
- return this.grid.columns.indexOf(this);
45961
+ return this.grid.columnsCollection.indexOf(this);
45650
45962
  }
45651
45963
  /**
45652
45964
  * Gets whether the column is `pinned`.
@@ -45933,7 +46245,7 @@ class IgxColumnComponent {
45933
46245
  /**
45934
46246
  * Gets the cells of the column.
45935
46247
  * ```typescript
45936
- * let columnCells = this.column._cells;
46248
+ * let columnCells = this.column.cells;
45937
46249
  * ```
45938
46250
  *
45939
46251
  */
@@ -46479,7 +46791,7 @@ class IgxColumnComponent {
46479
46791
  grid.resetCaches();
46480
46792
  grid.notifyChanges();
46481
46793
  if (this.columnLayoutChild) {
46482
- this.grid.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
46794
+ this.grid.columnList.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
46483
46795
  }
46484
46796
  this.grid.filteringService.refreshExpressions();
46485
46797
  const eventArgs = { column: this, insertAtIndex: index, isPinned: true };
@@ -46546,7 +46858,7 @@ class IgxColumnComponent {
46546
46858
  grid.resetCaches();
46547
46859
  grid.notifyChanges();
46548
46860
  if (this.columnLayoutChild) {
46549
- this.grid.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
46861
+ this.grid.columnList.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
46550
46862
  }
46551
46863
  this.grid.filteringService.refreshExpressions();
46552
46864
  this.grid.columnPinned.emit({ column: this, insertAtIndex: index, isPinned: false });
@@ -48040,7 +48352,7 @@ class IgxColumnActionsComponent {
48040
48352
  */
48041
48353
  ngDoCheck() {
48042
48354
  if (this._differ) {
48043
- const changes = this._differ.diff(this.grid?.columns);
48355
+ const changes = this._differ.diff(this.grid?.columnList);
48044
48356
  if (changes) {
48045
48357
  this.pipeTrigger++;
48046
48358
  }
@@ -48077,10 +48389,10 @@ class IgxColumnActionsComponent {
48077
48389
  }
48078
48390
  }
48079
48391
  IgxColumnActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxColumnActionsComponent, deps: [{ token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component });
48080
- 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; }) } });
48392
+ 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; }) } });
48081
48393
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxColumnActionsComponent, decorators: [{
48082
48394
  type: Component,
48083
- 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" }]
48395
+ 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" }]
48084
48396
  }], ctorParameters: function () { return [{ type: i0.IterableDiffers }]; }, propDecorators: { grid: [{
48085
48397
  type: Input
48086
48398
  }], indentation: [{
@@ -48887,7 +49199,7 @@ class BaseRow {
48887
49199
  return this._data ?? this.grid.dataView[this.index];
48888
49200
  }
48889
49201
  /**
48890
- * @deprecated Use 'data' instead.
49202
+ * @deprecated Use 'data' instead
48891
49203
  *
48892
49204
  * The data record that populates the row
48893
49205
  */
@@ -48895,8 +49207,7 @@ class BaseRow {
48895
49207
  return this.data;
48896
49208
  }
48897
49209
  /**
48898
- * @deprecated Use 'key' instead.
48899
- *
49210
+ * @deprecated Use 'key' instead
48900
49211
  */
48901
49212
  get rowID() {
48902
49213
  return this.key;
@@ -49065,12 +49376,6 @@ class BaseRow {
49065
49376
  this.grid.deleteRowById(this.key);
49066
49377
  }
49067
49378
  }
49068
- __decorate([
49069
- DeprecateProperty(`'rowData' property is deprecated. Use 'data' instead.`)
49070
- ], BaseRow.prototype, "rowData", null);
49071
- __decorate([
49072
- DeprecateProperty(`'rowID' property is deprecated. Use 'key' instead.`)
49073
- ], BaseRow.prototype, "rowID", null);
49074
49379
  class IgxGridRow extends BaseRow {
49075
49380
  /**
49076
49381
  * @hidden
@@ -50586,7 +50891,7 @@ class IgxGroupByAreaDirective {
50586
50891
  const drag = event.detail.owner;
50587
50892
  if (drag instanceof IgxColumnMovingDragDirective) {
50588
50893
  const column = drag.column;
50589
- if (this.grid.columns.indexOf(column) < 0) {
50894
+ if (!this.grid.columnList.find(c => c === column)) {
50590
50895
  return;
50591
50896
  }
50592
50897
  const isGrouped = this.expressions.findIndex((item) => item.fieldName === column.field) !== -1;
@@ -51047,7 +51352,7 @@ class IgxAdvancedFilteringDialogComponent {
51047
51352
  * @hidden @internal
51048
51353
  */
51049
51354
  get filterableColumns() {
51050
- return this.grid.columns.filter((col) => !col.columnGroup && col.filterable);
51355
+ return this.grid.columnList.filter((col) => !col.columnGroup && col.filterable);
51051
51356
  }
51052
51357
  /**
51053
51358
  * @hidden @internal
@@ -52747,10 +53052,10 @@ class IgxFilteringService {
52747
53052
  ...{ target: filterIconTarget }
52748
53053
  });
52749
53054
  this._overlayService.opening
52750
- .pipe(takeUntil(this.destroy$), first$1(overlay => overlay.id === id))
53055
+ .pipe(first$1(overlay => overlay.id === id), takeUntil(this.destroy$))
52751
53056
  .subscribe(() => this.lastActiveNode = this.grid.navigation.activeNode);
52752
53057
  this._overlayService.closed
52753
- .pipe(takeUntil(this.destroy$), first$1(overlay => overlay.id === id))
53058
+ .pipe(first$1(overlay => overlay.id === id), takeUntil(this.destroy$))
52754
53059
  .subscribe(() => {
52755
53060
  this._overlayService.detach(id);
52756
53061
  ref?.destroy();
@@ -52867,7 +53172,7 @@ class IgxFilteringService {
52867
53172
  grid.paginator.page = 0;
52868
53173
  }
52869
53174
  filteringTree.filteringOperands = [];
52870
- for (const column of grid.columns) {
53175
+ for (const column of grid.columnList) {
52871
53176
  this.prepare_filtering_expression(filteringTree, column.field, term, condition, ignoreCase || column.filteringIgnoreCase);
52872
53177
  }
52873
53178
  grid.filteringExpressionsTree = filteringTree;
@@ -52901,7 +53206,7 @@ class IgxFilteringService {
52901
53206
  expressions.length = 0;
52902
53207
  }
52903
53208
  else {
52904
- this.grid.columns.forEach(c => {
53209
+ this.grid.columnList.forEach(c => {
52905
53210
  const expressions = this.getExpressions(c.field);
52906
53211
  expressions.length = 0;
52907
53212
  });
@@ -52931,7 +53236,7 @@ class IgxFilteringService {
52931
53236
  const grid = this.grid;
52932
53237
  const filteringTree = grid.filteringExpressionsTree;
52933
53238
  const newFilteringTree = new FilteringExpressionsTree(filteringTree.operator, filteringTree.fieldName);
52934
- for (const column of grid.columns) {
53239
+ for (const column of grid.columnList) {
52935
53240
  this.prepare_filtering_expression(newFilteringTree, column.field, value, condition, ignoreCase || column.filteringIgnoreCase);
52936
53241
  }
52937
53242
  const eventArgs = { owner: grid, filteringExpressions: newFilteringTree, cancel: false };
@@ -52961,7 +53266,7 @@ class IgxFilteringService {
52961
53266
  */
52962
53267
  getExpressions(columnId) {
52963
53268
  if (!this.columnToExpressionsMap.has(columnId)) {
52964
- const column = this.grid.columns.find((col) => col.field === columnId);
53269
+ const column = this.grid.columnList.find((col) => col.field === columnId);
52965
53270
  const expressionUIs = new Array();
52966
53271
  if (column) {
52967
53272
  this.generateExpressionsList(column.filteringExpressionsTree, this.grid.filteringExpressionsTree.operator, expressionUIs);
@@ -52978,7 +53283,7 @@ class IgxFilteringService {
52978
53283
  if (!this.isFiltering) {
52979
53284
  this.columnsWithComplexFilter.clear();
52980
53285
  this.columnToExpressionsMap.forEach((value, key) => {
52981
- const column = this.grid.columns.find((col) => col.field === key);
53286
+ const column = this.grid.columnList.find((col) => col.field === key);
52982
53287
  if (column) {
52983
53288
  value.length = 0;
52984
53289
  this.generateExpressionsList(column.filteringExpressionsTree, this.grid.filteringExpressionsTree.operator, value);
@@ -53051,7 +53356,7 @@ class IgxFilteringService {
53051
53356
  if (this.columnsWithComplexFilter.has(columnId)) {
53052
53357
  return true;
53053
53358
  }
53054
- const column = this.grid.columns.find((col) => col.field === columnId);
53359
+ const column = this.grid.columnList.find((col) => col.field === columnId);
53055
53360
  const isComplex = column && this.isFilteringTreeComplex(column.filteringExpressionsTree);
53056
53361
  if (isComplex) {
53057
53362
  this.columnsWithComplexFilter.add(columnId);
@@ -55049,10 +55354,10 @@ class IgxGridHeaderRowComponent {
55049
55354
  }
55050
55355
  }
55051
55356
  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 });
55052
- 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 });
55357
+ 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 });
55053
55358
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxGridHeaderRowComponent, decorators: [{
55054
55359
  type: Component,
55055
- 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" }]
55360
+ 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" }]
55056
55361
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { grid: [{
55057
55362
  type: Input
55058
55363
  }], pinnedColumnCollection: [{
@@ -56191,9 +56496,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
56191
56496
  */
56192
56497
  this.gridScroll = new EventEmitter();
56193
56498
  /**
56499
+ * @deprecated in version 12.1.0. Use the corresponding output exposed by the `igx-paginator` component instead
56500
+ *
56194
56501
  * Emitted after the current page is changed.
56195
56502
  *
56196
56503
  * @deprecated in version 12.1.0
56504
+ * Use the corresponding output exposed by the `igx-paginator` component instead.
56505
+ *
56197
56506
  * @example
56198
56507
  * ```html
56199
56508
  * <igx-grid (pageChange)="onPageChange($event)"></igx-grid>
@@ -56206,9 +56515,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
56206
56515
  */
56207
56516
  this.pageChange = new EventEmitter();
56208
56517
  /**
56518
+ * @deprecated in version 12.1.0. Use the corresponding output exposed by the `igx-paginator` component instead
56519
+ *
56209
56520
  * Emitted when `perPage` property value of the grid is changed.
56210
56521
  *
56211
56522
  * @deprecated in version 12.1.0
56523
+ * Use the corresponding output exposed by the `igx-paginator` component instead.
56524
+ *
56212
56525
  * @example
56213
56526
  * ```html
56214
56527
  * <igx-grid #grid (perPageChange)="onPerPageChange($event)" [autoGenerate]="true"></igx-grid>
@@ -56226,8 +56539,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
56226
56539
  */
56227
56540
  this.class = '';
56228
56541
  /**
56542
+ * @deprecated in version 12.2.0. We suggest using `rowClasses` property instead
56543
+ *
56229
56544
  * Gets/Sets the styling classes applied to all even `IgxGridRowComponent`s in the grid.
56230
56545
  *
56546
+ * @deprecated
56547
+ * `evenRowCSS` is deprecated. We suggest using `rowClasses` property instead.
56548
+ *
56231
56549
  * @example
56232
56550
  * ```html
56233
56551
  * <igx-grid #grid [data]="Data" [evenRowCSS]="'igx-grid--my-even-class'" [autoGenerate]="true"></igx-grid>
@@ -56235,8 +56553,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
56235
56553
  */
56236
56554
  this.evenRowCSS = 'igx-grid__tr--even';
56237
56555
  /**
56556
+ * @deprecated in version 12.2.0. We suggest using `rowClasses` property instead
56557
+ *
56238
56558
  * Gets/Sets the styling classes applied to all odd `IgxGridRowComponent`s in the grid.
56239
56559
  *
56560
+ * @deprecated
56561
+ * `oddRowCSS` is deprecated. We suggest using `rowClasses` property instead.
56562
+ *
56240
56563
  * @example
56241
56564
  * ```html
56242
56565
  * <igx-grid #grid [data]="Data" [evenRowCSS]="'igx-grid--my-odd-class'" [autoGenerate]="true"></igx-grid>
@@ -56489,9 +56812,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
56489
56812
  */
56490
56813
  this.filteringDone = new EventEmitter();
56491
56814
  /**
56815
+ * @deprecated in version 12.1.0. Use the corresponding output exposed by the `igx-paginator` component instead
56816
+ *
56492
56817
  * Emitted after paging is performed.
56493
56818
  *
56494
56819
  * @deprecated in version 12.1.x
56820
+ * `pagingDone` is deprecated. Use the corresponding output exposed by the `igx-paginator` component instead.
56821
+ *
56495
56822
  * @remarks
56496
56823
  * Returns an object consisting of the previous and next pages.
56497
56824
  * @example
@@ -56816,7 +57143,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
56816
57143
  * @hidden @internal
56817
57144
  */
56818
57145
  this.columnWidthSetByUser = false;
56819
- this.rendered$ = this.rendered.asObservable().pipe(shareReplay(1));
57146
+ this.rendered$ = this.rendered.asObservable().pipe(shareReplay({ bufferSize: 1, refCount: true }));
56820
57147
  /** @hidden @internal */
56821
57148
  this.resizeNotify = new Subject();
56822
57149
  /** @hidden @internal */
@@ -57137,9 +57464,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
57137
57464
  this.notifyChanges(true);
57138
57465
  }
57139
57466
  /**
57467
+ * @deprecated in version 12.1.0. Use the corresponding method exposed by the `igx-paginator`
57468
+ *
57140
57469
  * Gets/Sets whether the paging feature is enabled.
57141
57470
  *
57142
57471
  * @deprecated in version 12.1.x
57472
+ * `paging` is deprecated
57473
+ *
57143
57474
  * @remarks
57144
57475
  * The default state is disabled (false).
57145
57476
  * @example
@@ -57157,9 +57488,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
57157
57488
  this.pipeTrigger++;
57158
57489
  }
57159
57490
  /**
57491
+ * @deprecated in version 12.1.0. Use `page` property form `paginator` component instead
57492
+ *
57160
57493
  * Gets/Sets the current page index.
57161
57494
  *
57162
57495
  * @deprecated in version 12.1.x
57496
+ * `page` is deprecated. Use the `page` property from the `igx-paginator` component instead.
57497
+ *
57163
57498
  * @example
57164
57499
  * ```html
57165
57500
  * <igx-grid #grid [data]="Data" [autoGenerate]="true">
@@ -57178,9 +57513,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
57178
57513
  }
57179
57514
  }
57180
57515
  /**
57516
+ * @deprecated in version 12.1.0. Use `perPage` property from `paginator` component instead
57517
+ *
57181
57518
  * Gets/Sets the number of visible items per page.
57182
57519
  *
57183
57520
  * @deprecated in version 12.1.x
57521
+ * `perPage` is deprecated. Use the `perPage` property from the `igx-paginator` component instead.
57522
+ *
57184
57523
  * @remarks
57185
57524
  * The default is 15.
57186
57525
  * @example
@@ -58229,7 +58568,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58229
58568
  this.summaryService.clearSummaryCache(args);
58230
58569
  });
58231
58570
  this.subscribeToTransactions();
58232
- this.resizeNotify.pipe(destructor, filter(() => !this._init), throttleTime(0, animationFrameScheduler, { leading: true, trailing: true }))
58571
+ this.resizeNotify.pipe(filter(() => !this._init), throttleTime(0, animationFrameScheduler, { leading: true, trailing: true }), destructor)
58233
58572
  .subscribe(() => {
58234
58573
  this.zone.run(() => {
58235
58574
  this.notifyChanges(true);
@@ -58264,7 +58603,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58264
58603
  this.overlayIDs.push(event.id);
58265
58604
  }
58266
58605
  });
58267
- this.overlayService.closed.pipe(destructor, filter(() => !this._init)).subscribe((event) => {
58606
+ this.overlayService.closed.pipe(filter(() => !this._init), destructor).subscribe((event) => {
58268
58607
  if (this._advancedFilteringOverlayId === event.id) {
58269
58608
  this.overlayService.detach(this._advancedFilteringOverlayId);
58270
58609
  this._advancedFilteringOverlayId = null;
@@ -58275,7 +58614,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58275
58614
  this.overlayIDs.splice(ind, 1);
58276
58615
  }
58277
58616
  });
58278
- this.verticalScrollContainer.dataChanging.pipe(destructor, filter(() => !this._init)).subscribe(($event) => {
58617
+ this.verticalScrollContainer.dataChanging.pipe(filter(() => !this._init), destructor).subscribe(($event) => {
58279
58618
  const shouldRecalcSize = this.isPercentHeight &&
58280
58619
  (!this.calcHeight || this.calcHeight === this.getDataBasedBodyHeight() ||
58281
58620
  this.calcHeight === this.renderedRowHeight * this._defaultTargetRecordNumber);
@@ -58285,12 +58624,12 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58285
58624
  }
58286
58625
  this.evaluateLoadingState();
58287
58626
  });
58288
- this.verticalScrollContainer.scrollbarVisibilityChanged.pipe(destructor, filter(() => !this._init)).subscribe(() => {
58627
+ this.verticalScrollContainer.scrollbarVisibilityChanged.pipe(filter(() => !this._init), destructor).subscribe(() => {
58289
58628
  // called to recalc all widths that may have changes as a result of
58290
58629
  // the vert. scrollbar showing/hiding
58291
58630
  this.notifyChanges(true);
58292
58631
  });
58293
- this.verticalScrollContainer.contentSizeChange.pipe(destructor, filter(() => !this._init)).subscribe(() => {
58632
+ this.verticalScrollContainer.contentSizeChange.pipe(filter(() => !this._init), destructor).subscribe(() => {
58294
58633
  this.calculateGridSizes(false);
58295
58634
  });
58296
58635
  this.onDensityChanged.pipe(destructor).subscribe(() => {
@@ -58396,7 +58735,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58396
58735
  */
58397
58736
  ngAfterContentInit() {
58398
58737
  this.setupColumns();
58399
- this.toolbar.changes.pipe(takeUntil(this.destroy$), filter(() => !this._init)).subscribe(() => this.notifyChanges(true));
58738
+ this.toolbar.changes.pipe(filter(() => !this._init), takeUntil(this.destroy$)).subscribe(() => this.notifyChanges(true));
58400
58739
  this.setUpPaginator();
58401
58740
  this.paginationComponents.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {
58402
58741
  this.setUpPaginator();
@@ -58853,24 +59192,24 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58853
59192
  get summariesMargin() {
58854
59193
  return this.featureColumnsWidth();
58855
59194
  }
58856
- /**
58857
- * @hidden
58858
- * @internal
58859
- */
58860
- get columns() {
58861
- return this._columns;
58862
- }
58863
59195
  /**
58864
59196
  * Gets an array of `IgxColumnComponent`s.
58865
59197
  *
58866
59198
  * @example
58867
59199
  * ```typescript
58868
- * const colums = this.grid.columnsCollection.
59200
+ * const colums = this.grid.columns.
58869
59201
  * ```
58870
59202
  */
58871
- get columnsCollection() {
59203
+ get columns() {
58872
59204
  return this._rendered ? this._columns : [];
58873
59205
  }
59206
+ /**
59207
+ * @hidden
59208
+ * @internal
59209
+ */
59210
+ get columnsCollection() {
59211
+ return this._columns;
59212
+ }
58874
59213
  /**
58875
59214
  * Gets an array of the pinned `IgxColumnComponent`s.
58876
59215
  *
@@ -58952,9 +59291,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58952
59291
  return this._visibleColumns;
58953
59292
  }
58954
59293
  /**
59294
+ * @deprecated in version 12.1.0. Use the corresponding property exposed by the `igx-paginator`
59295
+ *
58955
59296
  * Gets the total number of pages.
58956
59297
  *
58957
59298
  * @deprecated in version 12.1.0
59299
+ * `totalPages` is deprecated. Use the corresponding property exposed by the `igx-paginator`.
59300
+ *
58958
59301
  * @example
58959
59302
  * ```typescript
58960
59303
  * const totalPages = this.grid.totalPages;
@@ -58964,9 +59307,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58964
59307
  return this.paginator?.totalPages;
58965
59308
  }
58966
59309
  /**
59310
+ * @deprecated in version 12.1.0. Use the corresponding property exposed by the `igx-paginator`
59311
+ *
58967
59312
  * Gets if the current page is the first page.
58968
59313
  *
58969
59314
  * @deprecated in version 12.1.0
59315
+ * `isFirstPage` is deprecated. Use the corresponding property exposed by the `igx-paginator`.'
59316
+ *
58970
59317
  * @example
58971
59318
  * ```typescript
58972
59319
  * const firstPage = this.grid.isFirstPage;
@@ -58976,9 +59323,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58976
59323
  return this.paginator.isLastPage;
58977
59324
  }
58978
59325
  /**
59326
+ * @deprecated in version 12.1.0. Use the corresponding method exposed by the `igx-paginator`
59327
+ *
58979
59328
  * Goes to the next page, if the grid is not already at the last page.
58980
59329
  *
58981
59330
  * @deprecated in version 12.1.0
59331
+ * 'Use the corresponding method exposed by the `igx-paginator`.'
59332
+ *
58982
59333
  * @example
58983
59334
  * ```typescript
58984
59335
  * this.grid1.nextPage();
@@ -58989,12 +59340,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
58989
59340
  this.paginator?.nextPage();
58990
59341
  }
58991
59342
  /**
59343
+ * @deprecated in version 12.1.0. Use the corresponding method exposed by the `igx-paginator`
59344
+ *
58992
59345
  * Goes to the previous page, if the grid is not already at the first page.
58993
59346
  *
58994
59347
  * @deprecated in version 12.1.0
59348
+ * 'Use the corresponding method exposed by the `igx-paginator`.'
58995
59349
  * @example
58996
- * ```typescript
58997
- * this.grid1.previousPage();
58998
59350
  * ```
58999
59351
  */
59000
59352
  // eslint-disable-next-line @typescript-eslint/member-ordering
@@ -59025,9 +59377,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
59025
59377
  }
59026
59378
  }
59027
59379
  /**
59380
+ * @deprecated in version 12.1.0. Use the corresponding property exposed by the `igx-paginator`
59381
+ *
59028
59382
  * Returns if the current page is the last page.
59029
59383
  *
59030
59384
  * @deprecated in version 12.1.0
59385
+ * `isLastPage` is deprecated. Use the corresponding property exposed by the `igx-paginator`.'
59386
+ *
59031
59387
  * @example
59032
59388
  * ```typescript
59033
59389
  * const lastPage = this.grid.isLastPage;
@@ -59070,14 +59426,14 @@ class IgxGridBaseDirective extends DisplayDensityBase {
59070
59426
  * @internal
59071
59427
  */
59072
59428
  get showAddButton() {
59073
- return this.rowEditable && this.dataView.length === 0 && this.columns.length > 0;
59429
+ return this.rowEditable && this.dataView.length === 0 && this.columnList.length > 0;
59074
59430
  }
59075
59431
  /**
59076
59432
  * @hidden
59077
59433
  * @internal
59078
59434
  */
59079
59435
  get showDragIcons() {
59080
- return this.rowDraggable && this.columns.length > this.hiddenColumnsCount;
59436
+ return this.rowDraggable && this.columnList.length > this.hiddenColumnsCount;
59081
59437
  }
59082
59438
  /**
59083
59439
  * Places a column before or after the specified target column.
@@ -59124,8 +59480,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
59124
59480
  this._columnsReordered(column);
59125
59481
  }
59126
59482
  /**
59483
+ * @deprecated in version 12.1.0. Use the corresponding method exposed by the `igx-paginator`
59484
+ *
59127
59485
  * Goes to the desired page index.
59128
59486
  *
59487
+ * @deprecated in version 12.1.x
59488
+ * 'Use the corresponding method exposed by the `igx-paginator`.'
59489
+ *
59129
59490
  * @example
59130
59491
  * ```typescript
59131
59492
  * this.grid1.paginate(1);
@@ -60304,7 +60665,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
60304
60665
  if (!this.clipboardOptions.copyHeaders) {
60305
60666
  result = result.substring(result.indexOf('\n') + 1);
60306
60667
  }
60307
- if (Object.values(data[0]).length === 1) {
60668
+ if (data && data.length > 0 && Object.values(data[0]).length === 1) {
60308
60669
  result = result.slice(0, -2);
60309
60670
  }
60310
60671
  event.preventDefault();
@@ -61532,7 +61893,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
61532
61893
  // Make sure we don't exceed unpinned area min width and get pinned and unpinned col collections.
61533
61894
  // We take into account top level columns (top level groups and non groups).
61534
61895
  // If top level is unpinned the pinning handles all children to be unpinned as well.
61535
- for (const column of this._columns) {
61896
+ for (const column of this.columnList) {
61536
61897
  if (column.pinned && !column.parent) {
61537
61898
  pinnedColumns.push(column);
61538
61899
  }
@@ -61625,7 +61986,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
61625
61986
  _columnsReordered(column) {
61626
61987
  this.notifyChanges();
61627
61988
  if (this.hasColumnLayouts) {
61628
- this.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
61989
+ this.columnList.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
61629
61990
  }
61630
61991
  // after reordering is done reset cached column collections.
61631
61992
  this.resetColumnCollections();
@@ -61920,24 +62281,9 @@ class IgxGridBaseDirective extends DisplayDensityBase {
61920
62281
  }
61921
62282
  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 });
61922
62283
  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 });
61923
- __decorate([
61924
- DeprecateProperty('`pageChange` is deprecated. Use the corresponding output exposed by the `igx-paginator` component instead.')
61925
- ], IgxGridBaseDirective.prototype, "pageChange", void 0);
61926
- __decorate([
61927
- DeprecateProperty('`perPageChange` is deprecated. Use the corresponding output exposed by the `igx-paginator` component instead.')
61928
- ], IgxGridBaseDirective.prototype, "perPageChange", void 0);
61929
- __decorate([
61930
- DeprecateProperty('`evenRowCSS` is deprecated. We suggest using `rowClasses` property instead.')
61931
- ], IgxGridBaseDirective.prototype, "evenRowCSS", void 0);
61932
- __decorate([
61933
- DeprecateProperty('`oddRowCSS` is deprecated. We suggest using `rowClasses` property instead.')
61934
- ], IgxGridBaseDirective.prototype, "oddRowCSS", void 0);
61935
62284
  __decorate([
61936
62285
  WatchChanges()
61937
62286
  ], IgxGridBaseDirective.prototype, "primaryKey", void 0);
61938
- __decorate([
61939
- DeprecateProperty('`pagingDone` is deprecated. Use the corresponding output exposed by the `igx-paginator` component instead.')
61940
- ], IgxGridBaseDirective.prototype, "pagingDone", void 0);
61941
62287
  __decorate([
61942
62288
  WatchChanges()
61943
62289
  ], IgxGridBaseDirective.prototype, "filteringLogic", null);
@@ -61947,15 +62293,6 @@ __decorate([
61947
62293
  __decorate([
61948
62294
  WatchChanges()
61949
62295
  ], IgxGridBaseDirective.prototype, "advancedFilteringExpressionsTree", null);
61950
- __decorate([
61951
- DeprecateProperty('`paging` is deprecated')
61952
- ], IgxGridBaseDirective.prototype, "paging", null);
61953
- __decorate([
61954
- DeprecateProperty('`page` is deprecated. Use `page` property form `paginator` component instead.')
61955
- ], IgxGridBaseDirective.prototype, "page", null);
61956
- __decorate([
61957
- DeprecateProperty('`perPage` is deprecated. Use `perPage` property from `paginator` component instead.')
61958
- ], IgxGridBaseDirective.prototype, "perPage", null);
61959
62296
  __decorate([
61960
62297
  WatchChanges()
61961
62298
  ], IgxGridBaseDirective.prototype, "hideRowSelectors", null);
@@ -61989,24 +62326,6 @@ __decorate([
61989
62326
  __decorate([
61990
62327
  WatchChanges()
61991
62328
  ], IgxGridBaseDirective.prototype, "columnSelection", null);
61992
- __decorate([
61993
- DeprecateProperty('`totalPages` is deprecated. Use the corresponding property exposed by the `igx-paginator`.')
61994
- ], IgxGridBaseDirective.prototype, "totalPages", null);
61995
- __decorate([
61996
- DeprecateProperty('`isFirstPage` is deprecated. Use the corresponding property exposed by the `igx-paginator`.')
61997
- ], IgxGridBaseDirective.prototype, "isFirstPage", null);
61998
- __decorate([
61999
- DeprecateMethod('Use the corresponding method exposed by the `igx-paginator`.')
62000
- ], IgxGridBaseDirective.prototype, "nextPage", null);
62001
- __decorate([
62002
- DeprecateMethod('Use the corresponding method exposed by the `igx-paginator`.')
62003
- ], IgxGridBaseDirective.prototype, "previousPage", null);
62004
- __decorate([
62005
- DeprecateProperty('`isLastPage` is deprecated. Use the corresponding property exposed by the `igx-paginator`.')
62006
- ], IgxGridBaseDirective.prototype, "isLastPage", null);
62007
- __decorate([
62008
- DeprecateMethod('Use the corresponding method exposed by the `igx-paginator`.')
62009
- ], IgxGridBaseDirective.prototype, "paginate", null);
62010
62329
  __decorate([
62011
62330
  WatchChanges()
62012
62331
  ], IgxGridBaseDirective.prototype, "selectRowOnClick", null);
@@ -62408,9 +62727,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
62408
62727
  type: Input
62409
62728
  }], outlet: [{
62410
62729
  type: Input
62411
- }], totalPages: [], isFirstPage: [], nextPage: [], previousPage: [], totalRecords: [{
62730
+ }], totalRecords: [{
62412
62731
  type: Input
62413
- }], isLastPage: [], paginate: [], selectRowOnClick: [{
62732
+ }], selectRowOnClick: [{
62414
62733
  type: Input
62415
62734
  }] } });
62416
62735
 
@@ -64880,7 +65199,8 @@ class IgxGridComponent extends IgxGridBaseDirective {
64880
65199
  return this._dropAreaMessage || this.resourceStrings.igx_grid_groupByArea_message;
64881
65200
  }
64882
65201
  /**
64883
- * @deprecated
65202
+ * @deprecated in version 12.1.0. Use `getCellByColumn` or `getCellByKey` instead
65203
+ *
64884
65204
  * Returns a `CellType` object that matches the conditions.
64885
65205
  *
64886
65206
  * @example
@@ -65605,9 +65925,6 @@ IgxGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versi
65605
65925
  IgxForOfSyncService,
65606
65926
  IgxForOfScrollSyncService
65607
65927
  ], 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 });
65608
- __decorate([
65609
- DeprecateMethod('`getCellByColumnVisibleIndex` is deprecated. Use `getCellByColumn` or `getCellByKey` instead')
65610
- ], IgxGridComponent.prototype, "getCellByColumnVisibleIndex", null);
65611
65928
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxGridComponent, decorators: [{
65612
65929
  type: Component,
65613
65930
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, providers: [
@@ -65685,7 +66002,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
65685
66002
  type: Input
65686
66003
  }], dropAreaMessage: [{
65687
66004
  type: Input
65688
- }], getCellByColumnVisibleIndex: [], showGroupArea: [{
66005
+ }], showGroupArea: [{
65689
66006
  type: Input
65690
66007
  }] } });
65691
66008
 
@@ -65765,7 +66082,7 @@ class IgxGridStateDirective {
65765
66082
  },
65766
66083
  columns: {
65767
66084
  getFeatureState: (context) => {
65768
- const gridColumns = context.currGrid.columns.map((c) => ({
66085
+ const gridColumns = context.currGrid.columnList.map((c) => ({
65769
66086
  pinned: c.pinned,
65770
66087
  sortable: c.sortable,
65771
66088
  filterable: c.filterable,
@@ -66454,14 +66771,14 @@ class IgxColumnLayoutComponent extends IgxColumnGroupComponent {
66454
66771
  set hidden(value) {
66455
66772
  this._hidden = value;
66456
66773
  this.children.forEach(child => child.hidden = value);
66457
- if (this.grid && this.grid.columns && this.grid.columns.length > 0) {
66774
+ if (this.grid && this.grid.columnList && this.grid.columnList.length > 0) {
66458
66775
  // reset indexes in case columns are hidden/shown runtime
66459
66776
  const columns = this.grid && this.grid.pinnedColumns && this.grid.unpinnedColumns ?
66460
66777
  this.grid.pinnedColumns.concat(this.grid.unpinnedColumns) : [];
66461
66778
  if (!this._hidden && !columns.find(c => c.field === this.field)) {
66462
66779
  this.grid.resetColumnCollections();
66463
66780
  }
66464
- this.grid.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
66781
+ this.grid.columnList.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
66465
66782
  }
66466
66783
  }
66467
66784
  /**
@@ -68970,7 +69287,8 @@ class IgxTreeGridComponent extends IgxGridBaseDirective {
68970
69287
  this.notifyChanges();
68971
69288
  }
68972
69289
  /**
68973
- * @deprecated
69290
+ * @deprecated in version 12.1.0. Use `getCellByColumn` or `getCellByKey` instead
69291
+ *
68974
69292
  * Returns a `CellType` object that matches the conditions.
68975
69293
  *
68976
69294
  * @example
@@ -69586,9 +69904,6 @@ IgxTreeGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
69586
69904
  IgxForOfSyncService,
69587
69905
  IgxForOfScrollSyncService
69588
69906
  ], 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 });
69589
- __decorate([
69590
- DeprecateMethod('`getCellByColumnVisibleIndex` is deprecated. Use `getCellByColumn` or `getCellByKey` instead')
69591
- ], IgxTreeGridComponent.prototype, "getCellByColumnVisibleIndex", null);
69592
69907
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxTreeGridComponent, decorators: [{
69593
69908
  type: Component,
69594
69909
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-tree-grid', providers: [
@@ -69664,7 +69979,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
69664
69979
  type: Input
69665
69980
  }], rowLoadingIndicatorTemplate: [{
69666
69981
  type: Input
69667
- }], getCellByColumnVisibleIndex: [] } });
69982
+ }] } });
69668
69983
 
69669
69984
  const HIDDEN_FIELD_NAME = '_Igx_Hidden_Data_';
69670
69985
  /**
@@ -71539,7 +71854,8 @@ class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirective {
71539
71854
  return this._defaultExpandState;
71540
71855
  }
71541
71856
  /**
71542
- * @deprecated
71857
+ * @deprecated in version 12.1.0. Use `getCellByColumn` or `getCellByKey` instead
71858
+ *
71543
71859
  * Returns a `CellType` object that matches the conditions.
71544
71860
  *
71545
71861
  * @example
@@ -72157,9 +72473,6 @@ IgxHierarchicalGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
72157
72473
  IgxForOfScrollSyncService,
72158
72474
  IgxRowIslandAPIService
72159
72475
  ], 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 });
72160
- __decorate([
72161
- DeprecateMethod('`getCellByColumnVisibleIndex` is deprecated. Use `getCellByColumn` or `getCellByKey` instead')
72162
- ], IgxHierarchicalGridComponent.prototype, "getCellByColumnVisibleIndex", null);
72163
72476
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxHierarchicalGridComponent, decorators: [{
72164
72477
  type: Component,
72165
72478
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-hierarchical-grid', providers: [
@@ -72216,7 +72529,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
72216
72529
  type: Input
72217
72530
  }], expandChildren: [{
72218
72531
  type: Input
72219
- }], getCellByColumnVisibleIndex: [] } });
72532
+ }] } });
72220
72533
 
72221
72534
  /**
72222
72535
  * @hidden
@@ -76712,6 +77025,8 @@ class IgxToastComponent extends IgxNotificationsDirective {
76712
77025
  };
76713
77026
  }
76714
77027
  /**
77028
+ * @deprecated in version 12.2.3. We suggest using `positionSettings` property instead
77029
+ *
76715
77030
  * Sets/gets the position of the toast.
76716
77031
  * If not set, the `position` attribute will have value `IgxToastPosition.Bottom`.
76717
77032
  * ```html
@@ -76837,9 +77152,6 @@ class IgxToastComponent extends IgxNotificationsDirective {
76837
77152
  }
76838
77153
  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 });
76839
77154
  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" });
76840
- __decorate([
76841
- DeprecateProperty('`position` is deprecated. We suggest using `positionSettings` property instead.')
76842
- ], IgxToastComponent.prototype, "position", null);
76843
77155
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxToastComponent, decorators: [{
76844
77156
  type: Component,
76845
77157
  args: [{ selector: 'igx-toast', template: "<ng-content></ng-content>\n<span>{{ textMessage }}</span>\n\n" }]
@@ -81804,5 +82116,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
81804
82116
  * Generated bundle index. Do not edit.
81805
82117
  */
81806
82118
 
81807
- 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 };
82119
+ 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 };
81808
82120
  //# sourceMappingURL=igniteui-angular.mjs.map