igniteui-angular 17.2.6 → 17.2.8

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 (37) hide show
  1. package/esm2022/lib/calendar/month-picker/month-picker.component.mjs +9 -1
  2. package/esm2022/lib/combo/combo.common.mjs +4 -5
  3. package/esm2022/lib/core/density.mjs +2 -1
  4. package/esm2022/lib/core/utils.mjs +1 -9
  5. package/esm2022/lib/directives/for-of/for_of.directive.mjs +2 -2
  6. package/esm2022/lib/directives/for-of/for_of.sync.service.mjs +6 -1
  7. package/esm2022/lib/grids/common/events.mjs +1 -1
  8. package/esm2022/lib/grids/common/grid.interface.mjs +1 -1
  9. package/esm2022/lib/grids/common/strategy.mjs +2 -2
  10. package/esm2022/lib/grids/common/types.mjs +1 -1
  11. package/esm2022/lib/grids/grid-base.directive.mjs +41 -38
  12. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +2 -2
  13. package/esm2022/lib/simple-combo/simple-combo.component.mjs +33 -8
  14. package/fesm2022/igniteui-angular.mjs +91 -59
  15. package/fesm2022/igniteui-angular.mjs.map +1 -1
  16. package/lib/core/density.d.ts +1 -0
  17. package/lib/core/styles/components/icon-button/_icon-button-theme.scss +1 -0
  18. package/lib/core/utils.d.ts +0 -8
  19. package/lib/grids/common/events.d.ts +30 -30
  20. package/lib/grids/common/grid.interface.d.ts +48 -48
  21. package/lib/grids/common/strategy.d.ts +1 -1
  22. package/lib/grids/common/types.d.ts +2 -2
  23. package/lib/grids/grid-base.directive.d.ts +2 -1
  24. package/package.json +1 -1
  25. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  26. package/styles/maps/igniteui-angular.css.map +1 -1
  27. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  28. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  29. package/styles/maps/igniteui-dark-green.css.map +1 -1
  30. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  31. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  32. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  33. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  34. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  35. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  36. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  37. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -5,7 +5,7 @@ import { NgModel, NgControl, FormControlName, NG_VALUE_ACCESSOR, Validators, NG_
5
5
  import { Observable, Subject, fromEvent, interval, animationFrameScheduler, noop, merge, Subscription, timer, pipe } from 'rxjs';
6
6
  import { takeUntil, filter, first as first$2, throttle, throttleTime, startWith, take, debounce, tap, switchMap, skipLast, debounceTime, map, shareReplay, takeWhile, pluck } from 'rxjs/operators';
7
7
  import { isPlatformBrowser, formatDate as formatDate$1, CurrencyPipe, formatPercent, formatNumber, getLocaleCurrencyCode, DatePipe, getLocaleDateFormat, FormatWidth, getLocaleDateTimeFormat, DOCUMENT, NgTemplateOutlet, NgIf, NgClass, NgSwitch, NgSwitchCase, NgSwitchDefault, NgFor, TitleCasePipe, getLocaleFirstDayOfWeek, NgStyle, getLocaleCurrencySymbol, formatCurrency as formatCurrency$1, getLocaleNumberFormat, NumberFormatStyle, DecimalPipe, PercentPipe, getCurrencySymbol, AsyncPipe } from '@angular/common';
8
- import { mergeWith } from 'lodash-es';
8
+ import { mergeWith, isEqual as isEqual$1 } from 'lodash-es';
9
9
  import { strToU8, zip } from 'fflate';
10
10
  import * as i1 from '@angular/animations';
11
11
  import { style, animate, useAnimation } from '@angular/animations';
@@ -375,14 +375,6 @@ const isEqual = (obj1, obj2) => {
375
375
  }
376
376
  return obj1 === obj2;
377
377
  };
378
- /**
379
- * Checks if provided variable is the value NaN
380
- *
381
- * @param value Value to check
382
- * @returns true if provided variable is NaN
383
- * @hidden
384
- */
385
- const isNaNvalue = (value) => isNaN(value) && value !== undefined && typeof value !== 'string';
386
378
  /**
387
379
  * Utility service taking care of various utility functions such as
388
380
  * detecting browser features, general cross browser DOM manipulation, etc.
@@ -1052,7 +1044,7 @@ class NoopSortingStrategy {
1052
1044
  }
1053
1045
  /**
1054
1046
  * Represents a class extending the IgxSorting class
1055
- * Provids custom data record sorting.
1047
+ * Provides custom data record sorting.
1056
1048
  */
