igniteui-angular 17.2.0 → 17.2.2

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 (52) hide show
  1. package/esm2022/lib/calendar/month-picker/month-picker.component.mjs +224 -6
  2. package/esm2022/lib/core/utils.mjs +3 -1
  3. package/esm2022/lib/directives/button/button-base.mjs +39 -2
  4. package/esm2022/lib/directives/button/button.directive.mjs +2 -1
  5. package/esm2022/lib/directives/toggle/toggle.directive.mjs +18 -6
  6. package/esm2022/lib/grids/common/crud.service.mjs +2 -1
  7. package/esm2022/lib/grids/hierarchical-grid/row-island.component.mjs +2 -1
  8. package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +6 -2
  9. package/fesm2022/igniteui-angular.mjs +283 -9
  10. package/fesm2022/igniteui-angular.mjs.map +1 -1
  11. package/lib/calendar/month-picker/month-picker.component.d.ts +83 -2
  12. package/lib/core/styles/components/button/_button-component.scss +16 -0
  13. package/lib/core/styles/components/button/_button-theme.scss +203 -273
  14. package/lib/core/styles/components/button-group/_button-group-theme.scss +314 -85
  15. package/lib/core/styles/components/icon-button/_icon-button-theme.scss +27 -51
  16. package/lib/core/styles/components/overlay/_overlay-component.scss +4 -0
  17. package/lib/core/styles/components/overlay/_overlay-theme.scss +17 -1
  18. package/lib/core/utils.d.ts +2 -0
  19. package/lib/directives/button/button-base.d.ts +21 -0
  20. package/lib/directives/toggle/toggle.directive.d.ts +5 -3
  21. package/migrations/migration-collection.json +5 -0
  22. package/migrations/update-17_2_0/changes/inputs.json +0 -40
  23. package/migrations/update-17_2_2/changes/inputs.json +29 -0
  24. package/migrations/update-17_2_2/index.d.ts +3 -0
  25. package/migrations/update-17_2_2/index.js +18 -0
  26. package/package.json +2 -2
  27. package/styles/igniteui-angular-dark.css +1 -1
  28. package/styles/igniteui-angular.css +1 -1
  29. package/styles/igniteui-bootstrap-dark.css +1 -1
  30. package/styles/igniteui-bootstrap-light.css +1 -1
  31. package/styles/igniteui-dark-green.css +1 -1
  32. package/styles/igniteui-fluent-dark-excel.css +1 -1
  33. package/styles/igniteui-fluent-dark-word.css +1 -1
  34. package/styles/igniteui-fluent-dark.css +1 -1
  35. package/styles/igniteui-fluent-light-excel.css +1 -1
  36. package/styles/igniteui-fluent-light-word.css +1 -1
  37. package/styles/igniteui-fluent-light.css +1 -1
  38. package/styles/igniteui-indigo-dark.css +1 -1
  39. package/styles/igniteui-indigo-light.css +1 -1
  40. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  41. package/styles/maps/igniteui-angular.css.map +1 -1
  42. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  43. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  44. package/styles/maps/igniteui-dark-green.css.map +1 -1
  45. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  46. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  47. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  48. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  49. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  50. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  51. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  52. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -394,10 +394,12 @@ class PlatformUtil {
394
394
  this.platformId = platformId;
395
395
  this.isBrowser = isPlatformBrowser(this.platformId);
396
396
  this.isIOS = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) && !('MSStream' in window);
397
+ this.isSafari = this.isBrowser && /Safari[\/\s](\d+\.\d+)/.test(navigator.userAgent);
397
398
  this.isFirefox = this.isBrowser && /Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent);
398
399
  this.isEdge = this.isBrowser && /Edge[\/\s](\d+\.\d+)/.test(navigator.userAgent);
399
400
  this.isChromium = this.isBrowser && (/Chrom|e?ium/g.test(navigator.userAgent) ||
400
401
  /Google Inc/g.test(navigator.vendor)) && !/Edge/g.test(navigator.userAgent);
402
+ this.browserVersion = this.isBrowser ? parseFloat(navigator.userAgent.match(/Version\/([\d.]+)/)?.at(1)) : 0;
401
403
  this.KEYMAP = mkenum({
402
404
  ENTER: 'Enter',
403
405
  SPACE: ' ',
@@ -8355,6 +8357,14 @@ class IgxButtonBaseDirective extends DisplayDensityBase {
8355
8357
  */
8356
8358
  onClick(ev) {
8357
8359
  this.buttonClick.emit(ev);
8360
+ this.focused = false;
8361
+ }
8362
+ /**
8363
+ * @hidden
8364
+ * @internal
8365
+ */
8366
+ onBlur() {
8367
+ this.focused = false;
8358
8368
  }
8359
8369
  /**
8360
8370
  * @hidden
@@ -8381,6 +8391,17 @@ class IgxButtonBaseDirective extends DisplayDensityBase {
8381
8391
  * ```
8382
8392
  */
8383
8393
  this.role = 'button';
8394
+ /**
8395
+ * Sets/gets whether the button component is on focus.
8396
+ * Default value is `false`.
8397
+ * ```typescript
8398
+ * this.button.focus = true;
8399
+ * ```
8400
+ * ```typescript
8401
+ * let isFocused = this.button.focused;
8402
+ * ```
8403
+ */
8404
+ this.focused = false;
8384
8405
  /**
8385
8406
  * Enables/disables the button.
8386
8407
  *
@@ -8391,6 +8412,15 @@ class IgxButtonBaseDirective extends DisplayDensityBase {
8391
8412
  */
8392
8413
  this.disabled = false;
8393
8414
  }
8415
+ /**
8416
+ * @hidden
8417
+ * @internal
8418
+ */
8419
+ updateOnKeyUp(event) {
8420
+ if (event.key === "Tab") {
8421
+ this.focused = true;
8422
+ }
8423
+ }
8394
8424
  /**
8395
8425
  * Returns the underlying DOM element.
8396
8426
  */
@@ -8398,7 +8428,7 @@ class IgxButtonBaseDirective extends DisplayDensityBase {
8398
8428
  return this.element.nativeElement;
8399
8429
  }
8400
8430
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxButtonBaseDirective, deps: [{ token: i0.ElementRef }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
8401
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "17.2.4", type: IgxButtonBaseDirective, inputs: { disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { buttonClick: "buttonClick" }, host: { listeners: { "click": "onClick($event)" }, properties: { "attr.role": "this.role", "class.igx-button--disabled": "this.disabled", "attr.disabled": "this.disabledAttribute" } }, usesInheritance: true, ngImport: i0 }); }
8431
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "17.2.4", type: IgxButtonBaseDirective, inputs: { disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { buttonClick: "buttonClick" }, host: { listeners: { "click": "onClick($event)", "blur": "onBlur()", "keyup": "updateOnKeyUp($event)" }, properties: { "attr.role": "this.role", "class.igx-button--focused": "this.focused", "class.igx-button--disabled": "this.disabled", "attr.disabled": "this.disabledAttribute" } }, usesInheritance: true, ngImport: i0 }); }
8402
8432
  }
