@angular/material 19.0.0-next.9 → 19.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/autocomplete/_autocomplete-theme.scss +8 -4
  2. package/autocomplete/index.d.ts +5 -6
  3. package/badge/_badge-theme.scss +10 -6
  4. package/bottom-sheet/_bottom-sheet-theme.scss +8 -4
  5. package/button/_button-theme.scss +10 -6
  6. package/button/_fab-theme.scss +10 -6
  7. package/button/_icon-button-theme.scss +8 -4
  8. package/button/index.d.ts +1 -1
  9. package/button-toggle/_button-toggle-theme.scss +11 -6
  10. package/card/_card-theme.scss +8 -4
  11. package/card/index.d.ts +2 -3
  12. package/checkbox/_checkbox-theme.scss +10 -6
  13. package/chips/_chips-theme.scss +10 -6
  14. package/core/_core-theme.scss +4 -7
  15. package/core/_core.scss +2 -5
  16. package/core/option/_optgroup-theme.scss +8 -4
  17. package/core/option/_option-theme.scss +10 -6
  18. package/core/ripple/_ripple-theme.scss +8 -4
  19. package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.scss +10 -6
  20. package/core/theming/_config-validation.scss +4 -4
  21. package/core/theming/_definition.scss +12 -2
  22. package/core/tokens/_m3-system.scss +55 -39
  23. package/datepicker/_datepicker-theme.scss +10 -6
  24. package/datepicker/index.d.ts +32 -33
  25. package/dialog/_dialog-theme.scss +8 -4
  26. package/divider/_divider-theme.scss +8 -4
  27. package/expansion/_expansion-theme.scss +8 -4
  28. package/fesm2022/autocomplete/testing.mjs +2 -5
  29. package/fesm2022/autocomplete/testing.mjs.map +1 -1
  30. package/fesm2022/autocomplete.mjs +220 -141
  31. package/fesm2022/autocomplete.mjs.map +1 -1
  32. package/fesm2022/badge/testing.mjs +2 -5
  33. package/fesm2022/badge/testing.mjs.map +1 -1
  34. package/fesm2022/badge.mjs +41 -30
  35. package/fesm2022/badge.mjs.map +1 -1
  36. package/fesm2022/bottom-sheet/testing.mjs +1 -1
  37. package/fesm2022/bottom-sheet/testing.mjs.map +1 -1
  38. package/fesm2022/bottom-sheet.mjs +76 -54
  39. package/fesm2022/bottom-sheet.mjs.map +1 -1
  40. package/fesm2022/button/testing.mjs +2 -2
  41. package/fesm2022/button/testing.mjs.map +1 -1
  42. package/fesm2022/button-toggle/testing.mjs +4 -7
  43. package/fesm2022/button-toggle/testing.mjs.map +1 -1
  44. package/fesm2022/button-toggle.mjs +78 -40
  45. package/fesm2022/button-toggle.mjs.map +1 -1
  46. package/fesm2022/button.mjs +87 -60
  47. package/fesm2022/button.mjs.map +1 -1
  48. package/fesm2022/card/testing.mjs +3 -6
  49. package/fesm2022/card/testing.mjs.map +1 -1
  50. package/fesm2022/card.mjs +38 -40
  51. package/fesm2022/card.mjs.map +1 -1
  52. package/fesm2022/checkbox/testing.mjs +4 -7
  53. package/fesm2022/checkbox/testing.mjs.map +1 -1
  54. package/fesm2022/checkbox.mjs +99 -56
  55. package/fesm2022/checkbox.mjs.map +1 -1
  56. package/fesm2022/chips/testing.mjs +11 -14
  57. package/fesm2022/chips/testing.mjs.map +1 -1
  58. package/fesm2022/chips.mjs +303 -251
  59. package/fesm2022/chips.mjs.map +1 -1
  60. package/fesm2022/core/testing.mjs +5 -11
  61. package/fesm2022/core/testing.mjs.map +1 -1
  62. package/fesm2022/core.mjs +217 -160
  63. package/fesm2022/core.mjs.map +1 -1
  64. package/fesm2022/datepicker/testing.mjs +13 -22
  65. package/fesm2022/datepicker/testing.mjs.map +1 -1
  66. package/fesm2022/datepicker.mjs +788 -533
  67. package/fesm2022/datepicker.mjs.map +1 -1
  68. package/fesm2022/dialog/testing.mjs +15 -9
  69. package/fesm2022/dialog/testing.mjs.map +1 -1
  70. package/fesm2022/dialog.mjs +210 -140
  71. package/fesm2022/dialog.mjs.map +1 -1
  72. package/fesm2022/divider/testing.mjs +1 -1
  73. package/fesm2022/divider/testing.mjs.map +1 -1
  74. package/fesm2022/divider.mjs +7 -9
  75. package/fesm2022/divider.mjs.map +1 -1
  76. package/fesm2022/expansion/testing.mjs +7 -10
  77. package/fesm2022/expansion/testing.mjs.map +1 -1
  78. package/fesm2022/expansion.mjs +76 -65
  79. package/fesm2022/expansion.mjs.map +1 -1
  80. package/fesm2022/form-field/testing.mjs +12 -15
  81. package/fesm2022/form-field/testing.mjs.map +1 -1
  82. package/fesm2022/form-field.mjs +165 -111
  83. package/fesm2022/form-field.mjs.map +1 -1
  84. package/fesm2022/grid-list/testing.mjs +11 -17
  85. package/fesm2022/grid-list/testing.mjs.map +1 -1
  86. package/fesm2022/grid-list.mjs +65 -43
  87. package/fesm2022/grid-list.mjs.map +1 -1
  88. package/fesm2022/icon/testing.mjs +6 -6
  89. package/fesm2022/icon/testing.mjs.map +1 -1
  90. package/fesm2022/icon.mjs +62 -42
  91. package/fesm2022/icon.mjs.map +1 -1
  92. package/fesm2022/input/testing.mjs +3 -3
  93. package/fesm2022/input/testing.mjs.map +1 -1
  94. package/fesm2022/input.mjs +101 -69
  95. package/fesm2022/input.mjs.map +1 -1
  96. package/fesm2022/list/testing.mjs +21 -38
  97. package/fesm2022/list/testing.mjs.map +1 -1
  98. package/fesm2022/list.mjs +175 -164
  99. package/fesm2022/list.mjs.map +1 -1
  100. package/fesm2022/menu/testing.mjs +3 -6
  101. package/fesm2022/menu/testing.mjs.map +1 -1
  102. package/fesm2022/menu.mjs +171 -118
  103. package/fesm2022/menu.mjs.map +1 -1
  104. package/fesm2022/paginator/testing.mjs +10 -13
  105. package/fesm2022/paginator/testing.mjs.map +1 -1
  106. package/fesm2022/paginator.mjs +79 -54
  107. package/fesm2022/paginator.mjs.map +1 -1
  108. package/fesm2022/progress-bar/testing.mjs +1 -1
  109. package/fesm2022/progress-bar/testing.mjs.map +1 -1
  110. package/fesm2022/progress-bar.mjs +33 -32
  111. package/fesm2022/progress-bar.mjs.map +1 -1
  112. package/fesm2022/progress-spinner/testing.mjs +1 -1
  113. package/fesm2022/progress-spinner/testing.mjs.map +1 -1
  114. package/fesm2022/progress-spinner.mjs +25 -11
  115. package/fesm2022/progress-spinner.mjs.map +1 -1
  116. package/fesm2022/radio/testing.mjs +6 -12
  117. package/fesm2022/radio/testing.mjs.map +1 -1
  118. package/fesm2022/radio.mjs +119 -82
  119. package/fesm2022/radio.mjs.map +1 -1
  120. package/fesm2022/select/testing.mjs +6 -9
  121. package/fesm2022/select/testing.mjs.map +1 -1
  122. package/fesm2022/select.mjs +215 -177
  123. package/fesm2022/select.mjs.map +1 -1
  124. package/fesm2022/sidenav/testing.mjs +6 -6
  125. package/fesm2022/sidenav/testing.mjs.map +1 -1
  126. package/fesm2022/sidenav.mjs +125 -112
  127. package/fesm2022/sidenav.mjs.map +1 -1
  128. package/fesm2022/slide-toggle/testing.mjs +3 -6
  129. package/fesm2022/slide-toggle/testing.mjs.map +1 -1
  130. package/fesm2022/slide-toggle.mjs +72 -41
  131. package/fesm2022/slide-toggle.mjs.map +1 -1
  132. package/fesm2022/slider/testing.mjs +2 -2
  133. package/fesm2022/slider/testing.mjs.map +1 -1
  134. package/fesm2022/slider.mjs +255 -185
  135. package/fesm2022/slider.mjs.map +1 -1
  136. package/fesm2022/snack-bar/testing.mjs +4 -7
  137. package/fesm2022/snack-bar/testing.mjs.map +1 -1
  138. package/fesm2022/snack-bar.mjs +133 -98
  139. package/fesm2022/snack-bar.mjs.map +1 -1
  140. package/fesm2022/sort/testing.mjs +3 -6
  141. package/fesm2022/sort/testing.mjs.map +1 -1
  142. package/fesm2022/sort.mjs +89 -68
  143. package/fesm2022/sort.mjs.map +1 -1
  144. package/fesm2022/stepper/testing.mjs +4 -4
  145. package/fesm2022/stepper/testing.mjs.map +1 -1
  146. package/fesm2022/stepper.mjs +133 -95
  147. package/fesm2022/stepper.mjs.map +1 -1
  148. package/fesm2022/table/testing.mjs +13 -25
  149. package/fesm2022/table/testing.mjs.map +1 -1
  150. package/fesm2022/table.mjs +164 -159
  151. package/fesm2022/table.mjs.map +1 -1
  152. package/fesm2022/tabs/testing.mjs +5 -5
  153. package/fesm2022/tabs/testing.mjs.map +1 -1
  154. package/fesm2022/tabs.mjs +308 -225
  155. package/fesm2022/tabs.mjs.map +1 -1
  156. package/fesm2022/timepicker/testing.mjs +7 -16
  157. package/fesm2022/timepicker/testing.mjs.map +1 -1
  158. package/fesm2022/timepicker.mjs +152 -146
  159. package/fesm2022/timepicker.mjs.map +1 -1
  160. package/fesm2022/toolbar/testing.mjs +2 -5
  161. package/fesm2022/toolbar/testing.mjs.map +1 -1
  162. package/fesm2022/toolbar.mjs +22 -12
  163. package/fesm2022/toolbar.mjs.map +1 -1
  164. package/fesm2022/tooltip/testing.mjs +6 -9
  165. package/fesm2022/tooltip/testing.mjs.map +1 -1
  166. package/fesm2022/tooltip.mjs +93 -69
  167. package/fesm2022/tooltip.mjs.map +1 -1
  168. package/fesm2022/tree/testing.mjs +3 -6
  169. package/fesm2022/tree/testing.mjs.map +1 -1
  170. package/fesm2022/tree.mjs +48 -46
  171. package/fesm2022/tree.mjs.map +1 -1
  172. package/form-field/_form-field-theme.scss +9 -5
  173. package/form-field/index.d.ts +8 -9
  174. package/grid-list/_grid-list-theme.scss +8 -4
  175. package/icon/_icon-theme.scss +10 -6
  176. package/input/_input-theme.scss +8 -4
  177. package/list/_list-theme.scss +8 -4
  178. package/list/index.d.ts +20 -21
  179. package/menu/_menu-theme.scss +8 -4
  180. package/menu/index.d.ts +8 -9
  181. package/package.json +2 -2
  182. package/paginator/_paginator-theme.scss +8 -4
  183. package/prebuilt-themes/azure-blue.css +1 -1
  184. package/prebuilt-themes/cyan-orange.css +1 -1
  185. package/prebuilt-themes/deeppurple-amber.css +1 -1
  186. package/prebuilt-themes/indigo-pink.css +1 -1
  187. package/prebuilt-themes/magenta-violet.css +1 -1
  188. package/prebuilt-themes/pink-bluegrey.css +1 -1
  189. package/prebuilt-themes/purple-green.css +1 -1
  190. package/prebuilt-themes/rose-red.css +1 -1
  191. package/progress-bar/_progress-bar-theme.scss +11 -9
  192. package/progress-spinner/_progress-spinner-theme.scss +11 -9
  193. package/progress-spinner/index.d.ts +3 -4
  194. package/radio/_radio-theme.scss +10 -6
  195. package/radio/index.d.ts +2 -3
  196. package/schematics/ng-add/index.js +1 -1
  197. package/schematics/ng-add/index.mjs +1 -1
  198. package/schematics/ng-add/theming/create-custom-theme.js +1 -6
  199. package/schematics/ng-add/theming/create-custom-theme.mjs +1 -6
  200. package/schematics/ng-generate/theme-color/index_bundled.js +35 -9
  201. package/schematics/ng-generate/theme-color/index_bundled.js.map +2 -2
  202. package/schematics/ng-update/index_bundled.js +6 -1
  203. package/schematics/ng-update/index_bundled.js.map +1 -1
  204. package/select/_select-theme.scss +10 -6
  205. package/select/index.d.ts +6 -7
  206. package/sidenav/_sidenav-theme.scss +8 -4
  207. package/slide-toggle/_slide-toggle-theme.scss +10 -6
  208. package/slider/_slider-theme.scss +10 -6
  209. package/snack-bar/_snack-bar-theme.scss +10 -6
  210. package/sort/_sort-theme.scss +8 -4
  211. package/stepper/_stepper-theme.scss +10 -6
  212. package/stepper/index.d.ts +14 -15
  213. package/table/_table-theme.scss +8 -4
  214. package/tabs/_tabs-theme.scss +10 -6
  215. package/timepicker/_timepicker-theme.scss +10 -6
  216. package/toolbar/_toolbar-theme.scss +10 -6
  217. package/tooltip/_tooltip-theme.scss +8 -4
  218. package/tooltip/index.d.ts +5 -6
  219. package/tree/_tree-theme.scss +8 -4
@@ -1,7 +1,6 @@
1
1
  import { CdkMonitorFocus, CdkTrapFocus, A11yModule } from '@angular/cdk/a11y';
2
2
  import { Overlay, FlexibleConnectedPositionStrategy, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
3
3
  import { ComponentPortal, CdkPortalOutlet, TemplatePortal, PortalModule } from '@angular/cdk/portal';
4
- import { NgClass, DOCUMENT, CommonModule } from '@angular/common';
5
4
  import * as i0 from '@angular/core';
6
5
  import { Injectable, inject, ElementRef, NgZone, EventEmitter, Injector, afterNextRender, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, Optional, SkipSelf, InjectionToken, ChangeDetectorRef, ViewChild, ViewContainerRef, booleanAttribute, Directive, forwardRef, signal, HostAttributeToken, ContentChild, TemplateRef, NgModule } from '@angular/core';
7
6
  import { MatButton, MatIconButton, MatButtonModule } from '@angular/material/button';
@@ -12,7 +11,8 @@ import { Subject, Subscription, merge, of } from 'rxjs';
12
11
  import { ESCAPE, hasModifierKey, SPACE, ENTER, PAGE_DOWN, PAGE_UP, END, HOME, DOWN_ARROW, UP_ARROW, RIGHT_ARROW, LEFT_ARROW, BACKSPACE } from '@angular/cdk/keycodes';
13
12
  import { Directionality } from '@angular/cdk/bidi';
14
13
  import { normalizePassiveListenerOptions, Platform, _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';
15
- import { _CdkPrivateStyleLoader } from '@angular/cdk/private';
14
+ import { NgClass, DOCUMENT } from '@angular/common';
15
+ import { _CdkPrivateStyleLoader, _VisuallyHiddenLoader } from '@angular/cdk/private';
16
16
  import { startWith, take, filter } from 'rxjs/operators';
17
17
  import { coerceStringArray } from '@angular/cdk/coercion';
18
18
  import { trigger, transition, animate, keyframes, style, state } from '@angular/animations';
@@ -29,47 +29,45 @@ function createMissingDateImplError(provider) {
29
29
 
30
30
  /** Datepicker data that requires internationalization. */
31
31
  class MatDatepickerIntl {
32
- constructor() {
33
- /**
34
- * Stream that emits whenever the labels here are changed. Use this to notify
35
- * components if the labels have changed after initialization.
36
- */
37
- this.changes = new Subject();
38
- /** A label for the calendar popup (used by screen readers). */
39
- this.calendarLabel = 'Calendar';
40
- /** A label for the button used to open the calendar popup (used by screen readers). */
41
- this.openCalendarLabel = 'Open calendar';
42
- /** Label for the button used to close the calendar popup. */
43
- this.closeCalendarLabel = 'Close calendar';
44
- /** A label for the previous month button (used by screen readers). */
45
- this.prevMonthLabel = 'Previous month';
46
- /** A label for the next month button (used by screen readers). */
47
- this.nextMonthLabel = 'Next month';
48
- /** A label for the previous year button (used by screen readers). */
49
- this.prevYearLabel = 'Previous year';
50
- /** A label for the next year button (used by screen readers). */
51
- this.nextYearLabel = 'Next year';
52
- /** A label for the previous multi-year button (used by screen readers). */
53
- this.prevMultiYearLabel = 'Previous 24 years';
54
- /** A label for the next multi-year button (used by screen readers). */
55
- this.nextMultiYearLabel = 'Next 24 years';
56
- /** A label for the 'switch to month view' button (used by screen readers). */
57
- this.switchToMonthViewLabel = 'Choose date';
58
- /** A label for the 'switch to year view' button (used by screen readers). */
59
- this.switchToMultiYearViewLabel = 'Choose month and year';
60
- /**
61
- * A label for the first date of a range of dates (used by screen readers).
62
- * @deprecated Provide your own internationalization string.
63
- * @breaking-change 17.0.0
64
- */
65
- this.startDateLabel = 'Start date';
66
- /**
67
- * A label for the last date of a range of dates (used by screen readers).
68
- * @deprecated Provide your own internationalization string.
69
- * @breaking-change 17.0.0
70
- */
71
- this.endDateLabel = 'End date';
72
- }
32
+ /**
33
+ * Stream that emits whenever the labels here are changed. Use this to notify
34
+ * components if the labels have changed after initialization.
35
+ */
36
+ changes = new Subject();
37
+ /** A label for the calendar popup (used by screen readers). */
38
+ calendarLabel = 'Calendar';
39
+ /** A label for the button used to open the calendar popup (used by screen readers). */
40
+ openCalendarLabel = 'Open calendar';
41
+ /** Label for the button used to close the calendar popup. */
42
+ closeCalendarLabel = 'Close calendar';
43
+ /** A label for the previous month button (used by screen readers). */
44
+ prevMonthLabel = 'Previous month';
45
+ /** A label for the next month button (used by screen readers). */
46
+ nextMonthLabel = 'Next month';
47
+ /** A label for the previous year button (used by screen readers). */
48
+ prevYearLabel = 'Previous year';
49
+ /** A label for the next year button (used by screen readers). */
50
+ nextYearLabel = 'Next year';
51
+ /** A label for the previous multi-year button (used by screen readers). */
52
+ prevMultiYearLabel = 'Previous 24 years';
53
+ /** A label for the next multi-year button (used by screen readers). */
54
+ nextMultiYearLabel = 'Next 24 years';
55
+ /** A label for the 'switch to month view' button (used by screen readers). */
56
+ switchToMonthViewLabel = 'Choose date';
57
+ /** A label for the 'switch to year view' button (used by screen readers). */
58
+ switchToMultiYearViewLabel = 'Choose month and year';
59
+ /**
60
+ * A label for the first date of a range of dates (used by screen readers).
61
+ * @deprecated Provide your own internationalization string.
62
+ * @breaking-change 17.0.0
63
+ */
64
+ startDateLabel = 'Start date';
65
+ /**
66
+ * A label for the last date of a range of dates (used by screen readers).
67
+ * @deprecated Provide your own internationalization string.
68
+ * @breaking-change 17.0.0
69
+ */
70
+ endDateLabel = 'End date';
73
71
  /** Formats a range of years (used for visuals). */
74
72
  formatYearRange(start, end) {
75
73
  return `${start} \u2013 ${end}`;
@@ -78,8 +76,8 @@ class MatDatepickerIntl {
78
76
  formatYearRangeLabel(start, end) {
79
77
  return `${start} to ${end}`;
80
78
  }
81
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
82
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerIntl, providedIn: 'root' }); }
79
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
80
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerIntl, providedIn: 'root' });
83
81
  }
