igniteui-angular 12.2.5 → 12.3.0

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 (62) hide show
  1. package/README.md +12 -11
  2. package/bundles/igniteui-angular.umd.js +1833 -1672
  3. package/bundles/igniteui-angular.umd.js.map +1 -1
  4. package/esm2015/igniteui-angular.js +106 -107
  5. package/esm2015/lib/action-strip/grid-actions/grid-editing-actions.component.js +2 -2
  6. package/esm2015/lib/banner/banner.component.js +1 -1
  7. package/esm2015/lib/combo/combo-dropdown.component.js +9 -4
  8. package/esm2015/lib/combo/combo-item.component.js +4 -3
  9. package/esm2015/lib/combo/combo.api.js +3 -3
  10. package/esm2015/lib/combo/combo.common.js +1016 -2
  11. package/esm2015/lib/combo/combo.component.js +91 -1135
  12. package/esm2015/lib/combo/combo.pipes.js +3 -3
  13. package/esm2015/lib/core/utils.js +11 -1
  14. package/esm2015/lib/data-operations/sorting-strategy.js +12 -3
  15. package/esm2015/lib/directives/radio/radio-group.directive.js +5 -13
  16. package/esm2015/lib/drop-down/drop-down-item.base.js +1 -5
  17. package/esm2015/lib/grids/cell.component.js +1 -17
  18. package/esm2015/lib/grids/column-actions/column-actions.component.js +3 -7
  19. package/esm2015/lib/grids/filtering/base/grid-filtering-row.component.js +12 -4
  20. package/esm2015/lib/grids/grid/grid.component.js +3 -7
  21. package/esm2015/lib/grids/grid-base.directive.js +56 -119
  22. package/esm2015/lib/grids/grid-public-row.js +3 -12
  23. package/esm2015/lib/grids/headers/grid-header-row.component.js +2 -2
  24. package/esm2015/lib/grids/hierarchical-grid/hierarchical-grid.component.js +3 -7
  25. package/esm2015/lib/grids/tree-grid/tree-grid.component.js +3 -7
  26. package/esm2015/lib/icon/icon.component.js +1 -6
  27. package/esm2015/lib/services/overlay/utilities.js +1 -1
  28. package/esm2015/lib/simple-combo/public_api.js +2 -0
  29. package/esm2015/lib/simple-combo/simple-combo.component.js +390 -0
  30. package/esm2015/lib/toast/toast.component.js +3 -6
  31. package/esm2015/public_api.js +2 -1
  32. package/fesm2015/igniteui-angular.js +1468 -1308
  33. package/fesm2015/igniteui-angular.js.map +1 -1
  34. package/igniteui-angular.d.ts +105 -106
  35. package/igniteui-angular.metadata.json +1 -1
  36. package/lib/banner/banner.component.d.ts +1 -2
  37. package/lib/combo/combo-dropdown.component.d.ts +2 -0
  38. package/lib/combo/combo-item.component.d.ts +2 -0
  39. package/lib/combo/combo.common.d.ts +730 -4
  40. package/lib/combo/combo.component.d.ts +38 -791
  41. package/lib/combo/combo.pipes.d.ts +1 -1
  42. package/lib/core/utils.d.ts +4 -0
  43. package/lib/directives/radio/radio-group.directive.d.ts +4 -4
  44. package/lib/grids/cell.component.d.ts +0 -9
  45. package/lib/grids/column-actions/column-actions.component.d.ts +2 -1
  46. package/lib/grids/grid/grid.component.d.ts +2 -1
  47. package/lib/grids/grid-base.directive.d.ts +54 -37
  48. package/lib/grids/grid-public-row.d.ts +2 -3
  49. package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +2 -1
  50. package/lib/grids/tree-grid/tree-grid.component.d.ts +2 -1
  51. package/lib/icon/icon.component.d.ts +2 -2
  52. package/lib/services/overlay/utilities.d.ts +2 -1
  53. package/lib/simple-combo/public_api.d.ts +1 -0
  54. package/lib/simple-combo/simple-combo.component.d.ts +126 -0
  55. package/lib/toast/toast.component.d.ts +2 -0
  56. package/migrations/common/filterSourceDirs.d.ts +2 -2
  57. package/migrations/common/filterSourceDirs.js +2 -2
  58. package/migrations/update-13_0_0/changes/members.json +26 -0
  59. package/package.json +1 -1
  60. package/public_api.d.ts +1 -0
  61. package/esm2015/lib/core/deprecateDecorators.js +0 -101
  62. 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, AnimationBuilder, useAnimation, trigger, transition } from '@angular/animations';
3
3
  import * as i0 from '@angular/core';
4
- import { Injectable, Directive, Input, HostListener, NgModule, Inject, PLATFORM_ID, SimpleChange, InjectionToken, EventEmitter, Optional, Output, ElementRef, Renderer2, NgZone, Component, ViewChild, HostBinding, forwardRef, ChangeDetectorRef, ViewContainerRef, TemplateRef, IterableDiffers, ComponentFactoryResolver, QueryList, ViewChildren, ChangeDetectionStrategy, ContentChild, ContentChildren, ApplicationRef, Injector, isDevMode, Self, SecurityContext, Pipe, LOCALE_ID, Host, NgModuleRef, inject, CUSTOM_ELEMENTS_SCHEMA, SkipSelf } from '@angular/core';
4
+ import { Injectable, Directive, Input, HostListener, NgModule, isDevMode, Inject, PLATFORM_ID, SimpleChange, InjectionToken, EventEmitter, Optional, Output, ElementRef, Renderer2, NgZone, Component, ViewChild, HostBinding, forwardRef, ChangeDetectorRef, ViewContainerRef, TemplateRef, IterableDiffers, ComponentFactoryResolver, QueryList, ViewChildren, ChangeDetectionStrategy, ContentChild, ContentChildren, ApplicationRef, Injector, Self, SecurityContext, Pipe, LOCALE_ID, Host, NgModuleRef, inject, CUSTOM_ELEMENTS_SCHEMA, SkipSelf } from '@angular/core';
5
5
  import { NG_VALUE_ACCESSOR, NG_VALIDATORS, CheckboxRequiredValidator, NgModel, FormControlName, FormsModule, NgControl, ReactiveFormsModule } from '@angular/forms';
6
6
  import * as i2 from '@angular/common';
7
7
  import { isPlatformBrowser, CommonModule, DOCUMENT, DatePipe, formatDate, FormatWidth, getLocaleDateFormat, getLocaleCurrencyCode, DecimalPipe, CurrencyPipe, PercentPipe, getLocaleNumberFormat, NumberFormatStyle, getCurrencySymbol } from '@angular/common';
@@ -892,7 +892,7 @@ const run = (id) => {
892
892
  fn();
893
893
  }
894
894
  };
895
- const ɵ0$5 = run;
895
+ const ɵ0$4 = run;
896
896
  const listener = (event) => run(event.data);
897
897
  const ɵ1$1 = listener;
898
898
  // Use function instead of arrow function to workaround an issue in codesandbox
@@ -920,6 +920,15 @@ function clearImmediate(id) {
920
920
  delete queue[id];
921
921
  }
922
922
 
923
+ /**
924
+ * @hidden
925
+ */
926
+ const showMessage = (message, isMessageShown) => {
927
+ if (!isMessageShown && isDevMode()) {
928
+ console.warn(message);
929
+ }
930
+ return true;
931
+ };
923
932
  const mkenum = (x) => x;
924
933
  /**
925
934
  * Returns the ResizeObserver type or the polyfilled version if not available.
@@ -1702,8 +1711,17 @@ class IgxSorting {
1702
1711
  fullResult.data.push(groupItem);
1703
1712
  }
1704
1713
  if (expanded) {
1705
- metadata.push(...fullResult.metadata.slice(fullResult.metadata.length - group.length));
1706
- result.push(...fullResult.data.slice(fullResult.data.length - group.length));
1714
+ // Replaced object destructing as in a single big group scenario
1715
+ // it hits the max number of arguments for a function the underlying JS engine
1716
+ // supports.
1717
+ let j = fullResult.metadata.length - group.length;
1718
+ for (; j < fullResult.metadata.length; j++) {
1719
+ metadata.push(fullResult.metadata[j]);
1720
+ }
1721
+ j = fullResult.data.length - group.length;
1722
+ for (; j < fullResult.data.length; j++) {
1723
+ result.push(fullResult.data[j]);
1724
+ }
1707
1725
  }
1708
1726
  }
1709
1727
  i += group.length;
@@ -8198,7 +8216,7 @@ IgxRowDirective.propDecorators = {
8198
8216
  };
8199
8217
 
8200
8218
  const clear = (el) => el === 0 || Boolean(el);
8201
- const ɵ0$4 = clear;
8219
+ const ɵ0$3 = clear;
8202
8220
  const first = (arr) => arr[0];
8203
8221
  const ɵ1 = first;
8204
8222
  const last = (arr) => arr[arr.length - 1];
@@ -16382,105 +16400,6 @@ IgxSelectionAPIService.decorators = [
16382
16400
  },] }
16383
16401
  ];
16384
16402
 
16385
- /**
16386
- * @hidden
16387
- */
16388
- const DeprecateClass = (message) => {
16389
- let isMessageShown = false;
16390
- return (originalClass) => class extends originalClass {
16391
- constructor(...args) {
16392
- const target = originalClass;
16393
- const targetName = typeof target === 'function' ? target.name : target.constructor.name;
16394
- isMessageShown = showMessage(`${targetName}: ${message}`, isMessageShown);
16395
- super(...args);
16396
- }
16397
- };
16398
- };
16399
- /**
16400
- * @hidden
16401
- */
16402
- function DeprecateMethod(message) {
16403
- let isMessageShown = false;
16404
- return function (target, key, descriptor) {
16405
- if (descriptor && descriptor.value) {
16406
- const originalMethod = descriptor.value;
16407
- descriptor.value = function () {
16408
- const targetName = typeof target === 'function' ? target.name : target.constructor.name;
16409
- isMessageShown = showMessage(`${targetName}.${key}: ${message}`, isMessageShown);
16410
- const args = [];
16411
- for (const x of arguments) {
16412
- args.push(x);
16413
- }
16414
- return originalMethod.call(this, ...args);
16415
- };
16416
- return descriptor;
16417
- }
16418
- };
16419
- }
16420
- /**
16421
- * @hidden
16422
- */
16423
- function DeprecateProperty(message) {
16424
- return function (target, key) {
16425
- let isMessageShown = false;
16426
- const messageToDisplay = `${target.constructor.name}.${key}: ${message}`;
16427
- // if the target already has the property defined
16428
- const originalDescriptor = Object.getOwnPropertyDescriptor(target, key);
16429
- if (originalDescriptor) {
16430
- const getter = originalDescriptor.get;
16431
- const setter = originalDescriptor.set;
16432
- if (getter) {
16433
- originalDescriptor.get = function () {
16434
- isMessageShown = showMessage(messageToDisplay, isMessageShown);
16435
- return getter.call(this);
16436
- };
16437
- }
16438
- if (setter) {
16439
- originalDescriptor.set = function (value) {
16440
- isMessageShown = showMessage(messageToDisplay, isMessageShown);
16441
- setter.call(this, value);
16442
- };
16443
- }
16444
- return originalDescriptor;
16445
- }
16446
- // the target doesn't contain a descriptor for that property, so create one
16447
- // use backing field to set/get the value of the property to ensure there won't be infinite recursive calls
16448
- const newKey = generateUniqueKey(target, key);
16449
- Object.defineProperty(target, key, {
16450
- configurable: true,
16451
- enumerable: true,
16452
- set(value) {
16453
- isMessageShown = showMessage(messageToDisplay, isMessageShown);
16454
- this[newKey] = value;
16455
- },
16456
- get() {
16457
- isMessageShown = showMessage(messageToDisplay, isMessageShown);
16458
- return this[newKey];
16459
- }
16460
- });
16461
- };
16462
- }
16463
- /**
16464
- * @hidden
16465
- */
16466
- const generateUniqueKey = (target, key) => {
16467
- let newKey = '_' + key;
16468
- while (target.hasOwnProperty(newKey)) {
16469
- newKey = '_' + newKey;
16470
- }
16471
- return newKey;
16472
- };
16473
- const ɵ0$3 = generateUniqueKey;
16474
- /**
16475
- * @hidden
16476
- */
16477
- const showMessage = (message, isMessageShown) => {
16478
- if (!isMessageShown && isDevMode()) {
16479
- console.warn(message);
16480
- }
16481
- return true;
16482
- };
16483
-
16484
16403
  let NEXT_ID$t = 0;
16485
16404
  /**
16486
16405
  * The `<igx-drop-down-item>` is a container intended for row items in
@@ -16550,7 +16469,6 @@ IgxDropDownGroupComponent.propDecorators = {
16550
16469
  };
16551
16470
 
16552
16471
  let NEXT_ID$s = 0;
16553
- let warningShown = false;
16554
16472
  /**
16555
16473
  * An abstract class defining a drop-down item:
16556
16474
  * With properties / styles for selection, highlight, height
@@ -16615,8 +16533,6 @@ class IgxDropDownItemBaseDirective {
16615
16533
  */
16616
16534
  get index() {
16617
16535
  if (this._index === null) {
16618
- warningShown = showMessage('IgxDropDownItemBaseDirective: Automatic index is deprecated.' +
16619
- 'Bind in the template instead using `<igx-drop-down-item [index]="i"` instead.`', warningShown);
16620
16536
  return this.itemIndex;
16621
16537
  }
16622
16538
  return this._index;
@@ -19115,9 +19031,6 @@ IgxIconComponent.propDecorators = {
19115
19031
  getInactive: [{ type: HostBinding, args: ['class.igx-icon--inactive',] }],
19116
19032
  getColor: [{ type: HostBinding, args: ['style.color',] }]
19117
19033
  };
19118
- __decorate([
19119
- DeprecateProperty('`color` is deprecated.')
19120
- ], IgxIconComponent.prototype, "color", void 0);
19121
19034
 
19122
19035
  /**
19123
19036
  * @hidden
@@ -23288,10 +23201,10 @@ class IgxRadioGroupDirective {
23288
23201
  this._setRadioButtonsRequired();
23289
23202
  }
23290
23203
  /**
23291
- * An @Input property that allows you to disable the radio group. By default it's false.
23292
- *
23293
23204
  * @deprecated in version 12.2.0
23294
23205
  *
23206
+ * An input property that allows you to disable the radio group. By default it's false.
23207
+ *
23295
23208
  * @example
23296
23209
  * ```html
23297
23210
  * <igx-radio-group disabled></igx-radio-group>
@@ -23305,10 +23218,10 @@ class IgxRadioGroupDirective {
23305
23218
  this.setDisabledState(value);
23306
23219
  }
23307
23220
  /**
23308
- * Sets/gets the position of the `label` in the child radio buttons.
23309
- *
23310
23221
  * @deprecated in version 12.2.0
23311
23222
  *
23223
+ * Sets/gets the position of the `label` in the child radio buttons.
23224
+ *
23312
23225
  * @remarks
23313
23226
  * If not set, `labelPosition` will have value `"after"`.
23314
23227
  *
@@ -23558,12 +23471,6 @@ IgxRadioGroupDirective.propDecorators = {
23558
23471
  vertical: [{ type: HostBinding, args: ['class.igx-radio-group--vertical',] }],
23559
23472
  alignment: [{ type: Input }]
23560
23473
  };
23561
- __decorate([
23562
- DeprecateProperty('`disabled` is deprecated.')
23563
- ], IgxRadioGroupDirective.prototype, "disabled", null);
23564
- __decorate([
23565
- DeprecateProperty('`labelPosition` is deprecated.')
23566
- ], IgxRadioGroupDirective.prototype, "labelPosition", null);
23567
23474
  /**
23568
23475
  * @hidden
23569
23476
  */
@@ -34973,10 +34880,10 @@ class IgxComboAPIService {
34973
34880
  return;
34974
34881
  }
34975
34882
  if (!selected) {
34976
- this.combo.selectItems([itemID], false, event);
34883
+ this.combo.select([itemID], false, event);
34977
34884
  }
34978
34885
  else {
34979
- this.combo.deselectItems([itemID], event);
34886
+ this.combo.deselect([itemID], event);
34980
34887
  }
34981
34888
  }
