@angular/material 18.0.3 → 18.0.4

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 (95) hide show
  1. package/autocomplete/index.d.ts +3 -0
  2. package/bottom-sheet/index.d.ts +0 -1
  3. package/button/index.d.ts +7 -1
  4. package/checkbox/index.d.ts +5 -3
  5. package/chips/index.d.ts +9 -5
  6. package/core/_core-theme.scss +8 -14
  7. package/core/_core.scss +18 -4
  8. package/core/tokens/_density.scss +1 -0
  9. package/core/tokens/m2/mat/_app.scss +13 -1
  10. package/core/tokens/m2/mat/_menu.scss +3 -0
  11. package/core/tokens/m2/mat/_paginator.scss +1 -0
  12. package/core/tokens/m3/mat/_app.scss +9 -0
  13. package/core/tokens/m3/mat/_menu.scss +3 -0
  14. package/datepicker/index.d.ts +17 -1
  15. package/esm2022/autocomplete/autocomplete-trigger.mjs +28 -1
  16. package/esm2022/bottom-sheet/bottom-sheet-container.mjs +6 -7
  17. package/esm2022/button/button-base.mjs +1 -1
  18. package/esm2022/checkbox/checkbox.mjs +1 -1
  19. package/esm2022/chips/chip-grid.mjs +11 -4
  20. package/esm2022/chips/chip-row.mjs +8 -13
  21. package/esm2022/chips/chip-set.mjs +7 -3
  22. package/esm2022/chips/chip.mjs +1 -1
  23. package/esm2022/core/option/optgroup.mjs +2 -2
  24. package/esm2022/core/option/option.mjs +3 -3
  25. package/esm2022/core/version.mjs +1 -1
  26. package/esm2022/datepicker/date-range-input-parts.mjs +14 -10
  27. package/esm2022/datepicker/date-range-input.mjs +17 -7
  28. package/esm2022/datepicker/datepicker-base.mjs +5 -1
  29. package/esm2022/datepicker/datepicker-input.mjs +16 -5
  30. package/esm2022/form-field/form-field.mjs +12 -6
  31. package/esm2022/icon/icon.mjs +8 -2
  32. package/esm2022/list/list-option.mjs +3 -3
  33. package/esm2022/list/selection-list.mjs +9 -2
  34. package/esm2022/menu/menu.mjs +13 -4
  35. package/esm2022/paginator/paginator.mjs +3 -3
  36. package/esm2022/radio/radio.mjs +3 -3
  37. package/esm2022/slide-toggle/slide-toggle.mjs +1 -1
  38. package/esm2022/stepper/step-header.mjs +1 -1
  39. package/esm2022/stepper/stepper.mjs +1 -1
  40. package/esm2022/tabs/tab-header.mjs +3 -3
  41. package/esm2022/tabs/tab-nav-bar/tab-nav-bar.mjs +10 -4
  42. package/esm2022/toolbar/toolbar.mjs +1 -1
  43. package/fesm2022/autocomplete.mjs +27 -0
  44. package/fesm2022/autocomplete.mjs.map +1 -1
  45. package/fesm2022/bottom-sheet.mjs +5 -6
  46. package/fesm2022/bottom-sheet.mjs.map +1 -1
  47. package/fesm2022/button.mjs.map +1 -1
  48. package/fesm2022/checkbox.mjs.map +1 -1
  49. package/fesm2022/chips.mjs +15 -9
  50. package/fesm2022/chips.mjs.map +1 -1
  51. package/fesm2022/core.mjs +5 -5
  52. package/fesm2022/core.mjs.map +1 -1
  53. package/fesm2022/datepicker.mjs +37 -8
  54. package/fesm2022/datepicker.mjs.map +1 -1
  55. package/fesm2022/form-field.mjs +9 -3
  56. package/fesm2022/form-field.mjs.map +1 -1
  57. package/fesm2022/icon.mjs +7 -1
  58. package/fesm2022/icon.mjs.map +1 -1
  59. package/fesm2022/list.mjs +10 -3
  60. package/fesm2022/list.mjs.map +1 -1
  61. package/fesm2022/menu.mjs +12 -3
  62. package/fesm2022/menu.mjs.map +1 -1
  63. package/fesm2022/paginator.mjs +2 -2
  64. package/fesm2022/paginator.mjs.map +1 -1
  65. package/fesm2022/radio.mjs +2 -2
  66. package/fesm2022/radio.mjs.map +1 -1
  67. package/fesm2022/slide-toggle.mjs.map +1 -1
  68. package/fesm2022/stepper.mjs.map +1 -1
  69. package/fesm2022/tabs.mjs +11 -5
  70. package/fesm2022/tabs.mjs.map +1 -1
  71. package/fesm2022/toolbar.mjs.map +1 -1
  72. package/form-field/index.d.ts +12 -2
  73. package/icon/index.d.ts +14 -2
  74. package/list/_list-theme.scss +8 -5
  75. package/list/index.d.ts +8 -1
  76. package/package.json +2 -2
  77. package/paginator/index.d.ts +7 -1
  78. package/prebuilt-themes/azure-blue.css +1 -1
  79. package/prebuilt-themes/cyan-orange.css +1 -1
  80. package/prebuilt-themes/deeppurple-amber.css +1 -1
  81. package/prebuilt-themes/indigo-pink.css +1 -1
  82. package/prebuilt-themes/magenta-violet.css +1 -1
  83. package/prebuilt-themes/pink-bluegrey.css +1 -1
  84. package/prebuilt-themes/purple-green.css +1 -1
  85. package/prebuilt-themes/rose-red.css +1 -1
  86. package/radio/_radio-common.scss +238 -0
  87. package/radio/_radio-theme.scss +25 -32
  88. package/radio/index.d.ts +7 -1
  89. package/schematics/ng-add/index.js +1 -1
  90. package/schematics/ng-add/index.mjs +1 -1
  91. package/schematics/ng-generate/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html.template +1 -1
  92. package/slide-toggle/index.d.ts +7 -1
  93. package/stepper/index.d.ts +21 -3
  94. package/tabs/index.d.ts +7 -1
  95. package/toolbar/index.d.ts +7 -1