1057
1049
  class IgxDataRecordSorting extends IgxSorting {
1058
1050
  /**
@@ -7260,6 +7252,7 @@ class DisplayDensityBase {
7260
7252
  }
7261
7253
  /**
7262
7254
  * Sets the `--component-size` CSS variable based on the value of Display Density
7255
+ * @hidden @internal
7263
7256
  */
7264
7257
  getComponentSizeStyles() {
7265
7258
  switch (this._displayDensity || this.oldDisplayDensityOptions.displayDensity) {
@@ -12780,6 +12773,11 @@ class IgxForOfSyncService {
12780
12773
  */
12781
12774
  setMaster(directive, forced = false) {
12782
12775
  const orientation = directive.igxForScrollOrientation;
12776
+ // in case master is not in dom, set a new master
12777
+ const isMasterInDom = this._master.get(orientation)?.dc?.instance?._viewContainer.element.nativeElement.isConnected;
12778
+ if (!isMasterInDom) {
12779
+ forced = true;
12780
+ }
12783
12781
  if (orientation && (forced || !this._master.has(orientation))) {
12784
12782
  this._master.set(orientation, directive);
12785
12783
  }
@@ -14201,7 +14199,7 @@ class IgxGridForOfDirective extends IgxForOfDirective {
14201
14199
  }
14202
14200
  if (this.igxForScrollOrientation === 'horizontal') {
14203
14201
  // in case collection has changes, reset sync service
14204
- this.syncService.setMaster(this, true);
14202
+ this.syncService.setMaster(this, this.igxGridForOfUniqueSizeCache);
14205
14203
  }
14206
14204
  }
14207
14205
  const defaultItemSize = 'igxForItemSize';
@@ -31699,6 +31697,10 @@ class IgxMonthPickerComponent extends IgxCalendarBaseDirective {
31699
31697
  if (this.isDecadeView) {
31700
31698
  this.viewDate = CalendarDay.from(this.viewDate).add('year', -15).native;
31701
31699
  }
31700
+ this.viewDateChanged.emit({
31701
+ previousValue: this.previousViewDate,
31702
+ currentValue: this.viewDate,
31703
+ });
31702
31704
  }
31703
31705
  /**
31704
31706
  * @hidden
@@ -31712,6 +31714,10 @@ class IgxMonthPickerComponent extends IgxCalendarBaseDirective {
31712
31714
  if (this.isDecadeView) {
31713
31715
  this.viewDate = CalendarDay.from(this.viewDate).add('year', 15).native;
31714
31716
  }
31717
+ this.viewDateChanged.emit({
31718
+ previousValue: this.previousViewDate,
31719
+ currentValue: this.viewDate,
31720
+ });
31715
31721
  }
31716
31722
  /**
31717
31723
  * @hidden
@@ -36555,9 +36561,7 @@ class IgxComboBaseDirective extends DisplayDensityBase {
36555
36561
  return keys;
36556
36562
  }
36557
36563
  return keys.map(key => {
36558
- const item = isNaNvalue(key)
36559
- ? this.data.find(entry => isNaNvalue(entry[this.valueKey]))
36560
- : this.data.find(entry => entry[this.valueKey] === key);
36564
+ const item = this.data.find(entry => isEqual$1(entry[this.valueKey], key));
36561
36565
  return item !== undefined ? item : { [this.valueKey]: key };
36562
36566
  });
36563
36567
  }
@@ -37684,7 +37688,6 @@ class IgxSimpleComboComponent extends IgxComboBaseDirective {
37684
37688
  this.filterValue = this.searchValue = this.comboInput.value;
37685
37689
  return;
37686
37690
  }
37687
- this.filterValue = this.searchValue = '';
37688
37691
  });
37689
37692
  this.dropdown.opened.pipe(takeUntil(this.destroy$)).subscribe(() => {
37690
37693
  if (this.composing) {
@@ -37722,12 +37725,12 @@ class IgxSimpleComboComponent extends IgxComboBaseDirective {
37722
37725
  }
37723
37726
  /** @hidden @internal */
37724
37727
  handleInputChange(event) {
37725
- if (event !== undefined) {
37726
- this.filterValue = this.searchValue = typeof event === 'string' ? event : event.target.value;
37727
- }
37728
37728
  if (this.collapsed && this.comboInput.focused) {
37729
37729
  this.open();
37730
37730
  }
37731
+ if (event !== undefined) {
37732
+ this.filterValue = this.searchValue = typeof event === 'string' ? event : event.target.value;
37733
+ }
37731
37734
  if (!this.comboInput.value.trim() && super.selection.length) {
37732
37735
  // handle clearing of input by space
37733
37736
  this.clearSelection();
@@ -37735,7 +37738,19 @@ class IgxSimpleComboComponent extends IgxComboBaseDirective {
37735
37738
  this.filterValue = '';
37736
37739
  }
37737
37740
  if (super.selection.length) {
37738
- this.selectionService.clear(this.id);
37741
+ const args = {
37742
+ newValue: undefined,
37743
+ oldValue: this.selectedItem,
37744
+ newSelection: undefined,
37745
+ oldSelection: this.selection,
37746
+ displayText: typeof event === 'string' ? event : event?.target?.value,
37747
+ owner: this,
37748
+ cancel: false
37749
+ };
37750
+ this.selectionChanging.emit(args);
37751
+ if (!args.cancel) {
37752
+ this.selectionService.select_items(this.id, [], true);
37753
+ }
37739
37754
  }
37740
37755
  // when filtering the focused item should be the first item or the currently selected item
37741
37756
  if (!this.dropdown.focusedItem || this.dropdown.focusedItem.id !== this.dropdown.items[0].id) {
@@ -37823,12 +37838,15 @@ class IgxSimpleComboComponent extends IgxComboBaseDirective {
37823
37838
  if (this.disabled) {
37824
37839
  return;
37825
37840
  }
37841
+ const oldSelection = this.selection;
37826
37842
  this.clearSelection(true);
37827
37843
  if (!this.collapsed) {
37828
37844
  this.focusSearchInput(true);
37829
37845
  }
37830
37846
  event.stopPropagation();
37831
- this.comboInput.value = this.filterValue = this.searchValue = '';
37847
+ if (this.selection !== oldSelection) {
37848
+ this.comboInput.value = this.filterValue = this.searchValue = '';
37849
+ }
37832
37850
  this.dropdown.focusedItem = null;
37833
37851
  this.composing = false;
37834
37852
  this.comboInput.focus();
@@ -37907,6 +37925,14 @@ class IgxSimpleComboComponent extends IgxComboBaseDirective {
37907
37925
  else if (this.isRemote) {
37908
37926
  this.registerRemoteEntries(newValueAsArray, false);
37909
37927
  }
37928
+ else {
37929
+ args.displayText = this.createDisplayText(oldItems, []);
37930
+ const oldSelectionArray = args.oldSelection ? [args.oldSelection] : [];
37931
+ this.comboInput.value = this._displayValue = this.searchValue = this.createDisplayText(oldSelectionArray, []);
37932
+ if (this.isRemote) {
37933
+ this.registerRemoteEntries(newValueAsArray, false);
37934
+ }
37935
+ }
37910
37936
  }
37911
37937
  createDisplayText(newSelection, oldSelection) {
37912
37938
  if (this.isRemote) {
@@ -37967,7 +37993,10 @@ class IgxSimpleComboComponent extends IgxComboBaseDirective {
37967
37993
  }
37968
37994
  clear() {
37969
37995
  this.clearSelection(true);
37970
- this.comboInput.value = this._displayValue = this.searchValue = '';
37996
+ const oldSelection = this.selection;
37997
+ if (this.selection !== oldSelection) {
37998
+ this.comboInput.value = this._displayValue = this.searchValue = '';
37999
+ }
37971
38000
  }
37972
38001
  isValid(value) {
37973
38002
  return this.required
@@ -61457,6 +61486,12 @@ class IgxGridBaseDirective extends DisplayDensityBase {
61457
61486
  get pagingState() {
61458
61487
  return this._pagingState;
61459
61488
  }
61489
+ /**
61490
+ * Represents the last search information.
61491
+ */
61492
+ get lastSearchInfo() {
61493
+ return this._lastSearchInfo;
61494
+ }
61460
61495
  /** @hidden @internal */
61461
61496
  get paginator() {
61462
61497
  return this.paginationComponents?.first;
@@ -62321,18 +62356,6 @@ class IgxGridBaseDirective extends DisplayDensityBase {
62321
62356
  * @hidden @internal
62322
62357
  */
62323
62358
  this.disableTransitions = false;
62324
- /**
62325
- * Represents the last search information.
62326
- */
62327
- this.lastSearchInfo = {
62328
- searchText: '',
62329
- caseSensitive: false,
62330
- exactMatch: false,
62331
- activeMatchIndex: 0,
62332
- matchInfoCache: [],
62333
- matchCount: 0,
62334
- content: ''
62335
- };
62336
62359
  /**
62337
62360
  * @hidden @internal
62338
62361
  */
@@ -62446,6 +62469,15 @@ class IgxGridBaseDirective extends DisplayDensityBase {
62446
62469
  this._filterStrategy = new FilteringStrategy();
62447
62470
  this._autoGeneratedCols = [];
62448
62471
  this._dataView = [];
62472
+ this._lastSearchInfo = {
62473
+ searchText: '',
62474
+ caseSensitive: false,
62475
+ exactMatch: false,
62476
+ activeMatchIndex: 0,
62477
+ matchInfoCache: [],
62478
+ matchCount: 0,
62479
+ content: ''
62480
+ };
62449
62481
  this._rowEditable = false;
62450
62482
  this._filteredSortedData = null;
62451
62483
  this._filteredData = null;
@@ -64112,20 +64144,20 @@ class IgxGridBaseDirective extends DisplayDensityBase {
64112
64144
  * @param updateActiveInfo
64113
64145
  */
64114
64146
  refreshSearch(updateActiveInfo, endEdit = true) {
64115
- if (this.lastSearchInfo.searchText) {
64147
+ if (this._lastSearchInfo.searchText) {
64116
64148
  this.rebuildMatchCache();
64117
64149
  if (updateActiveInfo) {
64118
64150
  const activeInfo = this.textHighlightService.highlightGroupsMap.get(this.id);
64119
- this.lastSearchInfo.matchInfoCache.forEach((match, i) => {
64151
+ this._lastSearchInfo.matchInfoCache.forEach((match, i) => {
64120
64152
  if (match.column === activeInfo.column &&
64121
64153
  match.row === activeInfo.row &&
64122
64154
  match.index === activeInfo.index &&
64123
64155
  compareMaps(match.metadata, activeInfo.metadata)) {
64124
- this.lastSearchInfo.activeMatchIndex = i;
64156
+ this._lastSearchInfo.activeMatchIndex = i;
64125
64157
  }
64126
64158
  });
64127
64159
  }
64128
- return this.find(this.lastSearchInfo.searchText, 0, this.lastSearchInfo.caseSensitive, this.lastSearchInfo.exactMatch, false, endEdit);
64160
+ return this.find(this._lastSearchInfo.searchText, 0, this._lastSearchInfo.caseSensitive, this._lastSearchInfo.exactMatch, false, endEdit);
64129
64161
  }
64130
64162
  else {
64131
64163
  return 0;
@@ -64140,7 +64172,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
64140
64172
  * ```
64141
64173
  */
64142
64174
  clearSearch() {
64143
- this.lastSearchInfo = {
64175
+ this._lastSearchInfo = {
64144
64176
  searchText: '',
64145
64177
  caseSensitive: false,
64146
64178
  exactMatch: false,
@@ -66316,10 +66348,10 @@ class IgxGridBaseDirective extends DisplayDensityBase {
66316
66348
  const caseSensitiveResolved = caseSensitive ? true : false;
66317
66349
  const exactMatchResolved = exactMatch ? true : false;
66318
66350
  let rebuildCache = false;
66319
- if (this.lastSearchInfo.searchText !== text ||
66320
- this.lastSearchInfo.caseSensitive !== caseSensitiveResolved ||
66321
- this.lastSearchInfo.exactMatch !== exactMatchResolved) {
66322
- this.lastSearchInfo = {
66351
+ if (this._lastSearchInfo.searchText !== text ||
66352
+ this._lastSearchInfo.caseSensitive !== caseSensitiveResolved ||
66353
+ this._lastSearchInfo.exactMatch !== exactMatchResolved) {
66354
+ this._lastSearchInfo = {
66323
66355
  searchText: text,
66324
66356
  activeMatchIndex: 0,
66325
66357
  caseSensitive: caseSensitiveResolved,
@@ -66331,7 +66363,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
66331
66363
  rebuildCache = true;
66332
66364
  }
66333
66365
  else {
66334
- this.lastSearchInfo.activeMatchIndex += increment;
66366
+ this._lastSearchInfo.activeMatchIndex += increment;
66335
66367
  }
66336
66368
  if (rebuildCache) {
66337
66369
  this.rowList.forEach((row) => {
@@ -66343,15 +66375,15 @@ class IgxGridBaseDirective extends DisplayDensityBase {
66343
66375
  });
66344
66376
  this.rebuildMatchCache();
66345
66377
  }
66346
- if (this.lastSearchInfo.activeMatchIndex >= this.lastSearchInfo.matchCount) {
66347
- this.lastSearchInfo.activeMatchIndex = 0;
66378
+ if (this._lastSearchInfo.activeMatchIndex >= this._lastSearchInfo.matchCount) {
66379
+ this._lastSearchInfo.activeMatchIndex = 0;
66348
66380
  }
66349
- else if (this.lastSearchInfo.activeMatchIndex < 0) {
66350
- this.lastSearchInfo.activeMatchIndex = this.lastSearchInfo.matchCount - 1;
66381
+ else if (this._lastSearchInfo.activeMatchIndex < 0) {
66382
+ this._lastSearchInfo.activeMatchIndex = this._lastSearchInfo.matchCount - 1;
66351
66383
  }
66352
- if (this.lastSearchInfo.matchCount > 0) {
66353
- const matchInfo = this.lastSearchInfo.matchInfoCache[this.lastSearchInfo.activeMatchIndex];
66354
- this.lastSearchInfo = { ...this.lastSearchInfo };
66384
+ if (this._lastSearchInfo.matchCount > 0) {
66385
+ const matchInfo = this._lastSearchInfo.matchInfoCache[this._lastSearchInfo.activeMatchIndex];
66386
+ this._lastSearchInfo = { ...this._lastSearchInfo };
66355
66387
  if (scroll !== false) {
66356
66388
  this.scrollTo(matchInfo.row, matchInfo.column);
66357
66389
  }
@@ -66365,13 +66397,13 @@ class IgxGridBaseDirective extends DisplayDensityBase {
66365
66397
  else {
66366
66398
  this.textHighlightService.clearActiveHighlight(this.id);
66367
66399
  }
66368
- return this.lastSearchInfo.matchCount;
66400
+ return this._lastSearchInfo.matchCount;
66369
66401
  }
66370
66402
  rebuildMatchCache() {
66371
- this.lastSearchInfo.matchInfoCache = [];
66372
- const caseSensitive = this.lastSearchInfo.caseSensitive;
66373
- const exactMatch = this.lastSearchInfo.exactMatch;
66374
- const searchText = caseSensitive ? this.lastSearchInfo.searchText : this.lastSearchInfo.searchText.toLowerCase();
66403
+ this._lastSearchInfo.matchInfoCache = [];
66404
+ const caseSensitive = this._lastSearchInfo.caseSensitive;
66405
+ const exactMatch = this._lastSearchInfo.exactMatch;
66406
+ const searchText = caseSensitive ? this._lastSearchInfo.searchText : this._lastSearchInfo.searchText.toLowerCase();
66375
66407
  const data = this.filteredSortedData;
66376
66408
  const columnItems = this.visibleColumns.filter((c) => !c.columnGroup).sort((c1, c2) => c1.visibleIndex - c2.visibleIndex);
66377
66409
  data.forEach((dataRow, rowIndex) => {
@@ -66392,7 +66424,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
66392
66424
  index: 0,
66393
66425
  metadata: new Map([['pinned', this.isRecordPinnedByIndex(rowIndex)]])
66394
66426
  };
66395
- this.lastSearchInfo.matchInfoCache.push(mic);
66427
+ this._lastSearchInfo.matchInfoCache.push(mic);
66396
66428
  }
66397
66429
  }
66398
66430
  else {
@@ -66405,7 +66437,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
66405
66437
  index: occurrenceIndex++,
66406
66438
  metadata: new Map([['pinned', this.isRecordPinnedByIndex(rowIndex)]])
66407
66439
  };
66408
- this.lastSearchInfo.matchInfoCache.push(mic);
66440
+ this._lastSearchInfo.matchInfoCache.push(mic);
66409
66441
  searchValue = searchValue.substring(searchIndex + searchText.length);
66410
66442
  searchIndex = searchValue.indexOf(searchText);
66411
66443
  }
@@ -66413,7 +66445,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
66413
66445
  }
66414
66446
  });
66415
66447
  });
66416
- this.lastSearchInfo.matchCount = this.lastSearchInfo.matchInfoCache.length;
66448
+ this._lastSearchInfo.matchCount = this._lastSearchInfo.matchInfoCache.length;
66417
66449
  }
66418
66450
  // TODO: About to Move to CRUD
66419
66451
  configureRowEditingOverlay(rowID, useOuter = false) {
@@ -81980,7 +82012,7 @@ class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirective {
81980
82012
  const colLength = this.columns.length;
81981
82013
  const topCols = this.columnList.filter((item) => colsArray.indexOf(item) === -1);
81982
82014
  if (topCols.length > 0) {
81983
- this.updateColumns(topCols);
82015
+ this.initColumns(topCols, (col) => this.columnInit.emit(col));
81984
82016
  if (recalcColSizes && this.columns.length !== colLength) {
81985
82017
  this.calculateGridSizes(false);
81986
82018
  }