34982
34889
  is_item_selected(itemID) {
@@ -35074,7 +34981,7 @@ class IgxComboItemComponent extends IgxDropDownItemComponent {
35074
34981
  IgxComboItemComponent.decorators = [
35075
34982
  { type: Component, args: [{
35076
34983
  selector: 'igx-combo-item',
35077
- 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"
34984
+ 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"
35078
34985
  },] }
35079
34986
  ];
35080
34987
  IgxComboItemComponent.ctorParameters = () => [
@@ -35084,311 +34991,25 @@ IgxComboItemComponent.ctorParameters = () => [
35084
34991
  { type: IgxSelectionAPIService, decorators: [{ type: Inject, args: [IgxSelectionAPIService,] }] }
35085
34992
  ];
35086
34993
  IgxComboItemComponent.propDecorators = {
35087
- itemHeight: [{ type: Input }, { type: HostBinding, args: ['style.height.px',] }]
34994
+ itemHeight: [{ type: Input }, { type: HostBinding, args: ['style.height.px',] }],
34995
+ singleMode: [{ type: Input }]
35088
34996
  };
35089
34997
 
35090
34998
  const IGX_COMBO_COMPONENT = new InjectionToken('IgxComboComponentToken');
35091
-
34999
+ let NEXT_ID$c = 0;
35092
35000
  /**
35093
35001
  * @hidden
35002
+ * The default number of items that should be in the combo's
35003
+ * drop-down list if no `[itemsMaxHeight]` is specified
35094
35004
  */
35095
- class IgxComboAddItemComponent extends IgxComboItemComponent {
35096
- get selected() {
35097
- return false;
35098
- }
35099
- set selected(value) {
35100
- }
35101
- /**
35102
- * @inheritdoc
35103
- */
35104
- clicked(event) {
35105
- this.comboAPI.disableTransitions = false;
35106
- this.comboAPI.add_custom_item();
35107
- }
35108
- }
35109
- IgxComboAddItemComponent.decorators = [
35110
- { type: Component, args: [{
35111
- selector: 'igx-combo-add-item',
35112
- template: '<ng-content></ng-content>',
35113
- providers: [{ provide: IgxComboItemComponent, useExisting: IgxComboAddItemComponent }]
35114
- },] }
35115
- ];
35116
-
35117
- /** @hidden */
35118
- class IgxComboDropDownComponent extends IgxDropDownComponent {
35119
- constructor(elementRef, cdr, platform, selection, combo, comboAPI, _displayDensityOptions) {
35120
- super(elementRef, cdr, platform, selection, _displayDensityOptions);
35121
- this.elementRef = elementRef;
35122
- this.cdr = cdr;
35123
- this.platform = platform;
35124
- this.selection = selection;
35125
- this.combo = combo;
35126
- this.comboAPI = comboAPI;
35127
- this._displayDensityOptions = _displayDensityOptions;
35128
- /**
35129
- * @hidden
35130
- * @internal
35131
- */
35132
- this.children = null;
35133
- this.scrollHandler = () => {
35134
- this.comboAPI.disableTransitions = true;
35135
- };
35136
- }
35137
- /** @hidden @internal */
35138
- get scrollContainer() {
35139
- return this.virtDir.dc.location.nativeElement;
35140
- }
35141
- get isScrolledToLast() {
35142
- const scrollTop = this.virtDir.scrollPosition;
35143
- const scrollHeight = this.virtDir.getScroll().scrollHeight;
35144
- return Math.floor(scrollTop + this.virtDir.igxForContainerSize) === scrollHeight;
35145
- }
35146
- get lastVisibleIndex() {
35147
- return this.combo.totalItemCount ?
35148
- Math.floor(this.combo.itemsMaxHeight / this.combo.itemHeight) :
35149
- this.items.length - 1;
35150
- }
35151
- get sortedChildren() {
35152
- if (this.children !== undefined) {
35153
- return this.children.toArray()
35154
- .sort((a, b) => a.index - b.index);
35155
- }
35156
- return null;
35157
- }
35158
- /**
35159
- * Get all non-header items
35160
- *
35161
- * ```typescript
35162
- * let myDropDownItems = this.dropdown.items;
35163
- * ```
35164
- */
35165
- get items() {
35166
- const items = [];
35167
- if (this.children !== undefined) {
35168
- const sortedChildren = this.sortedChildren;
35169
- for (const child of sortedChildren) {
35170
- if (!child.isHeader) {
35171
- items.push(child);
35172
- }
35173
- }
35174
- }
35175
- return items;
35176
- }
35177
- /**
35178
- * @hidden @internal
35179
- */
35180
- onFocus() {
35181
- this.focusedItem = this._focusedItem || this.items[0];
35182
- }
35183
- /**
35184
- * @hidden @internal
35185
- */
35186
- onBlur(_evt) {
35187
- this.focusedItem = null;
35188
- }
35189
- /**
35190
- * @hidden @internal
35191
- */
35192
- onToggleOpened() {
35193
- this.opened.emit();
35194
- }
35195
- /**
35196
- * @hidden
35197
- */
35198
- navigateFirst() {
35199
- this.navigateItem(this.virtDir.igxForOf.findIndex(e => !e.isHeader));
35200
- }
35201
- /**
35202
- * @hidden
35203
- */
35204
- navigatePrev() {
35205
- if (this._focusedItem && this._focusedItem.index === 0 && this.virtDir.state.startIndex === 0) {
35206
- this.combo.focusSearchInput(false);
35207
- }
35208
- else {
35209
- super.navigatePrev();
35210
- }
35211
- }
35212
- /**
35213
- * @hidden
35214
- */
35215
- navigateNext() {
35216
- const lastIndex = this.combo.totalItemCount ? this.combo.totalItemCount - 1 : this.virtDir.igxForOf.length - 1;
35217
- if (this._focusedItem && this._focusedItem.index === lastIndex) {
35218
- this.focusAddItemButton();
35219
- }
35220
- else {
35221
- super.navigateNext();
35222
- }
35223
- }
35224
- /**
35225
- * @hidden @internal
35226
- */
35227
- selectItem(item) {
35228
- if (item === null || item === undefined) {
35229
- return;
35230
- }
35231
- this.comboAPI.set_selected_item(item.itemID);
35232
- this._focusedItem = item;
35233
- }
35234
- /**
35235
- * @hidden @internal
35236
- */
35237
- updateScrollPosition() {
35238
- this.virtDir.getScroll().scrollTop = this._scrollPosition;
35239
- }
35240
- /**
35241
- * @hidden @internal
35242
- */
35243
- onItemActionKey(key) {
35244
- switch (key) {
35245
- case DropDownActionKey.ENTER:
35246
- this.handleEnter();
35247
- break;
35248
- case DropDownActionKey.SPACE:
35249
- this.handleSpace();
35250
- break;
35251
- case DropDownActionKey.ESCAPE:
35252
- this.close();
35253
- }
35254
- }
35255
- ngAfterViewInit() {
35256
- this.virtDir.getScroll().addEventListener('scroll', this.scrollHandler);
35257
- }
35258
- /**
35259
- * @hidden @internal
35260
- */
35261
- ngOnDestroy() {
35262
- this.virtDir.getScroll().removeEventListener('scroll', this.scrollHandler);
35263
- this.destroy$.next(true);
35264
- this.destroy$.complete();
35265
- }
35266
- scrollToHiddenItem(_newItem) { }
35267
- handleEnter() {
35268
- if (this.isAddItemFocused()) {
35269
- this.combo.addItemToCollection();
35270
- }
35271
- else {
35272
- this.close();
35273
- }
35274
- }
35275
- handleSpace() {
35276
- if (this.isAddItemFocused()) {
35277
- return;
35278
- }
35279
- else {
35280
- this.selectItem(this.focusedItem);
35281
- }
35282
- }
35283
- isAddItemFocused() {
35284
- return this.focusedItem instanceof IgxComboAddItemComponent;
35285
- }
35286
- focusAddItemButton() {
35287
- if (this.combo.isAddButtonVisible()) {
35288
- this.focusedItem = this.items[this.items.length - 1];
35289
- }
35290
- }
35291
- }
35292
- IgxComboDropDownComponent.decorators = [
35293
- { type: Component, args: [{
35294
- selector: 'igx-combo-drop-down',
35295
- 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",
35296
- providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }]
35297
- },] }
35298
- ];
35299
- IgxComboDropDownComponent.ctorParameters = () => [
35300
- { type: ElementRef },
35301
- { type: ChangeDetectorRef },
35302
- { type: PlatformUtil },
35303
- { type: IgxSelectionAPIService },
35304
- { type: undefined, decorators: [{ type: Inject, args: [IGX_COMBO_COMPONENT,] }] },
35305
- { type: IgxComboAPIService },
35306
- { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DisplayDensityToken,] }] }
35307
- ];
35308
- IgxComboDropDownComponent.propDecorators = {
35309
- children: [{ type: ContentChildren, args: [IgxComboItemComponent, { descendants: true },] }]
35005
+ const itemsInContainer = 10; // TODO: make private readonly
35006
+ /** @hidden @internal */
35007
+ const ItemHeights = {
35008
+ comfortable: 40,
35009
+ cosy: 32,
35010
+ compact: 28,
35310
35011
  };
35311
-
35312
- /**
35313
- * @hidden
35314
- */
35315
- class IgxComboFilteringPipe {
35316
- transform(collection, searchValue, displayKey, shouldFilter, filteringOptions) {
35317
- if (!collection) {
35318
- return [];
35319
- }
35320
- if (!searchValue || !shouldFilter) {
35321
- return collection;
35322
- }
35323
- else {
35324
- const searchTerm = filteringOptions.caseSensitive ? searchValue.trim() : searchValue.toLowerCase().trim();
35325
- if (displayKey != null) {
35326
- return collection.filter(e => filteringOptions.caseSensitive ? e[displayKey].includes(searchTerm) :
35327
- e[displayKey].toString().toLowerCase().includes(searchTerm));
35328
- }
35329
- else {
35330
- return collection.filter(e => filteringOptions.caseSensitive ? e.includes(searchTerm) :
35331
- e.toLowerCase().includes(searchTerm));
35332
- }
35333
- }
35334
- }
35335
- }
35336
- IgxComboFilteringPipe.decorators = [
35337
- { type: Pipe, args: [{
35338
- name: 'comboFiltering'
35339
- },] }
35340
- ];
35341
- /**
35342
- * @hidden
35343
- */
35344
- class IgxComboGroupingPipe {
35345
- constructor(combo) {
35346
- this.combo = combo;
35347
- }
35348
- transform(collection, groupKey, valueKey) {
35349
- this.combo.filteredData = collection;
35350
- if ((!groupKey && groupKey !== 0) || !collection.length) {
35351
- return collection;
35352
- }
35353
- const sorted = DataUtil.sort(cloneArray(collection), [{
35354
- fieldName: groupKey,
35355
- dir: SortingDirection.Asc,
35356
- ignoreCase: true,
35357
- strategy: DefaultSortingStrategy.instance()
35358
- }]);
35359
- const data = cloneArray(sorted);
35360
- let inserts = 0;
35361
- let currentHeader = null;
35362
- for (let i = 0; i < sorted.length; i++) {
35363
- let insertFlag = 0;
35364
- if (currentHeader !== sorted[i][groupKey]) {
35365
- currentHeader = sorted[i][groupKey];
35366
- insertFlag = 1;
35367
- }
35368
- if (insertFlag) {
35369
- data.splice(i + inserts, 0, {
35370
- [valueKey]: currentHeader,
35371
- [groupKey]: currentHeader,
35372
- isHeader: true
35373
- });
35374
- inserts++;
35375
- }
35376
- }
35377
- return data;
35378
- }
35379
- }
35380
- IgxComboGroupingPipe.decorators = [
35381
- { type: Pipe, args: [{
35382
- name: 'comboGrouping'
35383
- },] }
35384
- ];
35385
- IgxComboGroupingPipe.ctorParameters = () => [
35386
- { type: undefined, decorators: [{ type: Inject, args: [IGX_COMBO_COMPONENT,] }] }
35387
- ];
35388
-
35389
- /**
35390
- * @hidden
35391
- */
35012
+ /** @hidden @internal */
35392
35013
  var DataTypes;
35393
35014
  (function (DataTypes) {
35394
35015
  DataTypes["EMPTY"] = "empty";
@@ -35396,20 +35017,6 @@ var DataTypes;
35396
35017
  DataTypes["COMPLEX"] = "complex";
35397
35018
  DataTypes["PRIMARYKEY"] = "valueKey";
35398
35019
  })(DataTypes || (DataTypes = {}));
35399
- /**
35400
- * @hidden
35401
- */
35402
- const ItemHeights = {
35403
- comfortable: 40,
35404
- cosy: 32,
35405
- compact: 28,
35406
- };
35407
- /**
35408
- * @hidden
35409
- * The default number of items that should be in the combo's
35410
- * drop-down list if no `[itemsMaxHeight]` is specified
35411
- */
35412
- const itemsInContainer = 10;
35413
35020
  var IgxComboState;
35414
35021
  (function (IgxComboState) {
35415
35022
  /**
@@ -35425,52 +35032,31 @@ var IgxComboState;
35425
35032
  */
35426
35033
  IgxComboState[IgxComboState["INVALID"] = 2] = "INVALID";
35427
35034
  })(IgxComboState || (IgxComboState = {}));
35428
- /**
35429
- * When called with sets A & B, returns A - B (as array);
35430
- *
35431
- * @hidden
35432
- */
35433
- const diffInSets = (set1, set2) => {
35434
- const results = [];
35435
- set1.forEach(entry => {
35436
- if (!set2.has(entry)) {
35437
- results.push(entry);
35438
- }
35439
- });
35440
- return results;
35441
- };
35442
- const ɵ0$1 = diffInSets;
35443
- let NEXT_ID$c = 0;
35444
- /**
35445
- * Represents a drop-down list that provides editable functionalities, allowing users to choose an option from a predefined list.
35446
- *
35447
- * @igxModule IgxComboModule
35448
- * @igxTheme igx-combo-theme
35449
- * @igxKeywords combobox, combo selection
35450
- * @igxGroup Grids & Lists
35451
- *
35452
- * @remarks
35453
- * It provides the ability to filter items as well as perform single or multiple seleciton with the provided data.
35454
- * Additionally, it exposes keyboard navigation and custom styling capabilities.
35455
- * @example
35456
- * ```html
35457
- * <igx-combo [itemsMaxHeight]="250" [data]="locationData"
35458
- * [displayKey]="'field'" [valueKey]="'field'"
35459
- * placeholder="Location(s)" searchPlaceholder="Search...">
35460
- * </igx-combo>
35461
- * ```
35462
- */
35463
- class IgxComboComponent extends DisplayDensityBase {
35464
- constructor(elementRef, cdr, selection, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector) {
35035
+ class IgxComboBaseDirective extends DisplayDensityBase {
35036
+ constructor(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector) {
35465
35037
  super(_displayDensityOptions);
35466
35038
  this.elementRef = elementRef;
35467
35039
  this.cdr = cdr;
35468
- this.selection = selection;
35040
+ this.selectionService = selectionService;
35469
35041
  this.comboAPI = comboAPI;
35470
35042
  this._iconService = _iconService;
35471
35043
  this._displayDensityOptions = _displayDensityOptions;
35472
35044
  this._inputGroupType = _inputGroupType;
35473
35045
  this._injector = _injector;
35046
+ /**
35047
+ * Defines whether the caseSensitive icon should be shown in the search input
35048
+ *
35049
+ * ```typescript
35050
+ * // get
35051
+ * let myComboShowSearchCaseIcon = this.combo.showSearchCaseIcon;
35052
+ * ```
35053
+ *
35054
+ * ```html
35055
+ * <!--set-->
35056
+ * <igx-combo [showSearchCaseIcon]='true'></igx-combo>
35057
+ * ```
35058
+ */
35059
+ this.showSearchCaseIcon = false;
35474
35060
  /**
35475
35061
  * Set custom overlay settings that control how the combo's list of items is displayed.
35476
35062
  * Set:
@@ -35489,180 +35075,65 @@ class IgxComboComponent extends DisplayDensityBase {
35489
35075
  */
35490
35076
  this.overlaySettings = null;
35491
35077
  /**
35492
- * @hidden @internal
35493
- */
35494
- this.searchInput = null;
35495
- /**
35496
- * The custom template, if any, that should be used when rendering ITEMS in the combo list
35078
+ * Gets/gets combo id.
35497
35079
  *
35498
35080
  * ```typescript
35499
- * // Set in typescript
35500
- * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35501
- * myComponent.combo.itemTemplate = myCustomTemplate;
35081
+ * // get
35082
+ * let id = this.combo.id;
35502
35083
  * ```
35084
+ *
35503
35085
  * ```html
35504
- * <!-- Set in markup -->
35505
- * <igx-combo #combo>
35506
- * ...
35507
- * <ng-template igxComboItem>
35508
- * <div class="custom-item" let-item let-key="valueKey">
35509
- * <div class="custom-item__name">{{ item[key] }}</div>
35510
- * <div class="custom-item__cost">{{ item.cost }}</div>
35511
- * </div>
35512
- * </ng-template>
35513
- * </igx-combo>
35086
+ * <!--set-->
35087
+ * <igx-combo [id]='combo1'></igx-combo>
35514
35088
  * ```
35515
35089
  */
35516
- this.itemTemplate = null;
35090
+ this.id = `igx-combo-${NEXT_ID$c++}`;
35517
35091
  /**
35518
- * The custom template, if any, that should be used when rendering the HEADER for the combo items list
35092
+ * Controls whether custom values can be added to the collection
35519
35093
  *
35520
35094
  * ```typescript
35521
- * // Set in typescript
35522
- * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35523
- * myComponent.combo.headerTemplate = myCustomTemplate;
35095
+ * // get
35096
+ * let comboAllowsCustomValues = this.combo.allowCustomValues;
35524
35097
  * ```
35098
+ *
35525
35099
  * ```html
35526
- * <!-- Set in markup -->
35527
- * <igx-combo #combo>
35528
- * ...
35529
- * <ng-template igxComboHeader>
35530
- * <div class="combo__header">
35531
- * This is a custom header
35532
- * </div>
35533
- * </ng-template>
35534
- * </igx-combo>
35100
+ * <!--set-->
35101
+ * <igx-combo [allowCustomValues]='true'></igx-combo>
35535
35102
  * ```
35536
35103
  */
35537
- this.headerTemplate = null;
35104
+ this.allowCustomValues = false;
35538
35105
  /**
35539
- * The custom template, if any, that should be used when rendering the FOOTER for the combo items list
35106
+ * Determines which column in the data source is used to determine the value.
35540
35107
  *
35541
35108
  * ```typescript
35542
- * // Set in typescript
35543
- * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35544
- * myComponent.combo.footerTemplate = myCustomTemplate;
35109
+ * // get
35110
+ * let myComboValueKey = this.combo.valueKey;
35545
35111
  * ```
35112
+ *
35546
35113
  * ```html
35547
- * <!-- Set in markup -->
35548
- * <igx-combo #combo>
35549
- * ...
35550
- * <ng-template igxComboFooter>
35551
- * <div class="combo__footer">
35552
- * This is a custom footer
35553
- * </div>
35554
- * </ng-template>
35555
- * </igx-combo>
35114
+ * <!--set-->
35115
+ * <igx-combo [valueKey]='myKey'></igx-combo>
35556
35116
  * ```
35557
35117
  */
35558
- this.footerTemplate = null;
35118
+ this.valueKey = null;
35559
35119
  /**
35560
- * The custom template, if any, that should be used when rendering HEADER ITEMS for groups in the combo list
35561
- *
35562
- * ```typescript
35563
- * // Set in typescript
35564
- * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35565
- * myComponent.combo.headerItemTemplate = myCustomTemplate;
35566
- * ```
35120
+ * An @Input property that enabled/disables filtering in the list. The default is `true`.
35567
35121
  * ```html
35568
- * <!-- Set in markup -->
35569
- * <igx-combo #combo>
35570
- * ...
35571
- * <ng-template igxComboHeaderItem let-item let-key="groupKey">
35572
- * <div class="custom-item--group">Group header for {{ item[key] }}</div>
35573
- * </ng-template>
35574
- * </igx-combo>
35575
- * ```
35576
- */
35577
- this.headerItemTemplate = null;
35578
- /**
35579
- * The custom template, if any, that should be used when rendering the ADD BUTTON in the combo drop down
35580
- *
35581
- * ```typescript
35582
- * // Set in typescript
35583
- * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35584
- * myComponent.combo.addItemTemplate = myCustomTemplate;
35585
- * ```
35586
- * ```html
35587
- * <!-- Set in markup -->
35588
- * <igx-combo #combo>
35589
- * ...
35590
- * <ng-template igxComboAddItem>
35591
- * <button class="combo__add-button">
35592
- * Click to add item
35593
- * </button>
35594
- * </ng-template>
35595
- * </igx-combo>
35596
- * ```
35597
- */
35598
- this.addItemTemplate = null;
35599
- /**
35600
- * The custom template, if any, that should be used when rendering the ADD BUTTON in the combo drop down
35601
- *
35602
- * ```typescript
35603
- * // Set in typescript
35604
- * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35605
- * myComponent.combo.emptyTemplate = myCustomTemplate;
35606
- * ```
35607
- * ```html
35608
- * <!-- Set in markup -->
35609
- * <igx-combo #combo>
35610
- * ...
35611
- * <ng-template igxComboEmpty>
35612
- * <div class="combo--empty">
35613
- * There are no items to display
35614
- * </div>
35615
- * </ng-template>
35616
- * </igx-combo>
35617
- * ```
35618
- */
35619
- this.emptyTemplate = null;
35620
- /**
35621
- * The custom template, if any, that should be used when rendering the combo TOGGLE(open/close) button
35622
- *
35623
- * ```typescript
35624
- * // Set in typescript
35625
- * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35626
- * myComponent.combo.toggleIconTemplate = myCustomTemplate;
35627
- * ```
35628
- * ```html
35629
- * <!-- Set in markup -->
35630
- * <igx-combo #combo>
35631
- * ...
35632
- * <ng-template igxComboToggleIcon let-collapsed>
35633
- * <igx-icon>{{ collapsed ? 'remove_circle' : 'remove_circle_outline'}}</igx-icon>
35634
- * </ng-template>
35635
- * </igx-combo>
35636
- * ```
35637
- */
35638
- this.toggleIconTemplate = null;
35639
- /**
35640
- * The custom template, if any, that should be used when rendering the combo CLEAR button
35641
- *
35642
- * ```typescript
35643
- * // Set in typescript
35644
- * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35645
- * myComponent.combo.clearIconTemplate = myCustomTemplate;
35646
- * ```
35647
- * ```html
35648
- * <!-- Set in markup -->
35649
- * <igx-combo #combo>
35650
- * ...
35651
- * <ng-template igxComboClearIcon>
35652
- * <igx-icon>clear</igx-icon>
35653
- * </ng-template>
35654
- * </igx-combo>
35122
+ * <igx-combo [filterable]="false">
35655
35123
  * ```
35656
35124
  */
35657
- this.clearIconTemplate = null;
35125
+ this.filterable = true;
35126
+ /** @hidden @internal */
35127
+ this.cssClass = 'igx-combo'; // Independent of display density for the time being
35128
+ /** @hidden @internal */
35129
+ this.role = 'combobox';
35658
35130
  /**
35659
- * Emitted when item selection is changing, before the selection completes
35660
- *
35131
+ * An @Input property that enabled/disables combo. The default is `false`.
35661
35132
  * ```html
35662
- * <igx-combo (selectionChanging)='handleSelection()'></igx-combo>
35133
+ * <igx-combo [disabled]="'true'">
35663
35134
  * ```
35664
35135
  */
35665
- this.selectionChanging = new EventEmitter();
35136
+ this.disabled = false;
35666
35137
  /**
35667
35138
  * Emitted before the dropdown is opened
35668
35139
  *
@@ -35720,142 +35191,196 @@ class IgxComboComponent extends DisplayDensityBase {
35720
35191
  */
35721
35192
  this.dataPreLoad = new EventEmitter();
35722
35193
  /**
35723
- * Gets/gets combo id.
35194
+ * The custom template, if any, that should be used when rendering ITEMS in the combo list
35724
35195
  *
35725
35196
  * ```typescript
35726
- * // get
35727
- * let id = this.combo.id;
35197
+ * // Set in typescript
35198
+ * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35199
+ * myComponent.combo.itemTemplate = myCustomTemplate;
35728
35200
  * ```
35729
- *
35730
35201
  * ```html
35731
- * <!--set-->
35732
- * <igx-combo [id]='combo1'></igx-combo>
35202
+ * <!-- Set in markup -->
35203
+ * <igx-combo #combo>
35204
+ * ...
35205
+ * <ng-template igxComboItem>
35206
+ * <div class="custom-item" let-item let-key="valueKey">
35207
+ * <div class="custom-item__name">{{ item[key] }}</div>
35208
+ * <div class="custom-item__cost">{{ item.cost }}</div>
35209
+ * </div>
35210
+ * </ng-template>
35211
+ * </igx-combo>
35733
35212
  * ```
35734
35213
  */
35735
- this.id = `igx-combo-${NEXT_ID$c++}`;
35736
- /**
35737
- * @hidden @internal
35738
- */
35739
- this.cssClass = 'igx-combo'; // Independent of display density, at the time being
35740
- /**
35741
- * @hidden @internal
35742
- */
35743
- this.role = 'combobox';
35214
+ this.itemTemplate = null;
35744
35215
  /**
35745
- * Controls whether custom values can be added to the collection
35216
+ * The custom template, if any, that should be used when rendering the HEADER for the combo items list
35746
35217
  *
35747
35218
  * ```typescript
35748
- * // get
35749
- * let comboAllowsCustomValues = this.combo.allowCustomValues;
35219
+ * // Set in typescript
35220
+ * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35221
+ * myComponent.combo.headerTemplate = myCustomTemplate;
35750
35222
  * ```
35751
- *
35752
35223
  * ```html
35753
- * <!--set-->
35754
- * <igx-combo [allowCustomValues]='true'></igx-combo>
35224
+ * <!-- Set in markup -->
35225
+ * <igx-combo #combo>
35226
+ * ...
35227
+ * <ng-template igxComboHeader>
35228
+ * <div class="combo__header">
35229
+ * This is a custom header
35230
+ * </div>
35231
+ * </ng-template>
35232
+ * </igx-combo>
35755
35233
  * ```
35756
35234
  */
35757
- this.allowCustomValues = false;
35235
+ this.headerTemplate = null;
35758
35236
  /**
35759
- * Defines the placeholder value for the combo dropdown search field
35237
+ * The custom template, if any, that should be used when rendering the FOOTER for the combo items list
35760
35238
  *
35761
35239
  * ```typescript
35762
- * // get
35763
- * let myComboSearchPlaceholder = this.combo.searchPlaceholder;
35240
+ * // Set in typescript
35241
+ * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35242
+ * myComponent.combo.footerTemplate = myCustomTemplate;
35764
35243
  * ```
35765
- *
35766
35244
  * ```html
35767
- * <!--set-->
35768
- * <igx-combo [searchPlaceholder]='newPlaceHolder'></igx-combo>
35245
+ * <!-- Set in markup -->
35246
+ * <igx-combo #combo>
35247
+ * ...
35248
+ * <ng-template igxComboFooter>
35249
+ * <div class="combo__footer">
35250
+ * This is a custom footer
35251
+ * </div>
35252
+ * </ng-template>
35253
+ * </igx-combo>
35769
35254
  * ```
35770
35255
  */
35771
- this.searchPlaceholder = 'Enter a Search Term';
35256
+ this.footerTemplate = null;
35772
35257
  /**
35773
- * Defines whether the caseSensitive icon should be shown in the search input
35258
+ * The custom template, if any, that should be used when rendering HEADER ITEMS for groups in the combo list
35774
35259
  *
35775
35260
  * ```typescript
35776
- * // get
35777
- * let myComboShowSearchCaseIcon = this.combo.showSearchCaseIcon;
35261
+ * // Set in typescript
35262
+ * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35263
+ * myComponent.combo.headerItemTemplate = myCustomTemplate;
35778
35264
  * ```
35779
- *
35780
35265
  * ```html
35781
- * <!--set-->
35782
- * <igx-combo [showSearchCaseIcon]='true'></igx-combo>
35266
+ * <!-- Set in markup -->
35267
+ * <igx-combo #combo>
35268
+ * ...
35269
+ * <ng-template igxComboHeaderItem let-item let-key="groupKey">
35270
+ * <div class="custom-item--group">Group header for {{ item[key] }}</div>
35271
+ * </ng-template>
35272
+ * </igx-combo>
35783
35273
  * ```
35784
35274
  */
35785
- this.showSearchCaseIcon = false;
35275
+ this.headerItemTemplate = null;
35786
35276
  /**
35787
- * Combo value data source property.
35277
+ * The custom template, if any, that should be used when rendering the ADD BUTTON in the combo drop down
35788
35278
  *
35789
35279
  * ```typescript
35790
- * // get
35791
- * let myComboValueKey = this.combo.valueKey;
35280
+ * // Set in typescript
35281
+ * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35282
+ * myComponent.combo.addItemTemplate = myCustomTemplate;
35792
35283
  * ```
35793
- *
35794
35284
  * ```html
35795
- * <!--set-->
35796
- * <igx-combo [valueKey]='myKey'></igx-combo>
35285
+ * <!-- Set in markup -->
35286
+ * <igx-combo #combo>
35287
+ * ...
35288
+ * <ng-template igxComboAddItem>
35289
+ * <button class="combo__add-button">
35290
+ * Click to add item
35291
+ * </button>
35292
+ * </ng-template>
35293
+ * </igx-combo>
35797
35294
  * ```
35798
35295
  */
35799
- this.valueKey = null;
35296
+ this.addItemTemplate = null;
35800
35297
  /**
35801
- * An @Input property that enabled/disables filtering in the list. The default is `true`.
35298
+ * The custom template, if any, that should be used when rendering the ADD BUTTON in the combo drop down
35299
+ *
35300
+ * ```typescript
35301
+ * // Set in typescript
35302
+ * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35303
+ * myComponent.combo.emptyTemplate = myCustomTemplate;
35304
+ * ```
35802
35305
  * ```html
35803
- * <igx-combo [filterable]="false">
35306
+ * <!-- Set in markup -->
35307
+ * <igx-combo #combo>
35308
+ * ...
35309
+ * <ng-template igxComboEmpty>
35310
+ * <div class="combo--empty">
35311
+ * There are no items to display
35312
+ * </div>
35313
+ * </ng-template>
35314
+ * </igx-combo>
35804
35315
  * ```
35805
35316
  */
35806
- this.filterable = true;
35317
+ this.emptyTemplate = null;
35807
35318
  /**
35808
- * An @Input property that enabled/disables combo. The default is `false`.
35319
+ * The custom template, if any, that should be used when rendering the combo TOGGLE(open/close) button
35320
+ *
35321
+ * ```typescript
35322
+ * // Set in typescript
35323
+ * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35324
+ * myComponent.combo.toggleIconTemplate = myCustomTemplate;
35325
+ * ```
35809
35326
  * ```html
35810
- * <igx-combo [disabled]="'true'">
35327
+ * <!-- Set in markup -->
35328
+ * <igx-combo #combo>
35329
+ * ...
35330
+ * <ng-template igxComboToggleIcon let-collapsed>
35331
+ * <igx-icon>{{ collapsed ? 'remove_circle' : 'remove_circle_outline'}}</igx-icon>
35332
+ * </ng-template>
35333
+ * </igx-combo>
35811
35334
  * ```
35812
35335
  */
35813
- this.disabled = false;
35336
+ this.toggleIconTemplate = null;
35814
35337
  /**
35815
- * An @Input property that controls whether the combo's search box
35816
- * should be focused after the `opened` event is called
35817
- * When `false`, the combo's list item container will be focused instead
35338
+ * The custom template, if any, that should be used when rendering the combo CLEAR button
35339
+ *
35340
+ * ```typescript
35341
+ * // Set in typescript
35342
+ * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;
35343
+ * myComponent.combo.clearIconTemplate = myCustomTemplate;
35344
+ * ```
35345
+ * ```html
35346
+ * <!-- Set in markup -->
35347
+ * <igx-combo #combo>
35348
+ * ...
35349
+ * <ng-template igxComboClearIcon>
35350
+ * <igx-icon>clear</igx-icon>
35351
+ * </ng-template>
35352
+ * </igx-combo>
35353
+ * ```
35818
35354
  */
35819
- this.autoFocusSearch = true;
35355
+ this.clearIconTemplate = null;
35356
+ /** @hidden @internal */
35357
+ this.searchInput = null;
35820
35358
  this.dropdownContainer = null;
35821
- /**
35822
- * @hidden @internal
35823
- */
35359
+ /** @hidden @internal */
35824
35360
  this.customValueFlag = true;
35825
- /**
35826
- * @hidden @internal
35827
- */
35361
+ /** @hidden @internal */
35362
+ this.filterValue = '';
35363
+ /** @hidden @internal */
35828
35364
  this.defaultFallbackGroup = 'Other';
35829
- /**
35830
- * @hidden @internal
35831
- */
35365
+ /** @hidden @internal */
35832
35366
  this.filteringOptions = {
35833
35367
  caseSensitive: false
35834
35368
  };
35835
- /**
35836
- * @hidden @internal
35837
- */
35838
- this.filteringLogic = FilteringLogic.Or;
35839
- /** @hidden @internal */
35840
- this.filterValue = '';
35841
- this.stringFilters = IgxStringFilteringOperand;
35842
- this.booleanFilters = IgxBooleanFilteringOperand;
35369
+ this._data = [];
35370
+ this._value = '';
35843
35371
  this._groupKey = '';
35844
- this._prevInputValue = '';
35845
- this._dataType = '';
35846
- this._searchValue = '';
35847
- this._type = null;
35372
+ this._filteredData = [];
35373
+ this._remoteSelection = {};
35374
+ this._valid = IgxComboState.INITIAL;
35848
35375
  this.ngControl = null;
35849
35376
  this.destroy$ = new Subject();
35850
- this._data = [];
35851
- this._filteredData = [];
35377
+ this._onTouchedCallback = noop;
35378
+ this._onChangeCallback = noop;
35379
+ this._type = null;
35380
+ this._dataType = '';
35381
+ this._searchValue = '';
35852
35382
  this._itemHeight = null;
35853
35383
  this._itemsMaxHeight = null;
35854
- this._remoteSelection = {};
35855
- this._onChangeCallback = noop;
35856
- this._onTouchedCallback = noop;
35857
- this._value = '';
35858
- this._valid = IgxComboState.INITIAL;
35859
35384
  this.onStatusChanged = () => {
35860
35385
  if ((this.ngControl.control.touched || this.ngControl.control.dirty) &&
35861
35386
  (this.ngControl.control.validator || this.ngControl.control.asyncValidator)) {
@@ -35872,31 +35397,10 @@ class IgxComboComponent extends DisplayDensityBase {
35872
35397
  }
35873
35398
  this.manageRequiredAsterisk();
35874
35399
  };
35875
- this.comboAPI.register(this);
35876
- }
35877
- /**
35878
- * @hidden @internal
35879
- */
35880
- get displaySearchInput() {
35881
- return this.filterable || this.allowCustomValues;
35882
- }
35883
- /**
35884
- * @hidden @internal
35885
- */
35886
- get ariaExpanded() {
35887
- return !this.dropdown.collapsed;
35888
- }
35889
- /**
35890
- * @hidden @internal
35891
- */
35892
- get hasPopUp() {
35893
- return 'listbox';
35894
- }
35895
- /**
35896
- * @hidden @internal
35897
- */
35898
- get ariaOwns() {
35899
- return this.dropdown.id;
35400
+ this.findMatch = (element) => {
35401
+ const value = this.displayKey ? element[this.displayKey] : element;
35402
+ return value.toString().toLowerCase() === this.searchValue.trim().toLowerCase();
35403
+ };
35900
35404
  }
35901
35405
  /**
35902
35406
  * Configures the drop down list height
@@ -35942,12 +35446,6 @@ class IgxComboComponent extends DisplayDensityBase {
35942
35446
  set itemHeight(val) {
35943
35447
  this._itemHeight = val;
35944
35448
  }
35945
- /**
35946
- * @hidden @internal
35947
- */
35948
- get inputEmpty() {
35949
- return !this.value && !this.placeholder;
35950
- }
35951
35449
  /**
35952
35450
  * Combo data source.
35953
35451
  *
@@ -35966,7 +35464,7 @@ class IgxComboComponent extends DisplayDensityBase {
35966
35464
  this._displayKey = val;
35967
35465
  }
35968
35466
  /**
35969
- * Combo text data source property.
35467
+ * Determines which column in the data source is used to determine the display value.
35970
35468
  *
35971
35469
  * ```typescript
35972
35470
  * // get
@@ -36007,6 +35505,18 @@ class IgxComboComponent extends DisplayDensityBase {
36007
35505
  get groupKey() {
36008
35506
  return this._groupKey;
36009
35507
  }
35508
+ /** @hidden @internal */
35509
+ get ariaExpanded() {
35510
+ return !this.dropdown.collapsed;
35511
+ }
35512
+ /** @hidden @internal */
35513
+ get hasPopUp() {
35514
+ return 'listbox';
35515
+ }
35516
+ /** @hidden @internal */
35517
+ get ariaOwns() {
35518
+ return this.dropdown.id;
35519
+ }
36010
35520
  /**
36011
35521
  * An @Input property that sets how the combo will be styled.
36012
35522
  * The allowed values are `line`, `box`, `border` and `search`. The default is `box`.
@@ -36020,6 +35530,27 @@ class IgxComboComponent extends DisplayDensityBase {
36020
35530
  set type(val) {
36021
35531
  this._type = val;
36022
35532
  }
35533
+ /** @hidden @internal */
35534
+ get searchValue() {
35535
+ return this._searchValue;
35536
+ }
35537
+ set searchValue(val) {
35538
+ this.filterValue = val;
35539
+ this._searchValue = val;
35540
+ }
35541
+ /** @hidden @internal */
35542
+ get isRemote() {
35543
+ return this.totalItemCount > 0 &&
35544
+ this.valueKey &&
35545
+ this.dataType === DataTypes.COMPLEX;
35546
+ }
35547
+ /** @hidden @internal */
35548
+ get dataType() {
35549
+ if (this.displayKey) {
35550
+ return DataTypes.COMPLEX;
35551
+ }
35552
+ return DataTypes.PRIMITIVE;
35553
+ }
36023
35554
  /**
36024
35555
  * Gets if control is valid, when used in a form
36025
35556
  *
@@ -36044,32 +35575,15 @@ class IgxComboComponent extends DisplayDensityBase {
36044
35575
  this.comboInput.valid = IgxInputState[IgxComboState[valid]];
36045
35576
  }
36046
35577
  /**
36047
- * @hidden @internal
36048
- */
36049
- get searchValue() {
36050
- return this._searchValue;
36051
- }
36052
- set searchValue(val) {
36053
- this.filterValue = val;
36054
- this._searchValue = val;
36055
- }
36056
- /**
36057
- * @hidden @internal
36058
- */
36059
- onArrowDown(event) {
36060
- event.preventDefault();
36061
- event.stopPropagation();
36062
- this.open();
36063
- }
36064
- /**
36065
- * @hidden @internal
35578
+ * The text displayed in the combo input
35579
+ *
35580
+ * ```typescript
35581
+ * // get
35582
+ * let comboValue = this.combo.value;
35583
+ * ```
36066
35584
  */
36067
- onInputClick(event) {
36068
- event.stopPropagation();
36069
- event.preventDefault();
36070
- if (!this.disabled) {
36071
- this.toggle();
36072
- }
35585
+ get value() {
35586
+ return this._value;
36073
35587
  }
36074
35588
  /**
36075
35589
  * Defines the current state of the virtualized data. It contains `startIndex` and `chunkSize`
@@ -36093,6 +35607,16 @@ class IgxComboComponent extends DisplayDensityBase {
36093
35607
  set virtualizationState(state) {
36094
35608
  this.virtDir.state = state;
36095
35609
  }
35610
+ /**
35611
+ * Gets drop down state.
35612
+ *
35613
+ * ```typescript
35614
+ * let state = this.combo.collapsed;
35615
+ * ```
35616
+ */
35617
+ get collapsed() {
35618
+ return this.dropdown.collapsed;
35619
+ }
36096
35620
  /**
36097
35621
  * Gets total count of the virtual data items, when using remote service.
36098
35622
  *
@@ -36115,85 +35639,110 @@ class IgxComboComponent extends DisplayDensityBase {
36115
35639
  set totalItemCount(count) {
36116
35640
  this.virtDir.totalItemCount = count;
36117
35641
  }
35642
+ /** @hidden @internal */
35643
+ get template() {
35644
+ this._dataType = this.dataType;
35645
+ if (this.itemTemplate) {
35646
+ return this.itemTemplate;
35647
+ }
35648
+ if (this._dataType === DataTypes.COMPLEX) {
35649
+ return this.complexTemplate;
35650
+ }
35651
+ return this.primitiveTemplate;
35652
+ }
35653
+ /** @hidden @internal */
35654
+ onArrowDown(event) {
35655
+ event.preventDefault();
35656
+ event.stopPropagation();
35657
+ this.open();
35658
+ }
35659
+ /** @hidden @internal */
35660
+ ngOnInit() {
35661
+ this.ngControl = this._injector.get(NgControl, null);
35662
+ const targetElement = this.elementRef.nativeElement;
35663
+ this._overlaySettings = {
35664
+ target: targetElement,
35665
+ scrollStrategy: new AbsoluteScrollStrategy(),
35666
+ positionStrategy: new AutoPositionStrategy(),
35667
+ modal: false,
35668
+ closeOnOutsideClick: true,
35669
+ excludeFromOutsideClick: [targetElement]
35670
+ };
35671
+ this.selectionService.set(this.id, new Set());
35672
+ this._iconService.addSvgIconFromText(caseSensitive.name, caseSensitive.value, 'imx-icons');
35673
+ }
35674
+ /** @hidden @internal */
35675
+ ngAfterViewInit() {
35676
+ this.filteredData = [...this.data];
35677
+ if (this.ngControl) {
35678
+ this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.onStatusChanged);
35679
+ this.manageRequiredAsterisk();
35680
+ this.cdr.detectChanges();
35681
+ }
35682
+ this.virtDir.chunkPreload.pipe(takeUntil(this.destroy$)).subscribe((e) => {
35683
+ const eventArgs = Object.assign({}, e, { owner: this });
35684
+ this.dataPreLoad.emit(eventArgs);
35685
+ });
35686
+ }
35687
+ /** @hidden @internal */
35688
+ ngOnDestroy() {
35689
+ this.destroy$.next();
35690
+ this.destroy$.complete();
35691
+ this.comboAPI.clear();
35692
+ this.selectionService.clear(this.id);
35693
+ }
36118
35694
  /**
36119
- * The text displayed in the combo input
35695
+ * A method that opens/closes the combo.
36120
35696
  *
36121
- * ```typescript
36122
- * // get
36123
- * let comboValue = this.combo.value;
35697
+ * ```html
35698
+ * <button (click)="combo.toggle()">Toggle Combo</button>
35699
+ * <igx-combo #combo></igx-combo>
36124
35700
  * ```
36125
35701
  */
36126
- get value() {
36127
- return this._value;
35702
+ toggle() {
35703
+ const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);
35704
+ this.dropdown.toggle(overlaySettings);
36128
35705
  }
36129
35706
  /**
36130
- * @hidden @internal
35707
+ * A method that opens the combo.
35708
+ *
35709
+ * ```html
35710
+ * <button (click)="combo.open()">Open Combo</button>
35711
+ * <igx-combo #combo></igx-combo>
35712
+ * ```
36131
35713
  */
36132
- get filteredData() {
36133
- return this.filterable ? this._filteredData : this.data;
35714
+ open() {
35715
+ const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);
35716
+ this.dropdown.open(overlaySettings);
36134
35717
  }
36135
35718
  /**
36136
- * @hidden @internal
35719
+ * A method that closes the combo.
35720
+ *
35721
+ * ```html
35722
+ * <button (click)="combo.close()">Close Combo</button>
35723
+ * <igx-combo #combo></igx-combo>
35724
+ * ```
36137
35725
  */
36138
- set filteredData(val) {
36139
- this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;
36140
- this.checkMatch();
35726
+ close() {
35727
+ this.dropdown.close();
36141
35728
  }
36142
35729
  /**
36143
- * @hidden @internal
35730
+ * Triggers change detection on the combo view
36144
35731
  */
36145
- handleKeyUp(event) {
36146
- if (event.key === 'ArrowDown' || event.key === 'Down') {
36147
- this.dropdown.focusedItem = this.dropdown.items[0];
36148
- this.dropdownContainer.nativeElement.focus();
36149
- }
36150
- else if (event.key === 'Escape' || event.key === 'Esc') {
36151
- this.toggle();
36152
- }
36153
- }
36154
- /**
36155
- * @hidden @internal
36156
- */
36157
- handleKeyDown(event) {
36158
- if (event.key === 'ArrowUp' || event.key === 'Up') {
36159
- event.preventDefault();
36160
- event.stopPropagation();
36161
- this.close();
36162
- }
36163
- }
36164
- /**
36165
- * @hidden @internal
36166
- */
36167
- handleInputChange(event) {
36168
- if (event !== undefined) {
36169
- const args = {
36170
- searchText: event,
36171
- owner: this,
36172
- cancel: false
36173
- };
36174
- this.searchInputUpdate.emit(args);
36175
- if (args.cancel) {
36176
- this.filterValue = null;
36177
- }
36178
- }
36179
- this.checkMatch();
36180
- }
36181
- /**
36182
- * @hidden @internal
36183
- */
36184
- get dataType() {
36185
- if (this.displayKey) {
36186
- return DataTypes.COMPLEX;
36187
- }
36188
- return DataTypes.PRIMITIVE;
35732
+ triggerCheck() {
35733
+ this.cdr.detectChanges();
36189
35734
  }
36190
35735
  /**
36191
- * @hidden @internal
35736
+ * Get current selection state
35737
+ *
35738
+ * @returns Array of selected items
35739
+ * ```typescript
35740
+ * let selectedItems = this.combo.selectedItems();
35741
+ * ```
36192
35742
  */
36193
- get isRemote() {
36194
- return this.totalItemCount > 0 &&
36195
- this.valueKey &&
36196
- this.dataType === DataTypes.COMPLEX;
35743
+ get selection() {
35744
+ const items = Array.from(this.selectionService.get(this.id));
35745
+ return items;
36197
35746
  }
36198
35747
  /**
36199
35748
  * Returns if the specified itemID is selected
@@ -36202,36 +35751,11 @@ class IgxComboComponent extends DisplayDensityBase {
36202
35751
  * @internal
36203
35752
  */
36204
35753
  isItemSelected(item) {
36205
- return this.selection.is_item_selected(this.id, item);
36206
- }
36207
- /**
36208
- * Triggers change detection on the combo view
36209
- */
36210
- triggerCheck() {
36211
- this.cdr.detectChanges();
36212
- }
36213
- /**
36214
- * @hidden @internal
36215
- */
36216
- isAddButtonVisible() {
36217
- // This should always return a boolean value. If this.searchValue was '', it returns '' instead of false;
36218
- return this.searchValue !== '' && this.customValueFlag;
35754
+ return this.selectionService.is_item_selected(this.id, item);
36219
35755
  }
36220
- /**
36221
- * @hidden @internal
36222
- */
36223
- handleSelectAll(evt) {
36224
- if (evt.checked) {
36225
- this.selectAllItems();
36226
- }
36227
- else {
36228
- this.deselectAllItems();
36229
- }
36230
- }
36231
- /**
36232
- * @hidden @internal
36233
- */
35756
+ /** @hidden @internal */
36234
35757
  addItemToCollection() {
35758
+ var _a;
36235
35759
  if (!this.searchValue) {
36236
35760
  return;
36237
35761
  }
@@ -36256,33 +35780,91 @@ class IgxComboComponent extends DisplayDensityBase {
36256
35780
  this.data.push(args.addedItem);
36257
35781
  // trigger re-render
36258
35782
  this.data = cloneArray(this.data);
36259
- this.selectItems(this.valueKey !== null && this.valueKey !== undefined ?
35783
+ this.select(this.valueKey !== null && this.valueKey !== undefined ?
36260
35784
  [args.addedItem[this.valueKey]] : [args.addedItem], false);
36261
35785
  this.customValueFlag = false;
36262
- this.searchInput.nativeElement.focus();
35786
+ (_a = this.searchInput) === null || _a === void 0 ? void 0 : _a.nativeElement.focus();
36263
35787
  this.dropdown.focusedItem = null;
36264
35788
  this.virtDir.scrollTo(0);
36265
35789
  }
36266
- /**
36267
- * @hidden @internal
36268
- */
36269
- focusSearchInput(opening) {
36270
- if (this.displaySearchInput && this.searchInput) {
36271
- this.searchInput.nativeElement.focus();
36272
- }
36273
- else {
36274
- if (opening) {
36275
- this.dropdownContainer.nativeElement.focus();
36276
- }
36277
- else {
36278
- this.comboInput.nativeElement.focus();
36279
- this.toggle();
35790
+ /** @hidden @internal */
35791
+ isAddButtonVisible() {
35792
+ // This should always return a boolean value. If this.searchValue was '', it returns '' instead of false;
35793
+ return this.searchValue !== '' && this.customValueFlag;
35794
+ }
35795
+ /** @hidden @internal */
35796
+ handleInputChange(event) {
35797
+ if (event !== undefined) {
35798
+ const args = {
35799
+ searchText: typeof event === 'string' ? event : event.target.value,
35800
+ owner: this,
35801
+ cancel: false
35802
+ };
35803
+ this.searchInputUpdate.emit(args);
35804
+ if (args.cancel) {
35805
+ this.filterValue = null;
36280
35806
  }
36281
35807
  }
35808
+ this.checkMatch();
36282
35809
  }
36283
35810
  /**
36284
- * @hidden @internal
35811
+ * Event handlers
35812
+ *
35813
+ * @hidden
35814
+ * @internal
36285
35815
  */
35816
+ handleOpening(e) {
35817
+ const args = { owner: this, event: e.event, cancel: e.cancel };
35818
+ this.opening.emit(args);
35819
+ e.cancel = args.cancel;
35820
+ }
35821
+ /** @hidden @internal */
35822
+ handleClosing(e) {
35823
+ var _a;
35824
+ const args = { owner: this, event: e.event, cancel: e.cancel };
35825
+ this.closing.emit(args);
35826
+ e.cancel = args.cancel;
35827
+ if (e.cancel) {
35828
+ return;
35829
+ }
35830
+ this.searchValue = '';
35831
+ if (!e.event) {
35832
+ (_a = this.comboInput) === null || _a === void 0 ? void 0 : _a.nativeElement.focus();
35833
+ }
35834
+ }
35835
+ /** @hidden @internal */
35836
+ handleClosed() {
35837
+ this.closed.emit({ owner: this });
35838
+ }
35839
+ /** @hidden @internal */
35840
+ handleKeyDown(event) {
35841
+ if (event.key === 'ArrowUp' || event.key === 'Up') {
35842
+ event.preventDefault();
35843
+ event.stopPropagation();
35844
+ this.close();
35845
+ }
35846
+ }
35847
+ /** @hidden @internal */
35848
+ registerOnChange(fn) {
35849
+ this._onChangeCallback = fn;
35850
+ }
35851
+ /** @hidden @internal */
35852
+ registerOnTouched(fn) {
35853
+ this._onTouchedCallback = fn;
35854
+ }
35855
+ /** @hidden @internal */
35856
+ setDisabledState(isDisabled) {
35857
+ this.disabled = isDisabled;
35858
+ }
35859
+ /** @hidden @internal */
35860
+ onClick(event) {
35861
+ event.stopPropagation();
35862
+ event.preventDefault();
35863
+ if (!this.disabled) {
35864
+ this.toggle();
35865
+ }
35866
+ }
35867
+ /** @hidden @internal */
36286
35868
  onBlur() {
36287
35869
  if (this.collapsed) {
36288
35870
  this._onTouchedCallback();
@@ -36294,174 +35876,600 @@ class IgxComboComponent extends DisplayDensityBase {
36294
35876
  }
36295
35877
  }
36296
35878
  }
35879
+ /** @hidden @internal */
35880
+ toggleCaseSensitive() {
35881
+ this.filteringOptions = { caseSensitive: !this.filteringOptions.caseSensitive };
35882
+ }
35883
+ /** if there is a valueKey - map the keys to data items, else - just return the keys */
35884
+ convertKeysToItems(keys) {
35885
+ if (this.comboAPI.valueKey === null) {
35886
+ return keys;
35887
+ }
35888
+ // map keys vs. filter data to retain the order of the selected items
35889
+ return keys.map(key => this.data.find(entry => entry[this.valueKey] === key)).filter(e => e !== undefined);
35890
+ }
35891
+ checkMatch() {
35892
+ const itemMatch = this.filteredData.some(this.findMatch);
35893
+ this.customValueFlag = this.allowCustomValues && !itemMatch;
35894
+ }
35895
+ manageRequiredAsterisk() {
35896
+ if (this.ngControl && this.ngControl.control.validator) {
35897
+ // Run the validation with empty object to check if required is enabled.
35898
+ const error = this.ngControl.control.validator({});
35899
+ this.inputGroup.isRequired = error && error.required;
35900
+ }
35901
+ }
35902
+ /** Contains key-value pairs of the selected valueKeys and their resp. displayKeys */
35903
+ registerRemoteEntries(ids, add = true) {
35904
+ if (add) {
35905
+ const selection = this.getValueDisplayPairs(ids);
35906
+ for (const entry of selection) {
35907
+ this._remoteSelection[entry[this.valueKey]] = entry[this.displayKey];
35908
+ }
35909
+ }
35910
+ else {
35911
+ for (const entry of ids) {
35912
+ delete this._remoteSelection[entry];
35913
+ }
35914
+ }
35915
+ }
36297
35916
  /**
36298
- * @hidden @internal
35917
+ * For `id: any[]` returns a mapped `{ [combo.valueKey]: any, [combo.displayKey]: any }[]`
36299
35918
  */
36300
- ngOnInit() {
36301
- this.ngControl = this._injector.get(NgControl, null);
36302
- const targetElement = this.elementRef.nativeElement;
36303
- this._overlaySettings = {
36304
- target: targetElement,
36305
- scrollStrategy: new AbsoluteScrollStrategy(),
36306
- positionStrategy: new AutoPositionStrategy(),
36307
- modal: false,
36308
- closeOnOutsideClick: true,
36309
- excludeFromOutsideClick: [targetElement]
35919
+ getValueDisplayPairs(ids) {
35920
+ return this.data.filter(entry => ids.indexOf(entry[this.valueKey]) > -1).map(e => ({
35921
+ [this.valueKey]: e[this.valueKey],
35922
+ [this.displayKey]: e[this.displayKey]
35923
+ }));
35924
+ }
35925
+ getRemoteSelection(newSelection, oldSelection) {
35926
+ if (!newSelection.length) {
35927
+ // If new selection is empty, clear all items
35928
+ this.registerRemoteEntries(oldSelection, false);
35929
+ return '';
35930
+ }
35931
+ const removedItems = oldSelection.filter(e => newSelection.indexOf(e) < 0);
35932
+ const addedItems = newSelection.filter(e => oldSelection.indexOf(e) < 0);
35933
+ this.registerRemoteEntries(addedItems);
35934
+ this.registerRemoteEntries(removedItems, false);
35935
+ return Object.keys(this._remoteSelection).map(e => this._remoteSelection[e]).join(', ');
35936
+ }
35937
+ }
35938
+ IgxComboBaseDirective.decorators = [
35939
+ { type: Directive }
35940
+ ];
35941
+ IgxComboBaseDirective.ctorParameters = () => [
35942
+ { type: ElementRef },
35943
+ { type: ChangeDetectorRef },
35944
+ { type: IgxSelectionAPIService },
35945
+ { type: IgxComboAPIService },
35946
+ { type: IgxIconService },
35947
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DisplayDensityToken,] }] },
35948
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [IGX_INPUT_GROUP_TYPE,] }] },
35949
+ { type: Injector, decorators: [{ type: Optional }] }
35950
+ ];
35951
+ IgxComboBaseDirective.propDecorators = {
35952
+ showSearchCaseIcon: [{ type: Input }],
35953
+ overlaySettings: [{ type: Input }],
35954
+ id: [{ type: HostBinding, args: ['attr.id',] }, { type: Input }],
35955
+ width: [{ type: HostBinding, args: ['style.width',] }, { type: Input }],
35956
+ allowCustomValues: [{ type: Input }],
35957
+ itemsMaxHeight: [{ type: Input }],
35958
+ itemHeight: [{ type: Input }],
35959
+ itemsWidth: [{ type: Input }],
35960
+ placeholder: [{ type: Input }],
35961
+ data: [{ type: Input }],
35962
+ valueKey: [{ type: Input }],
35963
+ displayKey: [{ type: Input }],
35964
+ groupKey: [{ type: Input }],
35965
+ filterable: [{ type: Input }],
35966
+ ariaLabelledBy: [{ type: Input }, { type: HostBinding, args: ['attr.aria-labelledby',] }],
35967
+ cssClass: [{ type: HostBinding, args: ['class.igx-combo',] }],
35968
+ role: [{ type: HostBinding, args: [`attr.role`,] }],
35969
+ ariaExpanded: [{ type: HostBinding, args: ['attr.aria-expanded',] }],
35970
+ hasPopUp: [{ type: HostBinding, args: ['attr.aria-haspopup',] }],
35971
+ ariaOwns: [{ type: HostBinding, args: ['attr.aria-owns',] }],
35972
+ disabled: [{ type: Input }],
35973
+ type: [{ type: Input }],
35974
+ opening: [{ type: Output }],
35975
+ opened: [{ type: Output }],
35976
+ closing: [{ type: Output }],
35977
+ closed: [{ type: Output }],
35978
+ addition: [{ type: Output }],
35979
+ searchInputUpdate: [{ type: Output }],
35980
+ dataPreLoad: [{ type: Output }],
35981
+ itemTemplate: [{ type: ContentChild, args: [IgxComboItemDirective, { read: TemplateRef },] }],
35982
+ headerTemplate: [{ type: ContentChild, args: [IgxComboHeaderDirective, { read: TemplateRef },] }],
35983
+ footerTemplate: [{ type: ContentChild, args: [IgxComboFooterDirective, { read: TemplateRef },] }],
35984
+ headerItemTemplate: [{ type: ContentChild, args: [IgxComboHeaderItemDirective, { read: TemplateRef },] }],
35985
+ addItemTemplate: [{ type: ContentChild, args: [IgxComboAddItemDirective, { read: TemplateRef },] }],
35986
+ emptyTemplate: [{ type: ContentChild, args: [IgxComboEmptyDirective, { read: TemplateRef },] }],
35987
+ toggleIconTemplate: [{ type: ContentChild, args: [IgxComboToggleIconDirective, { read: TemplateRef },] }],
35988
+ clearIconTemplate: [{ type: ContentChild, args: [IgxComboClearIconDirective, { read: TemplateRef },] }],
35989
+ inputGroup: [{ type: ViewChild, args: ['inputGroup', { read: IgxInputGroupComponent, static: true },] }],
35990
+ comboInput: [{ type: ViewChild, args: ['comboInput', { read: IgxInputDirective, static: true },] }],
35991
+ searchInput: [{ type: ViewChild, args: ['searchInput',] }],
35992
+ virtualScrollContainer: [{ type: ViewChild, args: [IgxForOfDirective, { static: true },] }],
35993
+ virtDir: [{ type: ViewChild, args: [IgxForOfDirective, { read: IgxForOfDirective, static: true },] }],
35994
+ dropdownContainer: [{ type: ViewChild, args: ['dropdownItemContainer', { static: true },] }],
35995
+ primitiveTemplate: [{ type: ViewChild, args: ['primitive', { read: TemplateRef, static: true },] }],
35996
+ complexTemplate: [{ type: ViewChild, args: ['complex', { read: TemplateRef, static: true },] }],
35997
+ onArrowDown: [{ type: HostListener, args: ['keydown.ArrowDown', ['$event'],] }, { type: HostListener, args: ['keydown.Alt.ArrowDown', ['$event'],] }]
35998
+ };
35999
+
36000
+ /**
36001
+ * @hidden
36002
+ */
36003
+ class IgxComboAddItemComponent extends IgxComboItemComponent {
36004
+ get selected() {
36005
+ return false;
36006
+ }
36007
+ set selected(value) {
36008
+ }
36009
+ /**
36010
+ * @inheritdoc
36011
+ */
36012
+ clicked(event) {
36013
+ this.comboAPI.disableTransitions = false;
36014
+ this.comboAPI.add_custom_item();
36015
+ }
36016
+ }
36017
+ IgxComboAddItemComponent.decorators = [
36018
+ { type: Component, args: [{
36019
+ selector: 'igx-combo-add-item',
36020
+ template: '<ng-content></ng-content>',
36021
+ providers: [{ provide: IgxComboItemComponent, useExisting: IgxComboAddItemComponent }]
36022
+ },] }
36023
+ ];
36024
+
36025
+ /** @hidden */
36026
+ class IgxComboDropDownComponent extends IgxDropDownComponent {
36027
+ constructor(elementRef, cdr, platform, selection, combo, comboAPI, _displayDensityOptions) {
36028
+ super(elementRef, cdr, platform, selection, _displayDensityOptions);
36029
+ this.elementRef = elementRef;
36030
+ this.cdr = cdr;
36031
+ this.platform = platform;
36032
+ this.selection = selection;
36033
+ this.combo = combo;
36034
+ this.comboAPI = comboAPI;
36035
+ this._displayDensityOptions = _displayDensityOptions;
36036
+ /** @hidden @internal */
36037
+ this.singleMode = false;
36038
+ /**
36039
+ * @hidden
36040
+ * @internal
36041
+ */
36042
+ this.children = null;
36043
+ this.scrollHandler = () => {
36044
+ this.comboAPI.disableTransitions = true;
36310
36045
  };
36311
- this.selection.set(this.id, new Set());
36312
- this._iconService.addSvgIconFromText(caseSensitive.name, caseSensitive.value, 'imx-icons');
36046
+ }
36047
+ /** @hidden @internal */
36048
+ get scrollContainer() {
36049
+ return this.virtDir.dc.location.nativeElement;
36050
+ }
36051
+ get isScrolledToLast() {
36052
+ const scrollTop = this.virtDir.scrollPosition;
36053
+ const scrollHeight = this.virtDir.getScroll().scrollHeight;
36054
+ return Math.floor(scrollTop + this.virtDir.igxForContainerSize) === scrollHeight;
36055
+ }
36056
+ get lastVisibleIndex() {
36057
+ return this.combo.totalItemCount ?
36058
+ Math.floor(this.combo.itemsMaxHeight / this.combo.itemHeight) :
36059
+ this.items.length - 1;
36060
+ }
36061
+ get sortedChildren() {
36062
+ if (this.children !== undefined) {
36063
+ return this.children.toArray()
36064
+ .sort((a, b) => a.index - b.index);
36065
+ }
36066
+ return null;
36313
36067
  }
36314
36068
  /**
36315
- * @hidden @internal
36069
+ * Get all non-header items
36070
+ *
36071
+ * ```typescript
36072
+ * let myDropDownItems = this.dropdown.items;
36073
+ * ```
36316
36074
  */
36317
- ngAfterViewInit() {
36318
- this.filteredData = [...this.data];
36319
- if (this.ngControl) {
36320
- this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.onStatusChanged);
36321
- this.manageRequiredAsterisk();
36322
- this.cdr.detectChanges();
36075
+ get items() {
36076
+ const items = [];
36077
+ if (this.children !== undefined) {
36078
+ const sortedChildren = this.sortedChildren;
36079
+ for (const child of sortedChildren) {
36080
+ if (!child.isHeader) {
36081
+ items.push(child);
36082
+ }
36083
+ }
36323
36084
  }
36324
- this.virtDir.chunkPreload.pipe(takeUntil(this.destroy$)).subscribe((e) => {
36325
- const eventArgs = Object.assign({}, e, { owner: this });
36326
- this.dataPreLoad.emit(eventArgs);
36327
- });
36085
+ return items;
36328
36086
  }
36329
36087
  /**
36330
36088
  * @hidden @internal
36331
36089
  */
36332
- ngOnDestroy() {
36333
- this.destroy$.next();
36334
- this.destroy$.complete();
36335
- this.comboAPI.clear();
36336
- this.selection.clear(this.id);
36090
+ onFocus() {
36091
+ this.focusedItem = this._focusedItem || this.items[0];
36337
36092
  }
36338
36093
  /**
36339
36094
  * @hidden @internal
36340
36095
  */
36341
- writeValue(value) {
36342
- const selection = Array.isArray(value) ? value : [];
36343
- const oldSelection = this.selectedItems();
36344
- this.selection.select_items(this.id, selection, true);
36345
- this.cdr.markForCheck();
36346
- this._value = this.createDisplayText(this.selectedItems(), oldSelection);
36096
+ onBlur(_evt) {
36097
+ this.focusedItem = null;
36347
36098
  }
36348
36099
  /**
36349
36100
  * @hidden @internal
36350
36101
  */
36351
- registerOnChange(fn) {
36352
- this._onChangeCallback = fn;
36102
+ onToggleOpened() {
36103
+ this.opened.emit();
36353
36104
  }
36354
36105
  /**
36355
- * @hidden @internal
36106
+ * @hidden
36356
36107
  */
36357
- registerOnTouched(fn) {
36358
- this._onTouchedCallback = fn;
36108
+ navigateFirst() {
36109
+ this.navigateItem(this.virtDir.igxForOf.findIndex(e => !e.isHeader));
36359
36110
  }
36360
36111
  /**
36361
- * @hidden @internal
36112
+ * @hidden
36362
36113
  */
36363
- setDisabledState(isDisabled) {
36364
- this.disabled = isDisabled;
36114
+ navigatePrev() {
36115
+ if (this._focusedItem && this._focusedItem.index === 0 && this.virtDir.state.startIndex === 0) {
36116
+ this.combo.focusSearchInput(false);
36117
+ }
36118
+ else {
36119
+ super.navigatePrev();
36120
+ }
36365
36121
  }
36366
36122
  /**
36367
36123
  * @hidden
36368
36124
  */
36369
- getEditElement() {
36370
- return this.comboInput.nativeElement;
36125
+ navigateNext() {
36126
+ const lastIndex = this.combo.totalItemCount ? this.combo.totalItemCount - 1 : this.virtDir.igxForOf.length - 1;
36127
+ if (this._focusedItem && this._focusedItem.index === lastIndex) {
36128
+ this.focusAddItemButton();
36129
+ }
36130
+ else {
36131
+ super.navigateNext();
36132
+ }
36371
36133
  }
36372
36134
  /**
36373
36135
  * @hidden @internal
36374
36136
  */
36375
- get template() {
36376
- this._dataType = this.dataType;
36377
- if (this.itemTemplate) {
36378
- return this.itemTemplate;
36379
- }
36380
- if (this._dataType === DataTypes.COMPLEX) {
36381
- return this.complexTemplate;
36137
+ selectItem(item) {
36138
+ if (item === null || item === undefined) {
36139
+ return;
36382
36140
  }
36383
- return this.primitiveTemplate;
36141
+ this.comboAPI.set_selected_item(item.itemID);
36142
+ this._focusedItem = item;
36384
36143
  }
36385
36144
  /**
36386
36145
  * @hidden @internal
36387
36146
  */
36388
- get context() {
36389
- return {
36390
- $implicit: this
36391
- };
36147
+ updateScrollPosition() {
36148
+ this.virtDir.getScroll().scrollTop = this._scrollPosition;
36392
36149
  }
36393
36150
  /**
36394
36151
  * @hidden @internal
36395
36152
  */
36396
- handleClearItems(event) {
36397
- if (this.disabled) {
36153
+ onItemActionKey(key) {
36154
+ switch (key) {
36155
+ case DropDownActionKey.ENTER:
36156
+ this.handleEnter();
36157
+ break;
36158
+ case DropDownActionKey.SPACE:
36159
+ this.handleSpace();
36160
+ break;
36161
+ case DropDownActionKey.ESCAPE:
36162
+ this.close();
36163
+ }
36164
+ }
36165
+ ngAfterViewInit() {
36166
+ this.virtDir.getScroll().addEventListener('scroll', this.scrollHandler);
36167
+ }
36168
+ /**
36169
+ * @hidden @internal
36170
+ */
36171
+ ngOnDestroy() {
36172
+ this.virtDir.getScroll().removeEventListener('scroll', this.scrollHandler);
36173
+ this.destroy$.next(true);
36174
+ this.destroy$.complete();
36175
+ }
36176
+ scrollToHiddenItem(_newItem) { }
36177
+ handleEnter() {
36178
+ if (this.isAddItemFocused()) {
36179
+ this.combo.addItemToCollection();
36398
36180
  return;
36399
36181
  }
36400
- this.deselectAllItems(true, event);
36401
- if (this.collapsed) {
36402
- this.getEditElement().focus();
36182
+ if (this.singleMode && this.focusedItem) {
36183
+ this.combo.select(this.focusedItem.itemID);
36184
+ }
36185
+ this.close();
36186
+ }
36187
+ handleSpace() {
36188
+ if (this.isAddItemFocused()) {
36189
+ return;
36403
36190
  }
36404
36191
  else {
36405
- this.focusSearchInput(true);
36192
+ this.selectItem(this.focusedItem);
36406
36193
  }
36407
- event.stopPropagation();
36194
+ }
36195
+ isAddItemFocused() {
36196
+ return this.focusedItem instanceof IgxComboAddItemComponent;
36197
+ }
36198
+ focusAddItemButton() {
36199
+ if (this.combo.isAddButtonVisible()) {
36200
+ this.focusedItem = this.items[this.items.length - 1];
36201
+ }
36202
+ }
36203
+ }
36204
+ IgxComboDropDownComponent.decorators = [
36205
+ { type: Component, args: [{
36206
+ selector: 'igx-combo-drop-down',
36207
+ 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",
36208
+ providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }]
36209
+ },] }
36210
+ ];
36211
+ IgxComboDropDownComponent.ctorParameters = () => [
36212
+ { type: ElementRef },
36213
+ { type: ChangeDetectorRef },
36214
+ { type: PlatformUtil },
36215
+ { type: IgxSelectionAPIService },
36216
+ { type: undefined, decorators: [{ type: Inject, args: [IGX_COMBO_COMPONENT,] }] },
36217
+ { type: IgxComboAPIService },
36218
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DisplayDensityToken,] }] }
36219
+ ];
36220
+ IgxComboDropDownComponent.propDecorators = {
36221
+ singleMode: [{ type: Input }],
36222
+ children: [{ type: ContentChildren, args: [IgxComboItemComponent, { descendants: true },] }]
36223
+ };
36224
+
36225
+ /**
36226
+ * @hidden
36227
+ */
36228
+ class IgxComboFilteringPipe {
36229
+ transform(collection, searchValue, displayKey, filteringOptions, shouldFilter = false) {
36230
+ if (!collection) {
36231
+ return [];
36232
+ }
36233
+ if (!searchValue || !shouldFilter) {
36234
+ return collection;
36235
+ }
36236
+ else {
36237
+ const searchTerm = filteringOptions.caseSensitive ? searchValue.trim() : searchValue.toLowerCase().trim();
36238
+ if (displayKey != null) {
36239
+ return collection.filter(e => filteringOptions.caseSensitive ? e[displayKey].includes(searchTerm) :
36240
+ e[displayKey].toString().toLowerCase().includes(searchTerm));
36241
+ }
36242
+ else {
36243
+ return collection.filter(e => filteringOptions.caseSensitive ? e.includes(searchTerm) :
36244
+ e.toString().toLowerCase().includes(searchTerm));
36245
+ }
36246
+ }
36247
+ }
36248
+ }
36249
+ IgxComboFilteringPipe.decorators = [
36250
+ { type: Pipe, args: [{
36251
+ name: 'comboFiltering'
36252
+ },] }
36253
+ ];
36254
+ /**
36255
+ * @hidden
36256
+ */
36257
+ class IgxComboGroupingPipe {
36258
+ constructor(combo) {
36259
+ this.combo = combo;
36260
+ }
36261
+ transform(collection, groupKey, valueKey) {
36262
+ this.combo.filteredData = collection;
36263
+ if ((!groupKey && groupKey !== 0) || !collection.length) {
36264
+ return collection;
36265
+ }
36266
+ const sorted = DataUtil.sort(cloneArray(collection), [{
36267
+ fieldName: groupKey,
36268
+ dir: SortingDirection.Asc,
36269
+ ignoreCase: true,
36270
+ strategy: DefaultSortingStrategy.instance()
36271
+ }]);
36272
+ const data = cloneArray(sorted);
36273
+ let inserts = 0;
36274
+ let currentHeader = null;
36275
+ for (let i = 0; i < sorted.length; i++) {
36276
+ let insertFlag = 0;
36277
+ if (currentHeader !== sorted[i][groupKey]) {
36278
+ currentHeader = sorted[i][groupKey];
36279
+ insertFlag = 1;
36280
+ }
36281
+ if (insertFlag) {
36282
+ data.splice(i + inserts, 0, {
36283
+ [valueKey]: currentHeader,
36284
+ [groupKey]: currentHeader,
36285
+ isHeader: true
36286
+ });
36287
+ inserts++;
36288
+ }
36289
+ }
36290
+ return data;
36291
+ }
36292
+ }
36293
+ IgxComboGroupingPipe.decorators = [
36294
+ { type: Pipe, args: [{
36295
+ name: 'comboGrouping'
36296
+ },] }
36297
+ ];
36298
+ IgxComboGroupingPipe.ctorParameters = () => [
36299
+ { type: undefined, decorators: [{ type: Inject, args: [IGX_COMBO_COMPONENT,] }] }
36300
+ ];
36301
+
36302
+ /**
36303
+ * When called with sets A & B, returns A - B (as array);
36304
+ *
36305
+ * @hidden
36306
+ */
36307
+ const diffInSets = (set1, set2) => {
36308
+ const results = [];
36309
+ set1.forEach(entry => {
36310
+ if (!set2.has(entry)) {
36311
+ results.push(entry);
36312
+ }
36313
+ });
36314
+ return results;
36315
+ };
36316
+ const ɵ0$1 = diffInSets;
36317
+ /**
36318
+ * Represents a drop-down list that provides editable functionalities, allowing users to choose an option from a predefined list.
36319
+ *
36320
+ * @igxModule IgxComboModule
36321
+ * @igxTheme igx-combo-theme
36322
+ * @igxKeywords combobox, combo selection
36323
+ * @igxGroup Grids & Lists
36324
+ *
36325
+ * @remarks
36326
+ * It provides the ability to filter items as well as perform selection with the provided data.
36327
+ * Additionally, it exposes keyboard navigation and custom styling capabilities.
36328
+ * @example
36329
+ * ```html
36330
+ * <igx-combo [itemsMaxHeight]="250" [data]="locationData"
36331
+ * [displayKey]="'field'" [valueKey]="'field'"
36332
+ * placeholder="Location(s)" searchPlaceholder="Search...">
36333
+ * </igx-combo>
36334
+ * ```
36335
+ */
36336
+ class IgxComboComponent extends IgxComboBaseDirective {
36337
+ constructor(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector) {
36338
+ super(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector);
36339
+ this.elementRef = elementRef;
36340
+ this.cdr = cdr;
36341
+ this.selectionService = selectionService;
36342
+ this.comboAPI = comboAPI;
36343
+ this._iconService = _iconService;
36344
+ this._displayDensityOptions = _displayDensityOptions;
36345
+ this._inputGroupType = _inputGroupType;
36346
+ this._injector = _injector;
36347
+ /**
36348
+ * An @Input property that controls whether the combo's search box
36349
+ * should be focused after the `opened` event is called
36350
+ * When `false`, the combo's list item container will be focused instead
36351
+ */
36352
+ this.autoFocusSearch = true;
36353
+ /**
36354
+ * An @Input property that enabled/disables filtering in the list. The default is `true`.
36355
+ * ```html
36356
+ * <igx-combo [filterable]="false">
36357
+ * ```
36358
+ */
36359
+ this.filterable = true;
36360
+ /**
36361
+ * Defines the placeholder value for the combo dropdown search field
36362
+ *
36363
+ * ```typescript
36364
+ * // get
36365
+ * let myComboSearchPlaceholder = this.combo.searchPlaceholder;
36366
+ * ```
36367
+ *
36368
+ * ```html
36369
+ * <!--set-->
36370
+ * <igx-combo [searchPlaceholder]='newPlaceHolder'></igx-combo>
36371
+ * ```
36372
+ */
36373
+ this.searchPlaceholder = 'Enter a Search Term';
36374
+ /**
36375
+ * Emitted when item selection is changing, before the selection completes
36376
+ *
36377
+ * ```html
36378
+ * <igx-combo (selectionChanging)='handleSelection()'></igx-combo>
36379
+ * ```
36380
+ */
36381
+ this.selectionChanging = new EventEmitter();
36382
+ /**
36383
+ * @hidden @internal
36384
+ */
36385
+ this.filteringLogic = FilteringLogic.Or;
36386
+ this.stringFilters = IgxStringFilteringOperand;
36387
+ this.booleanFilters = IgxBooleanFilteringOperand;
36388
+ this._prevInputValue = '';
36389
+ this.comboAPI.register(this);
36408
36390
  }
36409
36391
  /**
36410
- * A method that opens/closes the combo.
36411
- *
36412
- * ```html
36413
- * <button (click)="combo.toggle()">Toggle Combo</button>
36414
- * <igx-combo #combo></igx-combo>
36415
- * ```
36392
+ * @hidden @internal
36416
36393
  */
36417
- toggle() {
36418
- const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);
36419
- this.dropdown.toggle(overlaySettings);
36394
+ get inputEmpty() {
36395
+ return !this.value && !this.placeholder;
36396
+ }
36397
+ /** @hidden @internal */
36398
+ get filteredData() {
36399
+ return this.filterable ? this._filteredData : this.data;
36400
+ }
36401
+ /** @hidden @internal */
36402
+ set filteredData(val) {
36403
+ this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;
36404
+ this.checkMatch();
36405
+ }
36406
+ /** @hidden @internal */
36407
+ get displaySearchInput() {
36408
+ return this.filterable || this.allowCustomValues;
36420
36409
  }
36421
36410
  /**
36422
- * A method that opens the combo.
36423
- *
36424
- * ```html
36425
- * <button (click)="combo.open()">Open Combo</button>
36426
- * <igx-combo #combo></igx-combo>
36427
- * ```
36411
+ * @hidden @internal
36428
36412
  */
36429
- open() {
36430
- const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);
36431
- this.dropdown.open(overlaySettings);
36413
+ handleKeyUp(event) {
36414
+ // TODO: use PlatformUtil for keyboard navigation
36415
+ if (event.key === 'ArrowDown' || event.key === 'Down') {
36416
+ this.dropdown.focusedItem = this.dropdown.items[0];
36417
+ this.dropdownContainer.nativeElement.focus();
36418
+ }
36419
+ else if (event.key === 'Escape' || event.key === 'Esc') {
36420
+ this.toggle();
36421
+ }
36432
36422
  }
36433
36423
  /**
36434
- * A method that closes the combo.
36435
- *
36436
- * ```html
36437
- * <button (click)="combo.close()">Close Combo</button>
36438
- * <igx-combo #combo></igx-combo>
36439
- * ```
36424
+ * @hidden @internal
36440
36425
  */
36441
- close() {
36442
- this.dropdown.close();
36426
+ handleSelectAll(evt) {
36427
+ if (evt.checked) {
36428
+ this.selectAllItems();
36429
+ }
36430
+ else {
36431
+ this.deselectAllItems();
36432
+ }
36443
36433
  }
36444
36434
  /**
36445
- * Gets drop down state.
36446
- *
36447
- * ```typescript
36448
- * let state = this.combo.collapsed;
36449
- * ```
36435
+ * @hidden @internal
36450
36436
  */
36451
- get collapsed() {
36452
- return this.dropdown.collapsed;
36437
+ writeValue(value) {
36438
+ const selection = Array.isArray(value) ? value : [];
36439
+ const oldSelection = this.selection;
36440
+ this.selectionService.select_items(this.id, selection, true);
36441
+ this.cdr.markForCheck();
36442
+ this._value = this.createDisplayText(this.selection, oldSelection);
36453
36443
  }
36454
36444
  /**
36455
- * Get current selection state
36456
- *
36457
- * @returns Array of selected items
36458
- * ```typescript
36459
- * let selectedItems = this.combo.selectedItems();
36460
- * ```
36445
+ * @hidden
36461
36446
  */
36462
- selectedItems() {
36463
- const items = Array.from(this.selection.get(this.id));
36464
- return items;
36447
+ getEditElement() {
36448
+ return this.comboInput.nativeElement;
36449
+ }
36450
+ /**
36451
+ * @hidden @internal
36452
+ */
36453
+ get context() {
36454
+ return {
36455
+ $implicit: this
36456
+ };
36457
+ }
36458
+ /**
36459
+ * @hidden @internal
36460
+ */
36461
+ handleClearItems(event) {
36462
+ if (this.disabled) {
36463
+ return;
36464
+ }
36465
+ this.deselectAllItems(true, event);
36466
+ if (this.collapsed) {
36467
+ this.getEditElement().focus();
36468
+ }
36469
+ else {
36470
+ this.focusSearchInput(true);
36471
+ }
36472
+ event.stopPropagation();
36465
36473
  }
36466
36474
  /**
36467
36475
  * Select defined items
@@ -36469,12 +36477,12 @@ class IgxComboComponent extends DisplayDensityBase {
36469
36477
  * @param newItems new items to be selected
36470
36478
  * @param clearCurrentSelection if true clear previous selected items
36471
36479
  * ```typescript
36472
- * this.combo.selectItems(["New York", "New Jersey"]);
36480
+ * this.combo.select(["New York", "New Jersey"]);
36473
36481
  * ```
36474
36482
  */
36475
- selectItems(newItems, clearCurrentSelection, event) {
36483
+ select(newItems, clearCurrentSelection, event) {
36476
36484
  if (newItems) {
36477
- const newSelection = this.selection.add_items(this.id, newItems, clearCurrentSelection);
36485
+ const newSelection = this.selectionService.add_items(this.id, newItems, clearCurrentSelection);
36478
36486
  this.setSelection(newSelection, event);
36479
36487
  }
36480
36488
  }
@@ -36483,12 +36491,12 @@ class IgxComboComponent extends DisplayDensityBase {
36483
36491
  *
36484
36492
  * @param items items to deselected
36485
36493
  * ```typescript
36486
- * this.combo.deselectItems(["New York", "New Jersey"]);
36494
+ * this.combo.deselect(["New York", "New Jersey"]);
36487
36495
  * ```
36488
36496
  */
36489
- deselectItems(items, event) {
36497
+ deselect(items, event) {
36490
36498
  if (items) {
36491
- const newSelection = this.selection.delete_items(this.id, items);
36499
+ const newSelection = this.selectionService.delete_items(this.id, items);
36492
36500
  this.setSelection(newSelection, event);
36493
36501
  }
36494
36502
  }
@@ -36501,8 +36509,8 @@ class IgxComboComponent extends DisplayDensityBase {
36501
36509
  * ```
36502
36510
  */
36503
36511
  selectAllItems(ignoreFilter, event) {
36504
- const allVisible = this.selection.get_all_ids(ignoreFilter ? this.data : this.filteredData, this.valueKey);
36505
- const newSelection = this.selection.add_items(this.id, allVisible);
36512
+ const allVisible = this.selectionService.get_all_ids(ignoreFilter ? this.data : this.filteredData, this.valueKey);
36513
+ const newSelection = this.selectionService.add_items(this.id, allVisible);
36506
36514
  this.setSelection(newSelection, event);
36507
36515
  }
36508
36516
  /**
@@ -36514,9 +36522,9 @@ class IgxComboComponent extends DisplayDensityBase {
36514
36522
  * ```
36515
36523
  */
36516
36524
  deselectAllItems(ignoreFilter, event) {
36517
- let newSelection = this.selection.get_empty();
36525
+ let newSelection = this.selectionService.get_empty();
36518
36526
  if (this.filteredData.length !== this.data.length && !ignoreFilter) {
36519
- newSelection = this.selection.delete_items(this.id, this.selection.get_all_ids(this.filteredData, this.valueKey));
36527
+ newSelection = this.selectionService.delete_items(this.id, this.selectionService.get_all_ids(this.filteredData, this.valueKey));
36520
36528
  }
36521
36529
  this.setSelection(newSelection, event);
36522
36530
  }
@@ -36544,26 +36552,13 @@ class IgxComboComponent extends DisplayDensityBase {
36544
36552
  return;
36545
36553
  }
36546
36554
  if (select) {
36547
- this.selectItems([itemID], false, event);
36555
+ this.select([itemID], false, event);
36548
36556
  }
36549
36557
  else {
36550
- this.deselectItems([itemID], event);
36558
+ this.deselect([itemID], event);
36551
36559
  }
36552
36560
  }
36553
- /**
36554
- * Event handlers
36555
- *
36556
- * @hidden
36557
- * @internal
36558
- */
36559
- handleOpening(e) {
36560
- const args = { owner: this, event: e.event, cancel: e.cancel };
36561
- this.opening.emit(args);
36562
- e.cancel = args.cancel;
36563
- }
36564
- /**
36565
- * @hidden @internal
36566
- */
36561
+ /** @hidden @internal */
36567
36562
  handleOpened() {
36568
36563
  this.triggerCheck();
36569
36564
  // Disabling focus of the search input should happen only when drop down opens.
@@ -36577,36 +36572,26 @@ class IgxComboComponent extends DisplayDensityBase {
36577
36572
  }
36578
36573
  this.opened.emit({ owner: this });
36579
36574
  }
36580
- /**
36581
- * @hidden @internal
36582
- */
36583
- handleClosing(e) {
36584
- const args = { owner: this, event: e.event, cancel: e.cancel };
36585
- this.closing.emit(args);
36586
- e.cancel = args.cancel;
36587
- if (e.cancel) {
36588
- return;
36575
+ /** @hidden @internal */
36576
+ focusSearchInput(opening) {
36577
+ if (this.displaySearchInput && this.searchInput) {
36578
+ this.searchInput.nativeElement.focus();
36579
+ }
36580
+ else {
36581
+ if (opening) {
36582
+ this.dropdownContainer.nativeElement.focus();
36583
+ }
36584
+ else {
36585
+ this.comboInput.nativeElement.focus();
36586
+ this.toggle();
36587
+ }
36589
36588
  }
36590
- this.searchValue = '';
36591
- this.comboInput.nativeElement.focus();
36592
- }
36593
- /**
36594
- * @hidden @internal
36595
- */
36596
- handleClosed() {
36597
- this.closed.emit({ owner: this });
36598
- }
36599
- /**
36600
- * @hidden @internal
36601
- */
36602
- toggleCaseSensitive() {
36603
- this.filteringOptions = { caseSensitive: !this.filteringOptions.caseSensitive };
36604
36589
  }
36605
36590
  setSelection(newSelection, event) {
36606
- const removed = diffInSets(this.selection.get(this.id), newSelection);
36607
- const added = diffInSets(newSelection, this.selection.get(this.id));
36591
+ const removed = diffInSets(this.selectionService.get(this.id), newSelection);
36592
+ const added = diffInSets(newSelection, this.selectionService.get(this.id));
36608
36593
  const newSelectionAsArray = Array.from(newSelection);
36609
- const oldSelectionAsArray = Array.from(this.selection.get(this.id) || []);
36594
+ const oldSelectionAsArray = Array.from(this.selectionService.get(this.id) || []);
36610
36595
  const displayText = this.createDisplayText(newSelectionAsArray, oldSelectionAsArray);
36611
36596
  const args = {
36612
36597
  newSelection: newSelectionAsArray,
@@ -36620,7 +36605,7 @@ class IgxComboComponent extends DisplayDensityBase {
36620
36605
  };
36621
36606
  this.selectionChanging.emit(args);
36622
36607
  if (!args.cancel) {
36623
- this.selection.select_items(this.id, args.newSelection, true);
36608
+ this.selectionService.select_items(this.id, args.newSelection, true);
36624
36609
  if (displayText !== args.displayText) {
36625
36610
  this._value = args.displayText;
36626
36611
  }
@@ -36630,44 +36615,10 @@ class IgxComboComponent extends DisplayDensityBase {
36630
36615
  this._onChangeCallback(args.newSelection);
36631
36616
  }
36632
36617
  }
36633
- manageRequiredAsterisk() {
36634
- if (this.ngControl && this.ngControl.control.validator) {
36635
- // Run the validation with empty object to check if required is enabled.
36636
- const error = this.ngControl.control.validator({});
36637
- this.inputGroup.isRequired = error && error.required;
36638
- }
36639
- }
36640
- /** Contains key-value pairs of the selected valueKeys and their resp. displayKeys */
36641
- registerRemoteEntries(ids, add = true) {
36642
- if (add) {
36643
- const selection = this.getValueDisplayPairs(ids);
36644
- for (const entry of selection) {
36645
- this._remoteSelection[entry[this.valueKey]] = entry[this.displayKey];
36646
- }
36647
- }
36648
- else {
36649
- for (const entry of ids) {
36650
- delete this._remoteSelection[entry];
36651
- }
36652
- }
36653
- }
36654
- /**
36655
- * For `id: any[]` returns a mapped `{ [combo.valueKey]: any, [combo.displayKey]: any }[]`
36656
- */
36657
- getValueDisplayPairs(ids) {
36658
- return this.data.filter(entry => ids.indexOf(entry[this.valueKey]) > -1).map(e => ({
36659
- [this.valueKey]: e[this.valueKey],
36660
- [this.displayKey]: e[this.displayKey]
36661
- }));
36662
- }
36663
- checkMatch() {
36664
- const displayKey = this.displayKey;
36665
- const matchFn = (e) => {
36666
- const value = displayKey ? e[displayKey] : e;
36667
- return value.toString().toLowerCase() === this.searchValue.trim().toLowerCase();
36668
- };
36669
- const itemMatch = this.filteredData.some(matchFn);
36670
- this.customValueFlag = this.allowCustomValues && !itemMatch;
36618
+ createDisplayText(newSelection, oldSelection) {
36619
+ return this.isRemote
36620
+ ? this.getRemoteSelection(newSelection, oldSelection)
36621
+ : this.concatDisplayText(newSelection);
36671
36622
  }
36672
36623
  /** Returns a string that should be populated in the combo's text box */
36673
36624
  concatDisplayText(selection) {
@@ -36676,44 +36627,11 @@ class IgxComboComponent extends DisplayDensityBase {
36676
36627
  selection.join(', ');
36677
36628
  return value;
36678
36629
  }
36679
- /**
36680
- * Constructs the combo display value
36681
- * If remote, caches the key displayText
36682
- * If not, just combine the object.displayKeys
36683
- */
36684
- createDisplayText(newSelection, oldSelection) {
36685
- let value = '';
36686
- if (this.isRemote) {
36687
- if (newSelection.length) {
36688
- const removedItems = oldSelection.filter(e => newSelection.indexOf(e) < 0);
36689
- const addedItems = newSelection.filter(e => oldSelection.indexOf(e) < 0);
36690
- this.registerRemoteEntries(addedItems);
36691
- this.registerRemoteEntries(removedItems, false);
36692
- value = Object.keys(this._remoteSelection).map(e => this._remoteSelection[e]).join(', ');
36693
- }
36694
- else {
36695
- // If new selection is empty, clear all items
36696
- this.registerRemoteEntries(oldSelection, false);
36697
- }
36698
- }
36699
- else {
36700
- value = this.concatDisplayText(newSelection);
36701
- }
36702
- return value;
36703
- }
36704
- /** if there is a valueKey - map the keys to data items, else - just return the keys */
36705
- convertKeysToItems(keys) {
36706
- if (this.comboAPI.valueKey === null) {
36707
- return keys;
36708
- }
36709
- // map keys vs. filter data to retain the order of the selected items
36710
- return keys.map(key => this.data.find(entry => entry[this.valueKey] === key)).filter(e => e !== undefined);
36711
- }
36712
36630
  }
36713
36631
  IgxComboComponent.decorators = [
36714
36632
  { type: Component, args: [{
36715
36633
  selector: 'igx-combo',
36716
- 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;\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",
36634
+ 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\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",
36717
36635
  providers: [
36718
36636
  IgxComboAPIService,
36719
36637
  { provide: IGX_COMBO_COMPONENT, useExisting: IgxComboComponent },
@@ -36732,56 +36650,11 @@ IgxComboComponent.ctorParameters = () => [
36732
36650
  { type: Injector, decorators: [{ type: Optional }] }
36733
36651
  ];
36734
36652
  IgxComboComponent.propDecorators = {
36735
- overlaySettings: [{ type: Input }],
36736
- inputGroup: [{ type: ViewChild, args: ['inputGroup', { read: IgxInputGroupComponent, static: true },] }],
36737
- comboInput: [{ type: ViewChild, args: ['comboInput', { read: IgxInputDirective, static: true },] }],
36738
- dropdown: [{ type: ViewChild, args: [IgxComboDropDownComponent, { read: IgxComboDropDownComponent, static: true },] }],
36739
- searchInput: [{ type: ViewChild, args: ['searchInput',] }],
36740
- itemTemplate: [{ type: ContentChild, args: [IgxComboItemDirective, { read: TemplateRef },] }],
36741
- headerTemplate: [{ type: ContentChild, args: [IgxComboHeaderDirective, { read: TemplateRef },] }],
36742
- footerTemplate: [{ type: ContentChild, args: [IgxComboFooterDirective, { read: TemplateRef },] }],
36743
- headerItemTemplate: [{ type: ContentChild, args: [IgxComboHeaderItemDirective, { read: TemplateRef },] }],
36744
- addItemTemplate: [{ type: ContentChild, args: [IgxComboAddItemDirective, { read: TemplateRef },] }],
36745
- emptyTemplate: [{ type: ContentChild, args: [IgxComboEmptyDirective, { read: TemplateRef },] }],
36746
- toggleIconTemplate: [{ type: ContentChild, args: [IgxComboToggleIconDirective, { read: TemplateRef },] }],
36747
- clearIconTemplate: [{ type: ContentChild, args: [IgxComboClearIconDirective, { read: TemplateRef },] }],
36748
- virtualScrollContainer: [{ type: ViewChild, args: [IgxForOfDirective, { static: true },] }],
36749
- selectionChanging: [{ type: Output }],
36750
- opening: [{ type: Output }],
36751
- opened: [{ type: Output }],
36752
- closing: [{ type: Output }],
36753
- closed: [{ type: Output }],
36754
- addition: [{ type: Output }],
36755
- searchInputUpdate: [{ type: Output }],
36756
- dataPreLoad: [{ type: Output }],
36757
- id: [{ type: HostBinding, args: ['attr.id',] }, { type: Input }],
36758
- width: [{ type: HostBinding, args: ['style.width',] }, { type: Input }],
36759
- cssClass: [{ type: HostBinding, args: ['class.igx-combo',] }],
36760
- role: [{ type: HostBinding, args: [`attr.role`,] }],
36761
- ariaExpanded: [{ type: HostBinding, args: ['attr.aria-expanded',] }],
36762
- hasPopUp: [{ type: HostBinding, args: ['attr.aria-haspopup',] }],
36763
- ariaOwns: [{ type: HostBinding, args: ['attr.aria-owns',] }],
36764
- allowCustomValues: [{ type: Input }],
36765
- itemsMaxHeight: [{ type: Input }],
36766
- itemsWidth: [{ type: Input }],
36767
- itemHeight: [{ type: Input }],
36768
- placeholder: [{ type: Input }],
36769
- searchPlaceholder: [{ type: Input }],
36770
- showSearchCaseIcon: [{ type: Input }],
36771
- data: [{ type: Input }],
36772
- valueKey: [{ type: Input }],
36773
- displayKey: [{ type: Input }],
36774
- groupKey: [{ type: Input }],
36775
- filterable: [{ type: Input }],
36776
- ariaLabelledBy: [{ type: Input }, { type: HostBinding, args: ['attr.aria-labelledby',] }],
36777
- disabled: [{ type: Input }],
36778
- type: [{ type: Input }],
36779
36653
  autoFocusSearch: [{ type: Input }],
36780
- dropdownContainer: [{ type: ViewChild, args: ['dropdownItemContainer', { static: true },] }],
36781
- primitiveTemplate: [{ type: ViewChild, args: ['primitive', { read: TemplateRef, static: true },] }],
36782
- complexTemplate: [{ type: ViewChild, args: ['complex', { read: TemplateRef, static: true },] }],
36783
- virtDir: [{ type: ViewChild, args: [IgxForOfDirective, { read: IgxForOfDirective, static: true },] }],
36784
- onArrowDown: [{ type: HostListener, args: ['keydown.ArrowDown', ['$event'],] }, { type: HostListener, args: ['keydown.Alt.ArrowDown', ['$event'],] }]
36654
+ filterable: [{ type: Input }],
36655
+ searchPlaceholder: [{ type: Input }],
36656
+ selectionChanging: [{ type: Output }],
36657
+ dropdown: [{ type: ViewChild, args: [IgxComboDropDownComponent, { static: true },] }]
36785
36658
  };
36786
36659
  /**
36787
36660
  * @hidden
@@ -36801,6 +36674,8 @@ IgxComboModule.decorators = [
36801
36674
  IgxComboToggleIconDirective,
36802
36675
  IgxComboClearIconDirective],
36803
36676
  exports: [IgxComboComponent, IgxComboItemComponent, IgxComboDropDownComponent, IgxComboAddItemComponent,
36677
+ IgxComboGroupingPipe,
36678
+ IgxComboFilteringPipe,
36804
36679
  IgxComboItemDirective,
36805
36680
  IgxComboEmptyDirective,
36806
36681
  IgxComboHeaderItemDirective,
@@ -36815,6 +36690,375 @@ IgxComboModule.decorators = [
36815
36690
  },] }
36816
36691
  ];
36817
36692
 
36693
+ /**
36694
+ * Represents a drop-down list that provides filtering functionality, allowing users to choose a single option from a predefined list.
36695
+ *
36696
+ * @igxModule IgxSimpleComboModule
36697
+ * @igxTheme igx-combo-theme
36698
+ * @igxKeywords combobox, single combo selection
36699
+ * @igxGroup Grids & Lists
36700
+ *
36701
+ * @remarks
36702
+ * It provides the ability to filter items as well as perform single selection on the provided data.
36703
+ * Additionally, it exposes keyboard navigation and custom styling capabilities.
36704
+ * @example
36705
+ * ```html
36706
+ * <igx-simple-combo [itemsMaxHeight]="250" [data]="locationData"
36707
+ * [displayKey]="'field'" [valueKey]="'field'"
36708
+ * placeholder="Location" searchPlaceholder="Search...">
36709
+ * </igx-simple-combo>
36710
+ * ```
36711
+ */
36712
+ class IgxSimpleComboComponent extends IgxComboBaseDirective {
36713
+ constructor(elementRef, cdr, selectionService, comboAPI, _iconService, platformUtil, _displayDensityOptions, _inputGroupType, _injector) {
36714
+ super(elementRef, cdr, selectionService, comboAPI, _iconService, _displayDensityOptions, _inputGroupType, _injector);
36715
+ this.elementRef = elementRef;
36716
+ this.cdr = cdr;
36717
+ this.selectionService = selectionService;
36718
+ this.comboAPI = comboAPI;
36719
+ this._iconService = _iconService;
36720
+ this.platformUtil = platformUtil;
36721
+ this._displayDensityOptions = _displayDensityOptions;
36722
+ this._inputGroupType = _inputGroupType;
36723
+ this._injector = _injector;
36724
+ /**
36725
+ * Emitted when item selection is changing, before the selection completes
36726
+ *
36727
+ * ```html
36728
+ * <igx-simple-combo (selectionChanging)='handleSelection()'></igx-simple-combo>
36729
+ * ```
36730
+ */
36731
+ this.selectionChanging = new EventEmitter();
36732
+ /** @hidden @internal */
36733
+ this.composing = false;
36734
+ this._updateInput = true;
36735
+ this.findMatch = (element) => {
36736
+ const value = this.displayKey ? element[this.displayKey] : element;
36737
+ return value.toString().toLowerCase().includes(this.searchValue.trim().toLowerCase());
36738
+ };
36739
+ this.comboAPI.register(this);
36740
+ }
36741
+ /** @hidden @internal */
36742
+ get filteredData() {
36743
+ return this._filteredData;
36744
+ }
36745
+ /** @hidden @internal */
36746
+ set filteredData(val) {
36747
+ this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;
36748
+ this.checkMatch();
36749
+ }
36750
+ /** @hidden @internal */
36751
+ onArrowDown(event) {
36752
+ if (this.collapsed) {
36753
+ event.preventDefault();
36754
+ event.stopPropagation();
36755
+ this.open();
36756
+ }
36757
+ else {
36758
+ if (this.virtDir.igxForOf.length > 0) {
36759
+ this.dropdown.navigateFirst();
36760
+ this.dropdownContainer.nativeElement.focus();
36761
+ }
36762
+ else if (this.allowCustomValues) {
36763
+ this.addItem.element.nativeElement.focus();
36764
+ }
36765
+ }
36766
+ }
36767
+ /**
36768
+ * Select a defined item
36769
+ *
36770
+ * @param item the item to be selected
36771
+ * ```typescript
36772
+ * this.combo.select("New York");
36773
+ * ```
36774
+ */
36775
+ select(item) {
36776
+ if (item !== null && item !== undefined) {
36777
+ const newSelection = this.selectionService.add_items(this.id, item instanceof Array ? item : [item], true);
36778
+ this.setSelection(newSelection);
36779
+ }
36780
+ }
36781
+ /**
36782
+ * Deselect the currently selected item
36783
+ *
36784
+ * @param item the items to be deselected
36785
+ * ```typescript
36786
+ * this.combo.deselect("New York");
36787
+ * ```
36788
+ */
36789
+ deselect() {
36790
+ this.clearSelection();
36791
+ }
36792
+ /** @hidden @internal */
36793
+ writeValue(value) {
36794
+ const oldSelection = this.selection;
36795
+ this.selectionService.select_items(this.id, value ? [value] : [], true);
36796
+ this.cdr.markForCheck();
36797
+ this._value = this.createDisplayText(this.selection, oldSelection);
36798
+ }
36799
+ /** @hidden @internal */
36800
+ ngAfterViewInit() {
36801
+ this.virtDir.contentSizeChange.pipe(takeUntil(this.destroy$)).subscribe(() => {
36802
+ if (this.selection.length > 0) {
36803
+ const index = this.virtDir.igxForOf.findIndex(e => {
36804
+ let current = e[this.valueKey];
36805
+ if (this.valueKey === null || this.valueKey === undefined) {
36806
+ current = e;
36807
+ }
36808
+ return current === this.selection[0];
36809
+ });
36810
+ this.dropdown.navigateItem(index);
36811
+ }
36812
+ });
36813
+ this.dropdown.opened.pipe(takeUntil(this.destroy$)).subscribe(() => {
36814
+ if (this.composing) {
36815
+ this.comboInput.focus();
36816
+ }
36817
+ });
36818
+ this.dropdown.closing.pipe(takeUntil(this.destroy$)).subscribe((args) => {
36819
+ if (this.getEditElement() && !args.event) {
36820
+ this.comboInput.focus();
36821
+ }
36822
+ else {
36823
+ this.clearOnBlur();
36824
+ this._onTouchedCallback();
36825
+ }
36826
+ });
36827
+ super.ngAfterViewInit();
36828
+ }
36829
+ /** @hidden @internal */
36830
+ handleInputChange(event) {
36831
+ this.searchValue = event.target.value;
36832
+ this._onChangeCallback(this.searchValue);
36833
+ if (this.collapsed && this.comboInput.focused) {
36834
+ this.open();
36835
+ this.dropdown.navigateFirst();
36836
+ }
36837
+ if (!this.comboInput.value.trim()) {
36838
+ // handle clearing of input by space
36839
+ this.clearSelection();
36840
+ this._onChangeCallback(null);
36841
+ }
36842
+ super.handleInputChange(event);
36843
+ this.composing = true;
36844
+ }
36845
+ /** @hidden @internal */
36846
+ handleKeyDown(event) {
36847
+ if (event.key === this.platformUtil.KEYMAP.ENTER) {
36848
+ const filtered = this.filteredData.find(this.findMatch);
36849
+ if (filtered === null || filtered === undefined) {
36850
+ return;
36851
+ }
36852
+ this.select(this.dropdown.focusedItem.itemID);
36853
+ event.preventDefault();
36854
+ event.stopPropagation();
36855
+ this.close();
36856
+ // manually trigger text selection as it will not be triggered during editing
36857
+ this.textSelection.trigger();
36858
+ return;
36859
+ }
36860
+ if (event.key === this.platformUtil.KEYMAP.BACKSPACE
36861
+ || event.key === this.platformUtil.KEYMAP.DELETE) {
36862
+ this._updateInput = false;
36863
+ this.clearSelection();
36864
+ }
36865
+ if (!this.collapsed && event.key === this.platformUtil.KEYMAP.TAB) {
36866
+ this.close();
36867
+ this.clearOnBlur();
36868
+ }
36869
+ this.composing = false;
36870
+ super.handleKeyDown(event);
36871
+ }
36872
+ /** @hidden @internal */
36873
+ handleKeyUp(event) {
36874
+ if (event.key === this.platformUtil.KEYMAP.ARROW_DOWN) {
36875
+ const firstItem = this.selectionService.first_item(this.id);
36876
+ this.dropdown.focusedItem = firstItem && this.filteredData.length > 0
36877
+ ? this.dropdown.items.find(i => i.itemID === firstItem)
36878
+ : this.dropdown.items[0];
36879
+ this.dropdownContainer.nativeElement.focus();
36880
+ }
36881
+ }
36882
+ /** @hidden @internal */
36883
+ handleItemKeyDown(event) {
36884
+ if (event.key === this.platformUtil.KEYMAP.ARROW_UP && event.altKey) {
36885
+ this.close();
36886
+ this.comboInput.focus();
36887
+ return;
36888
+ }
36889
+ if (event.key === this.platformUtil.KEYMAP.ENTER) {
36890
+ this.comboInput.focus();
36891
+ }
36892
+ }
36893
+ /** @hidden @internal */
36894
+ handleItemClick() {
36895
+ this.close();
36896
+ this.comboInput.focus();
36897
+ }
36898
+ /** @hidden @internal */
36899
+ onBlur() {
36900
+ if (this.collapsed) {
36901
+ this.clearOnBlur();
36902
+ }
36903
+ super.onBlur();
36904
+ }
36905
+ /** @hidden @internal */
36906
+ getEditElement() {
36907
+ return this.comboInput.nativeElement;
36908
+ }
36909
+ /** @hidden @internal */
36910
+ handleClear(event) {
36911
+ if (this.disabled) {
36912
+ return;
36913
+ }
36914
+ this.clearSelection(true);
36915
+ if (this.collapsed) {
36916
+ this.open();
36917
+ this.dropdown.navigateFirst();
36918
+ }
36919
+ else {
36920
+ this.focusSearchInput(true);
36921
+ }
36922
+ event.stopPropagation();
36923
+ this.comboInput.value = this.filterValue = this.searchValue = '';
36924
+ this.dropdown.focusedItem = null;
36925
+ this.composing = false;
36926
+ this.comboInput.focus();
36927
+ }
36928
+ /** @hidden @internal */
36929
+ handleOpened() {
36930
+ this.triggerCheck();
36931
+ this.dropdownContainer.nativeElement.focus();
36932
+ this.opened.emit({ owner: this });
36933
+ }
36934
+ /** @hidden @internal */
36935
+ handleClosing(e) {
36936
+ const args = { owner: this, event: e.event, cancel: e.cancel };
36937
+ this.closing.emit(args);
36938
+ e.cancel = args.cancel;
36939
+ if (e.cancel) {
36940
+ return;
36941
+ }
36942
+ this.composing = false;
36943
+ // explicitly update selection and trigger text selection so that we don't have to force CD
36944
+ this.textSelection.selected = true;
36945
+ this.textSelection.trigger();
36946
+ }
36947
+ /** @hidden @internal */
36948
+ focusSearchInput(opening) {
36949
+ if (opening) {
36950
+ this.dropdownContainer.nativeElement.focus();
36951
+ }
36952
+ else {
36953
+ this.comboInput.nativeElement.focus();
36954
+ this.toggle();
36955
+ }
36956
+ }
36957
+ /** @hidden @internal */
36958
+ onClick(event) {
36959
+ super.onClick(event);
36960
+ if (this.comboInput.value.length === 0) {
36961
+ this.virtDir.scrollTo(0);
36962
+ }
36963
+ }
36964
+ setSelection(newSelection) {
36965
+ const newSelectionAsArray = newSelection ? Array.from(newSelection) : [];
36966
+ const oldSelectionAsArray = Array.from(this.selectionService.get(this.id) || []);
36967
+ const displayText = this.createDisplayText(newSelectionAsArray, oldSelectionAsArray);
36968
+ const args = {
36969
+ newSelection: newSelectionAsArray[0],
36970
+ oldSelection: oldSelectionAsArray[0],
36971
+ displayText,
36972
+ owner: this,
36973
+ cancel: false
36974
+ };
36975
+ this.selectionChanging.emit(args);
36976
+ if (!args.cancel) {
36977
+ const argsSelection = args.newSelection !== undefined
36978
+ && args.newSelection !== null
36979
+ ? [args.newSelection]
36980
+ : [];
36981
+ this.selectionService.select_items(this.id, argsSelection, true);
36982
+ if (this._updateInput) {
36983
+ this.comboInput.value = this._value = displayText !== args.displayText
36984
+ ? args.displayText
36985
+ : this.createDisplayText(argsSelection, [args.oldSelection]);
36986
+ }
36987
+ this._onChangeCallback(args.newSelection);
36988
+ this._updateInput = true;
36989
+ }
36990
+ }
36991
+ createDisplayText(newSelection, oldSelection) {
36992
+ if (this.isRemote) {
36993
+ return this.getRemoteSelection(newSelection, oldSelection);
36994
+ }
36995
+ if (this.displayKey !== null && this.displayKey !== undefined
36996
+ && newSelection.length > 0) {
36997
+ return this.convertKeysToItems(newSelection).map(e => e[this.displayKey])[0];
36998
+ }
36999
+ return newSelection[0] || '';
37000
+ }
37001
+ clearSelection(ignoreFilter) {
37002
+ let newSelection = this.selectionService.get_empty();
37003
+ if (this.filteredData.length !== this.data.length && !ignoreFilter) {
37004
+ newSelection = this.selectionService.delete_items(this.id, this.selectionService.get_all_ids(this.filteredData, this.valueKey));
37005
+ }
37006
+ this.setSelection(newSelection);
37007
+ }
37008
+ clearOnBlur() {
37009
+ const filtered = this.filteredData.find(this.findMatch);
37010
+ if ((filtered === undefined || filtered === null)) {
37011
+ this.close();
37012
+ this.clearSelection();
37013
+ this.searchValue = '';
37014
+ }
37015
+ }
37016
+ }
37017
+ IgxSimpleComboComponent.decorators = [
37018
+ { type: Component, args: [{
37019
+ selector: 'igx-simple-combo',
37020
+ template: "<igx-input-group #inputGroup [displayDensity]=\"displayDensity\" [suppressInputAutofocus]=\"true\" [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\" aria-autocomplete=\"both\"\n [attr.aria-owns]=\"dropdown.id\" [attr.aria-labelledby]=\"ariaLabelledBy\" [disabled]=\"disabled\"\n [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 *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-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\"\n (keydown)=\"handleItemKeyDown($event)\">\n <igx-combo-item role=\"option\" [singleMode]=\"true\" [itemHeight]='itemHeight' (click)=\"handleItemClick()\" *igxFor=\"let item of data\n | comboFiltering:filterValue:displayKey:filteringOptions:true\n | comboGrouping:groupKey:valueKey\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 #addItem [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",
37021
+ providers: [
37022
+ IgxComboAPIService,
37023
+ { provide: IGX_COMBO_COMPONENT, useExisting: IgxSimpleComboComponent },
37024
+ { provide: NG_VALUE_ACCESSOR, useExisting: IgxSimpleComboComponent, multi: true }
37025
+ ]
37026
+ },] }
37027
+ ];
37028
+ IgxSimpleComboComponent.ctorParameters = () => [
37029
+ { type: ElementRef },
37030
+ { type: ChangeDetectorRef },
37031
+ { type: IgxSelectionAPIService },
37032
+ { type: IgxComboAPIService },
37033
+ { type: IgxIconService },
37034
+ { type: PlatformUtil },
37035
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DisplayDensityToken,] }] },
37036
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [IGX_INPUT_GROUP_TYPE,] }] },
37037
+ { type: Injector, decorators: [{ type: Optional }] }
37038
+ ];
37039
+ IgxSimpleComboComponent.propDecorators = {
37040
+ dropdown: [{ type: ViewChild, args: [IgxComboDropDownComponent, { static: true },] }],
37041
+ addItem: [{ type: ViewChild, args: [IgxComboAddItemComponent,] }],
37042
+ selectionChanging: [{ type: Output }],
37043
+ textSelection: [{ type: ViewChild, args: [IgxTextSelectionDirective, { static: true },] }],
37044
+ onArrowDown: [{ type: HostListener, args: ['keydown.ArrowDown', ['$event'],] }, { type: HostListener, args: ['keydown.Alt.ArrowDown', ['$event'],] }]
37045
+ };
37046
+ class IgxSimpleComboModule {
37047
+ }
37048
+ IgxSimpleComboModule.decorators = [
37049
+ { type: NgModule, args: [{
37050
+ declarations: [IgxSimpleComboComponent],
37051
+ imports: [
37052
+ IgxComboModule, IgxRippleModule, CommonModule,
37053
+ IgxInputGroupModule, FormsModule, ReactiveFormsModule,
37054
+ IgxForOfModule, IgxToggleModule, IgxCheckboxModule,
37055
+ IgxDropDownModule, IgxButtonModule, IgxIconModule,
37056
+ IgxTextSelectionModule
37057
+ ],
37058
+ exports: [IgxSimpleComboComponent, IgxComboModule]
37059
+ },] }
37060
+ ];
37061
+
36818
37062
  /** Header orientation in `dialog` mode. */
36819
37063
  const PickerHeaderOrientation = mkenum({
36820
37064
  Horizontal: 'horizontal',
@@ -46981,15 +47225,23 @@ class IgxGridFilteringRowComponent {
46981
47225
  set value(val) {
46982
47226
  if (!val && val !== 0) {
46983
47227
  this.expression.searchVal = null;
46984
- this.showHideArrowButtons();
47228
+ const index = this.expressionsList.findIndex(item => item.expression === this.expression);
47229
+ if (index === 0 && this.expressionsList.length === 1) {
47230
+ this.clearFiltering();
47231
+ return;
47232
+ }
46985
47233
  }
46986
47234
  else {
47235
+ const oldValue = this.expression.searchVal;
47236
+ if (isEqual(oldValue, val)) {
47237
+ return;
47238
+ }
46987
47239
  this.expression.searchVal = DataUtil.parseValue(this.column.dataType, val);
46988
47240
  if (this.expressionsList.find(item => item.expression === this.expression) === undefined) {
46989
47241
  this.addExpression(true);
46990
47242
  }
47243
+ this.filter();
46991
47244
  }
46992
- this.filter();
46993
47245
  }
46994
47246
  get displayDensity() {
46995
47247
  return this.column.grid.displayDensity === DisplayDensity.comfortable ? DisplayDensity.cosy : this.column.grid.displayDensity;
@@ -48420,7 +48672,7 @@ IgxGridHeaderRowComponent.decorators = [
48420
48672
  { type: Component, args: [{
48421
48673
  changeDetection: ChangeDetectionStrategy.OnPush,
48422
48674
  selector: 'igx-grid-header-row',
48423
- 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"
48675
+ 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"
48424
48676
  },] }
48425
48677
  ];
48426
48678
  IgxGridHeaderRowComponent.ctorParameters = () => [
@@ -48600,9 +48852,10 @@ class IgxGridBaseDirective extends DisplayDensityBase {
48600
48852
  */
48601
48853
  this.gridScroll = new EventEmitter();
48602
48854
  /**
48855
+ * @deprecated in version 12.1.0. Use the corresponding output exposed by the `igx-paginator` component instead
48856
+ *
48603
48857
  * Emitted after the current page is changed.
48604
48858
  *
48605
- * @deprecated in version 12.1.0
48606
48859
  * @example
48607
48860
  * ```html
48608
48861
  * <igx-grid (pageChange)="onPageChange($event)"></igx-grid>
@@ -48615,10 +48868,10 @@ class IgxGridBaseDirective extends DisplayDensityBase {
48615
48868
  */
48616
48869
  this.pageChange = new EventEmitter();
48617
48870
  /**
48871
+ * @deprecated in version 12.1.0. Use the corresponding output exposed by the `igx-paginator` component instead
48872
+ *
48618
48873
  * Emitted when `perPage` property value of the grid is changed.
48619
48874
  *
48620
- * @deprecated in version 12.1.0
48621
- * @example
48622
48875
  * ```html
48623
48876
  * <igx-grid #grid (perPageChange)="onPerPageChange($event)" [autoGenerate]="true"></igx-grid>
48624
48877
  * ```
@@ -48635,6 +48888,8 @@ class IgxGridBaseDirective extends DisplayDensityBase {
48635
48888
  */
48636
48889
  this.class = '';
48637
48890
  /**
48891
+ * @deprecated in version 12.2.0. We suggest using `rowClasses` property instead
48892
+ *
48638
48893
  * Gets/Sets the styling classes applied to all even `IgxGridRowComponent`s in the grid.
48639
48894
  *
48640
48895
  * @example
@@ -48644,6 +48899,8 @@ class IgxGridBaseDirective extends DisplayDensityBase {
48644
48899
  */
48645
48900
  this.evenRowCSS = 'igx-grid__tr--even';
48646
48901
  /**
48902
+ * @deprecated in version 12.2.0. We suggest using `rowClasses` property instead
48903
+ *
48647
48904
  * Gets/Sets the styling classes applied to all odd `IgxGridRowComponent`s in the grid.
48648
48905
  *
48649
48906
  * @example
@@ -48898,9 +49155,10 @@ class IgxGridBaseDirective extends DisplayDensityBase {
48898
49155
  */
48899
49156
  this.filteringDone = new EventEmitter();
48900
49157
  /**
49158
+ * @deprecated in version 12.1.0. Use the corresponding output exposed by the `igx-paginator` component instead
49159
+ *
48901
49160
  * Emitted after paging is performed.
48902
49161
  *
48903
- * @deprecated in version 12.1.x
48904
49162
  * @remarks
48905
49163
  * Returns an object consisting of the previous and next pages.
48906
49164
  * @example
@@ -49553,9 +49811,10 @@ class IgxGridBaseDirective extends DisplayDensityBase {
49553
49811
  this.notifyChanges(true);
49554
49812
  }
49555
49813
  /**
49814
+ * @deprecated in version 12.1.0. Use the corresponding method exposed by the `igx-paginator`
49815
+ *
49556
49816
  * Gets/Sets whether the paging feature is enabled.
49557
49817
  *
49558
- * @deprecated in version 12.1.x
49559
49818
  * @remarks
49560
49819
  * The default state is disabled (false).
49561
49820
  * @example
@@ -49573,9 +49832,10 @@ class IgxGridBaseDirective extends DisplayDensityBase {
49573
49832
  this.pipeTrigger++;
49574
49833
  }
49575
49834
  /**
49835
+ * @deprecated in version 12.1.0. Use `page` property form `paginator` component instead
49836
+ *
49576
49837
  * Gets/Sets the current page index.
49577
49838
  *
49578
- * @deprecated in version 12.1.x
49579
49839
  * @example
49580
49840
  * ```html
49581
49841
  * <igx-grid #grid [data]="Data" [autoGenerate]="true">
@@ -49595,9 +49855,10 @@ class IgxGridBaseDirective extends DisplayDensityBase {
49595
49855
  }
49596
49856
  }
49597
49857
  /**
49858
+ * @deprecated in version 12.1.0. Use `perPage` property from `paginator` component instead
49859
+ *
49598
49860
  * Gets/Sets the number of visible items per page.
49599
49861
  *
49600
- * @deprecated in version 12.1.x
49601
49862
  * @remarks
49602
49863
  * The default is 15.
49603
49864
  * @example
@@ -49618,9 +49879,10 @@ class IgxGridBaseDirective extends DisplayDensityBase {
49618
49879
  }
49619
49880
  }
49620
49881
  /**
49882
+ * @deprecated in version 10.1.0
49883
+ *
49621
49884
  * Gets/Sets whether the column hiding UI is enabled.
49622
49885
  *
49623
- * @deprecated
49624
49886
  * @remarks
49625
49887
  * By default it is disabled (false). In order for the UI to work, you need to enable the toolbar as shown in the example below.
49626
49888
  * @example
@@ -49818,9 +50080,9 @@ class IgxGridBaseDirective extends DisplayDensityBase {
49818
50080
  return this._emptyFilteredGridMessage || this.resourceStrings.igx_grid_emptyFilteredGrid_message;
49819
50081
  }
49820
50082
  /**
49821
- * Gets/Sets the title to be displayed in the built-in column hiding UI.
50083
+ * @deprecated in version 10.1.0
49822
50084
  *
49823
- * @deprecated
50085
+ * Gets/Sets the title to be displayed in the built-in column hiding UI.
49824
50086
  *
49825
50087
  * @example
49826
50088
  * ```html
@@ -49858,9 +50120,9 @@ class IgxGridBaseDirective extends DisplayDensityBase {
49858
50120
  this._pinning = value;
49859
50121
  }
49860
50122
  /**
49861
- * Gets/Sets if the built-in column pinning UI should be shown in the toolbar.
50123
+ * @deprecated in version 10.1.0
49862
50124
  *
49863
- * @deprecated
50125
+ * Gets/Sets if the built-in column pinning UI should be shown in the toolbar.
49864
50126
  *
49865
50127
  * @example
49866
50128
  * ```html
@@ -49875,9 +50137,9 @@ class IgxGridBaseDirective extends DisplayDensityBase {
49875
50137
  this.notifyChanges();
49876
50138
  }
49877
50139
  /**
49878
- * Gets/Sets the title to be displayed in the UI of the column pinning.
50140
+ * @deprecated in version 10.1.0
49879
50141
  *
49880
- * @deprecated
50142
+ * Gets/Sets the title to be displayed in the UI of the column pinning.
49881
50143
  *
49882
50144
  * @example
49883
50145
  * ```html
@@ -50324,9 +50586,9 @@ class IgxGridBaseDirective extends DisplayDensityBase {
50324
50586
  return this.pinnedColumns.filter(col => !col.columnLayout).length;
50325
50587
  }
50326
50588
  /**
50327
- * Gets/Sets the text to be displayed inside the toggle button.
50589
+ * @deprecated in version 10.1.0
50328
50590
  *
50329
- * @deprecated
50591
+ * Gets/Sets the text to be displayed inside the toggle button.
50330
50592
  *
50331
50593
  * @remarks
50332
50594
  * Used for the built-in column hiding UI of the`IgxColumnComponent`.
@@ -50335,7 +50597,6 @@ class IgxGridBaseDirective extends DisplayDensityBase {
50335
50597
  * <igx-grid [columnHiding]="true" [showToolbar]="true" [hiddenColumnsText]="'Hidden Columns'"></igx-grid>
50336
50598
  * ```
50337
50599
  */
50338
- // @DeprecateProperty('`hiddenColumnsText` is deprecated')
50339
50600
  get hiddenColumnsText() {
50340
50601
  return this._hiddenColumnsText;
50341
50602
  }
@@ -50344,9 +50605,9 @@ class IgxGridBaseDirective extends DisplayDensityBase {
50344
50605
  this.notifyChanges();
50345
50606
  }
50346
50607
  /**
50347
- * Gets/Sets the text to be displayed inside the toggle button.
50608
+ * @deprecated in version 10.1.0
50348
50609
  *
50349
- * @deprecated
50610
+ * Gets/Sets the text to be displayed inside the toggle button.
50350
50611
  *
50351
50612
  * @remarks
50352
50613
  * Used for the built-in column pinning UI of the`IgxColumnComponent`.
@@ -50416,9 +50677,9 @@ class IgxGridBaseDirective extends DisplayDensityBase {
50416
50677
  return this._currencyPositionLeft = i < 1;
50417
50678
  }
50418
50679
  /**
50419
- * Gets/Sets whether the toolbar is shown.
50680
+ * @deprecated in version 11.0.0
50420
50681
  *
50421
- * @deprecated
50682
+ * Gets/Sets whether the toolbar is shown.
50422
50683
  *
50423
50684
  * @example
50424
50685
  * ```html
@@ -50432,9 +50693,9 @@ class IgxGridBaseDirective extends DisplayDensityBase {
50432
50693
  this._showToolbar = newValue;
50433
50694
  }
50434
50695
  /**
50435
- * Gets/Sets the toolbar's title.
50696
+ * @deprecated in version 11.0.0
50436
50697
  *
50437
- * @deprecated
50698
+ * Gets/Sets the toolbar's title.
50438
50699
  *
50439
50700
  * @example
50440
50701
  * ```html
@@ -50449,9 +50710,9 @@ class IgxGridBaseDirective extends DisplayDensityBase {
50449
50710
  this.notifyChanges();
50450
50711
  }
50451
50712
  /**
50452
- * Gets/Sets whether exporting to MS Excel is enabled or disabled.
50713
+ * @deprecated `exportExcel` is deprecated
50453
50714
  *
50454
- * @deprecated
50715
+ * Gets/Sets whether exporting to MS Excel is enabled or disabled.
50455
50716
  *
50456
50717
  * @example
50457
50718
  * ```html
@@ -50466,9 +50727,9 @@ class IgxGridBaseDirective extends DisplayDensityBase {
50466
50727
  this.notifyChanges();
50467
50728
  }
50468
50729
  /**
50469
- * Gets/Sets whether the option for exporting to CSV is enabled or disabled.
50730
+ * @deprecated `exportCsv` is deprecated
50470
50731
  *
50471
- * @deprecated
50732
+ * Gets/Sets whether the option for exporting to CSV is enabled or disabled.
50472
50733
  *
50473
50734
  * ```html
50474
50735
  * <igx-grid [data]="localData" [showToolbar]="true" [autoGenerate]="true" [exportCsv]="true"></igx-grid>
@@ -50482,9 +50743,9 @@ class IgxGridBaseDirective extends DisplayDensityBase {
50482
50743
  this.notifyChanges();
50483
50744
  }
50484
50745
  /**
50485
- * Gets/Sets the textual content for the main export button.
50746
+ * @deprecated `exportText` is deprecated
50486
50747
  *
50487
- * @deprecated
50748
+ * Gets/Sets the textual content for the main export button.
50488
50749
  *
50489
50750
  * @example
50490
50751
  * ```html
@@ -50499,9 +50760,9 @@ class IgxGridBaseDirective extends DisplayDensityBase {
50499
50760
  this.notifyChanges();
50500
50761
  }
50501
50762
  /**
50502
- * Gets/Sets the textual content for the MS Excel export button.
50763
+ * @deprecated `exportExcelText` is deprecated
50503
50764
  *
50504
- * @deprecated
50765
+ * Gets/Sets the textual content for the MS Excel export button.
50505
50766
  *
50506
50767
  * ```html
50507
50768
  * <igx-grid [exportExcelText]="'My Excel Exporter" [showToolbar]="true" [exportText]="'My Exporter'" [exportCsv]="true"></igx-grid>
@@ -50515,9 +50776,9 @@ class IgxGridBaseDirective extends DisplayDensityBase {
50515
50776
  this.notifyChanges();
50516
50777
  }
50517
50778
  /**
50518
- * Gets/Sets the textual content for the CSV export button.
50779
+ * @deprecated `exportCsvText` is deprecated
50519
50780
  *
50520
- * @deprecated
50781
+ * Gets/Sets the textual content for the CSV export button.
50521
50782
  *
50522
50783
  * @example
50523
50784
  * ```html
@@ -51184,7 +51445,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
51184
51445
  this.rendered$.pipe(takeUntil(this.destroy$)).subscribe(() => {
51185
51446
  if (this.paginator) {
51186
51447
  this.paginator.perPage = this._perPage !== DEFAULT_ITEMS_PER_PAGE ? this._perPage : this.paginator.perPage;
51187
- this.paginator.totalRecords = this.totalRecords;
51448
+ this.paginator.totalRecords = this.totalRecords ? this.totalRecords : this.paginator.totalRecords;
51188
51449
  this.paginator.overlaySettings = { outlet: this.outlet };
51189
51450
  }
51190
51451
  this._rendered = true;
@@ -51611,9 +51872,10 @@ class IgxGridBaseDirective extends DisplayDensityBase {
51611
51872
  return this._visibleColumns;
51612
51873
  }
51613
51874
  /**
51875
+ * @deprecated in version 12.1.0. Use the corresponding property exposed by the `igx-paginator`
51876
+ *
51614
51877
  * Gets the total number of pages.
51615
51878
  *
51616
- * @deprecated in version 12.1.0
51617
51879
  * @example
51618
51880
  * ```typescript
51619
51881
  * const totalPages = this.grid.totalPages;
@@ -51624,9 +51886,10 @@ class IgxGridBaseDirective extends DisplayDensityBase {
51624
51886
  return (_a = this.paginator) === null || _a === void 0 ? void 0 : _a.totalPages;
51625
51887
  }
51626
51888
  /**
51889
+ * @deprecated in version 12.1.0. Use the corresponding property exposed by the `igx-paginator`
51890
+ *
51627
51891
  * Gets if the current page is the first page.
51628
51892
  *
51629
- * @deprecated in version 12.1.0
51630
51893
  * @example
51631
51894
  * ```typescript
51632
51895
  * const firstPage = this.grid.isFirstPage;
@@ -51636,9 +51899,10 @@ class IgxGridBaseDirective extends DisplayDensityBase {
51636
51899
  return this.paginator.isLastPage;
51637
51900
  }
51638
51901
  /**
51902
+ * @deprecated in version 12.1.0. Use the corresponding method exposed by the `igx-paginator`
51903
+ *
51639
51904
  * Goes to the next page, if the grid is not already at the last page.
51640
51905
  *
51641
- * @deprecated in version 12.1.0
51642
51906
  * @example
51643
51907
  * ```typescript
51644
51908
  * this.grid1.nextPage();
@@ -51650,9 +51914,10 @@ class IgxGridBaseDirective extends DisplayDensityBase {
51650
51914
  (_a = this.paginator) === null || _a === void 0 ? void 0 : _a.nextPage();
51651
51915
  }
51652
51916
  /**
51917
+ * @deprecated in version 12.1.0. Use the corresponding method exposed by the `igx-paginator`
51918
+ *
51653
51919
  * Goes to the previous page, if the grid is not already at the first page.
51654
51920
  *
51655
- * @deprecated in version 12.1.0
51656
51921
  * @example
51657
51922
  * ```typescript
51658
51923
  * this.grid1.previousPage();
@@ -51688,9 +51953,10 @@ class IgxGridBaseDirective extends DisplayDensityBase {
51688
51953
  }
51689
51954
  }
51690
51955
  /**
51956
+ * @deprecated in version 12.1.0. Use the corresponding property exposed by the `igx-paginator`
51957
+ *
51691
51958
  * Returns if the current page is the last page.
51692
51959
  *
51693
- * @deprecated in version 12.1.0
51694
51960
  * @example
51695
51961
  * ```typescript
51696
51962
  * const lastPage = this.grid.isLastPage;
@@ -51787,6 +52053,8 @@ class IgxGridBaseDirective extends DisplayDensityBase {
51787
52053
  this._columnsReordered(column);
51788
52054
  }
51789
52055
  /**
52056
+ * @deprecated in version 12.1.0. Use the corresponding method exposed by the `igx-paginator`
52057
+ *
51790
52058
  * Goes to the desired page index.
51791
52059
  *
51792
52060
  * @example
@@ -54801,24 +55069,9 @@ IgxGridBaseDirective.propDecorators = {
54801
55069
  totalRecords: [{ type: Input }],
54802
55070
  selectRowOnClick: [{ type: Input }]
54803
55071
  };
54804
- __decorate([
54805
- DeprecateProperty('`pageChange` is deprecated. Use the corresponding output exposed by the `igx-paginator` component instead.')
54806
- ], IgxGridBaseDirective.prototype, "pageChange", void 0);
54807
- __decorate([
54808
- DeprecateProperty('`perPageChange` is deprecated. Use the corresponding output exposed by the `igx-paginator` component instead.')
54809
- ], IgxGridBaseDirective.prototype, "perPageChange", void 0);
54810
- __decorate([
54811
- DeprecateProperty('`evenRowCSS` is deprecated. We suggest using `rowClasses` property instead.')
54812
- ], IgxGridBaseDirective.prototype, "evenRowCSS", void 0);
54813
- __decorate([
54814
- DeprecateProperty('`oddRowCSS` is deprecated. We suggest using `rowClasses` property instead.')
54815
- ], IgxGridBaseDirective.prototype, "oddRowCSS", void 0);
54816
55072
  __decorate([
54817
55073
  WatchChanges()
54818
55074
  ], IgxGridBaseDirective.prototype, "primaryKey", void 0);
54819
- __decorate([
54820
- DeprecateProperty('`pagingDone` is deprecated. Use the corresponding output exposed by the `igx-paginator` component instead.')
54821
- ], IgxGridBaseDirective.prototype, "pagingDone", void 0);
54822
55075
  __decorate([
54823
55076
  WatchChanges()
54824
55077
  ], IgxGridBaseDirective.prototype, "filteringLogic", null);
@@ -54828,18 +55081,6 @@ __decorate([
54828
55081
  __decorate([
54829
55082
  WatchChanges()
54830
55083
  ], IgxGridBaseDirective.prototype, "advancedFilteringExpressionsTree", null);
54831
- __decorate([
54832
- DeprecateProperty('`paging` is deprecated')
54833
- ], IgxGridBaseDirective.prototype, "paging", null);
54834
- __decorate([
54835
- DeprecateProperty('`page` is deprecated. Use `page` property form `paginator` component instead.')
54836
- ], IgxGridBaseDirective.prototype, "page", null);
54837
- __decorate([
54838
- DeprecateProperty('`perPage` is deprecated. Use `perPage` property from `paginator` component instead.')
54839
- ], IgxGridBaseDirective.prototype, "perPage", null);
54840
- __decorate([
54841
- DeprecateProperty('`columnHiding` is deprecated.')
54842
- ], IgxGridBaseDirective.prototype, "columnHiding", null);
54843
55084
  __decorate([
54844
55085
  WatchChanges()
54845
55086
  ], IgxGridBaseDirective.prototype, "hideRowSelectors", null);
@@ -54861,42 +55102,9 @@ __decorate([
54861
55102
  __decorate([
54862
55103
  WatchChanges()
54863
55104
  ], IgxGridBaseDirective.prototype, "isLoading", null);
54864
- __decorate([
54865
- DeprecateProperty('`columnHidingTitle` is deprecated')
54866
- ], IgxGridBaseDirective.prototype, "columnHidingTitle", null);
54867
- __decorate([
54868
- DeprecateProperty('`columnPinning` is deprecated')
54869
- ], IgxGridBaseDirective.prototype, "columnPinning", null);
54870
- __decorate([
54871
- DeprecateProperty('`columnPinningTitle` is deprecated')
54872
- ], IgxGridBaseDirective.prototype, "columnPinningTitle", null);
54873
55105
  __decorate([
54874
55106
  WatchChanges()
54875
55107
  ], IgxGridBaseDirective.prototype, "sortingExpressions", null);
54876
- __decorate([
54877
- DeprecateProperty('`pinnedColumnsText` is deprecated')
54878
- ], IgxGridBaseDirective.prototype, "pinnedColumnsText", null);
54879
- __decorate([
54880
- DeprecateProperty('`showToolbar` is deprecated')
54881
- ], IgxGridBaseDirective.prototype, "showToolbar", null);
54882
- __decorate([
54883
- DeprecateProperty('`toolbarTitle` is deprecated')
54884
- ], IgxGridBaseDirective.prototype, "toolbarTitle", null);
54885
- __decorate([
54886
- DeprecateProperty('`exportExcel` is deprecated')
54887
- ], IgxGridBaseDirective.prototype, "exportExcel", null);
54888
- __decorate([
54889
- DeprecateProperty('`exportCsv` is deprecated')
54890
- ], IgxGridBaseDirective.prototype, "exportCsv", null);
54891
- __decorate([
54892
- DeprecateProperty('`exportText` is deprecated')
54893
- ], IgxGridBaseDirective.prototype, "exportText", null);
54894
- __decorate([
54895
- DeprecateProperty('`exportExcelText` is deprecated')
54896
- ], IgxGridBaseDirective.prototype, "exportExcelText", null);
54897
- __decorate([
54898
- DeprecateProperty('`exportCsvText` is deprecated')
54899
- ], IgxGridBaseDirective.prototype, "exportCsvText", null);
54900
55108
  __decorate([
54901
55109
  WatchChanges()
54902
55110
  ], IgxGridBaseDirective.prototype, "cellSelection", null);
@@ -54906,24 +55114,6 @@ __decorate([
54906
55114
  __decorate([
54907
55115
  WatchChanges()
54908
55116
  ], IgxGridBaseDirective.prototype, "columnSelection", null);
54909
- __decorate([
54910
- DeprecateProperty('`totalPages` is deprecated. Use the corresponding property exposed by the `igx-paginator`.')
54911
- ], IgxGridBaseDirective.prototype, "totalPages", null);
54912
- __decorate([
54913
- DeprecateProperty('`isFirstPage` is deprecated. Use the corresponding property exposed by the `igx-paginator`.')
54914
- ], IgxGridBaseDirective.prototype, "isFirstPage", null);
54915
- __decorate([
54916
- DeprecateMethod('Use the corresponding method exposed by the `igx-paginator`.')
54917
- ], IgxGridBaseDirective.prototype, "nextPage", null);
54918
- __decorate([
54919
- DeprecateMethod('Use the corresponding method exposed by the `igx-paginator`.')
54920
- ], IgxGridBaseDirective.prototype, "previousPage", null);
54921
- __decorate([
54922
- DeprecateProperty('`isLastPage` is deprecated. Use the corresponding property exposed by the `igx-paginator`.')
54923
- ], IgxGridBaseDirective.prototype, "isLastPage", null);
54924
- __decorate([
54925
- DeprecateMethod('Use the corresponding method exposed by the `igx-paginator`.')
54926
- ], IgxGridBaseDirective.prototype, "paginate", null);
54927
55117
  __decorate([
54928
55118
  WatchChanges()
54929
55119
  ], IgxGridBaseDirective.prototype, "selectRowOnClick", null);
@@ -54971,7 +55161,7 @@ class BaseRow {
54971
55161
  return (_b = this._data) !== null && _b !== void 0 ? _b : this.grid.dataView[this.index];
54972
55162
  }
54973
55163
  /**
54974
- * @deprecated Use 'data' instead.
55164
+ * @deprecated Use 'data' instead
54975
55165
  *
54976
55166
  * The data record that populates the row
54977
55167
  */
@@ -54979,8 +55169,7 @@ class BaseRow {
54979
55169
  return this.data;
54980
55170
  }
54981
55171
  /**
54982
- * @deprecated Use 'key' instead.
54983
- *
55172
+ * @deprecated Use 'key' instead
54984
55173
  */
54985
55174
  get rowID() {
54986
55175
  return this.key;
@@ -55149,12 +55338,6 @@ class BaseRow {
55149
55338
  this.grid.deleteRowById(this.key);
55150
55339
  }
55151
55340
  }
55152
- __decorate([
55153
- DeprecateProperty(`'rowData' property is deprecated. Use 'data' instead.`)
55154
- ], BaseRow.prototype, "rowData", null);
55155
- __decorate([
55156
- DeprecateProperty(`'rowID' property is deprecated. Use 'key' instead.`)
55157
- ], BaseRow.prototype, "rowID", null);
55158
55341
  class IgxGridRow extends BaseRow {
55159
55342
  /**
55160
55343
  * @hidden
@@ -56151,17 +56334,6 @@ class IgxGridCellComponent {
56151
56334
  get currencyCodeSymbol() {
56152
56335
  return getCurrencySymbol(this.currencyCode, 'wide', this.grid.locale);
56153
56336
  }
56154
- /**
56155
- * @deprecated
56156
- * Gets whether the cell is selected.
56157
- * ```typescript
56158
- * let isCellSelected = thid.cell.isCellSelected();
56159
- * ```
56160
- * @memberof IgxGridCellComponent
56161
- */
56162
- isCellSelected() {
56163
- return this.selectionService.selected(this.selectionNode);
56164
- }
56165
56337
  /**
56166
56338
  * @hidden
56167
56339
  * @internal
@@ -56466,9 +56638,6 @@ IgxGridCellComponent.propDecorators = {
56466
56638
  onClick: [{ type: HostListener, args: ['click', ['$event'],] }],
56467
56639
  onContextMenu: [{ type: HostListener, args: ['contextmenu', ['$event'],] }]
56468
56640
  };
56469
- __decorate([
56470
- DeprecateMethod(`'isCellSelected' is deprecated. Use 'selected' property instead.`)
56471
- ], IgxGridCellComponent.prototype, "isCellSelected", null);
56472
56641
 
56473
56642
  class IgxGridFooterComponent {
56474
56643
  }
@@ -56847,9 +57016,10 @@ class IgxColumnActionsComponent {
56847
57016
  this._differ = this.differs.find([]).create(this.trackChanges);
56848
57017
  }
56849
57018
  /**
57019
+ * @deprecated Use grid input instead.
57020
+ *
56850
57021
  * Gets the grid columns to provide an action for.
56851
57022
  *
56852
- * @deprecated
56853
57023
  * @example
56854
57024
  * ```typescript
56855
57025
  * let gridColumns = this.columnActions.columns;
@@ -57089,9 +57259,6 @@ IgxColumnActionsComponent.propDecorators = {
57089
57259
  checkAllText: [{ type: Input }],
57090
57260
  id: [{ type: HostBinding, args: ['attr.id',] }, { type: Input }]
57091
57261
  };
57092
- __decorate([
57093
- DeprecateProperty(`Deprecated. Use 'grid' input instead.`)
57094
- ], IgxColumnActionsComponent.prototype, "columns", null);
57095
57262
 
57096
57263
  /**
57097
57264
  * @hidden
@@ -61384,7 +61551,8 @@ class IgxGridComponent extends IgxGridBaseDirective {
61384
61551
  return this._dropAreaMessage || this.resourceStrings.igx_grid_groupByArea_message;
61385
61552
  }
61386
61553
  /**
61387
- * @deprecated
61554
+ * @deprecated in version 12.1.0. Use `getCellByColumn` or `getCellByKey` instead
61555
+ *
61388
61556
  * Returns a `CellType` object that matches the conditions.
61389
61557
  *
61390
61558
  * @example
@@ -62146,9 +62314,6 @@ IgxGridComponent.propDecorators = {
62146
62314
  dropAreaMessage: [{ type: Input }],
62147
62315
  showGroupArea: [{ type: Input }]
62148
62316
  };
62149
- __decorate([
62150
- DeprecateMethod('`getCellByColumnVisibleIndex` is deprecated. Use `getCellByColumn` or `getCellByKey` instead')
62151
- ], IgxGridComponent.prototype, "getCellByColumnVisibleIndex", null);
62152
62317
 
62153
62318
  class IgxGridStateDirective {
62154
62319
  /**
@@ -64951,7 +65116,8 @@ class IgxTreeGridComponent extends IgxGridBaseDirective {
64951
65116
  return this.gridAPI;
64952
65117
  }
64953
65118
  /**
64954
- * @deprecated
65119
+ * @deprecated in version 12.1.0. Use `getCellByColumn` or `getCellByKey` instead
65120
+ *
64955
65121
  * Returns a `CellType` object that matches the conditions.
64956
65122
  *
64957
65123
  * @example
@@ -65611,9 +65777,6 @@ IgxTreeGridComponent.propDecorators = {
65611
65777
  expansionDepth: [{ type: Input }],
65612
65778
  rowLoadingIndicatorTemplate: [{ type: Input }]
65613
65779
  };
65614
- __decorate([
65615
- DeprecateMethod('`getCellByColumnVisibleIndex` is deprecated. Use `getCellByColumn` or `getCellByKey` instead')
65616
- ], IgxTreeGridComponent.prototype, "getCellByColumnVisibleIndex", null);
65617
65780
 
65618
65781
  class IgxTreeGridRowComponent extends IgxRowDirective {
65619
65782
  /**
@@ -67814,7 +67977,8 @@ class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirective {
67814
67977
  return this._defaultExpandState;
67815
67978
  }
67816
67979
  /**
67817
- * @deprecated
67980
+ * @deprecated in version 12.1.0. Use `getCellByColumn` or `getCellByKey` instead
67981
+ *
67818
67982
  * Returns a `CellType` object that matches the conditions.
67819
67983
  *
67820
67984
  * @example
@@ -68459,9 +68623,6 @@ IgxHierarchicalGridComponent.propDecorators = {
68459
68623
  data: [{ type: Input }],
68460
68624
  expandChildren: [{ type: Input }]
68461
68625
  };
68462
- __decorate([
68463
- DeprecateMethod('`getCellByColumnVisibleIndex` is deprecated. Use `getCellByColumn` or `getCellByKey` instead')
68464
- ], IgxHierarchicalGridComponent.prototype, "getCellByColumnVisibleIndex", null);
68465
68626
 
68466
68627
  class IgxHierarchicalGridCellComponent extends IgxGridCellComponent {
68467
68628
  constructor(selectionService, gridAPI, cdr, helement, zone, touchManager, platformUtil) {
@@ -72898,6 +73059,8 @@ class IgxToastComponent extends IgxNotificationsDirective {
72898
73059
  };
72899
73060
  }
72900
73061
  /**
73062
+ * @deprecated in version 12.2.3. We suggest using `positionSettings` property instead
73063
+ *
72901
73064
  * Sets/gets the position of the toast.
72902
73065
  * If not set, the `position` attribute will have value `IgxToastPosition.Bottom`.
72903
73066
  * ```html
@@ -73041,9 +73204,6 @@ IgxToastComponent.propDecorators = {
73041
73204
  position: [{ type: Input }],
73042
73205
  positionSettings: [{ type: Input }]
73043
73206
  };
73044
- __decorate([
73045
- DeprecateProperty('`position` is deprecated. We suggest using `positionSettings` property instead.')
73046
- ], IgxToastComponent.prototype, "position", null);
73047
73207
  /**
73048
73208
  * @hidden
73049
73209
  */
@@ -76437,5 +76597,5 @@ IgxTreeModule.decorators = [
76437
76597
  * Generated bundle index. Do not edit.
76438
76598
  */
76439
76599
 
76440
- export { AbsolutePosition, AbsoluteScrollStrategy, AutoPositionStrategy, BaseFilteringStrategy, BaseProgressDirective, BlockScrollStrategy, ButtonGroupAlignment, Calendar, CalendarHammerConfig, CalendarSelection, CalendarView, CarouselAnimationType, CarouselHammerConfig, CarouselIndicatorsOrientation, CloseScrollStrategy, ColumnDisplayOrder, ColumnPinningPosition, ConnectedPositioningStrategy, ContainerPositionStrategy, CsvFileTypes, DEFAULT_OWNER, DataUtil, DatePart, DateRangePickerFormatPipe, DateRangeType, DefaultSortingStrategy, Direction, DisplayDensity, DisplayDensityBase, DisplayDensityToken, DragDirection, ElasticPositionStrategy, ExpansionPanelHeaderIconPosition, ExportRecordType, FilterListItem, FilterMode, FilteringExpressionsTree, FilteringExpressionsTreeType, FilteringLogic, FilteringStrategy, FormattedValuesFilteringStrategy, GlobalPositionStrategy, GridBaseAPIService, GridColumnDataType, GridInstanceType, GridPagingMode, GridSelectionMode, GridSummaryCalculationMode, GridSummaryPosition, GroupedRecords, HeaderType, HorizontalAlignment, IGX_CHECKBOX_REQUIRED_VALIDATOR, IGX_INPUT_GROUP_TYPE, IGX_SWITCH_REQUIRED_VALIDATOR, ITreeGridAggregation, IgxAccordionComponent, IgxAccordionModule, IgxActionStripComponent, IgxActionStripModule, IgxAppendDropStrategy, IgxAutocompleteDirective, IgxAutocompleteModule, IgxAvatarComponent, IgxAvatarModule, IgxAvatarSize, IgxAvatarType, IgxBadgeComponent, IgxBadgeModule, IgxBadgeType, 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, IgxCarouselModule, IgxCellEditorTemplateDirective, IgxCellFooterTemplateDirective, IgxCellHeaderTemplateDirective, IgxCellTemplateDirective, IgxCheckboxComponent, IgxCheckboxModule, IgxCheckboxRequiredDirective, IgxChipComponent, IgxChipsAreaComponent, IgxChipsModule, IgxCircularProgressBarComponent, IgxCollapsibleIndicatorTemplateDirective, IgxColumnActionsBaseDirective, IgxColumnActionsComponent, IgxColumnActionsModule, IgxColumnComponent, IgxColumnGroupComponent, IgxColumnLayoutComponent, IgxComboComponent, IgxComboModule, IgxComboState, IgxCsvExporterOptions, IgxCsvExporterService, IgxDataLoadingTemplateDirective, IgxDataRecordSorting, IgxDateFilteringOperand, IgxDatePickerComponent, IgxDatePickerModule, IgxDateRangeEndComponent, IgxDateRangeInputsBaseComponent, IgxDateRangePickerComponent, IgxDateRangePickerModule, IgxDateRangeSeparatorDirective, IgxDateRangeStartComponent, IgxDateSummaryOperand, IgxDateTimeEditorDirective, IgxDateTimeEditorModule, IgxDateTimeFilteringOperand, IgxDaysViewComponent, IgxDefaultDropStrategy, IgxDialogComponent, IgxDialogModule, IgxDisplayDensityModule, IgxDividerDirective, IgxDividerModule, IgxDividerType, IgxDragDirective, IgxDragDropModule, IgxDragHandleDirective, IgxDragIgnoreDirective, IgxDragLocation, IgxDropDirective, IgxDropDownBaseDirective, IgxDropDownComponent, IgxDropDownGroupComponent, IgxDropDownItemBaseDirective, IgxDropDownItemComponent, IgxDropDownItemNavigationDirective, IgxDropDownModule, IgxEmptyListTemplateDirective, IgxExcelExporterOptions, IgxExcelExporterService, IgxExcelStyleClearFiltersComponent, IgxExcelStyleColumnOperationsTemplateDirective, IgxExcelStyleConditionalFilterComponent, IgxExcelStyleFilterOperationsTemplateDirective, IgxExcelStyleHeaderComponent, IgxExcelStyleHeaderIconDirective, IgxExcelStyleHidingComponent, IgxExcelStyleLoadingValuesTemplateDirective, IgxExcelStyleMovingComponent, IgxExcelStylePinningComponent, IgxExcelStyleSearchComponent, IgxExcelStyleSelectingComponent, IgxExcelStyleSortingComponent, IgxExcelTextDirective, IgxExpansionPanelBodyComponent, IgxExpansionPanelComponent, IgxExpansionPanelHeaderComponent, IgxExpansionPanelModule, IgxExporterOptionsBase, IgxFilterCellTemplateDirective, IgxFilterDirective, IgxFilterModule, IgxFilterOptions, IgxFilterPipe, IgxFilteringOperand, IgxFlatTransactionFactory, IgxFlexDirective, IgxFocusDirective, IgxFocusModule, IgxForOfContext, IgxForOfDirective, IgxForOfModule, IgxGridAPIService, IgxGridActionsBaseDirective, IgxGridBaseDirective, IgxGridBodyDirective, IgxGridCell, IgxGridCommonModule, IgxGridComponent, IgxGridDetailTemplateDirective, IgxGridEditingActionsComponent, IgxGridExcelStyleFilteringComponent, IgxGridForOfDirective, IgxGridHierarchicalPagingPipe, IgxGridHierarchicalPipe, IgxGridModule, IgxGridPinningActionsComponent, IgxGridRow, IgxGridStateDirective, IgxGridStateModule, IgxGridToolbarActionsDirective, IgxGridToolbarAdvancedFilteringComponent, IgxGridToolbarComponent, IgxGridToolbarDirective, IgxGridToolbarExporterComponent, IgxGridToolbarHidingComponent, IgxGridToolbarPinningComponent, IgxGridToolbarTitleDirective, IgxGridTransaction, IgxGroupAreaDropDirective, IgxGroupByRow, IgxGroupByRowTemplateDirective, IgxGroupedTreeGridSorting, IgxGrouping, IgxHeaderCollapseIndicatorDirective, IgxHeaderExpandIndicatorDirective, IgxHierarchicalGridAPIService, IgxHierarchicalGridBaseDirective, IgxHierarchicalGridComponent, IgxHierarchicalGridModule, IgxHierarchicalGridRow, IgxHierarchicalTransactionFactory, IgxHierarchicalTransactionService, IgxHierarchicalTransactionServiceFactory, IgxHintDirective, IgxIconComponent, IgxIconModule, IgxIconService, IgxInputDirective, IgxInputGroupComponent, IgxInputGroupModule, IgxInputState, IgxInsertDropStrategy, 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, IgxProgressBarModule, IgxProgressType, IgxRadioComponent, IgxRadioGroupDirective, IgxRadioModule, IgxRippleDirective, IgxRippleModule, IgxRowCollapsedIndicatorDirective, IgxRowExpandedIndicatorDirective, IgxRowIslandAPIService, IgxRowIslandComponent, IgxSelectComponent, IgxSelectFooterDirective, IgxSelectGroupComponent, IgxSelectHeaderDirective, IgxSelectItemComponent, IgxSelectModule, IgxSelectToggleIconDirective, IgxSlideComponent, IgxSliderComponent, IgxSliderModule, IgxSliderType, IgxSnackbarComponent, IgxSnackbarModule, IgxSorting, IgxSplitterComponent, IgxSplitterModule, IgxSplitterPaneComponent, IgxStringFilteringOperand, IgxSuffixDirective, IgxSuffixModule, IgxSummaryOperand, IgxSummaryRow, IgxSwitchComponent, IgxSwitchModule, IgxSwitchRequiredDirective, IgxTabContentComponent, IgxTabContentDirective, IgxTabHeaderComponent, IgxTabHeaderDirective, IgxTabHeaderIconDirective, IgxTabHeaderLabelDirective, IgxTabItemComponent, IgxTabItemDirective, IgxTabsAlignment, IgxTabsComponent, IgxTabsDirective, IgxTabsModule, IgxTextAlign, IgxTextHighlightDirective, IgxTextHighlightModule, IgxTextSelectionDirective, IgxTextSelectionModule, IgxThumbFromTemplateDirective, IgxThumbToTemplateDirective, IgxTickLabelTemplateDirective, IgxTimeFilteringOperand, IgxTimePickerComponent, IgxTimePickerModule, IgxTimeSummaryOperand, IgxToastComponent, IgxToastModule, IgxToastPosition, IgxToggleActionDirective, IgxToggleDirective, IgxToggleModule, IgxTooltipDirective, IgxTooltipModule, IgxTooltipTargetDirective, IgxTransactionService, IgxTreeComponent, IgxTreeExpandIndicatorDirective, IgxTreeGridAPIService, IgxTreeGridComponent, IgxTreeGridGroupingPipe, IgxTreeGridModule, IgxTreeGridRow, IgxTreeModule, IgxTreeNodeComponent, IgxTreeNodeLinkDirective, IgxTreeSelectMarkerDirective, IgxTreeSelectionType, IgxYearsViewComponent, LabelPosition, NoOpScrollStrategy, NoopFilteringStrategy, NoopSortingStrategy, PagingError, PickerInteractionMode, Point, RadioGroupAlignment, RadioLabelPosition, RelativePosition, RelativePositionStrategy, RowEditPositionStrategy, RowPinningPosition, ScrollMonth, ScrollStrategy, SliderHandle, SortingDirection, SplitterType, SwitchLabelPosition, TickLabelsOrientation, TicksOrientation, TransactionEventOrigin, TransactionType, TreeGridFilteringStrategy, TreeGridFormattedValuesFilteringStrategy, TreeGridMatchingRecordsOnlyFilteringStrategy, VerticalAlignment, 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, ɵ1, ɵ2, IgxActionStripMenuItemDirective as ɵa, IGX_DROPDOWN_BASE as ɵb, IgxGridActionButtonComponent as ɵba, ToggleAnimationPlayer as ɵbb, IgxExpansionPanelTitleDirective as ɵbc, IgxExpansionPanelDescriptionDirective as ɵbd, IgxExpansionPanelIconDirective as ɵbe, IgxBannerActionsDirective as ɵbf, IgxDaysViewNavigationService as ɵbg, IgxDayItemComponent as ɵbh, IgxMonthViewSlotsCalendar as ɵbi, IgxGetViewDateCalendar as ɵbj, IgxCarouselIndicatorDirective as ɵbk, IgxCarouselNextButtonDirective as ɵbl, IgxCarouselPrevButtonDirective as ɵbm, IgxComboAPIService as ɵbn, IGX_COMBO_COMPONENT as ɵbo, IgxComboDropDownComponent as ɵbq, IgxComboItemComponent as ɵbr, IgxComboHeaderDirective as ɵbs, IgxComboFooterDirective as ɵbt, IgxComboItemDirective as ɵbu, IgxComboEmptyDirective as ɵbv, IgxComboHeaderItemDirective as ɵbw, IgxComboAddItemDirective as ɵbx, IgxComboToggleIconDirective as ɵby, IgxComboClearIconDirective as ɵbz, IgxComboFilteringPipe as ɵca, IgxComboGroupingPipe as ɵcb, IgxComboAddItemComponent as ɵcc, PickerBaseDirective as ɵcd, IgxCalendarContainerComponent as ɵce, IgxCalendarContainerModule as ɵcf, IgxDialogTitleDirective as ɵcg, IgxDialogActionsDirective as ɵch, IgxCellCrudState as ɵci, IgxRowCrudState as ɵcj, IgxRowAddCrudState as ɵck, IgxGridCRUDService as ɵcl, IgxColumnMovingService as ɵcm, IgxExcelStyleCustomDialogComponent as ɵcn, IgxExcelStyleDefaultExpressionComponent as ɵco, IgxExcelStyleDateExpressionComponent as ɵcp, HammerGesturesManager as ɵcq, WatchChanges as ɵcr, WatchColumnChanges as ɵcs, notifyChanges as ɵct, IgxNotificationsDirective as ɵcu, IgxGridColumnResizerComponent as ɵcv, IgxColumnResizerDirective as ɵcw, IgxColumnResizingService as ɵcx, IgxRowSelectorDirective as ɵcy, IgxGroupByRowSelectorDirective as ɵcz, IgxGridSelectionService as ɵd, IgxHeadSelectorDirective as ɵda, IgxRowDragDirective as ɵdb, IgxDragIndicatorIconDirective as ɵdc, IgxRowDragGhostDirective as ɵdd, IgxRowDragModule as ɵde, IgxGridHeaderRowComponent as ɵdf, IgxGridHeaderGroupComponent as ɵdg, IgxGridHeaderComponent as ɵdh, IgxGridFilteringCellComponent as ɵdi, IgxFilteringService as ɵdj, IgxGridFilteringRowComponent as ɵdk, IgxGridGroupByAreaComponent as ɵdl, IgxGroupByAreaDirective as ɵdm, IgxGroupByMetaPipe as ɵdn, IgxTemplateOutletDirective as ɵdo, IgxTemplateOutletModule as ɵdp, IgxRowEditTemplateDirective as ɵdq, IgxRowEditTextDirective as ɵdr, IgxRowAddTextDirective as ɵds, IgxRowEditActionsDirective as ɵdt, IgxRowEditTabStopDirective as ɵdu, IgxSummaryRowComponent as ɵdv, IgxSummaryCellComponent as ɵdw, IgxRowDirective as ɵdx, IgxGridNavigationService as ɵdy, IgxGridSummaryService as ɵdz, ConnectedPositioningStrategy as ɵea, IgxGridGroupByRowComponent as ɵeb, IgxTreeGridSelectionService as ɵec, IgxTreeGridGroupByAreaComponent as ɵed, IgxRowLoadingIndicatorTemplateDirective as ɵee, IgxHierarchicalGridNavigationService as ɵef, IgxChildGridRowComponent as ɵeg, IgxGridCellComponent as ɵeh, IgxGridFooterComponent as ɵei, IgxAdvancedFilteringDialogComponent as ɵej, IgxColumnHidingDirective as ɵek, IgxColumnPinningDirective as ɵel, IgxGridSharedModules as ɵem, IgxProcessBarTextTemplateDirective as ɵen, IgxProgressBarGradientDirective as ɵeo, DIR_DOCUMENT_FACTORY as ɵep, DIR_DOCUMENT as ɵeq, IgxDirectionality as ɵer, IgxSelectItemNavigationDirective as ɵes, IGX_TIME_PICKER_COMPONENT as ɵet, IgxItemListDirective as ɵev, IgxTimeItemDirective as ɵew, IgxTimePickerTemplateDirective as ɵex, IgxTimePickerActionsDirective as ɵey, TimeFormatPipe as ɵez, IGX_EXPANSION_PANEL_COMPONENT as ɵf, TimeItemPipe as ɵfa, IgxGridPipesModule as ɵfb, IgxGridCellStyleClassesPipe as ɵfc, IgxGridCellStylesPipe as ɵfd, IgxGridRowClassesPipe as ɵfe, IgxGridRowStylesPipe as ɵff, IgxGridNotGroupedPipe as ɵfg, IgxGridTopLevelColumns as ɵfh, IgxGridFilterConditionPipe as ɵfi, IgxGridTransactionPipe as ɵfj, IgxGridPaginatorOptionsPipe as ɵfk, IgxHasVisibleColumnsPipe as ɵfl, IgxGridRowPinningPipe as ɵfm, IgxColumnActionEnabledPipe as ɵfn, IgxFilterActionColumnsPipe as ɵfo, IgxSortActionColumnsPipe as ɵfp, IgxGridDataMapperPipe as ɵfq, IgxStringReplacePipe as ɵfr, IgxGridTransactionStatePipe as ɵfs, IgxColumnFormatterPipe as ɵft, IgxSummaryFormatterPipe as ɵfu, IgxGridAddRowPipe as ɵfv, IgxHeaderGroupWidthPipe as ɵfw, IgxHeaderGroupStylePipe as ɵfx, IgxGridColumnModule as ɵfy, IgxGridHeadersModule as ɵfz, IGX_TREE_COMPONENT as ɵg, SortingIndexPipe as ɵga, IgxGridFilteringModule as ɵgb, IgxColumnMovingModule as ɵgc, IgxColumnMovingDropDirective as ɵgd, IgxColumnMovingDragDirective as ɵge, IgxGridResizingModule as ɵgf, IgxResizeHandleDirective as ɵgg, IgxGridExcelStyleFilteringModule as ɵgh, IgxGridSelectionModule as ɵgi, IgxGridDragSelectDirective as ɵgj, IgxGridSummaryModule as ɵgk, IgxSummaryDataPipe as ɵgl, IgxGridToolbarModule as ɵgm, BaseToolbarDirective as ɵgn, BaseToolbarColumnActionsDirective as ɵgo, IgxGridRowComponent as ɵgp, IgxGridSortingPipe as ɵgq, IgxGridGroupingPipe as ɵgr, IgxGridPagingPipe as ɵgs, IgxGridFilteringPipe as ɵgt, IgxGridSummaryPipe as ɵgu, IgxGridDetailsPipe as ɵgv, IgxGridExpandableCellComponent as ɵgw, IgxTreeGridRowComponent as ɵgx, IgxTreeGridCellComponent as ɵgy, IgxTreeGridHierarchizingPipe as ɵgz, IGX_TREE_NODE_COMPONENT as ɵh, IgxTreeGridFlatteningPipe as ɵha, IgxTreeGridSortingPipe as ɵhb, IgxTreeGridPagingPipe as ɵhc, IgxTreeGridTransactionPipe as ɵhd, IgxTreeGridNormalizeRecordsPipe as ɵhe, IgxTreeGridAddRowPipe as ɵhf, IgxTreeGridFilteringPipe as ɵhg, IgxTreeGridSummaryPipe as ɵhh, IgxHierarchicalRowComponent as ɵhi, IgxHierarchicalGridCellComponent as ɵhj, IgxSliderThumbComponent as ɵhk, IgxThumbLabelComponent as ɵhl, IgxTicksComponent as ɵhm, IgxTickLabelsPipe as ɵhn, IgxTabsBase as ɵho, IgxTabHeaderBase as ɵhp, IgxTabContentBase as ɵhq, IgxSplitBarComponent as ɵhr, IgxTreeService as ɵhs, IgxTreeSelectionService as ɵht, IgxTreeNavigationService as ɵhu, PlatformUtil as ɵi, EaseIn as ɵj, EaseOut as ɵk, IgxInputGroupBase as ɵl, IgxSelectionAPIService as ɵm, IgxForOfSyncService as ɵn, IgxForOfScrollSyncService as ɵo, DisplayContainerComponent as ɵp, IgxScrollInertiaDirective as ɵq, IgxScrollInertiaModule as ɵr, VirtualHelperComponent as ɵs, VirtualHelperBaseDirective as ɵt, HVirtualHelperComponent as ɵu, MaskParsingService as ɵv, DeprecateMethod as ɵw, DeprecateProperty as ɵx, isHierarchyMatch as ɵy, getHierarchy as ɵz };
76600
+ export { AbsolutePosition, AbsoluteScrollStrategy, AutoPositionStrategy, BaseFilteringStrategy, BaseProgressDirective, BlockScrollStrategy, ButtonGroupAlignment, Calendar, CalendarHammerConfig, CalendarSelection, CalendarView, CarouselAnimationType, CarouselHammerConfig, CarouselIndicatorsOrientation, CloseScrollStrategy, ColumnDisplayOrder, ColumnPinningPosition, ConnectedPositioningStrategy, ContainerPositionStrategy, CsvFileTypes, DEFAULT_OWNER, DataUtil, DatePart, DateRangePickerFormatPipe, DateRangeType, DefaultSortingStrategy, Direction, DisplayDensity, DisplayDensityBase, DisplayDensityToken, DragDirection, ElasticPositionStrategy, ExpansionPanelHeaderIconPosition, ExportRecordType, FilterListItem, FilterMode, FilteringExpressionsTree, FilteringExpressionsTreeType, FilteringLogic, FilteringStrategy, FormattedValuesFilteringStrategy, GlobalPositionStrategy, GridBaseAPIService, GridColumnDataType, GridInstanceType, GridPagingMode, GridSelectionMode, GridSummaryCalculationMode, GridSummaryPosition, GroupedRecords, HeaderType, HorizontalAlignment, IGX_CHECKBOX_REQUIRED_VALIDATOR, IGX_INPUT_GROUP_TYPE, IGX_SWITCH_REQUIRED_VALIDATOR, ITreeGridAggregation, IgxAccordionComponent, IgxAccordionModule, IgxActionStripComponent, IgxActionStripModule, IgxAppendDropStrategy, IgxAutocompleteDirective, IgxAutocompleteModule, IgxAvatarComponent, IgxAvatarModule, IgxAvatarSize, IgxAvatarType, IgxBadgeComponent, IgxBadgeModule, IgxBadgeType, 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, IgxCarouselModule, IgxCellEditorTemplateDirective, IgxCellFooterTemplateDirective, IgxCellHeaderTemplateDirective, IgxCellTemplateDirective, IgxCheckboxComponent, IgxCheckboxModule, IgxCheckboxRequiredDirective, IgxChipComponent, IgxChipsAreaComponent, IgxChipsModule, IgxCircularProgressBarComponent, IgxCollapsibleIndicatorTemplateDirective, IgxColumnActionsBaseDirective, IgxColumnActionsComponent, IgxColumnActionsModule, IgxColumnComponent, IgxColumnGroupComponent, IgxColumnLayoutComponent, IgxComboComponent, IgxComboModule, IgxCsvExporterOptions, IgxCsvExporterService, IgxDataLoadingTemplateDirective, IgxDataRecordSorting, IgxDateFilteringOperand, IgxDatePickerComponent, IgxDatePickerModule, IgxDateRangeEndComponent, IgxDateRangeInputsBaseComponent, IgxDateRangePickerComponent, IgxDateRangePickerModule, IgxDateRangeSeparatorDirective, IgxDateRangeStartComponent, IgxDateSummaryOperand, IgxDateTimeEditorDirective, IgxDateTimeEditorModule, IgxDateTimeFilteringOperand, IgxDaysViewComponent, IgxDefaultDropStrategy, IgxDialogComponent, IgxDialogModule, IgxDisplayDensityModule, IgxDividerDirective, IgxDividerModule, IgxDividerType, IgxDragDirective, IgxDragDropModule, IgxDragHandleDirective, IgxDragIgnoreDirective, IgxDragLocation, IgxDropDirective, IgxDropDownBaseDirective, IgxDropDownComponent, IgxDropDownGroupComponent, IgxDropDownItemBaseDirective, IgxDropDownItemComponent, IgxDropDownItemNavigationDirective, IgxDropDownModule, IgxEmptyListTemplateDirective, IgxExcelExporterOptions, IgxExcelExporterService, IgxExcelStyleClearFiltersComponent, IgxExcelStyleColumnOperationsTemplateDirective, IgxExcelStyleConditionalFilterComponent, IgxExcelStyleFilterOperationsTemplateDirective, IgxExcelStyleHeaderComponent, IgxExcelStyleHeaderIconDirective, IgxExcelStyleHidingComponent, IgxExcelStyleLoadingValuesTemplateDirective, IgxExcelStyleMovingComponent, IgxExcelStylePinningComponent, IgxExcelStyleSearchComponent, IgxExcelStyleSelectingComponent, IgxExcelStyleSortingComponent, IgxExcelTextDirective, IgxExpansionPanelBodyComponent, IgxExpansionPanelComponent, IgxExpansionPanelHeaderComponent, IgxExpansionPanelModule, IgxExporterOptionsBase, IgxFilterCellTemplateDirective, IgxFilterDirective, IgxFilterModule, IgxFilterOptions, IgxFilterPipe, IgxFilteringOperand, IgxFlatTransactionFactory, IgxFlexDirective, IgxFocusDirective, IgxFocusModule, IgxForOfContext, IgxForOfDirective, IgxForOfModule, IgxGridAPIService, IgxGridActionsBaseDirective, IgxGridBaseDirective, IgxGridBodyDirective, IgxGridCell, IgxGridCommonModule, IgxGridComponent, IgxGridDetailTemplateDirective, IgxGridEditingActionsComponent, IgxGridExcelStyleFilteringComponent, IgxGridForOfDirective, IgxGridHierarchicalPagingPipe, IgxGridHierarchicalPipe, IgxGridModule, IgxGridPinningActionsComponent, IgxGridRow, IgxGridStateDirective, IgxGridStateModule, IgxGridToolbarActionsDirective, IgxGridToolbarAdvancedFilteringComponent, IgxGridToolbarComponent, IgxGridToolbarDirective, IgxGridToolbarExporterComponent, IgxGridToolbarHidingComponent, IgxGridToolbarPinningComponent, IgxGridToolbarTitleDirective, IgxGridTransaction, IgxGroupAreaDropDirective, IgxGroupByRow, IgxGroupByRowTemplateDirective, IgxGroupedTreeGridSorting, IgxGrouping, IgxHeaderCollapseIndicatorDirective, IgxHeaderExpandIndicatorDirective, IgxHierarchicalGridAPIService, IgxHierarchicalGridBaseDirective, IgxHierarchicalGridComponent, IgxHierarchicalGridModule, IgxHierarchicalGridRow, IgxHierarchicalTransactionFactory, IgxHierarchicalTransactionService, IgxHierarchicalTransactionServiceFactory, IgxHintDirective, IgxIconComponent, IgxIconModule, IgxIconService, IgxInputDirective, IgxInputGroupComponent, IgxInputGroupModule, IgxInputState, IgxInsertDropStrategy, 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, IgxProgressBarModule, IgxProgressType, IgxRadioComponent, IgxRadioGroupDirective, IgxRadioModule, IgxRippleDirective, IgxRippleModule, IgxRowCollapsedIndicatorDirective, IgxRowExpandedIndicatorDirective, IgxRowIslandAPIService, IgxRowIslandComponent, IgxSelectComponent, IgxSelectFooterDirective, IgxSelectGroupComponent, IgxSelectHeaderDirective, IgxSelectItemComponent, IgxSelectModule, IgxSelectToggleIconDirective, IgxSimpleComboComponent, IgxSimpleComboModule, IgxSlideComponent, IgxSliderComponent, IgxSliderModule, IgxSliderType, IgxSnackbarComponent, IgxSnackbarModule, IgxSorting, IgxSplitterComponent, IgxSplitterModule, IgxSplitterPaneComponent, IgxStringFilteringOperand, IgxSuffixDirective, IgxSuffixModule, IgxSummaryOperand, IgxSummaryRow, IgxSwitchComponent, IgxSwitchModule, IgxSwitchRequiredDirective, IgxTabContentComponent, IgxTabContentDirective, IgxTabHeaderComponent, IgxTabHeaderDirective, IgxTabHeaderIconDirective, IgxTabHeaderLabelDirective, IgxTabItemComponent, IgxTabItemDirective, IgxTabsAlignment, IgxTabsComponent, IgxTabsDirective, IgxTabsModule, IgxTextAlign, IgxTextHighlightDirective, IgxTextHighlightModule, IgxTextSelectionDirective, IgxTextSelectionModule, IgxThumbFromTemplateDirective, IgxThumbToTemplateDirective, IgxTickLabelTemplateDirective, IgxTimeFilteringOperand, IgxTimePickerComponent, IgxTimePickerModule, IgxTimeSummaryOperand, IgxToastComponent, IgxToastModule, IgxToastPosition, IgxToggleActionDirective, IgxToggleDirective, IgxToggleModule, IgxTooltipDirective, IgxTooltipModule, IgxTooltipTargetDirective, IgxTransactionService, IgxTreeComponent, IgxTreeExpandIndicatorDirective, IgxTreeGridAPIService, IgxTreeGridComponent, IgxTreeGridGroupingPipe, IgxTreeGridModule, IgxTreeGridRow, IgxTreeModule, IgxTreeNodeComponent, IgxTreeNodeLinkDirective, IgxTreeSelectMarkerDirective, IgxTreeSelectionType, IgxYearsViewComponent, LabelPosition, NoOpScrollStrategy, NoopFilteringStrategy, NoopSortingStrategy, PagingError, PickerInteractionMode, Point, RadioGroupAlignment, RadioLabelPosition, RelativePosition, RelativePositionStrategy, RowEditPositionStrategy, RowPinningPosition, ScrollMonth, ScrollStrategy, SliderHandle, SortingDirection, SplitterType, SwitchLabelPosition, TickLabelsOrientation, TicksOrientation, TransactionEventOrigin, TransactionType, TreeGridFilteringStrategy, TreeGridFormattedValuesFilteringStrategy, TreeGridMatchingRecordsOnlyFilteringStrategy, VerticalAlignment, 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, ɵ1, ɵ2, IgxActionStripMenuItemDirective as ɵa, IGX_DROPDOWN_BASE as ɵb, IgxExpansionPanelTitleDirective as ɵba, IgxExpansionPanelDescriptionDirective as ɵbb, IgxExpansionPanelIconDirective as ɵbc, IgxBannerActionsDirective as ɵbd, IgxDaysViewNavigationService as ɵbe, IgxDayItemComponent as ɵbf, IgxMonthViewSlotsCalendar as ɵbg, IgxGetViewDateCalendar as ɵbh, IgxCarouselIndicatorDirective as ɵbi, IgxCarouselNextButtonDirective as ɵbj, IgxCarouselPrevButtonDirective as ɵbk, IGX_COMBO_COMPONENT as ɵbl, IgxComboBaseDirective as ɵbn, IgxComboHeaderDirective as ɵbo, IgxComboFooterDirective as ɵbp, IgxComboItemDirective as ɵbq, IgxComboEmptyDirective as ɵbr, IgxComboHeaderItemDirective as ɵbs, IgxComboAddItemDirective as ɵbt, IgxComboToggleIconDirective as ɵbu, IgxComboClearIconDirective as ɵbv, IgxComboAPIService as ɵbw, IgxComboDropDownComponent as ɵbx, IgxComboItemComponent as ɵby, IgxComboFilteringPipe as ɵbz, IgxComboGroupingPipe as ɵca, IgxComboAddItemComponent as ɵcb, PickerBaseDirective as ɵcc, IgxCalendarContainerComponent as ɵcd, IgxCalendarContainerModule as ɵce, IgxDialogTitleDirective as ɵcf, IgxDialogActionsDirective as ɵcg, IgxCellCrudState as ɵch, IgxRowCrudState as ɵci, IgxRowAddCrudState as ɵcj, IgxGridCRUDService as ɵck, IgxColumnMovingService as ɵcl, IgxExcelStyleCustomDialogComponent as ɵcm, IgxExcelStyleDefaultExpressionComponent as ɵcn, IgxExcelStyleDateExpressionComponent as ɵco, HammerGesturesManager as ɵcp, WatchChanges as ɵcq, WatchColumnChanges as ɵcr, notifyChanges as ɵcs, IgxNotificationsDirective as ɵct, IgxGridColumnResizerComponent as ɵcu, IgxColumnResizerDirective as ɵcv, IgxColumnResizingService as ɵcw, IgxRowSelectorDirective as ɵcx, IgxGroupByRowSelectorDirective as ɵcy, IgxHeadSelectorDirective as ɵcz, IgxGridSelectionService as ɵd, IgxRowDragDirective as ɵda, IgxDragIndicatorIconDirective as ɵdb, IgxRowDragGhostDirective as ɵdc, IgxRowDragModule as ɵdd, IgxGridHeaderRowComponent as ɵde, IgxGridHeaderGroupComponent as ɵdf, IgxGridHeaderComponent as ɵdg, IgxGridFilteringCellComponent as ɵdh, IgxFilteringService as ɵdi, IgxGridFilteringRowComponent as ɵdj, IgxGridGroupByAreaComponent as ɵdk, IgxGroupByAreaDirective as ɵdl, IgxGroupByMetaPipe as ɵdm, IgxTemplateOutletDirective as ɵdn, IgxTemplateOutletModule as ɵdo, IgxRowEditTemplateDirective as ɵdp, IgxRowEditTextDirective as ɵdq, IgxRowAddTextDirective as ɵdr, IgxRowEditActionsDirective as ɵds, IgxRowEditTabStopDirective as ɵdt, IgxSummaryRowComponent as ɵdu, IgxSummaryCellComponent as ɵdv, IgxRowDirective as ɵdw, IgxGridNavigationService as ɵdx, IgxGridSummaryService as ɵdy, ConnectedPositioningStrategy as ɵdz, IgxGridGroupByRowComponent as ɵea, IgxTreeGridSelectionService as ɵeb, IgxTreeGridGroupByAreaComponent as ɵec, IgxRowLoadingIndicatorTemplateDirective as ɵed, IgxHierarchicalGridNavigationService as ɵee, IgxChildGridRowComponent as ɵef, IgxGridCellComponent as ɵeg, IgxGridFooterComponent as ɵeh, IgxAdvancedFilteringDialogComponent as ɵei, IgxColumnHidingDirective as ɵej, IgxColumnPinningDirective as ɵek, IgxGridSharedModules as ɵel, IgxProcessBarTextTemplateDirective as ɵem, IgxProgressBarGradientDirective as ɵen, DIR_DOCUMENT_FACTORY as ɵeo, DIR_DOCUMENT as ɵep, IgxDirectionality as ɵeq, IgxSelectItemNavigationDirective as ɵer, IGX_TIME_PICKER_COMPONENT as ɵes, IgxItemListDirective as ɵeu, IgxTimeItemDirective as ɵev, IgxTimePickerTemplateDirective as ɵew, IgxTimePickerActionsDirective as ɵex, TimeFormatPipe as ɵey, TimeItemPipe as ɵez, IGX_EXPANSION_PANEL_COMPONENT as ɵf, IgxGridPipesModule as ɵfa, IgxGridCellStyleClassesPipe as ɵfb, IgxGridCellStylesPipe as ɵfc, IgxGridRowClassesPipe as ɵfd, IgxGridRowStylesPipe as ɵfe, IgxGridNotGroupedPipe as ɵff, IgxGridTopLevelColumns as ɵfg, IgxGridFilterConditionPipe as ɵfh, IgxGridTransactionPipe as ɵfi, IgxGridPaginatorOptionsPipe as ɵfj, IgxHasVisibleColumnsPipe as ɵfk, IgxGridRowPinningPipe as ɵfl, IgxColumnActionEnabledPipe as ɵfm, IgxFilterActionColumnsPipe as ɵfn, IgxSortActionColumnsPipe as ɵfo, IgxGridDataMapperPipe as ɵfp, IgxStringReplacePipe as ɵfq, IgxGridTransactionStatePipe as ɵfr, IgxColumnFormatterPipe as ɵfs, IgxSummaryFormatterPipe as ɵft, IgxGridAddRowPipe as ɵfu, IgxHeaderGroupWidthPipe as ɵfv, IgxHeaderGroupStylePipe as ɵfw, IgxGridColumnModule as ɵfx, IgxGridHeadersModule as ɵfy, SortingIndexPipe as ɵfz, IGX_TREE_COMPONENT as ɵg, IgxGridFilteringModule as ɵga, IgxColumnMovingModule as ɵgb, IgxColumnMovingDropDirective as ɵgc, IgxColumnMovingDragDirective as ɵgd, IgxGridResizingModule as ɵge, IgxResizeHandleDirective as ɵgf, IgxGridExcelStyleFilteringModule as ɵgg, IgxGridSelectionModule as ɵgh, IgxGridDragSelectDirective as ɵgi, IgxGridSummaryModule as ɵgj, IgxSummaryDataPipe as ɵgk, IgxGridToolbarModule as ɵgl, BaseToolbarDirective as ɵgm, BaseToolbarColumnActionsDirective as ɵgn, IgxGridRowComponent as ɵgo, IgxGridSortingPipe as ɵgp, IgxGridGroupingPipe as ɵgq, IgxGridPagingPipe as ɵgr, IgxGridFilteringPipe as ɵgs, IgxGridSummaryPipe as ɵgt, IgxGridDetailsPipe as ɵgu, IgxGridExpandableCellComponent as ɵgv, IgxTreeGridRowComponent as ɵgw, IgxTreeGridCellComponent as ɵgx, IgxTreeGridHierarchizingPipe as ɵgy, IgxTreeGridFlatteningPipe as ɵgz, IGX_TREE_NODE_COMPONENT as ɵh, IgxTreeGridSortingPipe as ɵha, IgxTreeGridPagingPipe as ɵhb, IgxTreeGridTransactionPipe as ɵhc, IgxTreeGridNormalizeRecordsPipe as ɵhd, IgxTreeGridAddRowPipe as ɵhe, IgxTreeGridFilteringPipe as ɵhf, IgxTreeGridSummaryPipe as ɵhg, IgxHierarchicalRowComponent as ɵhh, IgxHierarchicalGridCellComponent as ɵhi, IgxSliderThumbComponent as ɵhj, IgxThumbLabelComponent as ɵhk, IgxTicksComponent as ɵhl, IgxTickLabelsPipe as ɵhm, IgxTabsBase as ɵhn, IgxTabHeaderBase as ɵho, IgxTabContentBase as ɵhp, IgxSplitBarComponent as ɵhq, IgxTreeService as ɵhr, IgxTreeSelectionService as ɵhs, IgxTreeNavigationService as ɵht, PlatformUtil as ɵi, EaseIn as ɵj, EaseOut as ɵk, IgxInputGroupBase as ɵl, IgxSelectionAPIService as ɵm, IgxForOfSyncService as ɵn, IgxForOfScrollSyncService as ɵo, DisplayContainerComponent as ɵp, IgxScrollInertiaDirective as ɵq, IgxScrollInertiaModule as ɵr, VirtualHelperComponent as ɵs, VirtualHelperBaseDirective as ɵt, HVirtualHelperComponent as ɵu, MaskParsingService as ɵv, isHierarchyMatch as ɵw, getHierarchy as ɵx, IgxGridActionButtonComponent as ɵy, ToggleAnimationPlayer as ɵz };
76441
76601
  //# sourceMappingURL=igniteui-angular.js.map