@@ -4,7 +4,7 @@ import { Overlay, FlexibleConnectedPositionStrategy, OverlayConfig, OverlayModul
4
4
  import { ComponentPortal, CdkPortalOutlet, TemplatePortal, PortalModule } from '@angular/cdk/portal';
5
5
  import { NgClass, DOCUMENT, CommonModule } from '@angular/common';
6
6
  import * as i0 from '@angular/core';
7
- import { Injectable, inject, EventEmitter, Injector, afterNextRender, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, Optional, SkipSelf, InjectionToken, Inject, ViewChild, forwardRef, booleanAttribute, Directive, Attribute, ContentChild, Self, TemplateRef, NgModule } from '@angular/core';
7
+ import { Injectable, inject, EventEmitter, Injector, afterNextRender, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, Optional, SkipSelf, InjectionToken, Inject, ViewChild, forwardRef, ChangeDetectorRef, booleanAttribute, Directive, signal, Attribute, ContentChild, Self, TemplateRef, NgModule } from '@angular/core';
8
8
  import { MatButton, MatIconButton, MatButtonModule } from '@angular/material/button';
9
9
  import { CdkScrollableModule } from '@angular/cdk/scrolling';
10
10
  import * as i1 from '@angular/material/core';
@@ -2594,10 +2594,14 @@ class MatDatepickerBase {
2594
2594
  /** Emits when the datepicker's state changes. */
2595
2595
  this.stateChanges = new Subject();
2596
2596
  this._injector = inject(Injector);
2597
+ this._changeDetectorRef = inject(ChangeDetectorRef);
2597
2598
  if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {
2598
2599
  throw createMissingDateImplError('DateAdapter');
2599
2600
  }
2600
2601
  this._scrollStrategy = scrollStrategy;
2602
+ this._model.selectionChanged.subscribe(() => {
2603
+ this._changeDetectorRef.markForCheck();
2604
+ });
2601
2605
  }
2602
2606
  ngOnChanges(changes) {
2603
2607
  const positionChange = changes['xPosition'] || changes['yPosition'];
@@ -3251,7 +3255,14 @@ class MatDatepickerInput extends MatDatepickerInputBase {
3251
3255
  set matDatepicker(datepicker) {
3252
3256
  if (datepicker) {
3253
3257
  this._datepicker = datepicker;
3254
- this._closedSubscription = datepicker.closedStream.subscribe(() => this._onTouched());
3258
+ this._ariaOwns.set(datepicker.opened ? datepicker.id : null);
3259
+ this._closedSubscription = datepicker.closedStream.subscribe(() => {
3260
+ this._onTouched();
3261
+ this._ariaOwns.set(null);
3262
+ });
3263
+ this._openedSubscription = datepicker.openedStream.subscribe(() => {
3264
+ this._ariaOwns.set(datepicker.id);
3265
+ });
3255
3266
  this._registerModel(datepicker.registerInput(this));
3256
3267
  }
3257
3268
  }
@@ -3292,6 +3303,9 @@ class MatDatepickerInput extends MatDatepickerInputBase {
3292
3303
  super(elementRef, dateAdapter, dateFormats);
3293
3304
  this._formField = _formField;
3294
3305
  this._closedSubscription = Subscription.EMPTY;
3306
+ this._openedSubscription = Subscription.EMPTY;
3307
+ /** The id of the panel owned by this input. */
3308
+ this._ariaOwns = signal(null);
3295
3309
  this._validator = Validators.compose(super._getValidators());
3296
3310
  }
3297
3311
  /**
@@ -3319,6 +3333,7 @@ class MatDatepickerInput extends MatDatepickerInputBase {
3319
3333
  ngOnDestroy() {
3320
3334
  super.ngOnDestroy();
3321
3335
  this._closedSubscription.unsubscribe();
3336
+ this._openedSubscription.unsubscribe();
3322
3337
  }
3323
3338
  /** Opens the associated datepicker. */
3324
3339
  _openPopup() {
@@ -3350,7 +3365,7 @@ class MatDatepickerInput extends MatDatepickerInputBase {
3350
3365
  return event.source !== this;
3351
3366
  }
3352
3367
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: MatDatepickerInput, deps: [{ token: i0.ElementRef }, { token: i1.DateAdapter, optional: true }, { token: MAT_DATE_FORMATS, optional: true }, { token: MAT_FORM_FIELD, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3353
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0", type: MatDatepickerInput, isStandalone: true, selector: "input[matDatepicker]", inputs: { matDatepicker: "matDatepicker", min: "min", max: "max", dateFilter: ["matDatepickerFilter", "dateFilter"] }, host: { listeners: { "input": "_onInput($event.target.value)", "change": "_onChange()", "blur": "_onBlur()", "keydown": "_onKeydown($event)" }, properties: { "attr.aria-haspopup": "_datepicker ? \"dialog\" : null", "attr.aria-owns": "(_datepicker?.opened && _datepicker.id) || null", "attr.min": "min ? _dateAdapter.toIso8601(min) : null", "attr.max": "max ? _dateAdapter.toIso8601(max) : null", "attr.data-mat-calendar": "_datepicker ? _datepicker.id : null", "disabled": "disabled" }, classAttribute: "mat-datepicker-input" }, providers: [
3368
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0", type: MatDatepickerInput, isStandalone: true, selector: "input[matDatepicker]", inputs: { matDatepicker: "matDatepicker", min: "min", max: "max", dateFilter: ["matDatepickerFilter", "dateFilter"] }, host: { listeners: { "input": "_onInput($event.target.value)", "change": "_onChange()", "blur": "_onBlur()", "keydown": "_onKeydown($event)" }, properties: { "attr.aria-haspopup": "_datepicker ? \"dialog\" : null", "attr.aria-owns": "_ariaOwns()", "attr.min": "min ? _dateAdapter.toIso8601(min) : null", "attr.max": "max ? _dateAdapter.toIso8601(max) : null", "attr.data-mat-calendar": "_datepicker ? _datepicker.id : null", "disabled": "disabled" }, classAttribute: "mat-datepicker-input" }, providers: [
3354
3369
  MAT_DATEPICKER_VALUE_ACCESSOR,
3355
3370
  MAT_DATEPICKER_VALIDATORS,
3356
3371
  { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput },
@@ -3368,7 +3383,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
3368
3383
  host: {
3369
3384
  'class': 'mat-datepicker-input',
3370
3385
  '[attr.aria-haspopup]': '_datepicker ? "dialog" : null',
3371
- '[attr.aria-owns]': '(_datepicker?.opened && _datepicker.id) || null',
3386
+ '[attr.aria-owns]': '_ariaOwns()',
3372
3387
  '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',
3373
3388
  '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',
3374
3389
  // Used by the test harness to tie this input to its calendar. We can't depend on
@@ -3853,7 +3868,7 @@ class MatStartDate extends MatDateRangeInputPartBase {
3853
3868
  }
3854
3869
  }
3855
3870
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: MatStartDate, deps: [{ token: MAT_DATE_RANGE_INPUT_PARENT }, { token: i0.ElementRef }, { token: i1.ErrorStateMatcher }, { token: i0.Injector }, { token: i2$1.NgForm, optional: true }, { token: i2$1.FormGroupDirective, optional: true }, { token: i1.DateAdapter, optional: true }, { token: MAT_DATE_FORMATS, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3856
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0", type: MatStartDate, isStandalone: true, selector: "input[matStartDate]", outputs: { dateChange: "dateChange", dateInput: "dateInput" }, host: { attributes: { "type": "text" }, listeners: { "input": "_onInput($event.target.value)", "change": "_onChange()", "keydown": "_onKeydown($event)", "blur": "_onBlur()" }, properties: { "disabled": "disabled", "attr.aria-haspopup": "_rangeInput.rangePicker ? \"dialog\" : null", "attr.aria-owns": "(_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null", "attr.min": "_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null", "attr.max": "_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null" }, classAttribute: "mat-start-date mat-date-range-input-inner" }, providers: [
3871
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0", type: MatStartDate, isStandalone: true, selector: "input[matStartDate]", outputs: { dateChange: "dateChange", dateInput: "dateInput" }, host: { attributes: { "type": "text" }, listeners: { "input": "_onInput($event.target.value)", "change": "_onChange()", "keydown": "_onKeydown($event)", "blur": "_onBlur()" }, properties: { "disabled": "disabled", "attr.aria-haspopup": "_rangeInput.rangePicker ? \"dialog\" : null", "attr.aria-owns": "_rangeInput._ariaOwns\n ? _rangeInput._ariaOwns()\n : (_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null", "attr.min": "_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null", "attr.max": "_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null" }, classAttribute: "mat-start-date mat-date-range-input-inner" }, providers: [
3857
3872
  { provide: NG_VALUE_ACCESSOR, useExisting: MatStartDate, multi: true },
3858
3873
  { provide: NG_VALIDATORS, useExisting: MatStartDate, multi: true },
3859
3874
  ], usesInheritance: true, ngImport: i0 }); }