84
82
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerIntl, decorators: [{
85
83
  type: Injectable,
@@ -92,6 +90,14 @@ let uniqueIdCounter$1 = 0;
92
90
  * @docs-private
93
91
  */
94
92
  class MatCalendarCell {
93
+ value;
94
+ displayValue;
95
+ ariaLabel;
96
+ enabled;
97
+ cssClasses;
98
+ compareValue;
99
+ rawValue;
100
+ id = uniqueIdCounter$1++;
95
101
  constructor(value, displayValue, ariaLabel, enabled, cssClasses = {}, compareValue = value, rawValue) {
96
102
  this.value = value;
97
103
  this.displayValue = displayValue;
@@ -100,7 +106,6 @@ class MatCalendarCell {
100
106
  this.cssClasses = cssClasses;
101
107
  this.compareValue = compareValue;
102
108
  this.rawValue = rawValue;
103
- this.id = uniqueIdCounter$1++;
104
109
  }
105
110
  }
106
111
  let calendarBodyId = 1;
@@ -121,157 +126,83 @@ const passiveEventOptions = normalizePassiveListenerOptions({ passive: true });
121
126
  * @docs-private
122
127
  */
123
128
  class MatCalendarBody {
129
+ _elementRef = inject(ElementRef);
130
+ _ngZone = inject(NgZone);
131
+ _platform = inject(Platform);
132
+ /**
133
+ * Used to skip the next focus event when rendering the preview range.
134
+ * We need a flag like this, because some browsers fire focus events asynchronously.
135
+ */
136
+ _skipNextFocus;
137
+ /**
138
+ * Used to focus the active cell after change detection has run.
139
+ */
140
+ _focusActiveCellAfterViewChecked = false;
141
+ /** The label for the table. (e.g. "Jan 2017"). */
142
+ label;
143
+ /** The cells to display in the table. */
144
+ rows;
145
+ /** The value in the table that corresponds to today. */
146
+ todayValue;
147
+ /** Start value of the selected date range. */
148
+ startValue;
149
+ /** End value of the selected date range. */
150
+ endValue;
151
+ /** The minimum number of free cells needed to fit the label in the first row. */
152
+ labelMinRequiredCells;
153
+ /** The number of columns in the table. */
154
+ numCols = 7;
155
+ /** The cell number of the active cell in the table. */
156
+ activeCell = 0;
124
157
  ngAfterViewChecked() {
125
158
  if (this._focusActiveCellAfterViewChecked) {
126
159
  this._focusActiveCell();
127
160
  this._focusActiveCellAfterViewChecked = false;
128
161
  }
129
162
  }
163
+ /** Whether a range is being selected. */
164
+ isRange = false;
165
+ /**
166
+ * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be
167
+ * maintained even as the table resizes.
168
+ */
169
+ cellAspectRatio = 1;
170
+ /** Start of the comparison range. */
171
+ comparisonStart;
172
+ /** End of the comparison range. */
173
+ comparisonEnd;
174
+ /** Start of the preview range. */
175
+ previewStart = null;
176
+ /** End of the preview range. */
177
+ previewEnd = null;
178
+ /** ARIA Accessible name of the `<input matStartDate/>` */
179
+ startDateAccessibleName;
180
+ /** ARIA Accessible name of the `<input matEndDate/>` */
181
+ endDateAccessibleName;
182
+ /** Emits when a new value is selected. */
183
+ selectedValueChange = new EventEmitter();
184
+ /** Emits when the preview has changed as a result of a user action. */
185
+ previewChange = new EventEmitter();
186
+ activeDateChange = new EventEmitter();
187
+ /** Emits the date at the possible start of a drag event. */
188
+ dragStarted = new EventEmitter();
189
+ /** Emits the date at the conclusion of a drag, or null if mouse was not released on a date. */
190
+ dragEnded = new EventEmitter();
191
+ /** The number of blank cells to put at the beginning for the first row. */
192
+ _firstRowOffset;
193
+ /** Padding for the individual date cells. */
194
+ _cellPadding;
195
+ /** Width of an individual cell. */
196
+ _cellWidth;
197
+ _didDragSinceMouseDown = false;
198
+ _injector = inject(Injector);
199
+ /**
200
+ * Tracking function for rows based on their identity. Ideally we would use some sort of
201
+ * key on the row, but that would require a breaking change for the `rows` input. We don't
202
+ * use the built-in identity tracking, because it logs warnings.
203
+ */
204
+ _trackRow = (row) => row;
130
205
  constructor() {
131
- this._elementRef = inject(ElementRef);
132
- this._ngZone = inject(NgZone);
133
- this._platform = inject(Platform);
134
- /**
135
- * Used to focus the active cell after change detection has run.
136
- */
137
- this._focusActiveCellAfterViewChecked = false;
138
- /** The number of columns in the table. */
139
- this.numCols = 7;
140
- /** The cell number of the active cell in the table. */
141
- this.activeCell = 0;
142
- /** Whether a range is being selected. */
143
- this.isRange = false;
144
- /**
145
- * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be
146
- * maintained even as the table resizes.
147
- */
148
- this.cellAspectRatio = 1;
149
- /** Start of the preview range. */
150
- this.previewStart = null;
151
- /** End of the preview range. */
152
- this.previewEnd = null;
153
- /** Emits when a new value is selected. */
154
- this.selectedValueChange = new EventEmitter();
155
- /** Emits when the preview has changed as a result of a user action. */
156
- this.previewChange = new EventEmitter();
157
- this.activeDateChange = new EventEmitter();
158
- /** Emits the date at the possible start of a drag event. */
159
- this.dragStarted = new EventEmitter();
160
- /** Emits the date at the conclusion of a drag, or null if mouse was not released on a date. */
161
- this.dragEnded = new EventEmitter();
162
- this._didDragSinceMouseDown = false;
163
- this._injector = inject(Injector);
164
- /**
165
- * Tracking function for rows based on their identity. Ideally we would use some sort of
166
- * key on the row, but that would require a breaking change for the `rows` input. We don't
167
- * use the built-in identity tracking, because it logs warnings.
168
- */
169
- this._trackRow = (row) => row;
170
- /**
171
- * Event handler for when the user enters an element
172
- * inside the calendar body (e.g. by hovering in or focus).
173
- */
174
- this._enterHandler = (event) => {
175
- if (this._skipNextFocus && event.type === 'focus') {
176
- this._skipNextFocus = false;
177
- return;
178
- }
179
- // We only need to hit the zone when we're selecting a range.
180
- if (event.target && this.isRange) {
181
- const cell = this._getCellFromElement(event.target);
182
- if (cell) {
183
- this._ngZone.run(() => this.previewChange.emit({ value: cell.enabled ? cell : null, event }));
184
- }
185
- }
186
- };
187
- this._touchmoveHandler = (event) => {
188
- if (!this.isRange)
189
- return;
190
- const target = getActualTouchTarget(event);
191
- const cell = target ? this._getCellFromElement(target) : null;
192
- if (target !== event.target) {
193
- this._didDragSinceMouseDown = true;
194
- }
195
- // If the initial target of the touch is a date cell, prevent default so
196
- // that the move is not handled as a scroll.
197
- if (getCellElement(event.target)) {
198
- event.preventDefault();
199
- }
200
- this._ngZone.run(() => this.previewChange.emit({ value: cell?.enabled ? cell : null, event }));
201
- };
202
- /**
203
- * Event handler for when the user's pointer leaves an element
204
- * inside the calendar body (e.g. by hovering out or blurring).
205
- */
206
- this._leaveHandler = (event) => {
207
- // We only need to hit the zone when we're selecting a range.
208
- if (this.previewEnd !== null && this.isRange) {
209
- if (event.type !== 'blur') {
210
- this._didDragSinceMouseDown = true;
211
- }
212
- // Only reset the preview end value when leaving cells. This looks better, because
213
- // we have a gap between the cells and the rows and we don't want to remove the
214
- // range just for it to show up again when the user moves a few pixels to the side.
215
- if (event.target &&
216
- this._getCellFromElement(event.target) &&
217
- !(event.relatedTarget &&
218
- this._getCellFromElement(event.relatedTarget))) {
219
- this._ngZone.run(() => this.previewChange.emit({ value: null, event }));
220
- }
221
- }
222
- };
223
- /**
224
- * Triggered on mousedown or touchstart on a date cell.
225
- * Respsonsible for starting a drag sequence.
226
- */
227
- this._mousedownHandler = (event) => {
228
- if (!this.isRange)
229
- return;
230
- this._didDragSinceMouseDown = false;
231
- // Begin a drag if a cell within the current range was targeted.
232
- const cell = event.target && this._getCellFromElement(event.target);
233
- if (!cell || !this._isInRange(cell.compareValue)) {
234
- return;
235
- }
236
- this._ngZone.run(() => {
237
- this.dragStarted.emit({
238
- value: cell.rawValue,
239
- event,
240
- });
241
- });
242
- };
243
- /** Triggered on mouseup anywhere. Respsonsible for ending a drag sequence. */
244
- this._mouseupHandler = (event) => {
245
- if (!this.isRange)
246
- return;
247
- const cellElement = getCellElement(event.target);
248
- if (!cellElement) {
249
- // Mouseup happened outside of datepicker. Cancel drag.
250
- this._ngZone.run(() => {
251
- this.dragEnded.emit({ value: null, event });
252
- });
253
- return;
254
- }
255
- if (cellElement.closest('.mat-calendar-body') !== this._elementRef.nativeElement) {
256
- // Mouseup happened inside a different month instance.
257
- // Allow it to handle the event.
258
- return;
259
- }
260
- this._ngZone.run(() => {
261
- const cell = this._getCellFromElement(cellElement);
262
- this.dragEnded.emit({ value: cell?.rawValue ?? null, event });
263
- });
264
- };
265
- /** Triggered on touchend anywhere. Respsonsible for ending a drag sequence. */
266
- this._touchendHandler = (event) => {
267
- const target = getActualTouchTarget(event);
268
- if (target) {
269
- this._mouseupHandler({ target });
270
- }
271
- };
272
- this._id = `mat-calendar-body-${calendarBodyId++}`;
273
- this._startDateLabelId = `${this._id}-start-date`;
274
- this._endDateLabelId = `${this._id}-end-date`;
275
206
  inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);
276
207
  this._ngZone.runOutsideAngular(() => {
277
208
  const element = this._elementRef.nativeElement;
@@ -475,6 +406,108 @@ class MatCalendarBody {
475
406
  }
476
407
  return null;
477
408
  }
409
+ /**
410
+ * Event handler for when the user enters an element
411
+ * inside the calendar body (e.g. by hovering in or focus).
412
+ */
413
+ _enterHandler = (event) => {
414
+ if (this._skipNextFocus && event.type === 'focus') {
415
+ this._skipNextFocus = false;
416
+ return;
417
+ }
418
+ // We only need to hit the zone when we're selecting a range.
419
+ if (event.target && this.isRange) {
420
+ const cell = this._getCellFromElement(event.target);
421
+ if (cell) {
422
+ this._ngZone.run(() => this.previewChange.emit({ value: cell.enabled ? cell : null, event }));
423
+ }
424
+ }
425
+ };
426
+ _touchmoveHandler = (event) => {
427
+ if (!this.isRange)
428
+ return;
429
+ const target = getActualTouchTarget(event);
430
+ const cell = target ? this._getCellFromElement(target) : null;
431
+ if (target !== event.target) {
432
+ this._didDragSinceMouseDown = true;
433
+ }
434
+ // If the initial target of the touch is a date cell, prevent default so
435
+ // that the move is not handled as a scroll.
436
+ if (getCellElement(event.target)) {
437
+ event.preventDefault();
438
+ }
439
+ this._ngZone.run(() => this.previewChange.emit({ value: cell?.enabled ? cell : null, event }));
440
+ };
441
+ /**
442
+ * Event handler for when the user's pointer leaves an element
443
+ * inside the calendar body (e.g. by hovering out or blurring).
444
+ */
445
+ _leaveHandler = (event) => {
446
+ // We only need to hit the zone when we're selecting a range.
447
+ if (this.previewEnd !== null && this.isRange) {
448
+ if (event.type !== 'blur') {
449
+ this._didDragSinceMouseDown = true;
450
+ }
451
+ // Only reset the preview end value when leaving cells. This looks better, because
452
+ // we have a gap between the cells and the rows and we don't want to remove the
453
+ // range just for it to show up again when the user moves a few pixels to the side.
454
+ if (event.target &&
455
+ this._getCellFromElement(event.target) &&
456
+ !(event.relatedTarget &&
457
+ this._getCellFromElement(event.relatedTarget))) {
458
+ this._ngZone.run(() => this.previewChange.emit({ value: null, event }));
459
+ }
460
+ }
461
+ };
462
+ /**
463
+ * Triggered on mousedown or touchstart on a date cell.
464
+ * Respsonsible for starting a drag sequence.
465
+ */
466
+ _mousedownHandler = (event) => {
467
+ if (!this.isRange)
468
+ return;
469
+ this._didDragSinceMouseDown = false;
470
+ // Begin a drag if a cell within the current range was targeted.
471
+ const cell = event.target && this._getCellFromElement(event.target);
472
+ if (!cell || !this._isInRange(cell.compareValue)) {
473
+ return;
474
+ }
475
+ this._ngZone.run(() => {
476
+ this.dragStarted.emit({
477
+ value: cell.rawValue,
478
+ event,
479
+ });
480
+ });
481
+ };
482
+ /** Triggered on mouseup anywhere. Respsonsible for ending a drag sequence. */
483
+ _mouseupHandler = (event) => {
484
+ if (!this.isRange)
485
+ return;
486
+ const cellElement = getCellElement(event.target);
487
+ if (!cellElement) {
488
+ // Mouseup happened outside of datepicker. Cancel drag.
489
+ this._ngZone.run(() => {
490
+ this.dragEnded.emit({ value: null, event });
491
+ });
492
+ return;
493
+ }
494
+ if (cellElement.closest('.mat-calendar-body') !== this._elementRef.nativeElement) {
495
+ // Mouseup happened inside a different month instance.
496
+ // Allow it to handle the event.
497
+ return;
498
+ }
499
+ this._ngZone.run(() => {
500
+ const cell = this._getCellFromElement(cellElement);
501
+ this.dragEnded.emit({ value: cell?.rawValue ?? null, event });
502
+ });
503
+ };
504
+ /** Triggered on touchend anywhere. Respsonsible for ending a drag sequence. */
505
+ _touchendHandler = (event) => {
506
+ const target = getActualTouchTarget(event);
507
+ if (target) {
508
+ this._mouseupHandler({ target });
509
+ }
510
+ };
478
511
  /** Finds the MatCalendarCell that corresponds to a DOM node. */
479
512
  _getCellFromElement(element) {
480
513
  const cell = getCellElement(element);
@@ -487,8 +520,11 @@ class MatCalendarBody {
487
520
  }
488
521
  return null;
489
522
  }
490
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendarBody, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
491
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-next.10", type: MatCalendarBody, isStandalone: true, selector: "[mat-calendar-body]", inputs: { label: "label", rows: "rows", todayValue: "todayValue", startValue: "startValue", endValue: "endValue", labelMinRequiredCells: "labelMinRequiredCells", numCols: "numCols", activeCell: "activeCell", isRange: "isRange", cellAspectRatio: "cellAspectRatio", comparisonStart: "comparisonStart", comparisonEnd: "comparisonEnd", previewStart: "previewStart", previewEnd: "previewEnd", startDateAccessibleName: "startDateAccessibleName", endDateAccessibleName: "endDateAccessibleName" }, outputs: { selectedValueChange: "selectedValueChange", previewChange: "previewChange", activeDateChange: "activeDateChange", dragStarted: "dragStarted", dragEnded: "dragEnded" }, host: { classAttribute: "mat-calendar-body" }, exportAs: ["matCalendarBody"], usesOnChanges: true, ngImport: i0, template: "<!--\n If there's not enough space in the first row, create a separate label row. We mark this row as\n aria-hidden because we don't want it to be read out as one of the weeks in the month.\n-->\n@if (_firstRowOffset < labelMinRequiredCells) {\n <tr aria-hidden=\"true\">\n <td class=\"mat-calendar-body-label\"\n [attr.colspan]=\"numCols\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\">\n {{label}}\n </td>\n </tr>\n}\n\n<!-- Create the first row separately so we can include a special spacer cell. -->\n@for (row of rows; track _trackRow(row); let rowIndex = $index) {\n <tr role=\"row\">\n <!--\n This cell is purely decorative, but we can't put `aria-hidden` or `role=\"presentation\"` on it,\n because it throws off the week days for the rest of the row on NVDA. The aspect ratio of the\n table cells is maintained by setting the top and bottom padding as a percentage of the width\n (a variant of the trick described here: https://www.w3schools.com/howto/howto_css_aspect_ratio.asp).\n -->\n @if (rowIndex === 0 && _firstRowOffset) {\n <td\n class=\"mat-calendar-body-label\"\n [attr.colspan]=\"_firstRowOffset\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\">\n {{_firstRowOffset >= labelMinRequiredCells ? label : ''}}\n </td>\n }\n <!--\n Each gridcell in the calendar contains a button, which signals to assistive technology that the\n cell is interactable, as well as the selection state via `aria-pressed`. See #23476 for\n background.\n -->\n @for (item of row; track item.id; let colIndex = $index) {\n <td\n role=\"gridcell\"\n class=\"mat-calendar-body-cell-container\"\n [style.width]=\"_cellWidth\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\"\n [attr.data-mat-row]=\"rowIndex\"\n [attr.data-mat-col]=\"colIndex\"\n >\n <button\n type=\"button\"\n class=\"mat-calendar-body-cell\"\n [ngClass]=\"item.cssClasses\"\n [tabindex]=\"_isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [class.mat-calendar-body-disabled]=\"!item.enabled\"\n [class.mat-calendar-body-active]=\"_isActiveCell(rowIndex, colIndex)\"\n [class.mat-calendar-body-range-start]=\"_isRangeStart(item.compareValue)\"\n [class.mat-calendar-body-range-end]=\"_isRangeEnd(item.compareValue)\"\n [class.mat-calendar-body-in-range]=\"_isInRange(item.compareValue)\"\n [class.mat-calendar-body-comparison-bridge-start]=\"_isComparisonBridgeStart(item.compareValue, rowIndex, colIndex)\"\n [class.mat-calendar-body-comparison-bridge-end]=\"_isComparisonBridgeEnd(item.compareValue, rowIndex, colIndex)\"\n [class.mat-calendar-body-comparison-start]=\"_isComparisonStart(item.compareValue)\"\n [class.mat-calendar-body-comparison-end]=\"_isComparisonEnd(item.compareValue)\"\n [class.mat-calendar-body-in-comparison-range]=\"_isInComparisonRange(item.compareValue)\"\n [class.mat-calendar-body-preview-start]=\"_isPreviewStart(item.compareValue)\"\n [class.mat-calendar-body-preview-end]=\"_isPreviewEnd(item.compareValue)\"\n [class.mat-calendar-body-in-preview]=\"_isInPreview(item.compareValue)\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-disabled]=\"!item.enabled || null\"\n [attr.aria-pressed]=\"_isSelected(item.compareValue)\"\n [attr.aria-current]=\"todayValue === item.compareValue ? 'date' : null\"\n [attr.aria-describedby]=\"_getDescribedby(item.compareValue)\"\n (click)=\"_cellClicked(item, $event)\"\n (focus)=\"_emitActiveDateChange(item, $event)\">\n <span class=\"mat-calendar-body-cell-content mat-focus-indicator\"\n [class.mat-calendar-body-selected]=\"_isSelected(item.compareValue)\"\n [class.mat-calendar-body-comparison-identical]=\"_isComparisonIdentical(item.compareValue)\"\n [class.mat-calendar-body-today]=\"todayValue === item.compareValue\">\n {{item.displayValue}}\n </span>\n <span class=\"mat-calendar-body-cell-preview\" aria-hidden=\"true\"></span>\n </button>\n </td>\n }\n </tr>\n}\n\n<span [id]=\"_startDateLabelId\" class=\"mat-calendar-body-hidden-label\">\n {{startDateAccessibleName}}\n</span>\n<span [id]=\"_endDateLabelId\" class=\"mat-calendar-body-hidden-label\">\n {{endDateAccessibleName}}\n</span>\n", styles: [".mat-calendar-body{min-width:224px}.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:var(--mat-datepicker-calendar-date-today-outline-color, var(--mat-sys-primary))}.mat-calendar-body-label{height:0;line-height:0;text-align:start;padding-left:4.7142857143%;padding-right:4.7142857143%;font-size:var(--mat-datepicker-calendar-body-label-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-datepicker-calendar-body-label-text-weight, var(--mat-sys-title-small-weight));color:var(--mat-datepicker-calendar-body-label-text-color, var(--mat-sys-on-surface))}.mat-calendar-body-hidden-label{display:none}.mat-calendar-body-cell-container{position:relative;height:0;line-height:0}.mat-calendar-body-cell{position:absolute;top:0;left:0;width:100%;height:100%;background:none;text-align:center;outline:none;font-family:inherit;margin:0;font-family:var(--mat-datepicker-calendar-text-font, var(--mat-sys-body-medium-font));font-size:var(--mat-datepicker-calendar-text-size, var(--mat-sys-body-medium-size));-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-calendar-body-cell::-moz-focus-inner{border:0}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-cell-preview{content:\"\";position:absolute;top:5%;left:0;z-index:0;box-sizing:border-box;display:block;height:90%;width:100%}.mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-start::after,.mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,.mat-calendar-body-comparison-start::after,.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,[dir=rtl] .mat-calendar-body-comparison-start::after,[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:0;border-radius:0;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,.mat-calendar-body-comparison-end::after,.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}[dir=rtl] .mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,[dir=rtl] .mat-calendar-body-comparison-end::after,[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{left:5%;border-radius:0;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-comparison-bridge-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-bridge-end.mat-calendar-body-range-start::after{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end.mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-end.mat-calendar-body-range-start::after{width:90%}.mat-calendar-body-in-preview{color:var(--mat-datepicker-calendar-date-preview-state-outline-color, var(--mat-sys-primary))}.mat-calendar-body-in-preview .mat-calendar-body-cell-preview{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:0;border-right:dashed 1px}.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:0;border-left:dashed 1px}.mat-calendar-body-disabled{cursor:default}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){color:var(--mat-datepicker-calendar-date-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:var(--mat-datepicker-calendar-date-today-disabled-state-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mat-calendar-body-disabled{opacity:.5}}.mat-calendar-body-cell-content{top:5%;left:5%;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px;color:var(--mat-datepicker-calendar-date-text-color, var(--mat-sys-on-surface));border-color:var(--mat-datepicker-calendar-date-outline-color, transparent)}.mat-calendar-body-cell-content.mat-focus-indicator{position:absolute}@media(forced-colors: active){.mat-calendar-body-cell-content{border:none}}.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--mat-datepicker-calendar-date-focus-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent))}@media(hover: hover){.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--mat-datepicker-calendar-date-hover-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}}.mat-calendar-body-selected{background-color:var(--mat-datepicker-calendar-date-selected-state-background-color, var(--mat-sys-primary));color:var(--mat-datepicker-calendar-date-selected-state-text-color, var(--mat-sys-on-primary))}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:var(--mat-datepicker-calendar-date-selected-disabled-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-calendar-body-selected.mat-calendar-body-today{box-shadow:inset 0 0 0 1px var(--mat-datepicker-calendar-date-today-selected-state-outline-color, var(--mat-sys-primary))}.mat-calendar-body-in-range::before{background:var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-sys-primary-container))}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container))}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container))}.mat-calendar-body-comparison-bridge-start::before,[dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-sys-primary-container)) 50%, var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container)) 50%)}.mat-calendar-body-comparison-bridge-end::before,[dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-sys-primary-container)) 50%, var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container)) 50%)}.mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:var(--mat-datepicker-calendar-date-in-overlap-range-state-background-color, var(--mat-sys-secondary-container))}.mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:var(--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color, var(--mat-sys-secondary))}@media(forced-colors: active){.mat-datepicker-popup:not(:empty),.mat-calendar-body-cell:not(.mat-calendar-body-in-range) .mat-calendar-body-selected{outline:solid 1px}.mat-calendar-body-today{outline:dotted 1px}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-selected{background:none}.mat-calendar-body-in-range::before,.mat-calendar-body-comparison-bridge-start::before,.mat-calendar-body-comparison-bridge-end::before{border-top:solid 1px;border-bottom:solid 1px}.mat-calendar-body-range-start::before{border-left:solid 1px}[dir=rtl] .mat-calendar-body-range-start::before{border-left:0;border-right:solid 1px}.mat-calendar-body-range-end::before{border-right:solid 1px}[dir=rtl] .mat-calendar-body-range-end::before{border-right:0;border-left:solid 1px}.mat-calendar-body-in-comparison-range::before{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-comparison-start::before{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-comparison-start::before{border-left:0;border-right:dashed 1px}.mat-calendar-body-comparison-end::before{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-comparison-end::before{border-right:0;border-left:dashed 1px}}"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
523
+ _id = `mat-calendar-body-${calendarBodyId++}`;
524
+ _startDateLabelId = `${this._id}-start-date`;
525
+ _endDateLabelId = `${this._id}-end-date`;
526
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendarBody, deps: [], target: i0.ɵɵFactoryTarget.Component });
527
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-next.10", type: MatCalendarBody, isStandalone: true, selector: "[mat-calendar-body]", inputs: { label: "label", rows: "rows", todayValue: "todayValue", startValue: "startValue", endValue: "endValue", labelMinRequiredCells: "labelMinRequiredCells", numCols: "numCols", activeCell: "activeCell", isRange: "isRange", cellAspectRatio: "cellAspectRatio", comparisonStart: "comparisonStart", comparisonEnd: "comparisonEnd", previewStart: "previewStart", previewEnd: "previewEnd", startDateAccessibleName: "startDateAccessibleName", endDateAccessibleName: "endDateAccessibleName" }, outputs: { selectedValueChange: "selectedValueChange", previewChange: "previewChange", activeDateChange: "activeDateChange", dragStarted: "dragStarted", dragEnded: "dragEnded" }, host: { classAttribute: "mat-calendar-body" }, exportAs: ["matCalendarBody"], usesOnChanges: true, ngImport: i0, template: "<!--\n If there's not enough space in the first row, create a separate label row. We mark this row as\n aria-hidden because we don't want it to be read out as one of the weeks in the month.\n-->\n@if (_firstRowOffset < labelMinRequiredCells) {\n <tr aria-hidden=\"true\">\n <td class=\"mat-calendar-body-label\"\n [attr.colspan]=\"numCols\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\">\n {{label}}\n </td>\n </tr>\n}\n\n<!-- Create the first row separately so we can include a special spacer cell. -->\n@for (row of rows; track _trackRow(row); let rowIndex = $index) {\n <tr role=\"row\">\n <!--\n This cell is purely decorative, but we can't put `aria-hidden` or `role=\"presentation\"` on it,\n because it throws off the week days for the rest of the row on NVDA. The aspect ratio of the\n table cells is maintained by setting the top and bottom padding as a percentage of the width\n (a variant of the trick described here: https://www.w3schools.com/howto/howto_css_aspect_ratio.asp).\n -->\n @if (rowIndex === 0 && _firstRowOffset) {\n <td\n class=\"mat-calendar-body-label\"\n [attr.colspan]=\"_firstRowOffset\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\">\n {{_firstRowOffset >= labelMinRequiredCells ? label : ''}}\n </td>\n }\n <!--\n Each gridcell in the calendar contains a button, which signals to assistive technology that the\n cell is interactable, as well as the selection state via `aria-pressed`. See #23476 for\n background.\n -->\n @for (item of row; track item.id; let colIndex = $index) {\n <td\n role=\"gridcell\"\n class=\"mat-calendar-body-cell-container\"\n [style.width]=\"_cellWidth\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\"\n [attr.data-mat-row]=\"rowIndex\"\n [attr.data-mat-col]=\"colIndex\"\n >\n <button\n type=\"button\"\n class=\"mat-calendar-body-cell\"\n [ngClass]=\"item.cssClasses\"\n [tabindex]=\"_isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [class.mat-calendar-body-disabled]=\"!item.enabled\"\n [class.mat-calendar-body-active]=\"_isActiveCell(rowIndex, colIndex)\"\n [class.mat-calendar-body-range-start]=\"_isRangeStart(item.compareValue)\"\n [class.mat-calendar-body-range-end]=\"_isRangeEnd(item.compareValue)\"\n [class.mat-calendar-body-in-range]=\"_isInRange(item.compareValue)\"\n [class.mat-calendar-body-comparison-bridge-start]=\"_isComparisonBridgeStart(item.compareValue, rowIndex, colIndex)\"\n [class.mat-calendar-body-comparison-bridge-end]=\"_isComparisonBridgeEnd(item.compareValue, rowIndex, colIndex)\"\n [class.mat-calendar-body-comparison-start]=\"_isComparisonStart(item.compareValue)\"\n [class.mat-calendar-body-comparison-end]=\"_isComparisonEnd(item.compareValue)\"\n [class.mat-calendar-body-in-comparison-range]=\"_isInComparisonRange(item.compareValue)\"\n [class.mat-calendar-body-preview-start]=\"_isPreviewStart(item.compareValue)\"\n [class.mat-calendar-body-preview-end]=\"_isPreviewEnd(item.compareValue)\"\n [class.mat-calendar-body-in-preview]=\"_isInPreview(item.compareValue)\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-disabled]=\"!item.enabled || null\"\n [attr.aria-pressed]=\"_isSelected(item.compareValue)\"\n [attr.aria-current]=\"todayValue === item.compareValue ? 'date' : null\"\n [attr.aria-describedby]=\"_getDescribedby(item.compareValue)\"\n (click)=\"_cellClicked(item, $event)\"\n (focus)=\"_emitActiveDateChange(item, $event)\">\n <span class=\"mat-calendar-body-cell-content mat-focus-indicator\"\n [class.mat-calendar-body-selected]=\"_isSelected(item.compareValue)\"\n [class.mat-calendar-body-comparison-identical]=\"_isComparisonIdentical(item.compareValue)\"\n [class.mat-calendar-body-today]=\"todayValue === item.compareValue\">\n {{item.displayValue}}\n </span>\n <span class=\"mat-calendar-body-cell-preview\" aria-hidden=\"true\"></span>\n </button>\n </td>\n }\n </tr>\n}\n\n<span [id]=\"_startDateLabelId\" class=\"mat-calendar-body-hidden-label\">\n {{startDateAccessibleName}}\n</span>\n<span [id]=\"_endDateLabelId\" class=\"mat-calendar-body-hidden-label\">\n {{endDateAccessibleName}}\n</span>\n", styles: [".mat-calendar-body{min-width:224px}.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:var(--mat-datepicker-calendar-date-today-outline-color, var(--mat-sys-primary))}.mat-calendar-body-label{height:0;line-height:0;text-align:start;padding-left:4.7142857143%;padding-right:4.7142857143%;font-size:var(--mat-datepicker-calendar-body-label-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-datepicker-calendar-body-label-text-weight, var(--mat-sys-title-small-weight));color:var(--mat-datepicker-calendar-body-label-text-color, var(--mat-sys-on-surface))}.mat-calendar-body-hidden-label{display:none}.mat-calendar-body-cell-container{position:relative;height:0;line-height:0}.mat-calendar-body-cell{position:absolute;top:0;left:0;width:100%;height:100%;background:none;text-align:center;outline:none;font-family:inherit;margin:0;font-family:var(--mat-datepicker-calendar-text-font, var(--mat-sys-body-medium-font));font-size:var(--mat-datepicker-calendar-text-size, var(--mat-sys-body-medium-size));-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-calendar-body-cell::-moz-focus-inner{border:0}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-cell-preview{content:\"\";position:absolute;top:5%;left:0;z-index:0;box-sizing:border-box;display:block;height:90%;width:100%}.mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-start::after,.mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,.mat-calendar-body-comparison-start::after,.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,[dir=rtl] .mat-calendar-body-comparison-start::after,[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:0;border-radius:0;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,.mat-calendar-body-comparison-end::after,.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}[dir=rtl] .mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,[dir=rtl] .mat-calendar-body-comparison-end::after,[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{left:5%;border-radius:0;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-comparison-bridge-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-bridge-end.mat-calendar-body-range-start::after{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end.mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-end.mat-calendar-body-range-start::after{width:90%}.mat-calendar-body-in-preview{color:var(--mat-datepicker-calendar-date-preview-state-outline-color, var(--mat-sys-primary))}.mat-calendar-body-in-preview .mat-calendar-body-cell-preview{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:0;border-right:dashed 1px}.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:0;border-left:dashed 1px}.mat-calendar-body-disabled{cursor:default}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){color:var(--mat-datepicker-calendar-date-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:var(--mat-datepicker-calendar-date-today-disabled-state-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mat-calendar-body-disabled{opacity:.5}}.mat-calendar-body-cell-content{top:5%;left:5%;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px;color:var(--mat-datepicker-calendar-date-text-color, var(--mat-sys-on-surface));border-color:var(--mat-datepicker-calendar-date-outline-color, transparent)}.mat-calendar-body-cell-content.mat-focus-indicator{position:absolute}@media(forced-colors: active){.mat-calendar-body-cell-content{border:none}}.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--mat-datepicker-calendar-date-focus-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent))}@media(hover: hover){.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--mat-datepicker-calendar-date-hover-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}}.mat-calendar-body-selected{background-color:var(--mat-datepicker-calendar-date-selected-state-background-color, var(--mat-sys-primary));color:var(--mat-datepicker-calendar-date-selected-state-text-color, var(--mat-sys-on-primary))}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:var(--mat-datepicker-calendar-date-selected-disabled-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-calendar-body-selected.mat-calendar-body-today{box-shadow:inset 0 0 0 1px var(--mat-datepicker-calendar-date-today-selected-state-outline-color, var(--mat-sys-primary))}.mat-calendar-body-in-range::before{background:var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-sys-primary-container))}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container))}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container))}.mat-calendar-body-comparison-bridge-start::before,[dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-sys-primary-container)) 50%, var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container)) 50%)}.mat-calendar-body-comparison-bridge-end::before,[dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-sys-primary-container)) 50%, var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container)) 50%)}.mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:var(--mat-datepicker-calendar-date-in-overlap-range-state-background-color, var(--mat-sys-secondary-container))}.mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:var(--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color, var(--mat-sys-secondary))}@media(forced-colors: active){.mat-datepicker-popup:not(:empty),.mat-calendar-body-cell:not(.mat-calendar-body-in-range) .mat-calendar-body-selected{outline:solid 1px}.mat-calendar-body-today{outline:dotted 1px}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-selected{background:none}.mat-calendar-body-in-range::before,.mat-calendar-body-comparison-bridge-start::before,.mat-calendar-body-comparison-bridge-end::before{border-top:solid 1px;border-bottom:solid 1px}.mat-calendar-body-range-start::before{border-left:solid 1px}[dir=rtl] .mat-calendar-body-range-start::before{border-left:0;border-right:solid 1px}.mat-calendar-body-range-end::before{border-right:solid 1px}[dir=rtl] .mat-calendar-body-range-end::before{border-right:0;border-left:solid 1px}.mat-calendar-body-in-comparison-range::before{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-comparison-start::before{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-comparison-start::before{border-left:0;border-right:dashed 1px}.mat-calendar-body-comparison-end::before{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-comparison-end::before{border-right:0;border-left:dashed 1px}}"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
492
528
  }
493
529
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendarBody, decorators: [{
494
530
  type: Component,
@@ -587,6 +623,14 @@ function getActualTouchTarget(event) {
587
623
 
588
624
  /** A class representing a range of dates. */
589
625
  class DateRange {
626
+ start;
627
+ end;
628
+ /**
629
+ * Ensures that objects with a `start` and `end` property can't be assigned to a variable that
630
+ * expects a `DateRange`
631
+ */
632
+ // tslint:disable-next-line:no-unused-variable
633
+ _disableStructuralEquivalency;
590
634
  constructor(
591
635
  /** The start date of the range. */
592
636
  start,
@@ -601,14 +645,16 @@ class DateRange {
601
645
  * @docs-private
602
646
  */
603
647
  class MatDateSelectionModel {
648
+ selection;
649
+ _adapter;
650
+ _selectionChanged = new Subject();
651
+ /** Emits when the selection has changed. */
652
+ selectionChanged = this._selectionChanged;
604
653
  constructor(
605
654
  /** The current selection. */
606
655
  selection, _adapter) {
607
656
  this.selection = selection;
608
657
  this._adapter = _adapter;
609
- this._selectionChanged = new Subject();
610
- /** Emits when the selection has changed. */
611
- this.selectionChanged = this._selectionChanged;
612
658
  this.selection = selection;
613
659
  }
614
660
  /**
@@ -627,8 +673,8 @@ class MatDateSelectionModel {
627
673
  _isValidDateInstance(date) {
628
674
  return this._adapter.isDateInstance(date) && this._adapter.isValid(date);
629
675
  }
630
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateSelectionModel, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable }); }
631
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateSelectionModel }); }
676
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateSelectionModel, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
677
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateSelectionModel });
632
678
  }
633
679
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateSelectionModel, decorators: [{
634
680
  type: Injectable
@@ -665,8 +711,8 @@ class MatSingleDateSelectionModel extends MatDateSelectionModel {
665
711
  clone.updateSelection(this.selection, this);
666
712
  return clone;
667
713
  }
668
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatSingleDateSelectionModel, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable }); }
669
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatSingleDateSelectionModel }); }
714
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatSingleDateSelectionModel, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable });
715
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatSingleDateSelectionModel });
670
716
  }
671
717
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatSingleDateSelectionModel, decorators: [{
672
718
  type: Injectable
@@ -728,8 +774,8 @@ class MatRangeDateSelectionModel extends MatDateSelectionModel {
728
774
  clone.updateSelection(this.selection, this);
729
775
  return clone;
730
776
  }
731
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatRangeDateSelectionModel, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable }); }
732
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatRangeDateSelectionModel }); }
777
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatRangeDateSelectionModel, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable });
778
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatRangeDateSelectionModel });
733
779
  }
734
780
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatRangeDateSelectionModel, decorators: [{
735
781
  type: Injectable
@@ -765,6 +811,7 @@ const MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER = {
765
811
  const MAT_DATE_RANGE_SELECTION_STRATEGY = new InjectionToken('MAT_DATE_RANGE_SELECTION_STRATEGY');
766
812
  /** Provides the default date range selection behavior. */
767
813
  class DefaultMatCalendarRangeStrategy {
814
+ _dateAdapter;
768
815
  constructor(_dateAdapter) {
769
816
  this._dateAdapter = _dateAdapter;
770
817
  }
@@ -829,8 +876,8 @@ class DefaultMatCalendarRangeStrategy {
829
876
  }
830
877
  return new DateRange(start, end);
831
878
  }
832
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: DefaultMatCalendarRangeStrategy, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable }); }
833
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: DefaultMatCalendarRangeStrategy }); }
879
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: DefaultMatCalendarRangeStrategy, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable });
880
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: DefaultMatCalendarRangeStrategy });
834
881
  }
835
882
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: DefaultMatCalendarRangeStrategy, decorators: [{
836
883
  type: Injectable
@@ -853,6 +900,14 @@ let uniqueIdCounter = 0;
853
900
  * @docs-private
854
901
  */
855
902
  class MatMonthView {
903
+ _changeDetectorRef = inject(ChangeDetectorRef);
904
+ _dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
905
+ _dateAdapter = inject(DateAdapter, { optional: true });
906
+ _dir = inject(Directionality, { optional: true });
907
+ _rangeStrategy = inject(MAT_DATE_RANGE_SELECTION_STRATEGY, { optional: true });
908
+ _rerenderSubscription = Subscription.EMPTY;
909
+ /** Flag used to filter out space/enter keyup events that originated outside of the view. */
910
+ _selectionKeyPressed;
856
911
  /**
857
912
  * The date to display in this month view (everything other than the month and year is ignored).
858
913
  */
@@ -868,6 +923,7 @@ class MatMonthView {
868
923
  this._init();
869
924
  }
870
925
  }
926
+ _activeDate;
871
927
  /** The currently selected date. */
872
928
  get selected() {
873
929
  return this._selected;
@@ -881,6 +937,7 @@ class MatMonthView {
881
937
  }
882
938
  this._setRanges(this._selected);
883
939
  }
940
+ _selected;
884
941
  /** The minimum selectable date. */
885
942
  get minDate() {
886
943
  return this._minDate;
@@ -888,6 +945,7 @@ class MatMonthView {
888
945
  set minDate(value) {
889
946
  this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
890
947
  }
948
+ _minDate;
891
949
  /** The maximum selectable date. */
892
950
  get maxDate() {
893
951
  return this._maxDate;
@@ -895,28 +953,62 @@ class MatMonthView {
895
953
  set maxDate(value) {
896
954
  this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
897
955
  }
956
+ _maxDate;
957
+ /** Function used to filter which dates are selectable. */
958
+ dateFilter;
959
+ /** Function that can be used to add custom CSS classes to dates. */
960
+ dateClass;
961
+ /** Start of the comparison range. */
962
+ comparisonStart;
963
+ /** End of the comparison range. */
964
+ comparisonEnd;
965
+ /** ARIA Accessible name of the `<input matStartDate/>` */
966
+ startDateAccessibleName;
967
+ /** ARIA Accessible name of the `<input matEndDate/>` */
968
+ endDateAccessibleName;
969
+ /** Origin of active drag, or null when dragging is not active. */
970
+ activeDrag = null;
971
+ /** Emits when a new date is selected. */
972
+ selectedChange = new EventEmitter();
973
+ /** Emits when any date is selected. */
974
+ _userSelection = new EventEmitter();
975
+ /** Emits when the user initiates a date range drag via mouse or touch. */
976
+ dragStarted = new EventEmitter();
977
+ /**
978
+ * Emits when the user completes or cancels a date range drag.
979
+ * Emits null when the drag was canceled or the newly selected date range if completed.
980
+ */
981
+ dragEnded = new EventEmitter();
982
+ /** Emits when any date is activated. */
983
+ activeDateChange = new EventEmitter();
984
+ /** The body of calendar table */
985
+ _matCalendarBody;
986
+ /** The label for this month (e.g. "January 2017"). */
987
+ _monthLabel;
988
+ /** Grid of calendar cells representing the dates of the month. */
989
+ _weeks;
990
+ /** The number of blank cells in the first row before the 1st of the month. */
991
+ _firstWeekOffset;
992
+ /** Start value of the currently-shown date range. */
993
+ _rangeStart;
994
+ /** End value of the currently-shown date range. */
995
+ _rangeEnd;
996
+ /** Start value of the currently-shown comparison date range. */
997
+ _comparisonRangeStart;
998
+ /** End value of the currently-shown comparison date range. */
999
+ _comparisonRangeEnd;
1000
+ /** Start of the preview range. */
1001
+ _previewStart;
1002
+ /** End of the preview range. */
1003
+ _previewEnd;
1004
+ /** Whether the user is currently selecting a range of dates. */
1005
+ _isRange;
1006
+ /** The date of the month that today falls on. Null if today is in another month. */
1007
+ _todayDate;
1008
+ /** The names of the weekdays. */
1009
+ _weekdays;
898
1010
  constructor() {
899
- this._changeDetectorRef = inject(ChangeDetectorRef);
900
- this._dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
901
- this._dateAdapter = inject(DateAdapter, { optional: true });
902
- this._dir = inject(Directionality, { optional: true });
903
- this._rangeStrategy = inject(MAT_DATE_RANGE_SELECTION_STRATEGY, { optional: true });
904
- this._rerenderSubscription = Subscription.EMPTY;
905
- /** Origin of active drag, or null when dragging is not active. */
906
- this.activeDrag = null;
907
- /** Emits when a new date is selected. */
908
- this.selectedChange = new EventEmitter();
909
- /** Emits when any date is selected. */
910
- this._userSelection = new EventEmitter();
911
- /** Emits when the user initiates a date range drag via mouse or touch. */
912
- this.dragStarted = new EventEmitter();
913
- /**
914
- * Emits when the user completes or cancels a date range drag.
915
- * Emits null when the drag was canceled or the newly selected date range if completed.
916
- */
917
- this.dragEnded = new EventEmitter();
918
- /** Emits when any date is activated. */
919
- this.activeDateChange = new EventEmitter();
1011
+ inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);
920
1012
  if (typeof ngDevMode === 'undefined' || ngDevMode) {
921
1013
  if (!this._dateAdapter) {
922
1014
  throw createMissingDateImplError('DateAdapter');
@@ -1229,8 +1321,8 @@ class MatMonthView {
1229
1321
  _clearPreview() {
1230
1322
  this._previewStart = this._previewEnd = null;
1231
1323
  }
1232
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMonthView, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1233
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-next.10", type: MatMonthView, isStandalone: true, selector: "mat-month-view", inputs: { activeDate: "activeDate", selected: "selected", minDate: "minDate", maxDate: "maxDate", dateFilter: "dateFilter", dateClass: "dateClass", comparisonStart: "comparisonStart", comparisonEnd: "comparisonEnd", startDateAccessibleName: "startDateAccessibleName", endDateAccessibleName: "endDateAccessibleName", activeDrag: "activeDrag" }, outputs: { selectedChange: "selectedChange", _userSelection: "_userSelection", dragStarted: "dragStarted", dragEnded: "dragEnded", activeDateChange: "activeDateChange" }, viewQueries: [{ propertyName: "_matCalendarBody", first: true, predicate: MatCalendarBody, descendants: true }], exportAs: ["matMonthView"], usesOnChanges: true, ngImport: i0, template: "<table class=\"mat-calendar-table\" role=\"grid\">\n <thead class=\"mat-calendar-table-header\">\n <tr>\n @for (day of _weekdays; track day.id) {\n <th scope=\"col\">\n <span class=\"cdk-visually-hidden\">{{day.long}}</span>\n <span aria-hidden=\"true\">{{day.narrow}}</span>\n </th>\n }\n </tr>\n <tr aria-hidden=\"true\"><th class=\"mat-calendar-table-header-divider\" colspan=\"7\"></th></tr>\n </thead>\n <tbody mat-calendar-body\n [label]=\"_monthLabel\"\n [rows]=\"_weeks\"\n [todayValue]=\"_todayDate!\"\n [startValue]=\"_rangeStart!\"\n [endValue]=\"_rangeEnd!\"\n [comparisonStart]=\"_comparisonRangeStart\"\n [comparisonEnd]=\"_comparisonRangeEnd\"\n [previewStart]=\"_previewStart\"\n [previewEnd]=\"_previewEnd\"\n [isRange]=\"_isRange\"\n [labelMinRequiredCells]=\"3\"\n [activeCell]=\"_dateAdapter.getDate(activeDate) - 1\"\n [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\"\n (selectedValueChange)=\"_dateSelected($event)\"\n (activeDateChange)=\"_updateActiveDate($event)\"\n (previewChange)=\"_previewChanged($event)\"\n (dragStarted)=\"dragStarted.emit($event)\"\n (dragEnded)=\"_dragEnded($event)\"\n (keyup)=\"_handleCalendarBodyKeyup($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n", dependencies: [{ kind: "component", type: MatCalendarBody, selector: "[mat-calendar-body]", inputs: ["label", "rows", "todayValue", "startValue", "endValue", "labelMinRequiredCells", "numCols", "activeCell", "isRange", "cellAspectRatio", "comparisonStart", "comparisonEnd", "previewStart", "previewEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedValueChange", "previewChange", "activeDateChange", "dragStarted", "dragEnded"], exportAs: ["matCalendarBody"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1324
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMonthView, deps: [], target: i0.ɵɵFactoryTarget.Component });
1325
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-next.10", type: MatMonthView, isStandalone: true, selector: "mat-month-view", inputs: { activeDate: "activeDate", selected: "selected", minDate: "minDate", maxDate: "maxDate", dateFilter: "dateFilter", dateClass: "dateClass", comparisonStart: "comparisonStart", comparisonEnd: "comparisonEnd", startDateAccessibleName: "startDateAccessibleName", endDateAccessibleName: "endDateAccessibleName", activeDrag: "activeDrag" }, outputs: { selectedChange: "selectedChange", _userSelection: "_userSelection", dragStarted: "dragStarted", dragEnded: "dragEnded", activeDateChange: "activeDateChange" }, viewQueries: [{ propertyName: "_matCalendarBody", first: true, predicate: MatCalendarBody, descendants: true }], exportAs: ["matMonthView"], usesOnChanges: true, ngImport: i0, template: "<table class=\"mat-calendar-table\" role=\"grid\">\n <thead class=\"mat-calendar-table-header\">\n <tr>\n @for (day of _weekdays; track day.id) {\n <th scope=\"col\">\n <span class=\"cdk-visually-hidden\">{{day.long}}</span>\n <span aria-hidden=\"true\">{{day.narrow}}</span>\n </th>\n }\n </tr>\n <tr aria-hidden=\"true\"><th class=\"mat-calendar-table-header-divider\" colspan=\"7\"></th></tr>\n </thead>\n <tbody mat-calendar-body\n [label]=\"_monthLabel\"\n [rows]=\"_weeks\"\n [todayValue]=\"_todayDate!\"\n [startValue]=\"_rangeStart!\"\n [endValue]=\"_rangeEnd!\"\n [comparisonStart]=\"_comparisonRangeStart\"\n [comparisonEnd]=\"_comparisonRangeEnd\"\n [previewStart]=\"_previewStart\"\n [previewEnd]=\"_previewEnd\"\n [isRange]=\"_isRange\"\n [labelMinRequiredCells]=\"3\"\n [activeCell]=\"_dateAdapter.getDate(activeDate) - 1\"\n [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\"\n (selectedValueChange)=\"_dateSelected($event)\"\n (activeDateChange)=\"_updateActiveDate($event)\"\n (previewChange)=\"_previewChanged($event)\"\n (dragStarted)=\"dragStarted.emit($event)\"\n (dragEnded)=\"_dragEnded($event)\"\n (keyup)=\"_handleCalendarBodyKeyup($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n", dependencies: [{ kind: "component", type: MatCalendarBody, selector: "[mat-calendar-body]", inputs: ["label", "rows", "todayValue", "startValue", "endValue", "labelMinRequiredCells", "numCols", "activeCell", "isRange", "cellAspectRatio", "comparisonStart", "comparisonEnd", "previewStart", "previewEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedValueChange", "previewChange", "activeDateChange", "dragStarted", "dragEnded"], exportAs: ["matCalendarBody"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1234
1326
  }
1235
1327
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMonthView, decorators: [{
1236
1328
  type: Component,
@@ -1279,6 +1371,12 @@ const yearsPerRow = 4;
1279
1371
  * @docs-private
1280
1372
  */
1281
1373
  class MatMultiYearView {
1374
+ _changeDetectorRef = inject(ChangeDetectorRef);
1375
+ _dateAdapter = inject(DateAdapter, { optional: true });
1376
+ _dir = inject(Directionality, { optional: true });
1377
+ _rerenderSubscription = Subscription.EMPTY;
1378
+ /** Flag used to filter out space/enter keyup events that originated outside of the view. */
1379
+ _selectionKeyPressed;
1282
1380
  /** The date to display in this multi-year view (everything other than the year is ignored). */
1283
1381
  get activeDate() {
1284
1382
  return this._activeDate;
@@ -1292,6 +1390,7 @@ class MatMultiYearView {
1292
1390
  this._init();
1293
1391
  }
1294
1392
  }
1393
+ _activeDate;
1295
1394
  /** The currently selected date. */
1296
1395
  get selected() {
1297
1396
  return this._selected;
@@ -1305,6 +1404,7 @@ class MatMultiYearView {
1305
1404
  }
1306
1405
  this._setSelectedYear(value);
1307
1406
  }
1407
+ _selected;
1308
1408
  /** The minimum selectable date. */
1309
1409
  get minDate() {
1310
1410
  return this._minDate;
@@ -1312,6 +1412,7 @@ class MatMultiYearView {
1312
1412
  set minDate(value) {
1313
1413
  this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
1314
1414
  }
1415
+ _minDate;
1315
1416
  /** The maximum selectable date. */
1316
1417
  get maxDate() {
1317
1418
  return this._maxDate;
@@ -1319,17 +1420,26 @@ class MatMultiYearView {
1319
1420
  set maxDate(value) {
1320
1421
  this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
1321
1422
  }
1423
+ _maxDate;
1424
+ /** A function used to filter which dates are selectable. */
1425
+ dateFilter;
1426
+ /** Function that can be used to add custom CSS classes to date cells. */
1427
+ dateClass;
1428
+ /** Emits when a new year is selected. */
1429
+ selectedChange = new EventEmitter();
1430
+ /** Emits the selected year. This doesn't imply a change on the selected date */
1431
+ yearSelected = new EventEmitter();
1432
+ /** Emits when any date is activated. */
1433
+ activeDateChange = new EventEmitter();
1434
+ /** The body of calendar table */
1435
+ _matCalendarBody;
1436
+ /** Grid of calendar cells representing the currently displayed years. */
1437
+ _years;
1438
+ /** The year that today falls on. */
1439
+ _todayYear;
1440
+ /** The year of the selected date. Null if the selected date is null. */
1441
+ _selectedYear;
1322
1442
  constructor() {
1323
- this._changeDetectorRef = inject(ChangeDetectorRef);
1324
- this._dateAdapter = inject(DateAdapter, { optional: true });
1325
- this._dir = inject(Directionality, { optional: true });
1326
- this._rerenderSubscription = Subscription.EMPTY;
1327
- /** Emits when a new year is selected. */
1328
- this.selectedChange = new EventEmitter();
1329
- /** Emits the selected year. This doesn't imply a change on the selected date */
1330
- this.yearSelected = new EventEmitter();
1331
- /** Emits when any date is activated. */
1332
- this.activeDateChange = new EventEmitter();
1333
1443
  if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {
1334
1444
  throw createMissingDateImplError('DateAdapter');
1335
1445
  }
@@ -1515,8 +1625,8 @@ class MatMultiYearView {
1515
1625
  this._selectedYear = this._dateAdapter.getYear(value);
1516
1626
  }
1517
1627
  }
1518
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMultiYearView, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1519
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatMultiYearView, isStandalone: true, selector: "mat-multi-year-view", inputs: { activeDate: "activeDate", selected: "selected", minDate: "minDate", maxDate: "maxDate", dateFilter: "dateFilter", dateClass: "dateClass" }, outputs: { selectedChange: "selectedChange", yearSelected: "yearSelected", activeDateChange: "activeDateChange" }, viewQueries: [{ propertyName: "_matCalendarBody", first: true, predicate: MatCalendarBody, descendants: true }], exportAs: ["matMultiYearView"], ngImport: i0, template: "<table class=\"mat-calendar-table\" role=\"grid\">\n <thead aria-hidden=\"true\" class=\"mat-calendar-table-header\">\n <tr><th class=\"mat-calendar-table-header-divider\" colspan=\"4\"></th></tr>\n </thead>\n <tbody mat-calendar-body\n [rows]=\"_years\"\n [todayValue]=\"_todayYear\"\n [startValue]=\"_selectedYear!\"\n [endValue]=\"_selectedYear!\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"_getActiveCell()\"\n (selectedValueChange)=\"_yearSelected($event)\"\n (activeDateChange)=\"_updateActiveDate($event)\"\n (keyup)=\"_handleCalendarBodyKeyup($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n", dependencies: [{ kind: "component", type: MatCalendarBody, selector: "[mat-calendar-body]", inputs: ["label", "rows", "todayValue", "startValue", "endValue", "labelMinRequiredCells", "numCols", "activeCell", "isRange", "cellAspectRatio", "comparisonStart", "comparisonEnd", "previewStart", "previewEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedValueChange", "previewChange", "activeDateChange", "dragStarted", "dragEnded"], exportAs: ["matCalendarBody"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1628
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMultiYearView, deps: [], target: i0.ɵɵFactoryTarget.Component });
1629
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatMultiYearView, isStandalone: true, selector: "mat-multi-year-view", inputs: { activeDate: "activeDate", selected: "selected", minDate: "minDate", maxDate: "maxDate", dateFilter: "dateFilter", dateClass: "dateClass" }, outputs: { selectedChange: "selectedChange", yearSelected: "yearSelected", activeDateChange: "activeDateChange" }, viewQueries: [{ propertyName: "_matCalendarBody", first: true, predicate: MatCalendarBody, descendants: true }], exportAs: ["matMultiYearView"], ngImport: i0, template: "<table class=\"mat-calendar-table\" role=\"grid\">\n <thead aria-hidden=\"true\" class=\"mat-calendar-table-header\">\n <tr><th class=\"mat-calendar-table-header-divider\" colspan=\"4\"></th></tr>\n </thead>\n <tbody mat-calendar-body\n [rows]=\"_years\"\n [todayValue]=\"_todayYear\"\n [startValue]=\"_selectedYear!\"\n [endValue]=\"_selectedYear!\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"_getActiveCell()\"\n (selectedValueChange)=\"_yearSelected($event)\"\n (activeDateChange)=\"_updateActiveDate($event)\"\n (keyup)=\"_handleCalendarBodyKeyup($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n", dependencies: [{ kind: "component", type: MatCalendarBody, selector: "[mat-calendar-body]", inputs: ["label", "rows", "todayValue", "startValue", "endValue", "labelMinRequiredCells", "numCols", "activeCell", "isRange", "cellAspectRatio", "comparisonStart", "comparisonEnd", "previewStart", "previewEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedValueChange", "previewChange", "activeDateChange", "dragStarted", "dragEnded"], exportAs: ["matCalendarBody"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1520
1630
  }
1521
1631
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMultiYearView, decorators: [{
1522
1632
  type: Component,
@@ -1584,6 +1694,13 @@ function euclideanModulo(a, b) {
1584
1694
  * @docs-private
1585
1695
  */
1586
1696
  class MatYearView {
1697
+ _changeDetectorRef = inject(ChangeDetectorRef);
1698
+ _dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
1699
+ _dateAdapter = inject(DateAdapter, { optional: true });
1700
+ _dir = inject(Directionality, { optional: true });
1701
+ _rerenderSubscription = Subscription.EMPTY;
1702
+ /** Flag used to filter out space/enter keyup events that originated outside of the view. */
1703
+ _selectionKeyPressed;
1587
1704
  /** The date to display in this year view (everything other than the year is ignored). */
1588
1705
  get activeDate() {
1589
1706
  return this._activeDate;
@@ -1597,6 +1714,7 @@ class MatYearView {
1597
1714
  this._init();
1598
1715
  }
1599
1716
  }
1717
+ _activeDate;
1600
1718
  /** The currently selected date. */
1601
1719
  get selected() {
1602
1720
  return this._selected;
@@ -1610,6 +1728,7 @@ class MatYearView {
1610
1728
  }
1611
1729
  this._setSelectedMonth(value);
1612
1730
  }
1731
+ _selected;
1613
1732
  /** The minimum selectable date. */
1614
1733
  get minDate() {
1615
1734
  return this._minDate;
@@ -1617,6 +1736,7 @@ class MatYearView {
1617
1736
  set minDate(value) {
1618
1737
  this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
1619
1738
  }
1739
+ _minDate;
1620
1740
  /** The maximum selectable date. */
1621
1741
  get maxDate() {
1622
1742
  return this._maxDate;
@@ -1624,18 +1744,31 @@ class MatYearView {
1624
1744
  set maxDate(value) {
1625
1745
  this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
1626
1746
  }
1747
+ _maxDate;
1748
+ /** A function used to filter which dates are selectable. */
1749
+ dateFilter;
1750
+ /** Function that can be used to add custom CSS classes to date cells. */
1751
+ dateClass;
1752
+ /** Emits when a new month is selected. */
1753
+ selectedChange = new EventEmitter();
1754
+ /** Emits the selected month. This doesn't imply a change on the selected date */
1755
+ monthSelected = new EventEmitter();
1756
+ /** Emits when any date is activated. */
1757
+ activeDateChange = new EventEmitter();
1758
+ /** The body of calendar table */
1759
+ _matCalendarBody;
1760
+ /** Grid of calendar cells representing the months of the year. */
1761
+ _months;
1762
+ /** The label for this year (e.g. "2017"). */
1763
+ _yearLabel;
1764
+ /** The month in this year that today falls on. Null if today is in a different year. */
1765
+ _todayMonth;
1766
+ /**
1767
+ * The month in this year that the selected Date falls on.
1768
+ * Null if the selected Date is in a different year.
1769
+ */
1770
+ _selectedMonth;
1627
1771
  constructor() {
1628
- this._changeDetectorRef = inject(ChangeDetectorRef);
1629
- this._dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
1630
- this._dateAdapter = inject(DateAdapter, { optional: true });
1631
- this._dir = inject(Directionality, { optional: true });
1632
- this._rerenderSubscription = Subscription.EMPTY;
1633
- /** Emits when a new month is selected. */
1634
- this.selectedChange = new EventEmitter();
1635
- /** Emits the selected month. This doesn't imply a change on the selected date */
1636
- this.monthSelected = new EventEmitter();
1637
- /** Emits when any date is activated. */
1638
- this.activeDateChange = new EventEmitter();
1639
1772
  if (typeof ngDevMode === 'undefined' || ngDevMode) {
1640
1773
  if (!this._dateAdapter) {
1641
1774
  throw createMissingDateImplError('DateAdapter');
@@ -1846,8 +1979,8 @@ class MatYearView {
1846
1979
  this._selectedMonth = this._getMonthInCurrentYear(value);
1847
1980
  }
1848
1981
  }
1849
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatYearView, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1850
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatYearView, isStandalone: true, selector: "mat-year-view", inputs: { activeDate: "activeDate", selected: "selected", minDate: "minDate", maxDate: "maxDate", dateFilter: "dateFilter", dateClass: "dateClass" }, outputs: { selectedChange: "selectedChange", monthSelected: "monthSelected", activeDateChange: "activeDateChange" }, viewQueries: [{ propertyName: "_matCalendarBody", first: true, predicate: MatCalendarBody, descendants: true }], exportAs: ["matYearView"], ngImport: i0, template: "<table class=\"mat-calendar-table\" role=\"grid\">\n <thead aria-hidden=\"true\" class=\"mat-calendar-table-header\">\n <tr><th class=\"mat-calendar-table-header-divider\" colspan=\"4\"></th></tr>\n </thead>\n <tbody mat-calendar-body\n [label]=\"_yearLabel\"\n [rows]=\"_months\"\n [todayValue]=\"_todayMonth!\"\n [startValue]=\"_selectedMonth!\"\n [endValue]=\"_selectedMonth!\"\n [labelMinRequiredCells]=\"2\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"_dateAdapter.getMonth(activeDate)\"\n (selectedValueChange)=\"_monthSelected($event)\"\n (activeDateChange)=\"_updateActiveDate($event)\"\n (keyup)=\"_handleCalendarBodyKeyup($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n", dependencies: [{ kind: "component", type: MatCalendarBody, selector: "[mat-calendar-body]", inputs: ["label", "rows", "todayValue", "startValue", "endValue", "labelMinRequiredCells", "numCols", "activeCell", "isRange", "cellAspectRatio", "comparisonStart", "comparisonEnd", "previewStart", "previewEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedValueChange", "previewChange", "activeDateChange", "dragStarted", "dragEnded"], exportAs: ["matCalendarBody"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1982
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatYearView, deps: [], target: i0.ɵɵFactoryTarget.Component });
1983
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatYearView, isStandalone: true, selector: "mat-year-view", inputs: { activeDate: "activeDate", selected: "selected", minDate: "minDate", maxDate: "maxDate", dateFilter: "dateFilter", dateClass: "dateClass" }, outputs: { selectedChange: "selectedChange", monthSelected: "monthSelected", activeDateChange: "activeDateChange" }, viewQueries: [{ propertyName: "_matCalendarBody", first: true, predicate: MatCalendarBody, descendants: true }], exportAs: ["matYearView"], ngImport: i0, template: "<table class=\"mat-calendar-table\" role=\"grid\">\n <thead aria-hidden=\"true\" class=\"mat-calendar-table-header\">\n <tr><th class=\"mat-calendar-table-header-divider\" colspan=\"4\"></th></tr>\n </thead>\n <tbody mat-calendar-body\n [label]=\"_yearLabel\"\n [rows]=\"_months\"\n [todayValue]=\"_todayMonth!\"\n [startValue]=\"_selectedMonth!\"\n [endValue]=\"_selectedMonth!\"\n [labelMinRequiredCells]=\"2\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"_dateAdapter.getMonth(activeDate)\"\n (selectedValueChange)=\"_monthSelected($event)\"\n (activeDateChange)=\"_updateActiveDate($event)\"\n (keyup)=\"_handleCalendarBodyKeyup($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n", dependencies: [{ kind: "component", type: MatCalendarBody, selector: "[mat-calendar-body]", inputs: ["label", "rows", "todayValue", "startValue", "endValue", "labelMinRequiredCells", "numCols", "activeCell", "isRange", "cellAspectRatio", "comparisonStart", "comparisonEnd", "previewStart", "previewEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedValueChange", "previewChange", "activeDateChange", "dragStarted", "dragEnded"], exportAs: ["matCalendarBody"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1851
1984
  }
1852
1985
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatYearView, decorators: [{
1853
1986
  type: Component,
@@ -1878,13 +2011,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
1878
2011
  let calendarHeaderId = 1;
1879
2012
  /** Default header for MatCalendar */
1880
2013
  class MatCalendarHeader {
2014
+ _intl = inject(MatDatepickerIntl);
2015
+ calendar = inject(MatCalendar);
2016
+ _dateAdapter = inject(DateAdapter, { optional: true });
2017
+ _dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
1881
2018
  constructor() {
1882
- this._intl = inject(MatDatepickerIntl);
1883
- this.calendar = inject(MatCalendar);
1884
- this._dateAdapter = inject(DateAdapter, { optional: true });
1885
- this._dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
1886
- this._id = `mat-calendar-header-${calendarHeaderId++}`;
1887
- this._periodButtonLabelId = `${this._id}-period-label`;
2019
+ inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);
1888
2020
  const changeDetectorRef = inject(ChangeDetectorRef);
1889
2021
  this.calendar.stateChanges.subscribe(() => changeDetectorRef.markForCheck());
1890
2022
  }
@@ -1994,8 +2126,10 @@ class MatCalendarHeader {
1994
2126
  const maxYearLabel = this._dateAdapter.getYearName(this._dateAdapter.createDate(maxYearOfPage, 0, 1));
1995
2127
  return [minYearLabel, maxYearLabel];
1996
2128
  }
1997
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendarHeader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1998
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatCalendarHeader, isStandalone: true, selector: "mat-calendar-header", exportAs: ["matCalendarHeader"], ngImport: i0, template: "<div class=\"mat-calendar-header\">\n <div class=\"mat-calendar-controls\">\n <!-- [Firefox Issue: https://bugzilla.mozilla.org/show_bug.cgi?id=1880533]\n Relocated label next to related button and made visually hidden via cdk-visually-hidden\n to enable label to appear in a11y tree for SR when using Firefox -->\n <span [id]=\"_periodButtonLabelId\" class=\"cdk-visually-hidden\" aria-live=\"polite\">{{periodButtonDescription}}</span>\n <button mat-button type=\"button\" class=\"mat-calendar-period-button\"\n (click)=\"currentPeriodClicked()\" [attr.aria-label]=\"periodButtonLabel\"\n [attr.aria-describedby]=\"_periodButtonLabelId\">\n <span aria-hidden=\"true\">{{periodButtonText}}</span>\n <svg class=\"mat-calendar-arrow\" [class.mat-calendar-invert]=\"calendar.currentView !== 'month'\"\n viewBox=\"0 0 10 5\" focusable=\"false\" aria-hidden=\"true\">\n <polygon points=\"0,0 5,5 10,0\"/>\n </svg>\n </button>\n\n <div class=\"mat-calendar-spacer\"></div>\n\n <ng-content></ng-content>\n\n <button mat-icon-button type=\"button\" class=\"mat-calendar-previous-button\"\n [disabled]=\"!previousEnabled()\" (click)=\"previousClicked()\"\n [attr.aria-label]=\"prevButtonLabel\">\n </button>\n\n <button mat-icon-button type=\"button\" class=\"mat-calendar-next-button\"\n [disabled]=\"!nextEnabled()\" (click)=\"nextClicked()\"\n [attr.aria-label]=\"nextButtonLabel\">\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2129
+ _id = `mat-calendar-header-${calendarHeaderId++}`;
2130
+ _periodButtonLabelId = `${this._id}-period-label`;
2131
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendarHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
2132
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatCalendarHeader, isStandalone: true, selector: "mat-calendar-header", exportAs: ["matCalendarHeader"], ngImport: i0, template: "<div class=\"mat-calendar-header\">\n <div class=\"mat-calendar-controls\">\n <!-- [Firefox Issue: https://bugzilla.mozilla.org/show_bug.cgi?id=1880533]\n Relocated label next to related button and made visually hidden via cdk-visually-hidden\n to enable label to appear in a11y tree for SR when using Firefox -->\n <span [id]=\"_periodButtonLabelId\" class=\"cdk-visually-hidden\" aria-live=\"polite\">{{periodButtonDescription}}</span>\n <button mat-button type=\"button\" class=\"mat-calendar-period-button\"\n (click)=\"currentPeriodClicked()\" [attr.aria-label]=\"periodButtonLabel\"\n [attr.aria-describedby]=\"_periodButtonLabelId\">\n <span aria-hidden=\"true\">{{periodButtonText}}</span>\n <svg class=\"mat-calendar-arrow\" [class.mat-calendar-invert]=\"calendar.currentView !== 'month'\"\n viewBox=\"0 0 10 5\" focusable=\"false\" aria-hidden=\"true\">\n <polygon points=\"0,0 5,5 10,0\"/>\n </svg>\n </button>\n\n <div class=\"mat-calendar-spacer\"></div>\n\n <ng-content></ng-content>\n\n <button mat-icon-button type=\"button\" class=\"mat-calendar-previous-button\"\n [disabled]=\"!previousEnabled()\" (click)=\"previousClicked()\"\n [attr.aria-label]=\"prevButtonLabel\">\n </button>\n\n <button mat-icon-button type=\"button\" class=\"mat-calendar-next-button\"\n [disabled]=\"!nextEnabled()\" (click)=\"nextClicked()\"\n [attr.aria-label]=\"nextButtonLabel\">\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1999
2133
  }
2000
2134
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendarHeader, decorators: [{
2001
2135
  type: Component,
@@ -2003,6 +2137,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
2003
2137
  }], ctorParameters: () => [] });
2004
2138
  /** A calendar that is used as part of the datepicker. */
2005
2139
  class MatCalendar {
2140
+ _dateAdapter = inject(DateAdapter, { optional: true });
2141
+ _dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
2142
+ _changeDetectorRef = inject(ChangeDetectorRef);
2143
+ /** An input indicating the type of the header component, if set. */
2144
+ headerComponent;
2145
+ /** A portal containing the header component type for this calendar. */
2146
+ _calendarHeaderPortal;
2147
+ _intlChanges;
2148
+ /**
2149
+ * Used for scheduling that focus should be moved to the active cell on the next tick.
2150
+ * We need to schedule it, rather than do it immediately, because we have to wait
2151
+ * for Angular to re-evaluate the view children.
2152
+ */
2153
+ _moveFocusOnNextTick = false;
2006
2154
  /** A date representing the period (month or year) to start the calendar in. */
2007
2155
  get startAt() {
2008
2156
  return this._startAt;
@@ -2010,6 +2158,9 @@ class MatCalendar {
2010
2158
  set startAt(value) {
2011
2159
  this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
2012
2160
  }
2161
+ _startAt;
2162
+ /** Whether the calendar should be started in month or year view. */
2163
+ startView = 'month';
2013
2164
  /** The currently selected date. */
2014
2165
  get selected() {
2015
2166
  return this._selected;
@@ -2022,6 +2173,7 @@ class MatCalendar {
2022
2173
  this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
2023
2174
  }
2024
2175
  }
2176
+ _selected;
2025
2177
  /** The minimum selectable date. */
2026
2178
  get minDate() {
2027
2179
  return this._minDate;
@@ -2029,6 +2181,7 @@ class MatCalendar {
2029
2181
  set minDate(value) {
2030
2182
  this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
2031
2183
  }
2184
+ _minDate;
2032
2185
  /** The maximum selectable date. */
2033
2186
  get maxDate() {
2034
2187
  return this._maxDate;
@@ -2036,6 +2189,45 @@ class MatCalendar {
2036
2189
  set maxDate(value) {
2037
2190
  this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
2038
2191
  }
2192
+ _maxDate;
2193
+ /** Function used to filter which dates are selectable. */
2194
+ dateFilter;
2195
+ /** Function that can be used to add custom CSS classes to dates. */
2196
+ dateClass;
2197
+ /** Start of the comparison range. */
2198
+ comparisonStart;
2199
+ /** End of the comparison range. */
2200
+ comparisonEnd;
2201
+ /** ARIA Accessible name of the `<input matStartDate/>` */
2202
+ startDateAccessibleName;
2203
+ /** ARIA Accessible name of the `<input matEndDate/>` */
2204
+ endDateAccessibleName;
2205
+ /** Emits when the currently selected date changes. */
2206
+ selectedChange = new EventEmitter();
2207
+ /**
2208
+ * Emits the year chosen in multiyear view.
2209
+ * This doesn't imply a change on the selected date.
2210
+ */
2211
+ yearSelected = new EventEmitter();
2212
+ /**
2213
+ * Emits the month chosen in year view.
2214
+ * This doesn't imply a change on the selected date.
2215
+ */
2216
+ monthSelected = new EventEmitter();
2217
+ /**
2218
+ * Emits when the current view changes.
2219
+ */
2220
+ viewChanged = new EventEmitter(true);
2221
+ /** Emits when any date is selected. */
2222
+ _userSelection = new EventEmitter();
2223
+ /** Emits a new date range value when the user completes a drag drop operation. */
2224
+ _userDragDrop = new EventEmitter();
2225
+ /** Reference to the current month view component. */
2226
+ monthView;
2227
+ /** Reference to the current year view component. */
2228
+ yearView;
2229
+ /** Reference to the current multi-year view component. */
2230
+ multiYearView;
2039
2231
  /**
2040
2232
  * The current active date. This determines which time period is shown and which date is
2041
2233
  * highlighted when using keyboard navigation.
@@ -2048,6 +2240,7 @@ class MatCalendar {
2048
2240
  this.stateChanges.next();
2049
2241
  this._changeDetectorRef.markForCheck();
2050
2242
  }
2243
+ _clampedActiveDate;
2051
2244
  /** Whether the calendar is in month view. */
2052
2245
  get currentView() {
2053
2246
  return this._currentView;
@@ -2061,44 +2254,14 @@ class MatCalendar {
2061
2254
  this.viewChanged.emit(viewChangedResult);
2062
2255
  }
2063
2256
  }
2257
+ _currentView;
2258
+ /** Origin of active drag, or null when dragging is not active. */
2259
+ _activeDrag = null;
2260
+ /**
2261
+ * Emits whenever there is a state change that the header may need to respond to.
2262
+ */
2263
+ stateChanges = new Subject();
2064
2264
  constructor() {
2065
- this._dateAdapter = inject(DateAdapter, { optional: true });
2066
- this._dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
2067
- this._changeDetectorRef = inject(ChangeDetectorRef);
2068
- /**
2069
- * Used for scheduling that focus should be moved to the active cell on the next tick.
2070
- * We need to schedule it, rather than do it immediately, because we have to wait
2071
- * for Angular to re-evaluate the view children.
2072
- */
2073
- this._moveFocusOnNextTick = false;
2074
- /** Whether the calendar should be started in month or year view. */
2075
- this.startView = 'month';
2076
- /** Emits when the currently selected date changes. */
2077
- this.selectedChange = new EventEmitter();
2078
- /**
2079
- * Emits the year chosen in multiyear view.
2080
- * This doesn't imply a change on the selected date.
2081
- */
2082
- this.yearSelected = new EventEmitter();
2083
- /**
2084
- * Emits the month chosen in year view.
2085
- * This doesn't imply a change on the selected date.
2086
- */
2087
- this.monthSelected = new EventEmitter();
2088
- /**
2089
- * Emits when the current view changes.
2090
- */
2091
- this.viewChanged = new EventEmitter(true);
2092
- /** Emits when any date is selected. */
2093
- this._userSelection = new EventEmitter();
2094
- /** Emits a new date range value when the user completes a drag drop operation. */
2095
- this._userDragDrop = new EventEmitter();
2096
- /** Origin of active drag, or null when dragging is not active. */
2097
- this._activeDrag = null;
2098
- /**
2099
- * Emits whenever there is a state change that the header may need to respond to.
2100
- */
2101
- this.stateChanges = new Subject();
2102
2265
  if (typeof ngDevMode === 'undefined' || ngDevMode) {
2103
2266
  if (!this._dateAdapter) {
2104
2267
  throw createMissingDateImplError('DateAdapter');
@@ -2208,8 +2371,8 @@ class MatCalendar {
2208
2371
  // only the first component type. See https://github.com/angular/components/issues/22996.
2209
2372
  return this.monthView || this.yearView || this.multiYearView;
2210
2373
  }
2211
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2212
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-next.10", type: MatCalendar, isStandalone: true, selector: "mat-calendar", inputs: { headerComponent: "headerComponent", startAt: "startAt", startView: "startView", selected: "selected", minDate: "minDate", maxDate: "maxDate", dateFilter: "dateFilter", dateClass: "dateClass", comparisonStart: "comparisonStart", comparisonEnd: "comparisonEnd", startDateAccessibleName: "startDateAccessibleName", endDateAccessibleName: "endDateAccessibleName" }, outputs: { selectedChange: "selectedChange", yearSelected: "yearSelected", monthSelected: "monthSelected", viewChanged: "viewChanged", _userSelection: "_userSelection", _userDragDrop: "_userDragDrop" }, host: { classAttribute: "mat-calendar" }, providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER], viewQueries: [{ propertyName: "monthView", first: true, predicate: MatMonthView, descendants: true }, { propertyName: "yearView", first: true, predicate: MatYearView, descendants: true }, { propertyName: "multiYearView", first: true, predicate: MatMultiYearView, descendants: true }], exportAs: ["matCalendar"], usesOnChanges: true, ngImport: i0, template: "<ng-template [cdkPortalOutlet]=\"_calendarHeaderPortal\"></ng-template>\n\n<div class=\"mat-calendar-content\" cdkMonitorSubtreeFocus tabindex=\"-1\">\n @switch (currentView) {\n @case ('month') {\n <mat-month-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n [comparisonStart]=\"comparisonStart\"\n [comparisonEnd]=\"comparisonEnd\"\n [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\"\n (_userSelection)=\"_dateSelected($event)\"\n (dragStarted)=\"_dragStarted($event)\"\n (dragEnded)=\"_dragEnded($event)\"\n [activeDrag]=\"_activeDrag\"></mat-month-view>\n }\n\n @case ('year') {\n <mat-year-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n (monthSelected)=\"_monthSelectedInYearView($event)\"\n (selectedChange)=\"_goToDateInView($event, 'month')\"></mat-year-view>\n }\n\n @case ('multi-year') {\n <mat-multi-year-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n (yearSelected)=\"_yearSelectedInMultiYearView($event)\"\n (selectedChange)=\"_goToDateInView($event, 'year')\"></mat-multi-year-view>\n }\n }\n</div>\n", styles: [".mat-calendar{display:block;line-height:normal;font-family:var(--mat-datepicker-calendar-text-font, var(--mat-sys-body-medium-font));font-size:var(--mat-datepicker-calendar-text-size, var(--mat-sys-body-medium-size))}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:none}.mat-calendar-controls{display:flex;align-items:center;margin:5% calc(4.7142857143% - 16px)}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0;margin:0 8px;font-size:var(--mat-datepicker-calendar-period-button-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-datepicker-calendar-period-button-text-weight, var(--mat-sys-title-small-weight));--mdc-text-button-label-text-color:var(--mat-datepicker-calendar-period-button-text-color, var(--mat-sys-on-surface-variant))}.mat-calendar-arrow{display:inline-block;width:10px;height:5px;margin:0 0 0 5px;vertical-align:middle;fill:var(--mat-datepicker-calendar-period-button-icon-color, var(--mat-sys-on-surface-variant))}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}@media(forced-colors: active){.mat-calendar-arrow{fill:CanvasText}}.mat-calendar-previous-button,.mat-calendar-next-button{position:relative}.mat-datepicker-content .mat-calendar-previous-button:not(.mat-mdc-button-disabled),.mat-datepicker-content .mat-calendar-next-button:not(.mat-mdc-button-disabled){color:var(--mat-datepicker-calendar-navigation-button-icon-color, var(--mat-sys-on-surface-variant))}.mat-calendar-previous-button::after,.mat-calendar-next-button::after{top:0;left:0;right:0;bottom:0;position:absolute;content:\"\";margin:15.5px;border:0 solid currentColor;border-top-width:2px}[dir=rtl] .mat-calendar-previous-button,[dir=rtl] .mat-calendar-next-button{transform:rotate(180deg)}.mat-calendar-previous-button::after{border-left-width:2px;transform:translateX(2px) rotate(-45deg)}.mat-calendar-next-button::after{border-right-width:2px;transform:translateX(-2px) rotate(45deg)}.mat-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.mat-calendar-table-header th{text-align:center;padding:0 0 8px 0;color:var(--mat-datepicker-calendar-header-text-color, var(--mat-sys-on-surface-variant));font-size:var(--mat-datepicker-calendar-header-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-datepicker-calendar-header-text-weight, var(--mat-sys-title-small-weight))}.mat-calendar-table-header-divider{position:relative;height:1px}.mat-calendar-table-header-divider::after{content:\"\";position:absolute;top:0;left:-8px;right:-8px;height:1px;background:var(--mat-datepicker-calendar-header-divider-color, transparent)}.mat-calendar-body-cell-content::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 3px)*-1)}.mat-calendar-body-cell:focus .mat-focus-indicator::before{content:\"\"}"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "component", type: MatMonthView, selector: "mat-month-view", inputs: ["activeDate", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName", "activeDrag"], outputs: ["selectedChange", "_userSelection", "dragStarted", "dragEnded", "activeDateChange"], exportAs: ["matMonthView"] }, { kind: "component", type: MatYearView, selector: "mat-year-view", inputs: ["activeDate", "selected", "minDate", "maxDate", "dateFilter", "dateClass"], outputs: ["selectedChange", "monthSelected", "activeDateChange"], exportAs: ["matYearView"] }, { kind: "component", type: MatMultiYearView, selector: "mat-multi-year-view", inputs: ["activeDate", "selected", "minDate", "maxDate", "dateFilter", "dateClass"], outputs: ["selectedChange", "yearSelected", "activeDateChange"], exportAs: ["matMultiYearView"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2374
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendar, deps: [], target: i0.ɵɵFactoryTarget.Component });
2375
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-next.10", type: MatCalendar, isStandalone: true, selector: "mat-calendar", inputs: { headerComponent: "headerComponent", startAt: "startAt", startView: "startView", selected: "selected", minDate: "minDate", maxDate: "maxDate", dateFilter: "dateFilter", dateClass: "dateClass", comparisonStart: "comparisonStart", comparisonEnd: "comparisonEnd", startDateAccessibleName: "startDateAccessibleName", endDateAccessibleName: "endDateAccessibleName" }, outputs: { selectedChange: "selectedChange", yearSelected: "yearSelected", monthSelected: "monthSelected", viewChanged: "viewChanged", _userSelection: "_userSelection", _userDragDrop: "_userDragDrop" }, host: { classAttribute: "mat-calendar" }, providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER], viewQueries: [{ propertyName: "monthView", first: true, predicate: MatMonthView, descendants: true }, { propertyName: "yearView", first: true, predicate: MatYearView, descendants: true }, { propertyName: "multiYearView", first: true, predicate: MatMultiYearView, descendants: true }], exportAs: ["matCalendar"], usesOnChanges: true, ngImport: i0, template: "<ng-template [cdkPortalOutlet]=\"_calendarHeaderPortal\"></ng-template>\n\n<div class=\"mat-calendar-content\" cdkMonitorSubtreeFocus tabindex=\"-1\">\n @switch (currentView) {\n @case ('month') {\n <mat-month-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n [comparisonStart]=\"comparisonStart\"\n [comparisonEnd]=\"comparisonEnd\"\n [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\"\n (_userSelection)=\"_dateSelected($event)\"\n (dragStarted)=\"_dragStarted($event)\"\n (dragEnded)=\"_dragEnded($event)\"\n [activeDrag]=\"_activeDrag\"></mat-month-view>\n }\n\n @case ('year') {\n <mat-year-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n (monthSelected)=\"_monthSelectedInYearView($event)\"\n (selectedChange)=\"_goToDateInView($event, 'month')\"></mat-year-view>\n }\n\n @case ('multi-year') {\n <mat-multi-year-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n (yearSelected)=\"_yearSelectedInMultiYearView($event)\"\n (selectedChange)=\"_goToDateInView($event, 'year')\"></mat-multi-year-view>\n }\n }\n</div>\n", styles: [".mat-calendar{display:block;line-height:normal;font-family:var(--mat-datepicker-calendar-text-font, var(--mat-sys-body-medium-font));font-size:var(--mat-datepicker-calendar-text-size, var(--mat-sys-body-medium-size))}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:none}.mat-calendar-controls{display:flex;align-items:center;margin:5% calc(4.7142857143% - 16px)}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0;margin:0 8px;font-size:var(--mat-datepicker-calendar-period-button-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-datepicker-calendar-period-button-text-weight, var(--mat-sys-title-small-weight));--mdc-text-button-label-text-color:var(--mat-datepicker-calendar-period-button-text-color, var(--mat-sys-on-surface-variant))}.mat-calendar-arrow{display:inline-block;width:10px;height:5px;margin:0 0 0 5px;vertical-align:middle;fill:var(--mat-datepicker-calendar-period-button-icon-color, var(--mat-sys-on-surface-variant))}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}@media(forced-colors: active){.mat-calendar-arrow{fill:CanvasText}}.mat-calendar-previous-button,.mat-calendar-next-button{position:relative}.mat-datepicker-content .mat-calendar-previous-button:not(.mat-mdc-button-disabled),.mat-datepicker-content .mat-calendar-next-button:not(.mat-mdc-button-disabled){color:var(--mat-datepicker-calendar-navigation-button-icon-color, var(--mat-sys-on-surface-variant))}.mat-calendar-previous-button::after,.mat-calendar-next-button::after{top:0;left:0;right:0;bottom:0;position:absolute;content:\"\";margin:15.5px;border:0 solid currentColor;border-top-width:2px}[dir=rtl] .mat-calendar-previous-button,[dir=rtl] .mat-calendar-next-button{transform:rotate(180deg)}.mat-calendar-previous-button::after{border-left-width:2px;transform:translateX(2px) rotate(-45deg)}.mat-calendar-next-button::after{border-right-width:2px;transform:translateX(-2px) rotate(45deg)}.mat-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.mat-calendar-table-header th{text-align:center;padding:0 0 8px 0;color:var(--mat-datepicker-calendar-header-text-color, var(--mat-sys-on-surface-variant));font-size:var(--mat-datepicker-calendar-header-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-datepicker-calendar-header-text-weight, var(--mat-sys-title-small-weight))}.mat-calendar-table-header-divider{position:relative;height:1px}.mat-calendar-table-header-divider::after{content:\"\";position:absolute;top:0;left:-8px;right:-8px;height:1px;background:var(--mat-datepicker-calendar-header-divider-color, transparent)}.mat-calendar-body-cell-content::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 3px)*-1)}.mat-calendar-body-cell:focus .mat-focus-indicator::before{content:\"\"}"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "component", type: MatMonthView, selector: "mat-month-view", inputs: ["activeDate", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName", "activeDrag"], outputs: ["selectedChange", "_userSelection", "dragStarted", "dragEnded", "activeDateChange"], exportAs: ["matMonthView"] }, { kind: "component", type: MatYearView, selector: "mat-year-view", inputs: ["activeDate", "selected", "minDate", "maxDate", "dateFilter", "dateClass"], outputs: ["selectedChange", "monthSelected", "activeDateChange"], exportAs: ["matYearView"] }, { kind: "component", type: MatMultiYearView, selector: "mat-multi-year-view", inputs: ["activeDate", "selected", "minDate", "maxDate", "dateFilter", "dateClass"], outputs: ["selectedChange", "yearSelected", "activeDateChange"], exportAs: ["matMultiYearView"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2213
2376
  }
2214
2377
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendar, decorators: [{
2215
2378
  type: Component,
@@ -2318,19 +2481,51 @@ const MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {
2318
2481
  * @docs-private
2319
2482
  */
2320
2483
  class MatDatepickerContent {
2484
+ _elementRef = inject(ElementRef);
2485
+ _changeDetectorRef = inject(ChangeDetectorRef);
2486
+ _globalModel = inject(MatDateSelectionModel);
2487
+ _dateAdapter = inject(DateAdapter);
2488
+ _rangeSelectionStrategy = inject(MAT_DATE_RANGE_SELECTION_STRATEGY, { optional: true });
2489
+ _subscriptions = new Subscription();
2490
+ _model;
2491
+ /** Reference to the internal calendar component. */
2492
+ _calendar;
2493
+ /**
2494
+ * Theme color of the internal calendar. This API is supported in M2 themes
2495
+ * only, it has no effect in M3 themes.
2496
+ *
2497
+ * For information on applying color variants in M3, see
2498
+ * https://material.angular.io/guide/theming#using-component-color-variants.
2499
+ */
2500
+ color;
2501
+ /** Reference to the datepicker that created the overlay. */
2502
+ datepicker;
2503
+ /** Start of the comparison range. */
2504
+ comparisonStart;
2505
+ /** End of the comparison range. */
2506
+ comparisonEnd;
2507
+ /** ARIA Accessible name of the `<input matStartDate/>` */
2508
+ startDateAccessibleName;
2509
+ /** ARIA Accessible name of the `<input matEndDate/>` */
2510
+ endDateAccessibleName;
2511
+ /** Whether the datepicker is above or below the input. */
2512
+ _isAbove;
2513
+ /** Current state of the animation. */
2514
+ _animationState;
2515
+ /** Emits when an animation has finished. */
2516
+ _animationDone = new Subject();
2517
+ /** Whether there is an in-progress animation. */
2518
+ _isAnimating = false;
2519
+ /** Text for the close button. */
2520
+ _closeButtonText;
2521
+ /** Whether the close button currently has focus. */
2522
+ _closeButtonFocused;
2523
+ /** Portal with projected action buttons. */
2524
+ _actionsPortal = null;
2525
+ /** Id of the label for the `role="dialog"` element. */
2526
+ _dialogLabelId;
2321
2527
  constructor() {
2322
- this._elementRef = inject(ElementRef);
2323
- this._changeDetectorRef = inject(ChangeDetectorRef);
2324
- this._globalModel = inject(MatDateSelectionModel);
2325
- this._dateAdapter = inject(DateAdapter);
2326
- this._rangeSelectionStrategy = inject(MAT_DATE_RANGE_SELECTION_STRATEGY, { optional: true });
2327
- this._subscriptions = new Subscription();
2328
- /** Emits when an animation has finished. */
2329
- this._animationDone = new Subject();
2330
- /** Whether there is an in-progress animation. */
2331
- this._isAnimating = false;
2332
- /** Portal with projected action buttons. */
2333
- this._actionsPortal = null;
2528
+ inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);
2334
2529
  const intl = inject(MatDatepickerIntl);
2335
2530
  this._closeButtonText = intl.closeCalendarLabel;
2336
2531
  }
@@ -2408,8 +2603,8 @@ class MatDatepickerContent {
2408
2603
  this._changeDetectorRef.detectChanges();
2409
2604
  }
2410
2605
  }
2411
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerContent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2412
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerContent, isStandalone: true, selector: "mat-datepicker-content", inputs: { color: "color" }, host: { listeners: { "@transformPanel.start": "_handleAnimationEvent($event)", "@transformPanel.done": "_handleAnimationEvent($event)" }, properties: { "class": "color ? \"mat-\" + color : \"\"", "@transformPanel": "_animationState", "class.mat-datepicker-content-touch": "datepicker.touchUi" }, classAttribute: "mat-datepicker-content" }, viewQueries: [{ propertyName: "_calendar", first: true, predicate: MatCalendar, descendants: true }], exportAs: ["matDatepickerContent"], ngImport: i0, template: "<div\n cdkTrapFocus\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"_dialogLabelId ?? undefined\"\n class=\"mat-datepicker-content-container\"\n [class.mat-datepicker-content-container-with-custom-header]=\"datepicker.calendarHeaderComponent\"\n [class.mat-datepicker-content-container-with-actions]=\"_actionsPortal\">\n <mat-calendar\n [id]=\"datepicker.id\"\n [class]=\"datepicker.panelClass\"\n [startAt]=\"datepicker.startAt\"\n [startView]=\"datepicker.startView\"\n [minDate]=\"datepicker._getMinDate()\"\n [maxDate]=\"datepicker._getMaxDate()\"\n [dateFilter]=\"datepicker._getDateFilter()\"\n [headerComponent]=\"datepicker.calendarHeaderComponent\"\n [selected]=\"_getSelected()\"\n [dateClass]=\"datepicker.dateClass\"\n [comparisonStart]=\"comparisonStart\"\n [comparisonEnd]=\"comparisonEnd\"\n [@fadeInCalendar]=\"'enter'\"\n [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\"\n (yearSelected)=\"datepicker._selectYear($event)\"\n (monthSelected)=\"datepicker._selectMonth($event)\"\n (viewChanged)=\"datepicker._viewChanged($event)\"\n (_userSelection)=\"_handleUserSelection($event)\"\n (_userDragDrop)=\"_handleUserDragDrop($event)\"></mat-calendar>\n\n <ng-template [cdkPortalOutlet]=\"_actionsPortal\"></ng-template>\n\n <!-- Invisible close button for screen reader users. -->\n <button\n type=\"button\"\n mat-raised-button\n [color]=\"color || 'primary'\"\n class=\"mat-datepicker-close-button\"\n [class.cdk-visually-hidden]=\"!_closeButtonFocused\"\n (focus)=\"_closeButtonFocused = true\"\n (blur)=\"_closeButtonFocused = false\"\n (click)=\"datepicker.close()\">{{ _closeButtonText }}</button>\n</div>\n", styles: [".mat-datepicker-content{display:block;border-radius:4px;background-color:var(--mat-datepicker-calendar-container-background-color, var(--mat-sys-surface-container-high));color:var(--mat-datepicker-calendar-container-text-color, var(--mat-sys-on-surface));box-shadow:var(--mat-datepicker-calendar-container-elevation-shadow, 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12));border-radius:var(--mat-datepicker-calendar-container-shape, var(--mat-sys-corner-large))}.mat-datepicker-content .mat-calendar{width:296px;height:354px}.mat-datepicker-content .mat-datepicker-content-container-with-custom-header .mat-calendar{height:auto}.mat-datepicker-content .mat-datepicker-close-button{position:absolute;top:100%;left:0;margin-top:8px}.ng-animating .mat-datepicker-content .mat-datepicker-close-button{display:none}.mat-datepicker-content-container{display:flex;flex-direction:column;justify-content:space-between}.mat-datepicker-content-touch{display:block;max-height:80vh;box-shadow:var(--mat-datepicker-calendar-container-touch-elevation-shadow, 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12));border-radius:var(--mat-datepicker-calendar-container-touch-shape, var(--mat-sys-corner-extra-large));position:relative;overflow:visible}.mat-datepicker-content-touch .mat-datepicker-content-container{min-height:312px;max-height:788px;min-width:250px;max-width:750px}.mat-datepicker-content-touch .mat-calendar{width:100%;height:auto}@media all and (orientation: landscape){.mat-datepicker-content-touch .mat-datepicker-content-container{width:64vh;height:80vh}}@media all and (orientation: portrait){.mat-datepicker-content-touch .mat-datepicker-content-container{width:80vw;height:100vw}.mat-datepicker-content-touch .mat-datepicker-content-container-with-actions{height:115vw}}"], dependencies: [{ kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection", "_userDragDrop"], exportAs: ["matCalendar"] }, { kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], animations: [matDatepickerAnimations.transformPanel, matDatepickerAnimations.fadeInCalendar], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2606
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2607
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerContent, isStandalone: true, selector: "mat-datepicker-content", inputs: { color: "color" }, host: { listeners: { "@transformPanel.start": "_handleAnimationEvent($event)", "@transformPanel.done": "_handleAnimationEvent($event)" }, properties: { "class": "color ? \"mat-\" + color : \"\"", "@transformPanel": "_animationState", "class.mat-datepicker-content-touch": "datepicker.touchUi" }, classAttribute: "mat-datepicker-content" }, viewQueries: [{ propertyName: "_calendar", first: true, predicate: MatCalendar, descendants: true }], exportAs: ["matDatepickerContent"], ngImport: i0, template: "<div\n cdkTrapFocus\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"_dialogLabelId ?? undefined\"\n class=\"mat-datepicker-content-container\"\n [class.mat-datepicker-content-container-with-custom-header]=\"datepicker.calendarHeaderComponent\"\n [class.mat-datepicker-content-container-with-actions]=\"_actionsPortal\">\n <mat-calendar\n [id]=\"datepicker.id\"\n [class]=\"datepicker.panelClass\"\n [startAt]=\"datepicker.startAt\"\n [startView]=\"datepicker.startView\"\n [minDate]=\"datepicker._getMinDate()\"\n [maxDate]=\"datepicker._getMaxDate()\"\n [dateFilter]=\"datepicker._getDateFilter()\"\n [headerComponent]=\"datepicker.calendarHeaderComponent\"\n [selected]=\"_getSelected()\"\n [dateClass]=\"datepicker.dateClass\"\n [comparisonStart]=\"comparisonStart\"\n [comparisonEnd]=\"comparisonEnd\"\n [@fadeInCalendar]=\"'enter'\"\n [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\"\n (yearSelected)=\"datepicker._selectYear($event)\"\n (monthSelected)=\"datepicker._selectMonth($event)\"\n (viewChanged)=\"datepicker._viewChanged($event)\"\n (_userSelection)=\"_handleUserSelection($event)\"\n (_userDragDrop)=\"_handleUserDragDrop($event)\"></mat-calendar>\n\n <ng-template [cdkPortalOutlet]=\"_actionsPortal\"></ng-template>\n\n <!-- Invisible close button for screen reader users. -->\n <button\n type=\"button\"\n mat-raised-button\n [color]=\"color || 'primary'\"\n class=\"mat-datepicker-close-button\"\n [class.cdk-visually-hidden]=\"!_closeButtonFocused\"\n (focus)=\"_closeButtonFocused = true\"\n (blur)=\"_closeButtonFocused = false\"\n (click)=\"datepicker.close()\">{{ _closeButtonText }}</button>\n</div>\n", styles: [".mat-datepicker-content{display:block;border-radius:4px;background-color:var(--mat-datepicker-calendar-container-background-color, var(--mat-sys-surface-container-high));color:var(--mat-datepicker-calendar-container-text-color, var(--mat-sys-on-surface));box-shadow:var(--mat-datepicker-calendar-container-elevation-shadow, 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12));border-radius:var(--mat-datepicker-calendar-container-shape, var(--mat-sys-corner-large))}.mat-datepicker-content .mat-calendar{width:296px;height:354px}.mat-datepicker-content .mat-datepicker-content-container-with-custom-header .mat-calendar{height:auto}.mat-datepicker-content .mat-datepicker-close-button{position:absolute;top:100%;left:0;margin-top:8px}.ng-animating .mat-datepicker-content .mat-datepicker-close-button{display:none}.mat-datepicker-content-container{display:flex;flex-direction:column;justify-content:space-between}.mat-datepicker-content-touch{display:block;max-height:80vh;box-shadow:var(--mat-datepicker-calendar-container-touch-elevation-shadow, 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12));border-radius:var(--mat-datepicker-calendar-container-touch-shape, var(--mat-sys-corner-extra-large));position:relative;overflow:visible}.mat-datepicker-content-touch .mat-datepicker-content-container{min-height:312px;max-height:788px;min-width:250px;max-width:750px}.mat-datepicker-content-touch .mat-calendar{width:100%;height:auto}@media all and (orientation: landscape){.mat-datepicker-content-touch .mat-datepicker-content-container{width:64vh;height:80vh}}@media all and (orientation: portrait){.mat-datepicker-content-touch .mat-datepicker-content-container{width:80vw;height:100vw}.mat-datepicker-content-touch .mat-datepicker-content-container-with-actions{height:115vw}}"], dependencies: [{ kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection", "_userDragDrop"], exportAs: ["matCalendar"] }, { kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], animations: [matDatepickerAnimations.transformPanel, matDatepickerAnimations.fadeInCalendar], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2413
2608
  }
2414
2609
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerContent, decorators: [{
2415
2610
  type: Component,
@@ -2429,6 +2624,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
2429
2624
  }] } });
2430
2625
  /** Base class for a datepicker. */
2431
2626
  class MatDatepickerBase {
2627
+ _overlay = inject(Overlay);
2628
+ _viewContainerRef = inject(ViewContainerRef);
2629
+ _dateAdapter = inject(DateAdapter, { optional: true });
2630
+ _dir = inject(Directionality, { optional: true });
2631
+ _model = inject(MatDateSelectionModel);
2632
+ _scrollStrategy = inject(MAT_DATEPICKER_SCROLL_STRATEGY);
2633
+ _inputStateChanges = Subscription.EMPTY;
2634
+ _document = inject(DOCUMENT);
2635
+ /** An input indicating the type of the custom header component for the calendar, if set. */
2636
+ calendarHeaderComponent;
2432
2637
  /** The date to open the calendar to initially. */
2433
2638
  get startAt() {
2434
2639
  // If an explicit startAt is set we start there, otherwise we start at whatever the currently
@@ -2438,6 +2643,9 @@ class MatDatepickerBase {
2438
2643
  set startAt(value) {
2439
2644
  this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
2440
2645
  }
2646
+ _startAt;
2647
+ /** The view that the calendar should start in. */
2648
+ startView = 'month';
2441
2649
  /**
2442
2650
  * Theme color of the datepicker's calendar. This API is supported in M2 themes only, it
2443
2651
  * has no effect in M3 themes.
@@ -2451,6 +2659,12 @@ class MatDatepickerBase {
2451
2659
  set color(value) {
2452
2660
  this._color = value;
2453
2661
  }
2662
+ _color;
2663
+ /**
2664
+ * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather
2665
+ * than a dropdown and elements have more padding to allow for bigger touch targets.
2666
+ */
2667
+ touchUi = false;
2454
2668
  /** Whether the datepicker pop-up should be disabled. */
2455
2669
  get disabled() {
2456
2670
  return this._disabled === undefined && this.datepickerInput
@@ -2463,6 +2677,37 @@ class MatDatepickerBase {
2463
2677
  this.stateChanges.next(undefined);
2464
2678
  }
2465
2679
  }
2680
+ _disabled;
2681
+ /** Preferred position of the datepicker in the X axis. */
2682
+ xPosition = 'start';
2683
+ /** Preferred position of the datepicker in the Y axis. */
2684
+ yPosition = 'below';
2685
+ /**
2686
+ * Whether to restore focus to the previously-focused element when the calendar is closed.
2687
+ * Note that automatic focus restoration is an accessibility feature and it is recommended that
2688
+ * you provide your own equivalent, if you decide to turn it off.
2689
+ */
2690
+ restoreFocus = true;
2691
+ /**
2692
+ * Emits selected year in multiyear view.
2693
+ * This doesn't imply a change on the selected date.
2694
+ */
2695
+ yearSelected = new EventEmitter();
2696
+ /**
2697
+ * Emits selected month in year view.
2698
+ * This doesn't imply a change on the selected date.
2699
+ */
2700
+ monthSelected = new EventEmitter();
2701
+ /**
2702
+ * Emits when the current view changes.
2703
+ */
2704
+ viewChanged = new EventEmitter(true);
2705
+ /** Function that can be used to add custom CSS classes to dates. */
2706
+ dateClass;
2707
+ /** Emits when the datepicker has been opened. */
2708
+ openedStream = new EventEmitter();
2709
+ /** Emits when the datepicker has been closed. */
2710
+ closedStream = new EventEmitter();
2466
2711
  /** Classes to be passed to the date picker panel. */
2467
2712
  get panelClass() {
2468
2713
  return this._panelClass;
@@ -2470,6 +2715,7 @@ class MatDatepickerBase {
2470
2715
  set panelClass(value) {
2471
2716
  this._panelClass = coerceStringArray(value);
2472
2717
  }
2718
+ _panelClass;
2473
2719
  /** Whether the calendar is open. */
2474
2720
  get opened() {
2475
2721
  return this._opened;
@@ -2482,6 +2728,9 @@ class MatDatepickerBase {
2482
2728
  this.close();
2483
2729
  }
2484
2730
  }
2731
+ _opened = false;
2732
+ /** The id for the datepicker calendar. */
2733
+ id = `mat-datepicker-${datepickerUid++}`;
2485
2734
  /** The minimum selectable date. */
2486
2735
  _getMinDate() {
2487
2736
  return this.datepickerInput && this.datepickerInput.min;
@@ -2493,61 +2742,23 @@ class MatDatepickerBase {
2493
2742
  _getDateFilter() {
2494
2743
  return this.datepickerInput && this.datepickerInput.dateFilter;
2495
2744
  }
2745
+ /** A reference to the overlay into which we've rendered the calendar. */
2746
+ _overlayRef;
2747
+ /** Reference to the component instance rendered in the overlay. */
2748
+ _componentRef;
2749
+ /** The element that was focused before the datepicker was opened. */
2750
+ _focusedElementBeforeOpen = null;
2751
+ /** Unique class that will be added to the backdrop so that the test harnesses can look it up. */
2752
+ _backdropHarnessClass = `${this.id}-backdrop`;
2753
+ /** Currently-registered actions portal. */
2754
+ _actionsPortal;
2755
+ /** The input element this datepicker is associated with. */
2756
+ datepickerInput;
2757
+ /** Emits when the datepicker's state changes. */
2758
+ stateChanges = new Subject();
2759
+ _injector = inject(Injector);
2760
+ _changeDetectorRef = inject(ChangeDetectorRef);
2496
2761
  constructor() {
2497
- this._overlay = inject(Overlay);
2498
- this._viewContainerRef = inject(ViewContainerRef);
2499
- this._dateAdapter = inject(DateAdapter, { optional: true });
2500
- this._dir = inject(Directionality, { optional: true });
2501
- this._model = inject(MatDateSelectionModel);
2502
- this._scrollStrategy = inject(MAT_DATEPICKER_SCROLL_STRATEGY);
2503
- this._inputStateChanges = Subscription.EMPTY;
2504
- this._document = inject(DOCUMENT);
2505
- /** The view that the calendar should start in. */
2506
- this.startView = 'month';
2507
- /**
2508
- * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather
2509
- * than a dropdown and elements have more padding to allow for bigger touch targets.
2510
- */
2511
- this.touchUi = false;
2512
- /** Preferred position of the datepicker in the X axis. */
2513
- this.xPosition = 'start';
2514
- /** Preferred position of the datepicker in the Y axis. */
2515
- this.yPosition = 'below';
2516
- /**
2517
- * Whether to restore focus to the previously-focused element when the calendar is closed.
2518
- * Note that automatic focus restoration is an accessibility feature and it is recommended that
2519
- * you provide your own equivalent, if you decide to turn it off.
2520
- */
2521
- this.restoreFocus = true;
2522
- /**
2523
- * Emits selected year in multiyear view.
2524
- * This doesn't imply a change on the selected date.
2525
- */
2526
- this.yearSelected = new EventEmitter();
2527
- /**
2528
- * Emits selected month in year view.
2529
- * This doesn't imply a change on the selected date.
2530
- */
2531
- this.monthSelected = new EventEmitter();
2532
- /**
2533
- * Emits when the current view changes.
2534
- */
2535
- this.viewChanged = new EventEmitter(true);
2536
- /** Emits when the datepicker has been opened. */
2537
- this.openedStream = new EventEmitter();
2538
- /** Emits when the datepicker has been closed. */
2539
- this.closedStream = new EventEmitter();
2540
- this._opened = false;
2541
- /** The id for the datepicker calendar. */
2542
- this.id = `mat-datepicker-${datepickerUid++}`;
2543
- /** The element that was focused before the datepicker was opened. */
2544
- this._focusedElementBeforeOpen = null;
2545
- /** Unique class that will be added to the backdrop so that the test harnesses can look it up. */
2546
- this._backdropHarnessClass = `${this.id}-backdrop`;
2547
- /** Emits when the datepicker's state changes. */
2548
- this.stateChanges = new Subject();
2549
- this._injector = inject(Injector);
2550
- this._changeDetectorRef = inject(ChangeDetectorRef);
2551
2762
  if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {
2552
2763
  throw createMissingDateImplError('DateAdapter');
2553
2764
  }
@@ -2811,8 +3022,8 @@ class MatDatepickerBase {
2811
3022
  ctrlShiftMetaModifiers.every((modifier) => !hasModifierKey(event, modifier))));
2812
3023
  })));
2813
3024
  }
2814
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2815
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.0.0-next.10", type: MatDatepickerBase, isStandalone: true, inputs: { calendarHeaderComponent: "calendarHeaderComponent", startAt: "startAt", startView: "startView", color: "color", touchUi: ["touchUi", "touchUi", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], xPosition: "xPosition", yPosition: "yPosition", restoreFocus: ["restoreFocus", "restoreFocus", booleanAttribute], dateClass: "dateClass", panelClass: "panelClass", opened: ["opened", "opened", booleanAttribute] }, outputs: { yearSelected: "yearSelected", monthSelected: "monthSelected", viewChanged: "viewChanged", openedStream: "opened", closedStream: "closed" }, usesOnChanges: true, ngImport: i0 }); }
3025
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3026
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.0.0-next.10", type: MatDatepickerBase, isStandalone: true, inputs: { calendarHeaderComponent: "calendarHeaderComponent", startAt: "startAt", startView: "startView", color: "color", touchUi: ["touchUi", "touchUi", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], xPosition: "xPosition", yPosition: "yPosition", restoreFocus: ["restoreFocus", "restoreFocus", booleanAttribute], dateClass: "dateClass", panelClass: "panelClass", opened: ["opened", "opened", booleanAttribute] }, outputs: { yearSelected: "yearSelected", monthSelected: "monthSelected", viewChanged: "viewChanged", openedStream: "opened", closedStream: "closed" }, usesOnChanges: true, ngImport: i0 });
2816
3027
  }
2817
3028
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerBase, decorators: [{
2818
3029
  type: Directive
@@ -2863,11 +3074,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
2863
3074
  // if angular adds support for `exportAs: '$implicit'` on directives.
2864
3075
  /** Component responsible for managing the datepicker popup/dialog. */
2865
3076
  class MatDatepicker extends MatDatepickerBase {
2866
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepicker, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2867
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepicker, isStandalone: true, selector: "mat-datepicker", providers: [
3077
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepicker, deps: null, target: i0.ɵɵFactoryTarget.Component });
3078
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepicker, isStandalone: true, selector: "mat-datepicker", providers: [
2868
3079
  MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER,
2869
3080
  { provide: MatDatepickerBase, useExisting: MatDatepicker },
2870
- ], exportAs: ["matDatepicker"], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
3081
+ ], exportAs: ["matDatepicker"], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2871
3082
  }
2872
3083
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepicker, decorators: [{
2873
3084
  type: Component,
@@ -2890,6 +3101,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
2890
3101
  * calendar popup. For consistency, we always use MatDatepickerInputEvent instead.
2891
3102
  */
2892
3103
  class MatDatepickerInputEvent {
3104
+ target;
3105
+ targetElement;
3106
+ /** The new value for the target datepicker input. */
3107
+ value;
2893
3108
  constructor(
2894
3109
  /** Reference to the datepicker input component that emitted the event. */
2895
3110
  target,
@@ -2902,6 +3117,11 @@ class MatDatepickerInputEvent {
2902
3117
  }
2903
3118
  /** Base class for datepicker inputs. */
2904
3119
  class MatDatepickerInputBase {
3120
+ _elementRef = inject(ElementRef);
3121
+ _dateAdapter = inject(DateAdapter, { optional: true });
3122
+ _dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
3123
+ /** Whether the component has been initialized. */
3124
+ _isInitialized;
2905
3125
  /** The value of the input. */
2906
3126
  get value() {
2907
3127
  return this._model ? this._getValueFromModel(this._model.selection) : this._pendingValue;
@@ -2909,6 +3129,7 @@ class MatDatepickerInputBase {
2909
3129
  set value(value) {
2910
3130
  this._assignValueProgrammatically(value);
2911
3131
  }
3132
+ _model;
2912
3133
  /** Whether the datepicker-input is disabled. */
2913
3134
  get disabled() {
2914
3135
  return !!this._disabled || this._parentDisabled();
@@ -2931,6 +3152,53 @@ class MatDatepickerInputBase {
2931
3152
  element.blur();
2932
3153
  }
2933
3154
  }
3155
+ _disabled;
3156
+ /** Emits when a `change` event is fired on this `<input>`. */
3157
+ dateChange = new EventEmitter();
3158
+ /** Emits when an `input` event is fired on this `<input>`. */
3159
+ dateInput = new EventEmitter();
3160
+ /** Emits when the internal state has changed */
3161
+ stateChanges = new Subject();
3162
+ _onTouched = () => { };
3163
+ _validatorOnChange = () => { };
3164
+ _cvaOnChange = () => { };
3165
+ _valueChangesSubscription = Subscription.EMPTY;
3166
+ _localeSubscription = Subscription.EMPTY;
3167
+ /**
3168
+ * Since the value is kept on the model which is assigned in an Input,
3169
+ * we might get a value before we have a model. This property keeps track
3170
+ * of the value until we have somewhere to assign it.
3171
+ */
3172
+ _pendingValue;
3173
+ /** The form control validator for whether the input parses. */
3174
+ _parseValidator = () => {
3175
+ return this._lastValueValid
3176
+ ? null
3177
+ : { 'matDatepickerParse': { 'text': this._elementRef.nativeElement.value } };
3178
+ };
3179
+ /** The form control validator for the date filter. */
3180
+ _filterValidator = (control) => {
3181
+ const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
3182
+ return !controlValue || this._matchesFilter(controlValue)
3183
+ ? null
3184
+ : { 'matDatepickerFilter': true };
3185
+ };
3186
+ /** The form control validator for the min date. */
3187
+ _minValidator = (control) => {
3188
+ const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
3189
+ const min = this._getMinDate();
3190
+ return !min || !controlValue || this._dateAdapter.compareDate(min, controlValue) <= 0
3191
+ ? null
3192
+ : { 'matDatepickerMin': { 'min': min, 'actual': controlValue } };
3193
+ };
3194
+ /** The form control validator for the max date. */
3195
+ _maxValidator = (control) => {
3196
+ const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
3197
+ const max = this._getMaxDate();
3198
+ return !max || !controlValue || this._dateAdapter.compareDate(max, controlValue) >= 0
3199
+ ? null
3200
+ : { 'matDatepickerMax': { 'max': max, 'actual': controlValue } };
3201
+ };
2934
3202
  /** Gets the base validator functions. */
2935
3203
  _getValidators() {
2936
3204
  return [this._parseValidator, this._minValidator, this._maxValidator, this._filterValidator];
@@ -2954,52 +3222,9 @@ class MatDatepickerInputBase {
2954
3222
  }
2955
3223
  });
2956
3224
  }
3225
+ /** Whether the last value set on the input was valid. */
3226
+ _lastValueValid = false;
2957
3227
  constructor() {
2958
- this._elementRef = inject(ElementRef);
2959
- this._dateAdapter = inject(DateAdapter, { optional: true });
2960
- this._dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
2961
- /** Emits when a `change` event is fired on this `<input>`. */
2962
- this.dateChange = new EventEmitter();
2963
- /** Emits when an `input` event is fired on this `<input>`. */
2964
- this.dateInput = new EventEmitter();
2965
- /** Emits when the internal state has changed */
2966
- this.stateChanges = new Subject();
2967
- this._onTouched = () => { };
2968
- this._validatorOnChange = () => { };
2969
- this._cvaOnChange = () => { };
2970
- this._valueChangesSubscription = Subscription.EMPTY;
2971
- this._localeSubscription = Subscription.EMPTY;
2972
- /** The form control validator for whether the input parses. */
2973
- this._parseValidator = () => {
2974
- return this._lastValueValid
2975
- ? null
2976
- : { 'matDatepickerParse': { 'text': this._elementRef.nativeElement.value } };
2977
- };
2978
- /** The form control validator for the date filter. */
2979
- this._filterValidator = (control) => {
2980
- const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
2981
- return !controlValue || this._matchesFilter(controlValue)
2982
- ? null
2983
- : { 'matDatepickerFilter': true };
2984
- };
2985
- /** The form control validator for the min date. */
2986
- this._minValidator = (control) => {
2987
- const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
2988
- const min = this._getMinDate();
2989
- return !min || !controlValue || this._dateAdapter.compareDate(min, controlValue) <= 0
2990
- ? null
2991
- : { 'matDatepickerMin': { 'min': min, 'actual': controlValue } };
2992
- };
2993
- /** The form control validator for the max date. */
2994
- this._maxValidator = (control) => {
2995
- const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
2996
- const max = this._getMaxDate();
2997
- return !max || !controlValue || this._dateAdapter.compareDate(max, controlValue) >= 0
2998
- ? null
2999
- : { 'matDatepickerMax': { 'max': max, 'actual': controlValue } };
3000
- };
3001
- /** Whether the last value set on the input was valid. */
3002
- this._lastValueValid = false;
3003
3228
  if (typeof ngDevMode === 'undefined' || ngDevMode) {
3004
3229
  if (!this._dateAdapter) {
3005
3230
  throw createMissingDateImplError('DateAdapter');
@@ -3138,8 +3363,8 @@ class MatDatepickerInputBase {
3138
3363
  const filter = this._getDateFilter();
3139
3364
  return !filter || filter(value);
3140
3365
  }
3141
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerInputBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
3142
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.0.0-next.10", type: MatDatepickerInputBase, isStandalone: true, inputs: { value: "value", disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { dateChange: "dateChange", dateInput: "dateInput" }, usesOnChanges: true, ngImport: i0 }); }
3366
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerInputBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3367
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.0.0-next.10", type: MatDatepickerInputBase, isStandalone: true, inputs: { value: "value", disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { dateChange: "dateChange", dateInput: "dateInput" }, usesOnChanges: true, ngImport: i0 });
3143
3368
  }
3144
3369
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerInputBase, decorators: [{
3145
3370
  type: Directive
@@ -3187,6 +3412,9 @@ const MAT_DATEPICKER_VALIDATORS = {
3187
3412
  };
3188
3413
  /** Directive used to connect an input to a MatDatepicker. */
3189
3414
  class MatDatepickerInput extends MatDatepickerInputBase {
3415
+ _formField = inject(MAT_FORM_FIELD, { optional: true });
3416
+ _closedSubscription = Subscription.EMPTY;
3417
+ _openedSubscription = Subscription.EMPTY;
3190
3418
  /** The datepicker that this input is associated with. */
3191
3419
  set matDatepicker(datepicker) {
3192
3420
  if (datepicker) {
@@ -3202,6 +3430,9 @@ class MatDatepickerInput extends MatDatepickerInputBase {
3202
3430
  this._registerModel(datepicker.registerInput(this));
3203
3431
  }
3204
3432
  }
3433
+ _datepicker;
3434
+ /** The id of the panel owned by this input. */
3435
+ _ariaOwns = signal(null);
3205
3436
  /** The minimum valid date. */
3206
3437
  get min() {
3207
3438
  return this._min;
@@ -3213,6 +3444,7 @@ class MatDatepickerInput extends MatDatepickerInputBase {
3213
3444
  this._validatorOnChange();
3214
3445
  }
3215
3446
  }
3447
+ _min;
3216
3448
  /** The maximum valid date. */
3217
3449
  get max() {
3218
3450
  return this._max;
@@ -3224,6 +3456,7 @@ class MatDatepickerInput extends MatDatepickerInputBase {
3224
3456
  this._validatorOnChange();
3225
3457
  }
3226
3458
  }
3459
+ _max;
3227
3460
  /** Function that can be used to filter out dates within the datepicker. */
3228
3461
  get dateFilter() {
3229
3462
  return this._dateFilter;
@@ -3235,13 +3468,11 @@ class MatDatepickerInput extends MatDatepickerInputBase {
3235
3468
  this._validatorOnChange();
3236
3469
  }
3237
3470
  }
3471
+ _dateFilter;
3472
+ /** The combined form control validator for this input. */
3473
+ _validator;
3238
3474
  constructor() {
3239
3475
  super();
3240
- this._formField = inject(MAT_FORM_FIELD, { optional: true });
3241
- this._closedSubscription = Subscription.EMPTY;
3242
- this._openedSubscription = Subscription.EMPTY;
3243
- /** The id of the panel owned by this input. */
3244
- this._ariaOwns = signal(null);
3245
3476
  this._validator = Validators.compose(super._getValidators());
3246
3477
  }
3247
3478
  /**
@@ -3300,12 +3531,12 @@ class MatDatepickerInput extends MatDatepickerInputBase {
3300
3531
  _shouldHandleChangeEvent(event) {
3301
3532
  return event.source !== this;
3302
3533
  }
3303
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
3304
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", 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: [
3534
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerInput, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3535
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", 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: [
3305
3536
  MAT_DATEPICKER_VALUE_ACCESSOR,
3306
3537
  MAT_DATEPICKER_VALIDATORS,
3307
3538
  { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput },
3308
- ], exportAs: ["matDatepickerInput"], usesInheritance: true, ngImport: i0 }); }
3539
+ ], exportAs: ["matDatepickerInput"], usesInheritance: true, ngImport: i0 });
3309
3540
  }
3310
3541
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerInput, decorators: [{
3311
3542
  type: Directive,
@@ -3346,8 +3577,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
3346
3577
 
3347
3578
  /** Can be used to override the icon of a `matDatepickerToggle`. */
3348
3579
  class MatDatepickerToggleIcon {
3349
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerToggleIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
3350
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerToggleIcon, isStandalone: true, selector: "[matDatepickerToggleIcon]", ngImport: i0 }); }
3580
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerToggleIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3581
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerToggleIcon, isStandalone: true, selector: "[matDatepickerToggleIcon]", ngImport: i0 });
3351
3582
  }
3352
3583
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerToggleIcon, decorators: [{
3353
3584
  type: Directive,
@@ -3356,6 +3587,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
3356
3587
  }]
3357
3588
  }] });
3358
3589
  class MatDatepickerToggle {
3590
+ _intl = inject(MatDatepickerIntl);
3591
+ _changeDetectorRef = inject(ChangeDetectorRef);
3592
+ _stateChanges = Subscription.EMPTY;
3593
+ /** Datepicker instance that the button will toggle. */
3594
+ datepicker;
3595
+ /** Tabindex for the toggle. */
3596
+ tabIndex;
3597
+ /** Screen-reader label for the button. */
3598
+ ariaLabel;
3359
3599
  /** Whether the toggle button is disabled. */
3360
3600
  get disabled() {
3361
3601
  if (this._disabled === undefined && this.datepicker) {
@@ -3366,10 +3606,14 @@ class MatDatepickerToggle {
3366
3606
  set disabled(value) {
3367
3607
  this._disabled = value;
3368
3608
  }
3609
+ _disabled;
3610
+ /** Whether ripples on the toggle should be disabled. */
3611
+ disableRipple;
3612
+ /** Custom icon set by the consumer. */
3613
+ _customIcon;
3614
+ /** Underlying button element. */
3615
+ _button;
3369
3616
  constructor() {
3370
- this._intl = inject(MatDatepickerIntl);
3371
- this._changeDetectorRef = inject(ChangeDetectorRef);
3372
- this._stateChanges = Subscription.EMPTY;
3373
3617
  const defaultTabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });
3374
3618
  const parsedTabIndex = Number(defaultTabIndex);
3375
3619
  this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;
@@ -3402,8 +3646,8 @@ class MatDatepickerToggle {
3402
3646
  this._stateChanges.unsubscribe();
3403
3647
  this._stateChanges = merge(this._intl.changes, datepickerStateChanged, inputStateChanged, datepickerToggled).subscribe(() => this._changeDetectorRef.markForCheck());
3404
3648
  }
3405
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerToggle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3406
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-next.10", type: MatDatepickerToggle, isStandalone: true, selector: "mat-datepicker-toggle", inputs: { datepicker: ["for", "datepicker"], tabIndex: "tabIndex", ariaLabel: ["aria-label", "ariaLabel"], disabled: ["disabled", "disabled", booleanAttribute], disableRipple: "disableRipple" }, host: { listeners: { "click": "_open($event)" }, properties: { "attr.tabindex": "null", "class.mat-datepicker-toggle-active": "datepicker && datepicker.opened", "class.mat-accent": "datepicker && datepicker.color === \"accent\"", "class.mat-warn": "datepicker && datepicker.color === \"warn\"", "attr.data-mat-calendar": "datepicker ? datepicker.id : null" }, classAttribute: "mat-datepicker-toggle" }, queries: [{ propertyName: "_customIcon", first: true, predicate: MatDatepickerToggleIcon, descendants: true }], viewQueries: [{ propertyName: "_button", first: true, predicate: ["button"], descendants: true }], exportAs: ["matDatepickerToggle"], usesOnChanges: true, ngImport: i0, template: "<button\n #button\n mat-icon-button\n type=\"button\"\n [attr.aria-haspopup]=\"datepicker ? 'dialog' : null\"\n [attr.aria-label]=\"ariaLabel || _intl.openCalendarLabel\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [disabled]=\"disabled\"\n [disableRipple]=\"disableRipple\">\n\n @if (!_customIcon) {\n <svg\n class=\"mat-datepicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\"\n aria-hidden=\"true\">\n <path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\"/>\n </svg>\n }\n\n <ng-content select=\"[matDatepickerToggleIcon]\"></ng-content>\n</button>\n", styles: [".mat-datepicker-toggle{pointer-events:auto;color:var(--mat-datepicker-toggle-icon-color, var(--mat-sys-on-surface-variant))}.mat-datepicker-toggle-active{color:var(--mat-datepicker-toggle-active-state-icon-color, var(--mat-sys-on-surface-variant))}@media(forced-colors: active){.mat-datepicker-toggle-default-icon{color:CanvasText}}"], dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
3649
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerToggle, deps: [], target: i0.ɵɵFactoryTarget.Component });
3650
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-next.10", type: MatDatepickerToggle, isStandalone: true, selector: "mat-datepicker-toggle", inputs: { datepicker: ["for", "datepicker"], tabIndex: "tabIndex", ariaLabel: ["aria-label", "ariaLabel"], disabled: ["disabled", "disabled", booleanAttribute], disableRipple: "disableRipple" }, host: { listeners: { "click": "_open($event)" }, properties: { "attr.tabindex": "null", "class.mat-datepicker-toggle-active": "datepicker && datepicker.opened", "class.mat-accent": "datepicker && datepicker.color === \"accent\"", "class.mat-warn": "datepicker && datepicker.color === \"warn\"", "attr.data-mat-calendar": "datepicker ? datepicker.id : null" }, classAttribute: "mat-datepicker-toggle" }, queries: [{ propertyName: "_customIcon", first: true, predicate: MatDatepickerToggleIcon, descendants: true }], viewQueries: [{ propertyName: "_button", first: true, predicate: ["button"], descendants: true }], exportAs: ["matDatepickerToggle"], usesOnChanges: true, ngImport: i0, template: "<button\n #button\n mat-icon-button\n type=\"button\"\n [attr.aria-haspopup]=\"datepicker ? 'dialog' : null\"\n [attr.aria-label]=\"ariaLabel || _intl.openCalendarLabel\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [disabled]=\"disabled\"\n [disableRipple]=\"disableRipple\">\n\n @if (!_customIcon) {\n <svg\n class=\"mat-datepicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\"\n aria-hidden=\"true\">\n <path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\"/>\n </svg>\n }\n\n <ng-content select=\"[matDatepickerToggleIcon]\"></ng-content>\n</button>\n", styles: [".mat-datepicker-toggle{pointer-events:auto;color:var(--mat-datepicker-toggle-icon-color, var(--mat-sys-on-surface-variant))}.mat-datepicker-toggle-active{color:var(--mat-datepicker-toggle-active-state-icon-color, var(--mat-sys-on-surface-variant))}@media(forced-colors: active){.mat-datepicker-toggle-default-icon{color:CanvasText}}"], dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
3407
3651
  }
3408
3652
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerToggle, decorators: [{
3409
3653
  type: Component,
@@ -3602,6 +3846,19 @@ const MAT_DATE_RANGE_INPUT_PARENT = new InjectionToken('MAT_DATE_RANGE_INPUT_PAR
3602
3846
  * Base class for the individual inputs that can be projected inside a `mat-date-range-input`.
3603
3847
  */
3604
3848
  class MatDateRangeInputPartBase extends MatDatepickerInputBase {
3849
+ _rangeInput = inject(MAT_DATE_RANGE_INPUT_PARENT);
3850
+ _elementRef = inject(ElementRef);
3851
+ _defaultErrorStateMatcher = inject(ErrorStateMatcher);
3852
+ _injector = inject(Injector);
3853
+ _parentForm = inject(NgForm, { optional: true });
3854
+ _parentFormGroup = inject(FormGroupDirective, { optional: true });
3855
+ /**
3856
+ * Form control bound to this input part.
3857
+ * @docs-private
3858
+ */
3859
+ ngControl;
3860
+ _dir = inject(Directionality, { optional: true });
3861
+ _errorStateTracker;
3605
3862
  /** Object used to control when error messages are shown. */
3606
3863
  get errorStateMatcher() {
3607
3864
  return this._errorStateTracker.matcher;
@@ -3618,13 +3875,6 @@ class MatDateRangeInputPartBase extends MatDatepickerInputBase {
3618
3875
  }
3619
3876
  constructor() {
3620
3877
  super();
3621
- this._rangeInput = inject(MAT_DATE_RANGE_INPUT_PARENT);
3622
- this._elementRef = inject(ElementRef);
3623
- this._defaultErrorStateMatcher = inject(ErrorStateMatcher);
3624
- this._injector = inject(Injector);
3625
- this._parentForm = inject(NgForm, { optional: true });
3626
- this._parentFormGroup = inject(FormGroupDirective, { optional: true });
3627
- this._dir = inject(Directionality, { optional: true });
3628
3878
  this._errorStateTracker = new _ErrorStateTracker(this._defaultErrorStateMatcher, null, this._parentFormGroup, this._parentForm, this.stateChanges);
3629
3879
  }
3630
3880
  ngOnInit() {
@@ -3708,8 +3958,8 @@ class MatDateRangeInputPartBase extends MatDatepickerInputBase {
3708
3958
  _getAccessibleName() {
3709
3959
  return _computeAriaAccessibleName(this._elementRef.nativeElement);
3710
3960
  }
3711
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangeInputPartBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
3712
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDateRangeInputPartBase, isStandalone: true, inputs: { errorStateMatcher: "errorStateMatcher" }, usesInheritance: true, ngImport: i0 }); }
3961
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangeInputPartBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3962
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDateRangeInputPartBase, isStandalone: true, inputs: { errorStateMatcher: "errorStateMatcher" }, usesInheritance: true, ngImport: i0 });
3713
3963
  }
3714
3964
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangeInputPartBase, decorators: [{
3715
3965
  type: Directive
@@ -3718,18 +3968,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
3718
3968
  }] } });
3719
3969
  /** Input for entering the start date in a `mat-date-range-input`. */
3720
3970
  class MatStartDate extends MatDateRangeInputPartBase {
3721
- constructor() {
3722
- super(...arguments);
3723
- /** Validator that checks that the start date isn't after the end date. */
3724
- this._startValidator = (control) => {
3725
- const start = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
3726
- const end = this._model ? this._model.selection.end : null;
3727
- return !start || !end || this._dateAdapter.compareDate(start, end) <= 0
3728
- ? null
3729
- : { 'matStartDateInvalid': { 'end': end, 'actual': start } };
3730
- };
3731
- this._validator = Validators.compose([...super._getValidators(), this._startValidator]);
3732
- }
3971
+ /** Validator that checks that the start date isn't after the end date. */
3972
+ _startValidator = (control) => {
3973
+ const start = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
3974
+ const end = this._model ? this._model.selection.end : null;
3975
+ return !start || !end || this._dateAdapter.compareDate(start, end) <= 0
3976
+ ? null
3977
+ : { 'matStartDateInvalid': { 'end': end, 'actual': start } };
3978
+ };
3979
+ _validator = Validators.compose([...super._getValidators(), this._startValidator]);
3733
3980
  _getValueFromModel(modelValue) {
3734
3981
  return modelValue.start;
3735
3982
  }
@@ -3772,11 +4019,11 @@ class MatStartDate extends MatDateRangeInputPartBase {
3772
4019
  super._onKeydown(event);
3773
4020
  }
3774
4021
  }
3775
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatStartDate, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
3776
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", 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: [
4022
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatStartDate, deps: null, target: i0.ɵɵFactoryTarget.Directive });
4023
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", 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: [
3777
4024
  { provide: NG_VALUE_ACCESSOR, useExisting: MatStartDate, multi: true },
3778
4025
  { provide: NG_VALIDATORS, useExisting: MatStartDate, multi: true },
3779
- ], usesInheritance: true, ngImport: i0 }); }
4026
+ ], usesInheritance: true, ngImport: i0 });
3780
4027
  }
3781
4028
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatStartDate, decorators: [{
3782
4029
  type: Directive,
@@ -3808,18 +4055,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
3808
4055
  }] });
3809
4056
  /** Input for entering the end date in a `mat-date-range-input`. */
3810
4057
  class MatEndDate extends MatDateRangeInputPartBase {
3811
- constructor() {
3812
- super(...arguments);
3813
- /** Validator that checks that the end date isn't before the start date. */
3814
- this._endValidator = (control) => {
3815
- const end = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
3816
- const start = this._model ? this._model.selection.start : null;
3817
- return !end || !start || this._dateAdapter.compareDate(end, start) >= 0
3818
- ? null
3819
- : { 'matEndDateInvalid': { 'start': start, 'actual': end } };
3820
- };
3821
- this._validator = Validators.compose([...super._getValidators(), this._endValidator]);
3822
- }
4058
+ /** Validator that checks that the end date isn't before the start date. */
4059
+ _endValidator = (control) => {
4060
+ const end = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
4061
+ const start = this._model ? this._model.selection.start : null;
4062
+ return !end || !start || this._dateAdapter.compareDate(end, start) >= 0
4063
+ ? null
4064
+ : { 'matEndDateInvalid': { 'start': start, 'actual': end } };
4065
+ };
4066
+ _validator = Validators.compose([...super._getValidators(), this._endValidator]);
3823
4067
  _getValueFromModel(modelValue) {
3824
4068
  return modelValue.end;
3825
4069
  }
@@ -3867,11 +4111,11 @@ class MatEndDate extends MatDateRangeInputPartBase {
3867
4111
  super._onKeydown(event);
3868
4112
  }
3869
4113
  }
3870
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatEndDate, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
3871
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", 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: [
4114
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatEndDate, deps: null, target: i0.ɵɵFactoryTarget.Directive });
4115
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", 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: [
3872
4116
  { provide: NG_VALUE_ACCESSOR, useExisting: MatEndDate, multi: true },
3873
4117
  { provide: NG_VALIDATORS, useExisting: MatEndDate, multi: true },
3874
- ], usesInheritance: true, ngImport: i0 }); }
4118
+ ], usesInheritance: true, ngImport: i0 });
3875
4119
  }
3876
4120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatEndDate, decorators: [{
3877
4121
  type: Directive,
@@ -3904,14 +4148,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
3904
4148
 
3905
4149
  let nextUniqueId = 0;
3906
4150
  class MatDateRangeInput {
4151
+ _changeDetectorRef = inject(ChangeDetectorRef);
4152
+ _elementRef = inject(ElementRef);
4153
+ _dateAdapter = inject(DateAdapter, { optional: true });
4154
+ _formField = inject(MAT_FORM_FIELD, { optional: true });
4155
+ _closedSubscription = Subscription.EMPTY;
4156
+ _openedSubscription = Subscription.EMPTY;
3907
4157
  /** Current value of the range input. */
3908
4158
  get value() {
3909
4159
  return this._model ? this._model.selection : null;
3910
4160
  }
4161
+ /** Unique ID for the group. */
4162
+ id = `mat-date-range-input-${nextUniqueId++}`;
4163
+ /** Whether the control is focused. */
4164
+ focused = false;
3911
4165
  /** Whether the control's label should float. */
3912
4166
  get shouldLabelFloat() {
3913
4167
  return this.focused || !this.empty;
3914
4168
  }
4169
+ /** Name of the form control. */
4170
+ controlType = 'mat-date-range-input';
3915
4171
  /**
3916
4172
  * Implemented as a part of `MatFormFieldControl`.
3917
4173
  * Set the placeholder attribute on `matStartDate` and `matEndDate`.
@@ -3944,6 +4200,9 @@ class MatDateRangeInput {
3944
4200
  this._registerModel(this._model);
3945
4201
  }
3946
4202
  }
4203
+ _rangePicker;
4204
+ /** The id of the panel owned by this input. */
4205
+ _ariaOwns = signal(null);
3947
4206
  /** Whether the input is required. */
3948
4207
  get required() {
3949
4208
  return (this._required ??
@@ -3955,6 +4214,7 @@ class MatDateRangeInput {
3955
4214
  set required(value) {
3956
4215
  this._required = value;
3957
4216
  }
4217
+ _required;
3958
4218
  /** Function that can be used to filter out dates within the date range picker. */
3959
4219
  get dateFilter() {
3960
4220
  return this._dateFilter;
@@ -3972,6 +4232,7 @@ class MatDateRangeInput {
3972
4232
  end._validatorOnChange();
3973
4233
  }
3974
4234
  }
4235
+ _dateFilter;
3975
4236
  /** The minimum valid date. */
3976
4237
  get min() {
3977
4238
  return this._min;
@@ -3983,6 +4244,7 @@ class MatDateRangeInput {
3983
4244
  this._revalidate();
3984
4245
  }
3985
4246
  }
4247
+ _min;
3986
4248
  /** The maximum valid date. */
3987
4249
  get max() {
3988
4250
  return this._max;
@@ -3994,6 +4256,7 @@ class MatDateRangeInput {
3994
4256
  this._revalidate();
3995
4257
  }
3996
4258
  }
4259
+ _max;
3997
4260
  /** Whether the input is disabled. */
3998
4261
  get disabled() {
3999
4262
  return this._startInput && this._endInput
@@ -4006,6 +4269,7 @@ class MatDateRangeInput {
4006
4269
  this.stateChanges.next(undefined);
4007
4270
  }
4008
4271
  }
4272
+ _groupDisabled = false;
4009
4273
  /** Whether the input is in an error state. */
4010
4274
  get errorState() {
4011
4275
  if (this._startInput && this._endInput) {
@@ -4019,37 +4283,32 @@ class MatDateRangeInput {
4019
4283
  const endEmpty = this._endInput ? this._endInput.isEmpty() : false;
4020
4284
  return startEmpty && endEmpty;
4021
4285
  }
4286
+ /** Value for the `aria-describedby` attribute of the inputs. */
4287
+ _ariaDescribedBy = null;
4288
+ /** Date selection model currently registered with the input. */
4289
+ _model;
4290
+ /** Separator text to be shown between the inputs. */
4291
+ separator = '–';
4292
+ /** Start of the comparison range that should be shown in the calendar. */
4293
+ comparisonStart = null;
4294
+ /** End of the comparison range that should be shown in the calendar. */
4295
+ comparisonEnd = null;
4296
+ _startInput;
4297
+ _endInput;
4298
+ /**
4299
+ * Implemented as a part of `MatFormFieldControl`.
4300
+ * TODO(crisbeto): change type to `AbstractControlDirective` after #18206 lands.
4301
+ * @docs-private
4302
+ */
4303
+ ngControl;
4304
+ /** Emits when the input's state has changed. */
4305
+ stateChanges = new Subject();
4306
+ /**
4307
+ * Disable the automatic labeling to avoid issues like #27241.
4308
+ * @docs-private
4309
+ */
4310
+ disableAutomaticLabeling = true;
4022
4311
  constructor() {
4023
- this._changeDetectorRef = inject(ChangeDetectorRef);
4024
- this._elementRef = inject(ElementRef);
4025
- this._dateAdapter = inject(DateAdapter, { optional: true });
4026
- this._formField = inject(MAT_FORM_FIELD, { optional: true });
4027
- this._closedSubscription = Subscription.EMPTY;
4028
- this._openedSubscription = Subscription.EMPTY;
4029
- /** Unique ID for the group. */
4030
- this.id = `mat-date-range-input-${nextUniqueId++}`;
4031
- /** Whether the control is focused. */
4032
- this.focused = false;
4033
- /** Name of the form control. */
4034
- this.controlType = 'mat-date-range-input';
4035
- /** The id of the panel owned by this input. */
4036
- this._ariaOwns = signal(null);
4037
- this._groupDisabled = false;
4038
- /** Value for the `aria-describedby` attribute of the inputs. */
4039
- this._ariaDescribedBy = null;
4040
- /** Separator text to be shown between the inputs. */
4041
- this.separator = '–';
4042
- /** Start of the comparison range that should be shown in the calendar. */
4043
- this.comparisonStart = null;
4044
- /** End of the comparison range that should be shown in the calendar. */
4045
- this.comparisonEnd = null;
4046
- /** Emits when the input's state has changed. */
4047
- this.stateChanges = new Subject();
4048
- /**
4049
- * Disable the automatic labeling to avoid issues like #27241.
4050
- * @docs-private
4051
- */
4052
- this.disableAutomaticLabeling = true;
4053
4312
  if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {
4054
4313
  throw createMissingDateImplError('DateAdapter');
4055
4314
  }
@@ -4190,11 +4449,11 @@ class MatDateRangeInput {
4190
4449
  _isTargetRequired(target) {
4191
4450
  return target?.ngControl?.control?.hasValidator(Validators.required);
4192
4451
  }
4193
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangeInput, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4194
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "19.0.0-next.10", type: MatDateRangeInput, isStandalone: true, selector: "mat-date-range-input", inputs: { rangePicker: "rangePicker", required: ["required", "required", booleanAttribute], dateFilter: "dateFilter", min: "min", max: "max", disabled: ["disabled", "disabled", booleanAttribute], separator: "separator", comparisonStart: "comparisonStart", comparisonEnd: "comparisonEnd" }, host: { attributes: { "role": "group" }, properties: { "class.mat-date-range-input-hide-placeholders": "_shouldHidePlaceholders()", "class.mat-date-range-input-required": "required", "attr.id": "id", "attr.aria-labelledby": "_getAriaLabelledby()", "attr.aria-describedby": "_ariaDescribedBy", "attr.data-mat-calendar": "rangePicker ? rangePicker.id : null" }, classAttribute: "mat-date-range-input" }, providers: [
4452
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangeInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
4453
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "19.0.0-next.10", type: MatDateRangeInput, isStandalone: true, selector: "mat-date-range-input", inputs: { rangePicker: "rangePicker", required: ["required", "required", booleanAttribute], dateFilter: "dateFilter", min: "min", max: "max", disabled: ["disabled", "disabled", booleanAttribute], separator: "separator", comparisonStart: "comparisonStart", comparisonEnd: "comparisonEnd" }, host: { attributes: { "role": "group" }, properties: { "class.mat-date-range-input-hide-placeholders": "_shouldHidePlaceholders()", "class.mat-date-range-input-required": "required", "attr.id": "id", "attr.aria-labelledby": "_getAriaLabelledby()", "attr.aria-describedby": "_ariaDescribedBy", "attr.data-mat-calendar": "rangePicker ? rangePicker.id : null" }, classAttribute: "mat-date-range-input" }, providers: [
4195
4454
  { provide: MatFormFieldControl, useExisting: MatDateRangeInput },
4196
4455
  { provide: MAT_DATE_RANGE_INPUT_PARENT, useExisting: MatDateRangeInput },
4197
- ], queries: [{ propertyName: "_startInput", first: true, predicate: MatStartDate, descendants: true }, { propertyName: "_endInput", first: true, predicate: MatEndDate, descendants: true }], exportAs: ["matDateRangeInput"], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"mat-date-range-input-container\"\n cdkMonitorSubtreeFocus\n (cdkFocusChange)=\"_updateFocus($event)\">\n <div class=\"mat-date-range-input-wrapper\">\n <ng-content select=\"input[matStartDate]\"></ng-content>\n <span\n class=\"mat-date-range-input-mirror\"\n aria-hidden=\"true\">{{_getInputMirrorValue('start')}}</span>\n </div>\n\n <span\n class=\"mat-date-range-input-separator\"\n [class.mat-date-range-input-separator-hidden]=\"_shouldHideSeparator()\">{{separator}}</span>\n\n <div class=\"mat-date-range-input-wrapper mat-date-range-input-end-wrapper\">\n <ng-content select=\"input[matEndDate]\"></ng-content>\n <span\n class=\"mat-date-range-input-mirror\"\n aria-hidden=\"true\">{{_getInputMirrorValue('end')}}</span>\n </div>\n</div>\n\n", styles: [".mat-date-range-input{display:block;width:100%}.mat-date-range-input-container{display:flex;align-items:center}.mat-date-range-input-separator{transition:opacity 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);margin:0 4px;color:var(--mat-datepicker-range-input-separator-color, var(--mat-sys-on-surface))}.mat-form-field-disabled .mat-date-range-input-separator{color:var(--mat-datepicker-range-input-disabled-state-separator-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}._mat-animation-noopable .mat-date-range-input-separator{transition:none}.mat-date-range-input-separator-hidden{-webkit-user-select:none;user-select:none;opacity:0;transition:none}.mat-date-range-input-wrapper{position:relative;overflow:hidden;max-width:calc(50% - 4px)}.mat-date-range-input-end-wrapper{flex-grow:1}.mat-date-range-input-inner{position:absolute;top:0;left:0;font:inherit;background:rgba(0,0,0,0);color:currentColor;border:none;outline:none;padding:0;margin:0;vertical-align:bottom;text-align:inherit;-webkit-appearance:none;width:100%;height:100%}.mat-date-range-input-inner:-moz-ui-invalid{box-shadow:none}.mat-date-range-input-inner::placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner::-moz-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner::-webkit-input-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner:-ms-input-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner[disabled]{color:var(--mat-datepicker-range-input-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-hide-placeholder .mat-date-range-input-inner::placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner::placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::placeholder{opacity:0}}.mat-form-field-hide-placeholder .mat-date-range-input-inner::-moz-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-moz-placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner::-moz-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-moz-placeholder{opacity:0}}.mat-form-field-hide-placeholder .mat-date-range-input-inner::-webkit-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-webkit-input-placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner::-webkit-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-webkit-input-placeholder{opacity:0}}.mat-form-field-hide-placeholder .mat-date-range-input-inner:-ms-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner:-ms-input-placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner:-ms-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner:-ms-input-placeholder{opacity:0}}._mat-animation-noopable .mat-date-range-input-inner::placeholder{transition:none}._mat-animation-noopable .mat-date-range-input-inner::-moz-placeholder{transition:none}._mat-animation-noopable .mat-date-range-input-inner::-webkit-input-placeholder{transition:none}._mat-animation-noopable .mat-date-range-input-inner:-ms-input-placeholder{transition:none}.mat-date-range-input-mirror{-webkit-user-select:none;user-select:none;visibility:hidden;white-space:nowrap;display:inline-block;min-width:2px}.mat-mdc-form-field-type-mat-date-range-input .mat-mdc-form-field-infix{width:200px}"], dependencies: [{ kind: "directive", type: CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
4456
+ ], queries: [{ propertyName: "_startInput", first: true, predicate: MatStartDate, descendants: true }, { propertyName: "_endInput", first: true, predicate: MatEndDate, descendants: true }], exportAs: ["matDateRangeInput"], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"mat-date-range-input-container\"\n cdkMonitorSubtreeFocus\n (cdkFocusChange)=\"_updateFocus($event)\">\n <div class=\"mat-date-range-input-wrapper\">\n <ng-content select=\"input[matStartDate]\"></ng-content>\n <span\n class=\"mat-date-range-input-mirror\"\n aria-hidden=\"true\">{{_getInputMirrorValue('start')}}</span>\n </div>\n\n <span\n class=\"mat-date-range-input-separator\"\n [class.mat-date-range-input-separator-hidden]=\"_shouldHideSeparator()\">{{separator}}</span>\n\n <div class=\"mat-date-range-input-wrapper mat-date-range-input-end-wrapper\">\n <ng-content select=\"input[matEndDate]\"></ng-content>\n <span\n class=\"mat-date-range-input-mirror\"\n aria-hidden=\"true\">{{_getInputMirrorValue('end')}}</span>\n </div>\n</div>\n\n", styles: [".mat-date-range-input{display:block;width:100%}.mat-date-range-input-container{display:flex;align-items:center}.mat-date-range-input-separator{transition:opacity 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);margin:0 4px;color:var(--mat-datepicker-range-input-separator-color, var(--mat-sys-on-surface))}.mat-form-field-disabled .mat-date-range-input-separator{color:var(--mat-datepicker-range-input-disabled-state-separator-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}._mat-animation-noopable .mat-date-range-input-separator{transition:none}.mat-date-range-input-separator-hidden{-webkit-user-select:none;user-select:none;opacity:0;transition:none}.mat-date-range-input-wrapper{position:relative;overflow:hidden;max-width:calc(50% - 4px)}.mat-date-range-input-end-wrapper{flex-grow:1}.mat-date-range-input-inner{position:absolute;top:0;left:0;font:inherit;background:rgba(0,0,0,0);color:currentColor;border:none;outline:none;padding:0;margin:0;vertical-align:bottom;text-align:inherit;-webkit-appearance:none;width:100%;height:100%}.mat-date-range-input-inner:-moz-ui-invalid{box-shadow:none}.mat-date-range-input-inner::placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner::-moz-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner::-webkit-input-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner:-ms-input-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner[disabled]{color:var(--mat-datepicker-range-input-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-hide-placeholder .mat-date-range-input-inner::placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner::placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::placeholder{opacity:0}}.mat-form-field-hide-placeholder .mat-date-range-input-inner::-moz-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-moz-placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner::-moz-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-moz-placeholder{opacity:0}}.mat-form-field-hide-placeholder .mat-date-range-input-inner::-webkit-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-webkit-input-placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner::-webkit-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-webkit-input-placeholder{opacity:0}}.mat-form-field-hide-placeholder .mat-date-range-input-inner:-ms-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner:-ms-input-placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner:-ms-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner:-ms-input-placeholder{opacity:0}}._mat-animation-noopable .mat-date-range-input-inner::placeholder{transition:none}._mat-animation-noopable .mat-date-range-input-inner::-moz-placeholder{transition:none}._mat-animation-noopable .mat-date-range-input-inner::-webkit-input-placeholder{transition:none}._mat-animation-noopable .mat-date-range-input-inner:-ms-input-placeholder{transition:none}.mat-date-range-input-mirror{-webkit-user-select:none;user-select:none;visibility:hidden;white-space:nowrap;display:inline-block;min-width:2px}.mat-mdc-form-field-type-mat-date-range-input .mat-mdc-form-field-infix{width:200px}"], dependencies: [{ kind: "directive", type: CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4198
4457
  }
4199
4458
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangeInput, decorators: [{
4200
4459
  type: Component,
@@ -4256,12 +4515,12 @@ class MatDateRangePicker extends MatDatepickerBase {
4256
4515
  instance.endDateAccessibleName = input._getEndDateAccessibleName();
4257
4516
  }
4258
4517
  }
4259
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangePicker, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
4260
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDateRangePicker, isStandalone: true, selector: "mat-date-range-picker", providers: [
4518
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangePicker, deps: null, target: i0.ɵɵFactoryTarget.Component });
4519
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDateRangePicker, isStandalone: true, selector: "mat-date-range-picker", providers: [
4261
4520
  MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER,
4262
4521
  MAT_CALENDAR_RANGE_STRATEGY_PROVIDER,
4263
4522
  { provide: MatDatepickerBase, useExisting: MatDateRangePicker },
4264
- ], exportAs: ["matDateRangePicker"], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
4523
+ ], exportAs: ["matDateRangePicker"], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4265
4524
  }
4266
4525
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangePicker, decorators: [{
4267
4526
  type: Component,
@@ -4281,15 +4540,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
4281
4540
 
4282
4541
  /** Button that will close the datepicker and assign the current selection to the data model. */
4283
4542
  class MatDatepickerApply {
4284
- constructor() {
4285
- this._datepicker = inject(MatDatepickerBase);
4286
- }
4543
+ _datepicker = inject(MatDatepickerBase);
4544
+ constructor() { }
4287
4545
  _applySelection() {
4288
4546
  this._datepicker._applyPendingSelection();
4289
4547
  this._datepicker.close();
4290
4548
  }
4291
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerApply, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
4292
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerApply, isStandalone: true, selector: "[matDatepickerApply], [matDateRangePickerApply]", host: { listeners: { "click": "_applySelection()" } }, ngImport: i0 }); }
4549
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerApply, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4550
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerApply, isStandalone: true, selector: "[matDatepickerApply], [matDateRangePickerApply]", host: { listeners: { "click": "_applySelection()" } }, ngImport: i0 });
4293
4551
  }
4294
4552
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerApply, decorators: [{
4295
4553
  type: Directive,
@@ -4300,11 +4558,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
4300
4558
  }], ctorParameters: () => [] });
4301
4559
  /** Button that will close the datepicker and discard the current selection. */
4302
4560
  class MatDatepickerCancel {
4303
- constructor() {
4304
- this._datepicker = inject(MatDatepickerBase);
4305
- }
4306
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerCancel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
4307
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerCancel, isStandalone: true, selector: "[matDatepickerCancel], [matDateRangePickerCancel]", host: { listeners: { "click": "_datepicker.close()" } }, ngImport: i0 }); }
4561
+ _datepicker = inject(MatDatepickerBase);
4562
+ constructor() { }
4563
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerCancel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4564
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerCancel, isStandalone: true, selector: "[matDatepickerCancel], [matDateRangePickerCancel]", host: { listeners: { "click": "_datepicker.close()" } }, ngImport: i0 });
4308
4565
  }
4309
4566
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerCancel, decorators: [{
4310
4567
  type: Directive,
@@ -4318,10 +4575,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
4318
4575
  * to the bottom of a datepicker or date range picker.
4319
4576
  */
4320
4577
  class MatDatepickerActions {
4321
- constructor() {
4322
- this._datepicker = inject(MatDatepickerBase);
4323
- this._viewContainerRef = inject(ViewContainerRef);
4324
- }
4578
+ _datepicker = inject(MatDatepickerBase);
4579
+ _viewContainerRef = inject(ViewContainerRef);
4580
+ _template;
4581
+ _portal;
4582
+ constructor() { }
4325
4583
  ngAfterViewInit() {
4326
4584
  this._portal = new TemplatePortal(this._template, this._viewContainerRef);
4327
4585
  this._datepicker.registerActions(this._portal);
@@ -4333,14 +4591,14 @@ class MatDatepickerActions {
4333
4591
  this._portal?.detach();
4334
4592
  }
4335
4593
  }
4336
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerActions, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4337
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerActions, isStandalone: true, selector: "mat-datepicker-actions, mat-date-range-picker-actions", viewQueries: [{ propertyName: "_template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: `
4594
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerActions, deps: [], target: i0.ɵɵFactoryTarget.Component });
4595
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerActions, isStandalone: true, selector: "mat-datepicker-actions, mat-date-range-picker-actions", viewQueries: [{ propertyName: "_template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: `
4338
4596
  <ng-template>
4339
4597
  <div class="mat-datepicker-actions">
4340
4598
  <ng-content></ng-content>
4341
4599
  </div>
4342
4600
  </ng-template>
4343
- `, isInline: true, styles: [".mat-datepicker-actions{display:flex;justify-content:flex-end;align-items:center;padding:0 8px 8px 8px}.mat-datepicker-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-datepicker-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
4601
+ `, isInline: true, styles: [".mat-datepicker-actions{display:flex;justify-content:flex-end;align-items:center;padding:0 8px 8px 8px}.mat-datepicker-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-datepicker-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4344
4602
  }
4345
4603
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerActions, decorators: [{
4346
4604
  type: Component,
@@ -4357,9 +4615,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
4357
4615
  }] } });
4358
4616
 
4359
4617
  class MatDatepickerModule {
4360
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4361
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerModule, imports: [CommonModule,
4362
- MatButtonModule,
4618
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
4619
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerModule, imports: [MatButtonModule,
4363
4620
  OverlayModule,
4364
4621
  A11yModule,
4365
4622
  PortalModule,
@@ -4399,22 +4656,20 @@ class MatDatepickerModule {
4399
4656
  MatDateRangePicker,
4400
4657
  MatDatepickerActions,
4401
4658
  MatDatepickerCancel,
4402
- MatDatepickerApply] }); }
4403
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerModule, providers: [MatDatepickerIntl, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER], imports: [CommonModule,
4404
- MatButtonModule,
4659
+ MatDatepickerApply] });
4660
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerModule, providers: [MatDatepickerIntl, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER], imports: [MatButtonModule,
4405
4661
  OverlayModule,
4406
4662
  A11yModule,
4407
4663
  PortalModule,
4408
4664
  MatCommonModule,
4409
4665
  MatDatepickerContent,
4410
4666
  MatDatepickerToggle,
4411
- MatCalendarHeader, CdkScrollableModule] }); }
4667
+ MatCalendarHeader, CdkScrollableModule] });
4412
4668
  }
4413
4669
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerModule, decorators: [{
4414
4670
  type: NgModule,
4415
4671
  args: [{
4416
4672
  imports: [
4417
- CommonModule,
4418
4673
  MatButtonModule,
4419
4674
  OverlayModule,
4420
4675
  A11yModule,