8403
8433
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxButtonBaseDirective, decorators: [{
8404
8434
  type: Directive
@@ -8415,6 +8445,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
8415
8445
  }], onClick: [{
8416
8446
  type: HostListener,
8417
8447
  args: ['click', ['$event']]
8448
+ }], onBlur: [{
8449
+ type: HostListener,
8450
+ args: ['blur']
8451
+ }], focused: [{
8452
+ type: HostBinding,
8453
+ args: ['class.igx-button--focused']
8418
8454
  }], disabled: [{
8419
8455
  type: Input,
8420
8456
  args: [{ transform: booleanAttribute }]
@@ -8424,6 +8460,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
8424
8460
  }], disabledAttribute: [{
8425
8461
  type: HostBinding,
8426
8462
  args: ['attr.disabled']
8463
+ }], updateOnKeyUp: [{
8464
+ type: HostListener,
8465
+ args: ['keyup', ['$event']]
8427
8466
  }] } });
8428
8467
 
8429
8468
  const IgxButtonType = /*@__PURE__*/ mkenum({
@@ -8569,6 +8608,7 @@ class IgxButtonDirective extends IgxButtonBaseDirective {
8569
8608
  */
8570
8609
  deselect() {
8571
8610
  this.selected = false;
8611
+ this.focused = false;
8572
8612
  }
8573
8613
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxButtonDirective, deps: [{ token: i0.ElementRef }, { token: DisplayDensityToken, optional: true }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
8574
8614
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "17.2.4", type: IgxButtonDirective, isStandalone: true, selector: "[igxButton]", inputs: { selected: ["selected", "selected", booleanAttribute], type: ["igxButton", "type"], label: ["igxLabel", "label"] }, outputs: { buttonSelected: "buttonSelected" }, host: { properties: { "class.igx-button": "this._cssClass", "class.igx-button--flat": "this.flat", "class.igx-button--contained": "this.contained", "class.igx-button--outlined": "this.outlined", "class.igx-button--fab": "this.fab", "style.--component-size": "this.componentSize" } }, usesInheritance: true, ngImport: i0 }); }
@@ -17447,6 +17487,11 @@ class IgxToggleDirective {
17447
17487
  get hiddenClass() {
17448
17488
  return this.collapsed;
17449
17489
  }
17490
+ get hiddenWebkitClass() {
17491
+ const isSafari = this.platform?.isSafari;
17492
+ const browserVersion = this.platform?.browserVersion;
17493
+ return this.collapsed && isSafari && !!browserVersion && browserVersion < 17.5;
17494
+ }
17450
17495
  /**
17451
17496
  * @hidden
17452
17497
  */
@@ -17456,11 +17501,12 @@ class IgxToggleDirective {
17456
17501
  /**
17457
17502
  * @hidden
17458
17503
  */
17459
- constructor(elementRef, cdr, overlayService, navigationService) {
17504
+ constructor(elementRef, cdr, overlayService, navigationService, platform) {
17460
17505
  this.elementRef = elementRef;
17461
17506
  this.cdr = cdr;
17462
17507
  this.overlayService = overlayService;
17463
17508
  this.navigationService = navigationService;
17509
+ this.platform = platform;
17464
17510
  /**
17465
17511
  * Emits an event after the toggle container is opened.
17466
17512
  *
@@ -17737,8 +17783,8 @@ class IgxToggleDirective {
17737
17783
  subscription.unsubscribe();
17738
17784
  }
17739
17785
  }
17740
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxToggleDirective, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxOverlayService }, { token: IgxNavigationService, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
17741
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.4", type: IgxToggleDirective, isStandalone: true, selector: "[igxToggle]", inputs: { id: "id" }, outputs: { opened: "opened", opening: "opening", closed: "closed", closing: "closing", appended: "appended" }, host: { properties: { "class.igx-toggle--hidden": "this.hiddenClass", "attr.aria-hidden": "this.hiddenClass", "class.igx-toggle": "this.defaultClass" } }, exportAs: ["toggle"], ngImport: i0 }); }
17786
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxToggleDirective, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: IgxOverlayService }, { token: IgxNavigationService, optional: true }, { token: PlatformUtil, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
17787
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.4", type: IgxToggleDirective, isStandalone: true, selector: "[igxToggle]", inputs: { id: "id" }, outputs: { opened: "opened", opening: "opening", closed: "closed", closing: "closing", appended: "appended" }, host: { properties: { "class.igx-toggle--hidden": "this.hiddenClass", "attr.aria-hidden": "this.hiddenClass", "class.igx-toggle--hidden-webkit": "this.hiddenWebkitClass", "class.igx-toggle": "this.defaultClass" } }, exportAs: ["toggle"], ngImport: i0 }); }
17742
17788
  }
17743
17789
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxToggleDirective, decorators: [{
17744
17790
  type: Directive,
@@ -17752,6 +17798,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
17752
17798
  args: [IgxOverlayService]
17753
17799
  }] }, { type: IgxNavigationService, decorators: [{
17754
17800
  type: Optional
17801
+ }] }, { type: PlatformUtil, decorators: [{
17802
+ type: Optional
17755
17803
  }] }], propDecorators: { opened: [{
17756
17804
  type: Output
17757
17805
  }], opening: [{
@@ -17770,6 +17818,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
17770
17818
  }, {
17771
17819
  type: HostBinding,
17772
17820
  args: ['attr.aria-hidden']
17821
+ }], hiddenWebkitClass: [{
17822
+ type: HostBinding,
17823
+ args: ['class.igx-toggle--hidden-webkit']
17773
17824
  }], defaultClass: [{
17774
17825
  type: HostBinding,
17775
17826
  args: ['class.igx-toggle']
@@ -23267,6 +23318,7 @@ class IgxAddRow extends IgxEditRow {
23267
23318
  const args = super.createRowEditEventArgs(includeNewValue, event);
23268
23319
  args.oldValue = null;
23269
23320
  args.isAddRow = true;
23321
+ args.rowData = this.newData ?? this.data;
23270
23322
  return args;
23271
23323
  }
23272
23324
  createRowEditDoneEventArgs(cachedRowData, event) {
@@ -31649,6 +31701,26 @@ class IgxMonthPickerComponent extends IgxCalendarBaseDirective {
31649
31701
  this.viewDate = CalendarDay.from(this.viewDate).add('year', 15).native;
31650
31702
  }
31651
31703
  }
31704
+ /**
31705
+ * @hidden
31706
+ * @internal
31707
+ */
31708
+ onActiveViewDecadeKB(date, event, activeViewIdx) {
31709
+ super.activeViewDecadeKB(event, activeViewIdx);
31710
+ if (this.platform.isActivationKey(event)) {
31711
+ this.viewDate = date;
31712
+ this.wrapper.nativeElement.focus();
31713
+ }
31714
+ }
31715
+ /**
31716
+ * @hidden
31717
+ * @internal
31718
+ */
31719
+ onActiveViewDecade(event, date, activeViewIdx) {
31720
+ event.preventDefault();
31721
+ super.activeViewDecade(activeViewIdx);
31722
+ this.viewDate = date;
31723
+ }
31652
31724
  /**
31653
31725
  * @hidden
31654
31726
  */
@@ -31690,7 +31762,8 @@ class IgxMonthPickerComponent extends IgxCalendarBaseDirective {
31690
31762
  selectYear(event) {
31691
31763
  this.previousViewDate = this.viewDate;
31692
31764
  this.viewDate = new Date(event.getFullYear(), event.getMonth(), event.getDate());
31693
- this.activeView = IgxCalendarView.Month;
31765
+ this.activeView = IgxCalendarView.Year;
31766
+ this.wrapper.nativeElement.focus();
31694
31767
  }
31695
31768
  /**
31696
31769
  * @hidden
@@ -31737,13 +31810,202 @@ class IgxMonthPickerComponent extends IgxCalendarBaseDirective {
31737
31810
  });
31738
31811
  }
31739
31812
  }
31813
+ onMouseDown(event) {
31814
+ event.stopPropagation();
31815
+ this.wrapper.nativeElement.focus();
31816
+ }
31817
+ /**
31818
+ * @hidden
31819
+ * @internal
31820
+ */
31821
+ set showActiveDay(value) {
31822
+ this._showActiveDay = value;
31823
+ this.cdr.detectChanges();
31824
+ }
31825
+ get showActiveDay() {
31826
+ return this._showActiveDay;
31827
+ }
31828
+ get activeDescendant() {
31829
+ if (this.activeView === 'month') {
31830
+ return this.value?.getTime();
31831
+ }
31832
+ return this._activeDescendant ?? this.viewDate.getTime();
31833
+ }
31834
+ set activeDescendant(date) {
31835
+ this._activeDescendant = date.getTime();
31836
+ }
31837
+ get isDefaultView() {
31838
+ return this.activeView === IgxCalendarView.Year;
31839
+ }
31840
+ ngOnInit() {
31841
+ this.activeView = IgxCalendarView.Year;
31842
+ }
31740
31843
  ngAfterViewInit() {
31844
+ this.keyboardNavigation
31845
+ .attachKeyboardHandlers(this.wrapper, this)
31846
+ .set("ArrowUp", this.onArrowUp)
31847
+ .set("ArrowDown", this.onArrowDown)
31848
+ .set("ArrowLeft", this.onArrowLeft)
31849
+ .set("ArrowRight", this.onArrowRight)
31850
+ .set("Enter", this.onEnter)
31851
+ .set(" ", this.onEnter)
31852
+ .set("Home", this.onHome)
31853
+ .set("End", this.onEnd)
31854
+ .set("PageUp", this.handlePageUp)
31855
+ .set("PageDown", this.handlePageDown);
31856
+ this.wrapper.nativeElement.addEventListener('focus', (event) => this.onWrapperFocus(event));
31857
+ this.wrapper.nativeElement.addEventListener('blur', (event) => this.onWrapperBlur(event));
31741
31858
  this.activeView$.subscribe((view) => {
31742
31859
  this.activeViewChanged.emit(view);
31860
+ this.viewDateChanged.emit({
31861
+ previousValue: this.previousViewDate,
31862
+ currentValue: this.viewDate
31863
+ });
31743
31864
  });
31744
31865
  }
31866
+ onWrapperFocus(event) {
31867
+ event.stopPropagation();
31868
+ this.showActiveDay = true;
31869
+ }
31870
+ onWrapperBlur(event) {
31871
+ event.stopPropagation();
31872
+ this.showActiveDay = false;
31873
+ this._onTouchedCallback();
31874
+ }
31875
+ handlePageUpDown(event, delta) {
31876
+ event.preventDefault();
31877
+ event.stopPropagation();
31878
+ if (this.isDefaultView && event.shiftKey) {
31879
+ this.viewDate = CalendarDay.from(this.viewDate).add('year', delta).native;
31880
+ this.cdr.detectChanges();
31881
+ }
31882
+ else {
31883
+ delta > 0 ? this.nextPage() : this.previousPage();
31884
+ }
31885
+ }
31886
+ handlePageUp(event) {
31887
+ this.handlePageUpDown(event, -1);
31888
+ }
31889
+ handlePageDown(event) {
31890
+ this.handlePageUpDown(event, 1);
31891
+ }
31892
+ onArrowUp(event) {
31893
+ if (this.isDefaultView) {
31894
+ this.monthsView.onKeydownArrowUp(event);
31895
+ }
31896
+ if (this.isDecadeView) {
31897
+ this.dacadeView.onKeydownArrowUp(event);
31898
+ }
31899
+ }
31900
+ onArrowDown(event) {
31901
+ if (this.isDefaultView) {
31902
+ this.monthsView.onKeydownArrowDown(event);
31903
+ }
31904
+ if (this.isDecadeView) {
31905
+ this.dacadeView.onKeydownArrowDown(event);
31906
+ }
31907
+ }
31908
+ onArrowLeft(event) {
31909
+ if (this.isDefaultView) {
31910
+ this.monthsView.onKeydownArrowLeft(event);
31911
+ }
31912
+ if (this.isDecadeView) {
31913
+ this.dacadeView.onKeydownArrowLeft(event);
31914
+ }
31915
+ }
31916
+ onArrowRight(event) {
31917
+ if (this.isDefaultView) {
31918
+ this.monthsView.onKeydownArrowRight(event);
31919
+ }
31920
+ if (this.isDecadeView) {
31921
+ this.dacadeView.onKeydownArrowRight(event);
31922
+ }
31923
+ }
31924
+ onEnter(event) {
31925
+ event.stopPropagation();
31926
+ if (this.isDefaultView) {
31927
+ this.monthsView.onKeydownEnter(event);
31928
+ }
31929
+ if (this.isDecadeView) {
31930
+ this.dacadeView.onKeydownEnter(event);
31931
+ }
31932
+ }
31933
+ onHome(event) {
31934
+ event.stopPropagation();
31935
+ if (this.isDefaultView) {
31936
+ this.monthsView.onKeydownHome(event);
31937
+ }
31938
+ if (this.isDecadeView) {
31939
+ this.dacadeView.onKeydownHome(event);
31940
+ }
31941
+ }
31942
+ onEnd(event) {
31943
+ event.stopPropagation();
31944
+ if (this.isDefaultView) {
31945
+ this.monthsView.onKeydownEnd(event);
31946
+ }
31947
+ if (this.isDecadeView) {
31948
+ this.dacadeView.onKeydownEnd(event);
31949
+ }
31950
+ }
31951
+ /**
31952
+ * @hidden
31953
+ * @internal
31954
+ */
31955
+ ngOnDestroy() {
31956
+ this.keyboardNavigation.detachKeyboardHandlers();
31957
+ this.wrapper?.nativeElement.removeEventListener('focus', this.onWrapperFocus);
31958
+ this.wrapper?.nativeElement.removeEventListener('blur', this.onWrapperBlur);
31959
+ }
31960
+ /**
31961
+ * @hidden
31962
+ * @internal
31963
+ */
31964
+ getPrevYearDate(date) {
31965
+ return CalendarDay.from(date).add('year', -1).native;
31966
+ }
31967
+ /**
31968
+ * @hidden
31969
+ * @internal
31970
+ */
31971
+ getNextYearDate(date) {
31972
+ return CalendarDay.from(date).add('year', 1).native;
31973
+ }
31974
+ /**
31975
+ * Getter for the context object inside the calendar templates.
31976
+ *
31977
+ * @hidden
31978
+ * @internal
31979
+ */
31980
+ getContext(i) {
31981
+ const date = CalendarDay.from(this.viewDate).add('month', i).native;
31982
+ return this.generateContext(date, i);
31983
+ }
31984
+ /**
31985
+ * Helper method building and returning the context object inside the calendar templates.
31986
+ *
31987
+ * @hidden
31988
+ * @internal
31989
+ */
31990
+ generateContext(value, i) {
31991
+ const construct = (date, index) => ({
31992
+ index: index,
31993
+ date,
31994
+ ...formatToParts(date, this.locale, this.formatOptions, [
31995
+ "era",
31996
+ "year",
31997
+ "month",
31998
+ "day",
31999
+ "weekday",
32000
+ ]),
32001
+ });
32002
+ const formatObject = Array.isArray(value)
32003
+ ? value.map((date, index) => construct(date, index))
32004
+ : construct(value, i);
32005
+ return { $implicit: formatObject };
32006
+ }
31745
32007
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxMonthPickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
31746
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: IgxMonthPickerComponent, isStandalone: true, selector: "igx-month-picker", inputs: { id: "id" }, host: { listeners: { "keydown.pageup": "previousPage($event)", "keydown.pagedown": "nextPage($event)" }, properties: { "attr.id": "this.id", "class.igx-month-picker": "this.styleClass" } }, providers: [
32008
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: IgxMonthPickerComponent, isStandalone: true, selector: "igx-month-picker", inputs: { id: "id" }, host: { listeners: { "keydown.pageup": "previousPage($event)", "keydown.pagedown": "nextPage($event)", "mousedown": "onMouseDown($event)" }, properties: { "attr.id": "this.id", "class.igx-month-picker": "this.styleClass" } }, providers: [
31747
32009
  {
31748
32010
  multi: true,
31749
32011
  provide: NG_VALUE_ACCESSOR,
@@ -31753,7 +32015,7 @@ class IgxMonthPickerComponent extends IgxCalendarBaseDirective {
31753
32015
  multi: false,
31754
32016
  provide: KeyboardNavigationService
31755
32017
  },
31756
- ], viewQueries: [{ propertyName: "monthsView", first: true, predicate: ["months"], descendants: true, read: IgxMonthsViewComponent }, { propertyName: "dacadeView", first: true, predicate: ["decade"], descendants: true, read: IgxYearsViewComponent }, { propertyName: "daysView", first: true, predicate: ["days"], descendants: true, read: IgxDaysViewComponent }, { propertyName: "yearsBtn", first: true, predicate: ["yearsBtn"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Picker Info -->\n\n<!-- Month -->\n<ng-template #defaultMonth>\n <span\n #yearsBtn\n tabindex=\"0\"\n aria-live=\"polite\"\n class=\"igx-calendar-picker__date\"\n (keydown)=\"activeViewDecadeKB($event)\"\n (click)=\"activeViewDecade()\"\n >\n {{ formattedYear(viewDate) }}\n </span>\n</ng-template>\n\n<!-- Years -->\n<ng-template #defaultYears>\n <span>{{ getDecadeRange().start }}</span>\n <span>&nbsp;-&nbsp;</span>\n <span>{{ getDecadeRange().end }}</span>\n</ng-template>\n\n<!-- Picker Arrows -->\n\n<!-- Months -->\n<ng-template #calendarMonthPicker>\n <section class=\"igx-calendar-picker\">\n <div [style.width.%]=\"100\">\n <ng-container *ngTemplateOutlet=\"defaultMonth\"></ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <div\n role=\"button\"\n tabindex=\"0\"\n class=\"igx-calendar-picker__prev\"\n [attr.aria-label]=\"'Previous Year ' + getPreviousYear()\"\n (click)=\"previousPage()\"\n (keydown)=\"changePageKB($event, false)\"\n data-action=\"prev\"\n >\n <igx-icon>keyboard_arrow_left</igx-icon>\n </div>\n <div\n role=\"button\"\n tabindex=\"0\"\n class=\"igx-calendar-picker__next\"\n [attr.aria-label]=\"'Next Year ' + getNextYear()\"\n (click)=\"nextPage()\"\n (keydown)=\"changePageKB($event)\"\n data-action=\"next\"\n >\n <igx-icon>keyboard_arrow_right</igx-icon>\n </div>\n </div>\n </section>\n</ng-template>\n\n<!-- Years -->\n<ng-template #calendarYearsPicker>\n <section class=\"igx-calendar-picker\">\n <div [style.width.%]=\"100\">\n <ng-container *ngTemplateOutlet=\"defaultYears\"></ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <div\n tabindex=\"0\"\n class=\"igx-calendar-picker__prev\"\n role=\"button\"\n data-action=\"prev\"\n (click)=\"previousPage()\"\n (keydown)=\"changePageKB($event, false)\"\n data-action=\"prev\"\n >\n <igx-icon aria-hidden=\"true\">keyboard_arrow_left</igx-icon>\n </div>\n <div\n tabindex=\"0\"\n class=\"igx-calendar-picker__next\"\n role=\"button\"\n data-action=\"next\"\n (click)=\"nextPage()\"\n (keydown)=\"changePageKB($event)\"\n data-action=\"next\"\n >\n <igx-icon aria-hidden=\"true\">keyboard_arrow_right</igx-icon>\n </div>\n </div>\n </section>\n</ng-template>\n\n<!-- Outlets -->\n\n<!-- Months -->\n<div\n *ngIf=\"isDefaultView\"\n class=\"igx-months-view__body\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n>\n <ng-container *ngTemplateOutlet=\"calendarMonthPicker\"></ng-container>\n <igx-months-view\n #months\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.month\"\n [monthFormat]=\"formatOptions.month\"\n (selected)=\"selectMonth($event)\"\n (pageChanged)=\"updateDate($event)\"\n >\n </igx-months-view>\n</div>\n\n<!-- Years -->\n<div *ngIf=\"isDecadeView\">\n <ng-container *ngTemplateOutlet=\"calendarYearsPicker\"></ng-container>\n <igx-years-view\n #decade\n *ngIf=\"isDecadeView\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.year\"\n [yearFormat]=\"formatOptions.year\"\n (selected)=\"selectYear($event)\"\n (pageChanged)=\"updateDate($event)\"\n >\n </igx-years-view>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "component", type: IgxMonthsViewComponent, selector: "igx-months-view", inputs: ["id", "standalone", "monthFormat", "formatView"] }, { kind: "component", type: IgxYearsViewComponent, selector: "igx-years-view", inputs: ["standalone", "yearFormat"] }] }); }
32018
+ ], viewQueries: [{ propertyName: "wrapper", first: true, predicate: ["wrapper"], descendants: true }, { propertyName: "monthsView", first: true, predicate: ["months"], descendants: true, read: IgxMonthsViewComponent }, { propertyName: "dacadeView", first: true, predicate: ["decade"], descendants: true, read: IgxYearsViewComponent }, { propertyName: "daysView", first: true, predicate: ["days"], descendants: true, read: IgxDaysViewComponent }, { propertyName: "yearsBtn", first: true, predicate: ["yearsBtn"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Previous arrow icon -->\n<ng-template #prevArrow let-obj>\n <igx-icon aria-hidden=\"true\">keyboard_arrow_left</igx-icon>\n</ng-template>\n\n<!-- Next arrow icon -->\n<ng-template #nextArrow let-obj>\n <igx-icon aria-hidden=\"true\">keyboard_arrow_right</igx-icon>\n</ng-template>\n\n<!-- Previous picker button -->\n<ng-template #prevPageButton let-obj>\n <div\n #prevPageBtn\n tabindex=\"0\"\n class=\"igx-calendar-picker__prev\"\n role=\"button\"\n [attr.aria-label]=\"prevNavLabel((getPrevYearDate(viewDate) | date: 'YYYY'))\"\n data-action=\"prev\"\n igxCalendarScrollPage\n (mousedown)=\"previousPage()\"\n (keydown)=\"changePageKB($event, false)\"\n >\n <ng-container *ngTemplateOutlet=\"prevArrow\"></ng-container>\n </div>\n</ng-template>\n\n<!-- Next picker button -->\n<ng-template #nextPageButton let-obj>\n <div\n #nextPageBtn\n tabindex=\"0\"\n class=\"igx-calendar-picker__next\"\n role=\"button\"\n [attr.aria-label]=\"nextNavLabel((getNextYearDate(viewDate) | date: 'YYYY'))\"\n data-action=\"next\"\n igxCalendarScrollPage\n (mousedown)=\"nextPage()\"\n (keydown)=\"changePageKB($event)\"\n >\n <ng-container *ngTemplateOutlet=\"nextArrow\"></ng-container>\n </div>\n</ng-template>\n\n<!-- Year -->\n<ng-template #defaultYear let-obj>\n <span *ngIf=\"activeView === 'year'\" class=\"igx-calendar__aria-off-screen\" aria-live=\"polite\">{{ formattedYear(obj.date) }}</span>\n <span\n #yearsBtn\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(obj.date | date: 'yyyy') + ', ' + resourceStrings.igx_calendar_select_year\"\n (keydown)=\"onActiveViewDecadeKB(obj.date, $event, obj.index)\"\n (mousedown)=\"onActiveViewDecade($event, obj.date, obj.index)\"\n class=\"igx-calendar-picker__date\">\n {{ formattedYear(obj.date) }}\n </span>\n</ng-template>\n\n<!-- Decade -->\n<ng-template #defaultDecade>\n <span>{{ getDecadeRange().start }} - {{ getDecadeRange().end }}</span>\n</ng-template>\n\n<!-- PICKER IN MONTHS -->\n<ng-template #calendarYearPicker>\n <section class=\"igx-calendar-picker\">\n <div class=\"igx-calendar-picker__dates\">\n <ng-container\n *ngTemplateOutlet=\"defaultYear; context: getContext(0)\">\n </ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n </div>\n </section>\n</ng-template>\n\n<!-- PICKER IN YEARS -->\n<ng-template #calendarDecadePicker>\n <section class=\"igx-calendar-picker\">\n <div class=\"igx-calendar-picker__dates\" aria-live=\"polite\">\n <ng-container\n *ngTemplateOutlet=\"defaultDecade;\">\n </ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n </div>\n </section>\n</ng-template>\n\n<div\n #wrapper\n [tabIndex]=\"0\"\n class=\"igx-calendar__wrapper\"\n [attr.aria-activedescendant]=\"activeDescendant\"\n [attr.aria-multiselectable]=\"selection !== 'single'\"\n aria-labelledby=\"calendar-desc\"\n role=\"grid\"\n >\n <caption id=\"calendar-desc\" tabindex=\"-1\" class=\"igx-calendar__aria-off-screen\">\n {{ resourceStrings.igx_calendar_singular_single_selection}}\n </caption>\n\n <section class=\"igx-calendar__pickers\">\n <ng-container *ngIf=\"isDefaultView\">\n <ng-container *ngTemplateOutlet=\"calendarYearPicker\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"isDecadeView\">\n <ng-container *ngTemplateOutlet=\"calendarDecadePicker\"></ng-container>\n </ng-container>\n </section>\n\n <section class=\"igx-calendar__body\">\n <ng-container *ngIf=\"isDefaultView\">\n <igx-months-view\n #months\n role=\"rowgroup\"\n [tabIndex]=\"-1\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.month\"\n [monthFormat]=\"formatOptions.month\"\n [showActive]=\"showActiveDay\"\n [standalone]=\"false\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n (selected)=\"selectMonth($event)\"\n (pageChanged)=\"updateDate($event)\"\n (mousedown)=\"$event.preventDefault()\">\n >\n </igx-months-view>\n </ng-container>\n\n <ng-container *ngIf=\"isDecadeView\">\n <igx-years-view\n #decade\n role=\"rowgroup\"\n [tabIndex]=\"-1\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.year\"\n [yearFormat]=\"formatOptions.year\"\n [showActive]=\"showActiveDay\"\n [standalone]=\"false\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n (selected)=\"selectYear($event)\"\n (pageChanged)=\"updateDate($event)\"\n (mousedown)=\"$event.preventDefault()\"\n >\n </igx-years-view>\n </ng-container>\n </section>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "component", type: IgxMonthsViewComponent, selector: "igx-months-view", inputs: ["id", "standalone", "monthFormat", "formatView"] }, { kind: "component", type: IgxYearsViewComponent, selector: "igx-years-view", inputs: ["standalone", "yearFormat"] }] }); }
31757
32019
  }
31758
32020
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxMonthPickerComponent, decorators: [{
31759
32021
  type: Component,
@@ -31771,15 +32033,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
31771
32033
  NgIf,
31772
32034
  NgStyle,
31773
32035
  NgTemplateOutlet,
32036
+ DatePipe,
31774
32037
  IgxIconComponent,
31775
32038
  IgxMonthsViewComponent,
31776
32039
  IgxYearsViewComponent,
31777
- ], template: "<!-- Picker Info -->\n\n<!-- Month -->\n<ng-template #defaultMonth>\n <span\n #yearsBtn\n tabindex=\"0\"\n aria-live=\"polite\"\n class=\"igx-calendar-picker__date\"\n (keydown)=\"activeViewDecadeKB($event)\"\n (click)=\"activeViewDecade()\"\n >\n {{ formattedYear(viewDate) }}\n </span>\n</ng-template>\n\n<!-- Years -->\n<ng-template #defaultYears>\n <span>{{ getDecadeRange().start }}</span>\n <span>&nbsp;-&nbsp;</span>\n <span>{{ getDecadeRange().end }}</span>\n</ng-template>\n\n<!-- Picker Arrows -->\n\n<!-- Months -->\n<ng-template #calendarMonthPicker>\n <section class=\"igx-calendar-picker\">\n <div [style.width.%]=\"100\">\n <ng-container *ngTemplateOutlet=\"defaultMonth\"></ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <div\n role=\"button\"\n tabindex=\"0\"\n class=\"igx-calendar-picker__prev\"\n [attr.aria-label]=\"'Previous Year ' + getPreviousYear()\"\n (click)=\"previousPage()\"\n (keydown)=\"changePageKB($event, false)\"\n data-action=\"prev\"\n >\n <igx-icon>keyboard_arrow_left</igx-icon>\n </div>\n <div\n role=\"button\"\n tabindex=\"0\"\n class=\"igx-calendar-picker__next\"\n [attr.aria-label]=\"'Next Year ' + getNextYear()\"\n (click)=\"nextPage()\"\n (keydown)=\"changePageKB($event)\"\n data-action=\"next\"\n >\n <igx-icon>keyboard_arrow_right</igx-icon>\n </div>\n </div>\n </section>\n</ng-template>\n\n<!-- Years -->\n<ng-template #calendarYearsPicker>\n <section class=\"igx-calendar-picker\">\n <div [style.width.%]=\"100\">\n <ng-container *ngTemplateOutlet=\"defaultYears\"></ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <div\n tabindex=\"0\"\n class=\"igx-calendar-picker__prev\"\n role=\"button\"\n data-action=\"prev\"\n (click)=\"previousPage()\"\n (keydown)=\"changePageKB($event, false)\"\n data-action=\"prev\"\n >\n <igx-icon aria-hidden=\"true\">keyboard_arrow_left</igx-icon>\n </div>\n <div\n tabindex=\"0\"\n class=\"igx-calendar-picker__next\"\n role=\"button\"\n data-action=\"next\"\n (click)=\"nextPage()\"\n (keydown)=\"changePageKB($event)\"\n data-action=\"next\"\n >\n <igx-icon aria-hidden=\"true\">keyboard_arrow_right</igx-icon>\n </div>\n </div>\n </section>\n</ng-template>\n\n<!-- Outlets -->\n\n<!-- Months -->\n<div\n *ngIf=\"isDefaultView\"\n class=\"igx-months-view__body\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n>\n <ng-container *ngTemplateOutlet=\"calendarMonthPicker\"></ng-container>\n <igx-months-view\n #months\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.month\"\n [monthFormat]=\"formatOptions.month\"\n (selected)=\"selectMonth($event)\"\n (pageChanged)=\"updateDate($event)\"\n >\n </igx-months-view>\n</div>\n\n<!-- Years -->\n<div *ngIf=\"isDecadeView\">\n <ng-container *ngTemplateOutlet=\"calendarYearsPicker\"></ng-container>\n <igx-years-view\n #decade\n *ngIf=\"isDecadeView\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.year\"\n [yearFormat]=\"formatOptions.year\"\n (selected)=\"selectYear($event)\"\n (pageChanged)=\"updateDate($event)\"\n >\n </igx-years-view>\n</div>\n" }]
32040
+ ], template: "<!-- Previous arrow icon -->\n<ng-template #prevArrow let-obj>\n <igx-icon aria-hidden=\"true\">keyboard_arrow_left</igx-icon>\n</ng-template>\n\n<!-- Next arrow icon -->\n<ng-template #nextArrow let-obj>\n <igx-icon aria-hidden=\"true\">keyboard_arrow_right</igx-icon>\n</ng-template>\n\n<!-- Previous picker button -->\n<ng-template #prevPageButton let-obj>\n <div\n #prevPageBtn\n tabindex=\"0\"\n class=\"igx-calendar-picker__prev\"\n role=\"button\"\n [attr.aria-label]=\"prevNavLabel((getPrevYearDate(viewDate) | date: 'YYYY'))\"\n data-action=\"prev\"\n igxCalendarScrollPage\n (mousedown)=\"previousPage()\"\n (keydown)=\"changePageKB($event, false)\"\n >\n <ng-container *ngTemplateOutlet=\"prevArrow\"></ng-container>\n </div>\n</ng-template>\n\n<!-- Next picker button -->\n<ng-template #nextPageButton let-obj>\n <div\n #nextPageBtn\n tabindex=\"0\"\n class=\"igx-calendar-picker__next\"\n role=\"button\"\n [attr.aria-label]=\"nextNavLabel((getNextYearDate(viewDate) | date: 'YYYY'))\"\n data-action=\"next\"\n igxCalendarScrollPage\n (mousedown)=\"nextPage()\"\n (keydown)=\"changePageKB($event)\"\n >\n <ng-container *ngTemplateOutlet=\"nextArrow\"></ng-container>\n </div>\n</ng-template>\n\n<!-- Year -->\n<ng-template #defaultYear let-obj>\n <span *ngIf=\"activeView === 'year'\" class=\"igx-calendar__aria-off-screen\" aria-live=\"polite\">{{ formattedYear(obj.date) }}</span>\n <span\n #yearsBtn\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"(obj.date | date: 'yyyy') + ', ' + resourceStrings.igx_calendar_select_year\"\n (keydown)=\"onActiveViewDecadeKB(obj.date, $event, obj.index)\"\n (mousedown)=\"onActiveViewDecade($event, obj.date, obj.index)\"\n class=\"igx-calendar-picker__date\">\n {{ formattedYear(obj.date) }}\n </span>\n</ng-template>\n\n<!-- Decade -->\n<ng-template #defaultDecade>\n <span>{{ getDecadeRange().start }} - {{ getDecadeRange().end }}</span>\n</ng-template>\n\n<!-- PICKER IN MONTHS -->\n<ng-template #calendarYearPicker>\n <section class=\"igx-calendar-picker\">\n <div class=\"igx-calendar-picker__dates\">\n <ng-container\n *ngTemplateOutlet=\"defaultYear; context: getContext(0)\">\n </ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n </div>\n </section>\n</ng-template>\n\n<!-- PICKER IN YEARS -->\n<ng-template #calendarDecadePicker>\n <section class=\"igx-calendar-picker\">\n <div class=\"igx-calendar-picker__dates\" aria-live=\"polite\">\n <ng-container\n *ngTemplateOutlet=\"defaultDecade;\">\n </ng-container>\n </div>\n <div class=\"igx-calendar-picker__nav\">\n <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n </div>\n </section>\n</ng-template>\n\n<div\n #wrapper\n [tabIndex]=\"0\"\n class=\"igx-calendar__wrapper\"\n [attr.aria-activedescendant]=\"activeDescendant\"\n [attr.aria-multiselectable]=\"selection !== 'single'\"\n aria-labelledby=\"calendar-desc\"\n role=\"grid\"\n >\n <caption id=\"calendar-desc\" tabindex=\"-1\" class=\"igx-calendar__aria-off-screen\">\n {{ resourceStrings.igx_calendar_singular_single_selection}}\n </caption>\n\n <section class=\"igx-calendar__pickers\">\n <ng-container *ngIf=\"isDefaultView\">\n <ng-container *ngTemplateOutlet=\"calendarYearPicker\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"isDecadeView\">\n <ng-container *ngTemplateOutlet=\"calendarDecadePicker\"></ng-container>\n </ng-container>\n </section>\n\n <section class=\"igx-calendar__body\">\n <ng-container *ngIf=\"isDefaultView\">\n <igx-months-view\n #months\n role=\"rowgroup\"\n [tabIndex]=\"-1\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.month\"\n [monthFormat]=\"formatOptions.month\"\n [showActive]=\"showActiveDay\"\n [standalone]=\"false\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n (selected)=\"selectMonth($event)\"\n (pageChanged)=\"updateDate($event)\"\n (mousedown)=\"$event.preventDefault()\">\n >\n </igx-months-view>\n </ng-container>\n\n <ng-container *ngIf=\"isDecadeView\">\n <igx-years-view\n #decade\n role=\"rowgroup\"\n [tabIndex]=\"-1\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.year\"\n [yearFormat]=\"formatOptions.year\"\n [showActive]=\"showActiveDay\"\n [standalone]=\"false\"\n (swiperight)=\"previousPage()\"\n (swipeleft)=\"nextPage()\"\n (selected)=\"selectYear($event)\"\n (pageChanged)=\"updateDate($event)\"\n (mousedown)=\"$event.preventDefault()\"\n >\n </igx-years-view>\n </ng-container>\n </section>\n</div>\n" }]
31778
32041
  }], propDecorators: { id: [{
31779
32042
  type: HostBinding,
31780
32043
  args: ["attr.id"]
31781
32044
  }, {
31782
32045
  type: Input
32046
+ }], wrapper: [{
32047
+ type: ViewChild,
32048
+ args: ["wrapper"]
31783
32049
  }], styleClass: [{
31784
32050
  type: HostBinding,
31785
32051
  args: ["class.igx-month-picker"]
@@ -31801,6 +32067,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
31801
32067
  }], nextPage: [{
31802
32068
  type: HostListener,
31803
32069
  args: ["keydown.pagedown", ["$event"]]
32070
+ }], onMouseDown: [{
32071
+ type: HostListener,
32072
+ args: ['mousedown', ['$event']]
31804
32073
  }] } });
31805
32074
 
31806
32075
  /* NOTE: Calendar directives collection for ease-of-use import in standalone components scenario */
@@ -74027,18 +74296,22 @@ class IgxPivotGridComponent extends IgxGridBaseDirective {
74027
74296
  const separator = this.pivotKeys.columnDimensionSeparator;
74028
74297
  const dataArr = fields.map(x => x.split(separator)).sort(x => x.length);
74029
74298
  const hierarchy = new Map();
74299
+ const columnDimensions = PivotUtil.flatten(this.columnDimensions);
74030
74300
  dataArr.forEach(arr => {
74031
74301
  let currentHierarchy = hierarchy;
74032
74302
  const path = [];
74303
+ let index = 0;
74033
74304
  for (const val of arr) {
74034
74305
  path.push(val);
74035
74306
  const newPath = path.join(separator);
74036
74307
  let targetHierarchy = currentHierarchy.get(newPath);
74037
74308
  if (!targetHierarchy) {
74038
- currentHierarchy.set(newPath, { value: newPath, expandable: true, children: new Map(), dimension: this.columnDimensions[0] });
74309
+ const currentColumnDimension = columnDimensions[index];
74310
+ currentHierarchy.set(newPath, { value: newPath, expandable: !!currentColumnDimension.childLevel, children: new Map(), dimension: currentColumnDimension });
74039
74311
  targetHierarchy = currentHierarchy.get(newPath);
74040
74312
  }
74041
74313
  currentHierarchy = targetHierarchy.children;
74314
+ index++;
74042
74315
  }
74043
74316
  });
74044
74317
  return hierarchy;
@@ -80460,6 +80733,7 @@ class IgxRowIslandComponent extends IgxHierarchicalGridBaseDirective {
80460
80733
  return false;
80461
80734
  });
80462
80735
  this._childColumns = topCols;
80736
+ this.updateColumns(this._childColumns);
80463
80737
  this.rowIslandAPI.getChildGrids().forEach((grid) => {
80464
80738
  grid.createColumnsList(this._childColumns);
80465
80739
  if (!document.body.contains(grid.nativeElement)) {