@@ -3869,7 +3884,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
3869
3884
  '(change)': '_onChange()',
3870
3885
  '(keydown)': '_onKeydown($event)',
3871
3886
  '[attr.aria-haspopup]': '_rangeInput.rangePicker ? "dialog" : null',
3872
- '[attr.aria-owns]': '(_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null',
3887
+ '[attr.aria-owns]': `_rangeInput._ariaOwns
3888
+ ? _rangeInput._ariaOwns()
3889
+ : (_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null`,
3873
3890
  '[attr.min]': '_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null',
3874
3891
  '[attr.max]': '_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null',
3875
3892
  '(blur)': '_onBlur()',
@@ -3961,7 +3978,7 @@ class MatEndDate extends MatDateRangeInputPartBase {
3961
3978
  }
3962
3979
  }
3963
3980
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: MatEndDate, deps: [{ token: MAT_DATE_RANGE_INPUT_PARENT }, { token: i0.ElementRef }, { token: i1.ErrorStateMatcher }, { token: i0.Injector }, { token: i2$1.NgForm, optional: true }, { token: i2$1.FormGroupDirective, optional: true }, { token: i1.DateAdapter, optional: true }, { token: MAT_DATE_FORMATS, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3964
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0", type: MatEndDate, isStandalone: true, selector: "input[matEndDate]", outputs: { dateChange: "dateChange", dateInput: "dateInput" }, host: { attributes: { "type": "text" }, listeners: { "input": "_onInput($event.target.value)", "change": "_onChange()", "keydown": "_onKeydown($event)", "blur": "_onBlur()" }, properties: { "disabled": "disabled", "attr.aria-haspopup": "_rangeInput.rangePicker ? \"dialog\" : null", "attr.aria-owns": "(_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null", "attr.min": "_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null", "attr.max": "_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null" }, classAttribute: "mat-end-date mat-date-range-input-inner" }, providers: [
3981
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0", type: MatEndDate, isStandalone: true, selector: "input[matEndDate]", outputs: { dateChange: "dateChange", dateInput: "dateInput" }, host: { attributes: { "type": "text" }, listeners: { "input": "_onInput($event.target.value)", "change": "_onChange()", "keydown": "_onKeydown($event)", "blur": "_onBlur()" }, properties: { "disabled": "disabled", "attr.aria-haspopup": "_rangeInput.rangePicker ? \"dialog\" : null", "attr.aria-owns": "_rangeInput._ariaOwns\n ? _rangeInput._ariaOwns()\n : (_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null", "attr.min": "_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null", "attr.max": "_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null" }, classAttribute: "mat-end-date mat-date-range-input-inner" }, providers: [
3965
3982
  { provide: NG_VALUE_ACCESSOR, useExisting: MatEndDate, multi: true },
3966
3983
  { provide: NG_VALIDATORS, useExisting: MatEndDate, multi: true },
3967
3984
  ], usesInheritance: true, ngImport: i0 }); }
