igniteui-angular 13.2.10 → 13.2.13

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.
@@ -7,7 +7,7 @@ import { NgModel, FormControlName, NG_VALUE_ACCESSOR, NG_VALIDATORS, CheckboxReq
7
7
  import * as i4 from '@angular/common';
8
8
  import { isPlatformBrowser, formatDate as formatDate$1, CurrencyPipe, formatPercent, formatNumber, getLocaleCurrencyCode, DatePipe, DOCUMENT, CommonModule, FormatWidth, getLocaleDateFormat, getLocaleNumberFormat, NumberFormatStyle, getCurrencySymbol } from '@angular/common';
9
9
  import { Observable, Subject, fromEvent, interval, animationFrameScheduler, noop, merge, Subscription, timer, pipe } from 'rxjs';
10
- import { takeUntil, filter, first as first$1, throttleTime, take, throttle, debounce, tap, switchMap, skipLast, map, debounceTime, shareReplay, takeWhile, pluck } from 'rxjs/operators';
10
+ import { takeUntil, filter, first as first$1, throttleTime, take, throttle, startWith, debounce, tap, switchMap, skipLast, map, debounceTime, shareReplay, takeWhile, pluck } from 'rxjs/operators';
11
11
  import mergeWith from 'lodash.mergewith';
12
12
  import * as JSZip from 'jszip';
13
13
  import * as i1$1 from '@angular/platform-browser';
@@ -2109,11 +2109,11 @@ const verticalAnimations = [
2109
2109
  swingOutBottomBck,
2110
2110
  ];
2111
2111
  /**
2112
- * Similar to Angular's formatDate. However it will not throw on `undefined | null` instead
2112
+ * Similar to Angular's formatDate. However it will not throw on `undefined | null | ''` instead
2113
2113
  * coalescing to an empty string.
2114
2114
  */
2115
2115
  const formatDate = (value, format, locale, timezone) => {
2116
- if (value === null || value === undefined) {
2116
+ if (value === null || value === undefined || value === '') {
2117
2117
  return '';
2118
2118
  }
2119
2119
  return formatDate$1(value, format, locale, timezone);
@@ -15868,7 +15868,7 @@ class IgxDragDirective {
15868
15868
  // Check for shadowRoot instance and use it if present
15869
15869
  for (const elFromPoint of elementsFromPoint) {
15870
15870
  if (!!elFromPoint?.shadowRoot) {
15871
- targetElements = targetElements.concat(this.getFromShadowRoot(elFromPoint, pageX, pageY));
15871
+ targetElements = targetElements.concat(this.getFromShadowRoot(elFromPoint, pageX, pageY, elementsFromPoint));
15872
15872
  }
15873
15873
  else if (targetElements.indexOf(elFromPoint) === -1) {
15874
15874
  targetElements.push(elFromPoint);
@@ -15902,13 +15902,15 @@ class IgxDragDirective {
15902
15902
  * @hidden
15903
15903
  * Traverse shadow dom in depth.
15904
15904
  */
15905
- getFromShadowRoot(elem, pageX, pageY) {
15905
+ getFromShadowRoot(elem, pageX, pageY, parentDomElems) {
15906
15906
  const elementsFromPoint = elem.shadowRoot.elementsFromPoint(pageX, pageY);
15907
- let res = elementsFromPoint;
15908
- for (const elFromPoint of elementsFromPoint) {
15907
+ const shadowElements = elementsFromPoint.filter(cur => parentDomElems.indexOf(cur) === -1);
15908
+ let res = [];
15909
+ for (const elFromPoint of shadowElements) {
15909
15910
  if (!!elFromPoint?.shadowRoot && elFromPoint.shadowRoot !== elem.shadowRoot) {
15910
- res = res.concat(this.getFromShadowRoot(elFromPoint, pageX, pageY));
15911
+ res = res.concat(this.getFromShadowRoot(elFromPoint, pageX, pageY, elementsFromPoint));
15911
15912
  }
15913
+ res.push(elFromPoint);
15912
15914
  }
15913
15915
  return res;
15914
15916
  }
@@ -17917,6 +17919,11 @@ let nextId$3 = 0;
17917
17919
  class IgxRadioComponent {
17918
17920
  constructor(cdr) {
17919
17921
  this.cdr = cdr;
17922
+ /**
17923
+ * @hidden
17924
+ * @internal
17925
+ */
17926
+ this.destroy$ = new Subject();
17920
17927
  /**
17921
17928
  * Sets/gets the `id` of the radio component.
17922
17929
  * If not set, the `id` of the first radio component will be `"igx-radio-0"`.
@@ -18090,6 +18097,14 @@ class IgxRadioComponent {
18090
18097
  set disabled(value) {
18091
18098
  this._disabled = (value === '') || value;
18092
18099
  }
18100
+ /**
18101
+ * @hidden
18102
+ * @internal
18103
+ */
18104
+ ngOnDestroy() {
18105
+ this.destroy$.next(true);
18106
+ this.destroy$.complete();
18107
+ }
18093
18108
  /**
18094
18109
  * @hidden
18095
18110
  * @internal
@@ -18389,6 +18404,11 @@ class IgxRadioGroupDirective {
18389
18404
  * @internal
18390
18405
  */
18391
18406
  this.destroy$ = new Subject();
18407
+ /**
18408
+ * @hidden
18409
+ * @internal
18410
+ */
18411
+ this.queryChange$ = new Subject();
18392
18412
  }
18393
18413
  /**
18394
18414
  * Sets/gets the `value` attribute.
@@ -18534,8 +18554,9 @@ class IgxRadioGroupDirective {
18534
18554
  // The initial value can possibly be set by NgModel and it is possible that
18535
18555
  // the OnInit of the NgModel occurs after the OnInit of this class.
18536
18556
  this._isInitialized = true;
18537
- setTimeout(() => {
18538
- this._initRadioButtons();
18557
+ this.radioButtons.changes.pipe(startWith(0), takeUntil(this.destroy$)).subscribe(() => {
18558
+ this.queryChange$.next();
18559
+ setTimeout(() => this._initRadioButtons());
18539
18560
  });
18540
18561
  }
18541
18562
  /**
@@ -18613,7 +18634,7 @@ class IgxRadioGroupDirective {
18613
18634
  button.checked = true;
18614
18635
  this._selected = button;
18615
18636
  }
18616
- button.change.pipe(takeUntil(this.destroy$)).subscribe((ev) => this._selectedRadioButtonChanged(ev));
18637
+ button.change.pipe(takeUntil(button.destroy$), takeUntil(this.destroy$), takeUntil(this.queryChange$)).subscribe((ev) => this._selectedRadioButtonChanged(ev));
18617
18638
  });
18618
18639
  }
18619
18640
  }
@@ -24208,9 +24229,13 @@ class IgxGridSelectionService {
24208
24229
  */
24209
24230
  this.pointerEventInGridBody = false;
24210
24231
  this._ranges = new Set();
24211
- this.pointerOriginHandler = () => {
24232
+ this.pointerOriginHandler = (event) => {
24212
24233
  this.pointerEventInGridBody = false;
24213
24234
  document.body.removeEventListener('pointerup', this.pointerOriginHandler);
24235
+ const targetTagName = event.target.tagName.toLowerCase();
24236
+ if (targetTagName !== 'igx-grid-cell' && targetTagName !== 'igx-tree-grid-cell') {
24237
+ this.pointerUp(this._lastSelectedNode, this.grid.rangeSelected, true);
24238
+ }
24214
24239
  };
24215
24240
  this.initPointerState();
24216
24241
  this.initKeyboardState();
@@ -24327,6 +24352,7 @@ class IgxGridSelectionService {
24327
24352
  * and the start node of the `state`.
24328
24353
  */
24329
24354
  generateRange(node, state) {
24355
+ this._lastSelectedNode = node;
24330
24356
  if (!state) {
24331
24357
  return {
24332
24358
  rowStart: node.row,
@@ -24444,8 +24470,8 @@ class IgxGridSelectionService {
24444
24470
  }
24445
24471
  return true;
24446
24472
  }
24447
- pointerUp(node, emitter) {
24448
- if (this.dragMode) {
24473
+ pointerUp(node, emitter, firedOutsideGrid) {
24474
+ if (this.dragMode || firedOutsideGrid) {
24449
24475
  this.restoreTextSelection();
24450
24476
  this.addRangeMeta(node, this.pointerState);
24451
24477
  this.mergeMap(this.selection, this.temp);
@@ -38424,6 +38450,7 @@ class IgxDatePickerComponent extends PickerBaseDirective {
38424
38450
  this._onTouchedCallback = noop;
38425
38451
  this._onValidatorChange = noop;
38426
38452
  this.onStatusChanged = () => {
38453
+ this.disabled = this._ngControl.disabled;
38427
38454
  this.updateValidity();
38428
38455
  this.inputGroup.isRequired = this.required;
38429
38456
  };
@@ -42381,7 +42408,8 @@ class IgxTimePickerComponent extends PickerBaseDirective {
42381
42408
  }
42382
42409
  onStatusChanged() {
42383
42410
  if ((this._ngControl.control.touched || this._ngControl.control.dirty) &&
42384
- (this._ngControl.control.validator || this._ngControl.control.asyncValidator)) {
42411
+ (this._ngControl.control.validator || this._ngControl.control.asyncValidator) &&
42412
+ !this._ngControl.disabled) {
42385
42413
  if (this._inputGroup.isFocused) {
42386
42414
  this.inputDirective.valid = this._ngControl.valid ? IgxInputState.VALID : IgxInputState.INVALID;
42387
42415
  }
@@ -46213,6 +46241,9 @@ class IgxTreeNodeComponent extends ToggleAnimationPlayer {
46213
46241
  * ```
46214
46242
  */
46215
46243
  expand() {
46244
+ if (this.expanded && !this.treeService.collapsingNodes.has(this)) {
46245
+ return;
46246
+ }
46216
46247
  const args = {
46217
46248
  owner: this.tree,
46218
46249
  node: this,
@@ -46241,6 +46272,9 @@ class IgxTreeNodeComponent extends ToggleAnimationPlayer {
46241
46272
  * ```
46242
46273
  */
46243
46274
  collapse() {
46275
+ if (!this.expanded || this.treeService.collapsingNodes.has(this)) {
46276
+ return;
46277
+ }
46244
46278
  const args = {
46245
46279
  owner: this.tree,
46246
46280
  node: this,
@@ -55987,10 +56021,10 @@ class IgxPageNavigationComponent {
55987
56021
  }
55988
56022
  }
55989
56023
  IgxPageNavigationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: IgxPageNavigationComponent, deps: [{ token: IgxPaginatorComponent, host: true }], target: i0.ɵɵFactoryTarget.Component });
55990
- IgxPageNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: IgxPageNavigationComponent, selector: "igx-page-nav", inputs: { role: "role" }, host: { properties: { "class.igx-page-nav": "this.cssClass", "attr.role": "this.role" } }, ngImport: i0, template: "<button\n [title]=\"paginator.resourceStrings.igx_paginator_first_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.paginate(0)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>first_page</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_previous_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.previousPage()\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>chevron_left</igx-icon>\n</button>\n<div class=\"igx-page-nav__text\" aria-current=\"page\">\n <span>{{ paginator.page + 1 }}</span>\n <span\n >&nbsp;{{\n paginator.resourceStrings.igx_paginator_pager_text\n }}&nbsp;</span\n >\n <span>{{ paginator.totalPages }}</span>\n</div>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_next_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.nextPage()\"\n igxRipple\n [igxRippleCentered]=\"true\"\n igxButton=\"icon\"\n>\n <igx-icon>chevron_right</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_last_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.paginate(paginator.totalPages - 1)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>last_page</igx-icon>\n</button>\n\n", components: [{ type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }], directives: [{ type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }] });
56024
+ IgxPageNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: IgxPageNavigationComponent, selector: "igx-page-nav", inputs: { role: "role" }, host: { properties: { "class.igx-page-nav": "this.cssClass", "attr.role": "this.role" } }, ngImport: i0, template: "<button\n [title]=\"paginator.resourceStrings.igx_paginator_first_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.paginate(0)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>first_page</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_previous_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.previousPage()\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>chevron_left</igx-icon>\n</button>\n<div class=\"igx-page-nav__text\" aria-current=\"page\">\n <span>{{ paginator.page + 1 }}</span>\n <span\n >&nbsp;{{\n paginator.resourceStrings.igx_paginator_pager_text\n }}&nbsp;</span\n >\n <span>{{ paginator.totalPages }}</span>\n</div>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_next_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.nextPage()\"\n igxRipple\n [igxRippleCentered]=\"true\"\n igxButton=\"icon\"\n type=\"button\"\n>\n <igx-icon>chevron_right</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_last_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.paginate(paginator.totalPages - 1)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>last_page</igx-icon>\n</button>\n\n", components: [{ type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }], directives: [{ type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }] });
55991
56025
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: IgxPageNavigationComponent, decorators: [{
55992
56026
  type: Component,
55993
- args: [{ selector: 'igx-page-nav', template: "<button\n [title]=\"paginator.resourceStrings.igx_paginator_first_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.paginate(0)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>first_page</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_previous_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.previousPage()\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>chevron_left</igx-icon>\n</button>\n<div class=\"igx-page-nav__text\" aria-current=\"page\">\n <span>{{ paginator.page + 1 }}</span>\n <span\n >&nbsp;{{\n paginator.resourceStrings.igx_paginator_pager_text\n }}&nbsp;</span\n >\n <span>{{ paginator.totalPages }}</span>\n</div>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_next_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.nextPage()\"\n igxRipple\n [igxRippleCentered]=\"true\"\n igxButton=\"icon\"\n>\n <igx-icon>chevron_right</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_last_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.paginate(paginator.totalPages - 1)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n>\n <igx-icon>last_page</igx-icon>\n</button>\n\n" }]
56027
+ args: [{ selector: 'igx-page-nav', template: "<button\n [title]=\"paginator.resourceStrings.igx_paginator_first_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.paginate(0)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>first_page</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_previous_page_button_text\"\n [disabled]=\"paginator.isFirstPageDisabled\"\n [attr.aria-disabled]=\"paginator.isFirstPageDisabled\"\n (click)=\"paginator.previousPage()\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>chevron_left</igx-icon>\n</button>\n<div class=\"igx-page-nav__text\" aria-current=\"page\">\n <span>{{ paginator.page + 1 }}</span>\n <span\n >&nbsp;{{\n paginator.resourceStrings.igx_paginator_pager_text\n }}&nbsp;</span\n >\n <span>{{ paginator.totalPages }}</span>\n</div>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_next_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.nextPage()\"\n igxRipple\n [igxRippleCentered]=\"true\"\n igxButton=\"icon\"\n type=\"button\"\n>\n <igx-icon>chevron_right</igx-icon>\n</button>\n<button\n [title]=\"paginator.resourceStrings.igx_paginator_last_page_button_text\"\n [disabled]=\"paginator.isLastPageDisabled\"\n [attr.aria-disabled]=\"paginator.isLastPageDisabled\"\n (click)=\"paginator.paginate(paginator.totalPages - 1)\"\n igxButton=\"icon\"\n igxRipple\n [igxRippleCentered]=\"true\"\n type=\"button\"\n>\n <igx-icon>last_page</igx-icon>\n</button>\n\n" }]
55994
56028
  }], ctorParameters: function () { return [{ type: IgxPaginatorComponent, decorators: [{
55995
56029
  type: Host
55996
56030
  }] }]; }, propDecorators: { cssClass: [{
@@ -58606,8 +58640,13 @@ class IgxGridNavigationService {
58606
58640
  if (shouldClearSelection || (this.grid.cellSelection !== GridSelectionMode.multiple)) {
58607
58641
  this.grid.clearCellSelection();
58608
58642
  this.grid.navigateTo(this.activeNode.row, this.activeNode.column, (obj) => {
58609
- obj.target?.activate(event);
58610
- this.grid.cdr.detectChanges();
58643
+ if (this.activeNode.row === obj.target.row.index) {
58644
+ obj.target?.activate(event);
58645
+ this.grid.cdr.detectChanges();
58646
+ }
58647
+ else {
58648
+ this.grid.navigateTo(this.activeNode.row, this.activeNode.column);
58649
+ }
58611
58650
  });
58612
58651
  }
58613
58652
  else {
@@ -68896,7 +68935,6 @@ class IgxGridComponent extends IgxGridBaseDirective {
68896
68935
  if (this.groupTemplate) {
68897
68936
  this._groupRowTemplate = this.groupTemplate.template;
68898
68937
  }
68899
- this.detailTemplate.changes.subscribe(() => this.trackChanges = (_, rec) => (rec?.detailsData !== undefined ? rec.detailsData : rec));
68900
68938
  if (this.hideGroupedColumns && this._columns && this.groupingExpressions) {
68901
68939
  this._setGroupColsVisibility(this.hideGroupedColumns);
68902
68940
  }
@@ -68935,6 +68973,7 @@ class IgxGridComponent extends IgxGridBaseDirective {
68935
68973
  */
68936
68974
  ngOnInit() {
68937
68975
  super.ngOnInit();
68976
+ this.trackChanges = (_, rec) => (rec?.detailsData !== undefined ? rec.detailsData : rec);
68938
68977
  this.onGroupingDone.pipe(takeUntil(this.destroy$)).subscribe((args) => {
68939
68978
  this.crudService.endEdit(false);
68940
68979
  this.summaryService.updateSummaryCache(args);
@@ -83890,14 +83929,14 @@ class IgxDateRangePickerComponent extends PickerBaseDirective {
83890
83929
  this.onValidatorChange = noop;
83891
83930
  this.onStatusChanged = () => {
83892
83931
  if (this.inputGroup) {
83893
- this.inputDirective.valid = this.isTouchedOrDirty
83932
+ this.inputDirective.valid = this.isTouchedOrDirty && !this._ngControl.disabled
83894
83933
  ? this.getInputState(this.inputGroup.isFocused)
83895
83934
  : IgxInputState.INITIAL;
83896
83935
  }
83897
83936
  else if (this.hasProjectedInputs) {
83898
83937
  this.projectedInputs
83899
83938
  .forEach(i => {
83900
- i.inputDirective.valid = this.isTouchedOrDirty
83939
+ i.inputDirective.valid = this.isTouchedOrDirty && !this._ngControl.disabled
83901
83940
  ? this.getInputState(i.isFocused)
83902
83941
  : IgxInputState.INITIAL;
83903
83942
  ;