@@ -3977,7 +3994,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
3977
3994
  '(change)': '_onChange()',
3978
3995
  '(keydown)': '_onKeydown($event)',
3979
3996
  '[attr.aria-haspopup]': '_rangeInput.rangePicker ? "dialog" : null',
3980
- '[attr.aria-owns]': '(_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null',
3997
+ '[attr.aria-owns]': `_rangeInput._ariaOwns
3998
+ ? _rangeInput._ariaOwns()
3999
+ : (_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null`,
3981
4000
  '[attr.min]': '_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null',
3982
4001
  '[attr.max]': '_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null',
3983
4002
  '(blur)': '_onBlur()',
@@ -4037,9 +4056,15 @@ class MatDateRangeInput {
4037
4056
  this._model = rangePicker.registerInput(this);
4038
4057
  this._rangePicker = rangePicker;
4039
4058
  this._closedSubscription.unsubscribe();
4059
+ this._openedSubscription.unsubscribe();
4060
+ this._ariaOwns.set(this.rangePicker.opened ? rangePicker.id : null);
4040
4061
  this._closedSubscription = rangePicker.closedStream.subscribe(() => {
4041
4062
  this._startInput?._onTouched();
4042
4063
  this._endInput?._onTouched();
4064
+ this._ariaOwns.set(null);
4065
+ });
4066
+ this._openedSubscription = rangePicker.openedStream.subscribe(() => {
4067
+ this._ariaOwns.set(rangePicker.id);
4043
4068
  });
4044
4069
  this._registerModel(this._model);
4045
4070
  }
@@ -4125,12 +4150,15 @@ class MatDateRangeInput {
4125
4150
  this._dateAdapter = _dateAdapter;
4126
4151
  this._formField = _formField;
4127
4152
  this._closedSubscription = Subscription.EMPTY;
4153
+ this._openedSubscription = Subscription.EMPTY;
4128
4154
  /** Unique ID for the group. */
4129
4155
  this.id = `mat-date-range-input-${nextUniqueId++}`;
4130
4156
  /** Whether the control is focused. */
4131
4157
  this.focused = false;
4132
4158
  /** Name of the form control. */
4133
4159
  this.controlType = 'mat-date-range-input';
4160
+ /** The id of the panel owned by this input. */
4161
+ this._ariaOwns = signal(null);
4134
4162
  this._groupDisabled = false;
4135
4163
  /** Value for the `aria-describedby` attribute of the inputs. */
4136
4164
  this._ariaDescribedBy = null;
@@ -4204,6 +4232,7 @@ class MatDateRangeInput {
4204
4232
  }
4205
4233
  ngOnDestroy() {
4206
4234
  this._closedSubscription.unsubscribe();
4235
+ this._openedSubscription.unsubscribe();
4207
4236
  this.stateChanges.complete();
4208
4237
  }
4209
4238
  /** Gets the date at which the calendar should start. */