@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
package/fesm2022/menu.mjs CHANGED
@@ -4,7 +4,7 @@ import { FocusMonitor, FocusKeyManager, isFakeTouchstartFromScreenReader, isFake
4
4
  import { UP_ARROW, DOWN_ARROW, RIGHT_ARROW, LEFT_ARROW, ESCAPE, hasModifierKey, ENTER, SPACE } from '@angular/cdk/keycodes';
5
5
  import { Subject, merge, Subscription, of, asapScheduler } from 'rxjs';
6
6
  import { startWith, switchMap, takeUntil, filter, take, delay } from 'rxjs/operators';
7
- import { DOCUMENT, CommonModule } from '@angular/common';
7
+ import { DOCUMENT } from '@angular/common';
8
8
  import { _StructuralStylesLoader, MatRipple, MatRippleModule, MatCommonModule } from '@angular/material/core';
9
9
  import { _CdkPrivateStyleLoader } from '@angular/cdk/private';
10
10
  import { TemplatePortal, DomPortalOutlet } from '@angular/cdk/portal';
@@ -24,26 +24,26 @@ const MAT_MENU_PANEL = new InjectionToken('MAT_MENU_PANEL');
24
24
  * Single item inside a `mat-menu`. Provides the menu item styling and accessibility treatment.
25
25
  */
26
26
  class MatMenuItem {
27
+ _elementRef = inject(ElementRef);
28
+ _document = inject(DOCUMENT);
29
+ _focusMonitor = inject(FocusMonitor);
30
+ _parentMenu = inject(MAT_MENU_PANEL, { optional: true });
31
+ _changeDetectorRef = inject(ChangeDetectorRef);
32
+ /** ARIA role for the menu item. */
33
+ role = 'menuitem';
34
+ /** Whether the menu item is disabled. */
35
+ disabled = false;
36
+ /** Whether ripples are disabled on the menu item. */
37
+ disableRipple = false;
38
+ /** Stream that emits when the menu item is hovered. */
39
+ _hovered = new Subject();
40
+ /** Stream that emits when the menu item is focused. */
41
+ _focused = new Subject();
42
+ /** Whether the menu item is highlighted. */
43
+ _highlighted = false;
44
+ /** Whether the menu item acts as a trigger for a sub-menu. */
45
+ _triggersSubmenu = false;
27
46
  constructor() {
28
- this._elementRef = inject(ElementRef);
29
- this._document = inject(DOCUMENT);
30
- this._focusMonitor = inject(FocusMonitor);
31
- this._parentMenu = inject(MAT_MENU_PANEL, { optional: true });
32
- this._changeDetectorRef = inject(ChangeDetectorRef);
33
- /** ARIA role for the menu item. */
34
- this.role = 'menuitem';
35
- /** Whether the menu item is disabled. */
36
- this.disabled = false;
37
- /** Whether ripples are disabled on the menu item. */
38
- this.disableRipple = false;
39
- /** Stream that emits when the menu item is hovered. */
40
- this._hovered = new Subject();
41
- /** Stream that emits when the menu item is focused. */
42
- this._focused = new Subject();
43
- /** Whether the menu item is highlighted. */
44
- this._highlighted = false;
45
- /** Whether the menu item acts as a trigger for a sub-menu. */
46
- this._triggersSubmenu = false;
47
47
  inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);
48
48
  this._parentMenu?.addItem?.(this);
49
49
  }
@@ -118,8 +118,8 @@ class MatMenuItem {
118
118
  _hasFocus() {
119
119
  return this._document && this._document.activeElement === this._getHostElement();
120
120
  }
121
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
122
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-next.10", type: MatMenuItem, isStandalone: true, selector: "[mat-menu-item]", inputs: { role: "role", disabled: ["disabled", "disabled", booleanAttribute], disableRipple: ["disableRipple", "disableRipple", booleanAttribute] }, host: { listeners: { "click": "_checkDisabled($event)", "mouseenter": "_handleMouseEnter()" }, properties: { "attr.role": "role", "class.mat-mdc-menu-item-highlighted": "_highlighted", "class.mat-mdc-menu-item-submenu-trigger": "_triggersSubmenu", "attr.tabindex": "_getTabIndex()", "attr.aria-disabled": "disabled", "attr.disabled": "disabled || null" }, classAttribute: "mat-mdc-menu-item mat-focus-indicator" }, exportAs: ["matMenuItem"], ngImport: i0, template: "<ng-content select=\"mat-icon, [matMenuItemIcon]\"></ng-content>\n<span class=\"mat-mdc-menu-item-text\"><ng-content></ng-content></span>\n<div class=\"mat-mdc-menu-ripple\" matRipple\n [matRippleDisabled]=\"disableRipple || disabled\"\n [matRippleTrigger]=\"_getHostElement()\">\n</div>\n\n@if (_triggersSubmenu) {\n <svg\n class=\"mat-mdc-menu-submenu-icon\"\n viewBox=\"0 0 5 10\"\n focusable=\"false\"\n aria-hidden=\"true\"><polygon points=\"0,0 5,5 0,10\"/></svg>\n}\n", dependencies: [{ kind: "directive", type: MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
121
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
122
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-next.10", type: MatMenuItem, isStandalone: true, selector: "[mat-menu-item]", inputs: { role: "role", disabled: ["disabled", "disabled", booleanAttribute], disableRipple: ["disableRipple", "disableRipple", booleanAttribute] }, host: { listeners: { "click": "_checkDisabled($event)", "mouseenter": "_handleMouseEnter()" }, properties: { "attr.role": "role", "class.mat-mdc-menu-item-highlighted": "_highlighted", "class.mat-mdc-menu-item-submenu-trigger": "_triggersSubmenu", "attr.tabindex": "_getTabIndex()", "attr.aria-disabled": "disabled", "attr.disabled": "disabled || null" }, classAttribute: "mat-mdc-menu-item mat-focus-indicator" }, exportAs: ["matMenuItem"], ngImport: i0, template: "<ng-content select=\"mat-icon, [matMenuItemIcon]\"></ng-content>\n<span class=\"mat-mdc-menu-item-text\"><ng-content></ng-content></span>\n<div class=\"mat-mdc-menu-ripple\" matRipple\n [matRippleDisabled]=\"disableRipple || disabled\"\n [matRippleTrigger]=\"_getHostElement()\">\n</div>\n\n@if (_triggersSubmenu) {\n <svg\n class=\"mat-mdc-menu-submenu-icon\"\n viewBox=\"0 0 5 10\"\n focusable=\"false\"\n aria-hidden=\"true\"><polygon points=\"0,0 5,5 0,10\"/></svg>\n}\n", dependencies: [{ kind: "directive", type: MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
123
123
  }
124
124
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuItem, decorators: [{
125
125
  type: Component,
@@ -180,16 +180,17 @@ function throwMatMenuRecursiveError() {
180
180
  const MAT_MENU_CONTENT = new InjectionToken('MatMenuContent');
181
181
  /** Menu content that will be rendered lazily once the menu is opened. */
182
182
  class MatMenuContent {
183
- constructor() {
184
- this._template = inject(TemplateRef);
185
- this._appRef = inject(ApplicationRef);
186
- this._injector = inject(Injector);
187
- this._viewContainerRef = inject(ViewContainerRef);
188
- this._document = inject(DOCUMENT);
189
- this._changeDetectorRef = inject(ChangeDetectorRef);
190
- /** Emits when the menu content has been attached. */
191
- this._attached = new Subject();
192
- }
183
+ _template = inject(TemplateRef);
184
+ _appRef = inject(ApplicationRef);
185
+ _injector = inject(Injector);
186
+ _viewContainerRef = inject(ViewContainerRef);
187
+ _document = inject(DOCUMENT);
188
+ _changeDetectorRef = inject(ChangeDetectorRef);
189
+ _portal;
190
+ _outlet;
191
+ /** Emits when the menu content has been attached. */
192
+ _attached = new Subject();
193
+ constructor() { }
193
194
  /**
194
195
  * Attaches the content with a particular context.
195
196
  * @docs-private
@@ -230,8 +231,8 @@ class MatMenuContent {
230
231
  this._outlet.dispose();
231
232
  }
232
233
  }
233
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
234
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatMenuContent, isStandalone: true, selector: "ng-template[matMenuContent]", providers: [{ provide: MAT_MENU_CONTENT, useExisting: MatMenuContent }], ngImport: i0 }); }
234
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
235
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatMenuContent, isStandalone: true, selector: "ng-template[matMenuContent]", providers: [{ provide: MAT_MENU_CONTENT, useExisting: MatMenuContent }], ngImport: i0 });
235
236
  }
236
237
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuContent, decorators: [{
237
238
  type: Directive,
@@ -310,6 +311,41 @@ function MAT_MENU_DEFAULT_OPTIONS_FACTORY() {
310
311
  };
311
312
  }
312
313
  class MatMenu {
314
+ _elementRef = inject(ElementRef);
315
+ _changeDetectorRef = inject(ChangeDetectorRef);
316
+ _keyManager;
317
+ _xPosition;
318
+ _yPosition;
319
+ _firstItemFocusRef;
320
+ _previousElevation;
321
+ _elevationPrefix = 'mat-elevation-z';
322
+ _baseElevation = null;
323
+ /** All items inside the menu. Includes items nested inside another menu. */
324
+ _allItems;
325
+ /** Only the direct descendant menu items. */
326
+ _directDescendantItems = new QueryList();
327
+ /** Classes to be applied to the menu panel. */
328
+ _classList = {};
329
+ /** Current state of the panel animation. */
330
+ _panelAnimationState = 'void';
331
+ /** Emits whenever an animation on the menu completes. */
332
+ _animationDone = new Subject();
333
+ /** Whether the menu is animating. */
334
+ _isAnimating;
335
+ /** Parent menu of the current menu panel. */
336
+ parentMenu;
337
+ /** Layout direction of the menu. */
338
+ direction;
339
+ /** Class or list of classes to be added to the overlay panel. */
340
+ overlayPanelClass;
341
+ /** Class to be added to the backdrop element. */
342
+ backdropClass;
343
+ /** aria-label for the menu panel. */
344
+ ariaLabel;
345
+ /** aria-labelledby for the menu panel. */
346
+ ariaLabelledby;
347
+ /** aria-describedby for the menu panel. */
348
+ ariaDescribedby;
313
349
  /** Position of the menu in the X axis. */
314
350
  get xPosition() {
315
351
  return this._xPosition;
@@ -334,6 +370,23 @@ class MatMenu {
334
370
  this._yPosition = value;
335
371
  this.setPositionClasses();
336
372
  }
373
+ /** @docs-private */
374
+ templateRef;
375
+ /**
376
+ * List of the items inside of a menu.
377
+ * @deprecated
378
+ * @breaking-change 8.0.0
379
+ */
380
+ items;
381
+ /**
382
+ * Menu content that will be rendered lazily.
383
+ * @docs-private
384
+ */
385
+ lazyContent;
386
+ /** Whether the menu should overlap its trigger. */
387
+ overlapTrigger;
388
+ /** Whether the menu has a backdrop. */
389
+ hasBackdrop;
337
390
  /**
338
391
  * This method takes classes set on the host mat-menu element and applies them on the
339
392
  * menu template that displays in the overlay container. Otherwise, it's difficult
@@ -357,6 +410,7 @@ class MatMenu {
357
410
  }
358
411
  this._classList = newClassList;
359
412
  }
413
+ _previousPanelClass;
360
414
  /**
361
415
  * This method takes classes set on the host mat-menu element and applies them on the
362
416
  * menu template that displays in the overlay container. Otherwise, it's difficult
@@ -370,29 +424,17 @@ class MatMenu {
370
424
  set classList(classes) {
371
425
  this.panelClass = classes;
372
426
  }
427
+ /** Event emitted when the menu is closed. */
428
+ closed = new EventEmitter();
429
+ /**
430
+ * Event emitted when the menu is closed.
431
+ * @deprecated Switch to `closed` instead
432
+ * @breaking-change 8.0.0
433
+ */
434
+ close = this.closed;
435
+ panelId = `mat-menu-panel-${menuPanelUid++}`;
436
+ _injector = inject(Injector);
373
437
  constructor() {
374
- this._elementRef = inject(ElementRef);
375
- this._changeDetectorRef = inject(ChangeDetectorRef);
376
- this._elevationPrefix = 'mat-elevation-z';
377
- this._baseElevation = null;
378
- /** Only the direct descendant menu items. */
379
- this._directDescendantItems = new QueryList();
380
- /** Classes to be applied to the menu panel. */
381
- this._classList = {};
382
- /** Current state of the panel animation. */
383
- this._panelAnimationState = 'void';
384
- /** Emits whenever an animation on the menu completes. */
385
- this._animationDone = new Subject();
386
- /** Event emitted when the menu is closed. */
387
- this.closed = new EventEmitter();
388
- /**
389
- * Event emitted when the menu is closed.
390
- * @deprecated Switch to `closed` instead
391
- * @breaking-change 8.0.0
392
- */
393
- this.close = this.closed;
394
- this.panelId = `mat-menu-panel-${menuPanelUid++}`;
395
- this._injector = inject(Injector);
396
438
  const defaultOptions = inject(MAT_MENU_DEFAULT_OPTIONS);
397
439
  this.overlayPanelClass = defaultOptions.overlayPanelClass || '';
398
440
  this._xPosition = defaultOptions.xPosition;
@@ -617,8 +659,8 @@ class MatMenu {
617
659
  this._directDescendantItems.notifyOnChanges();
618
660
  });
619
661
  }
620
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenu, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
621
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "19.0.0-next.10", type: MatMenu, isStandalone: true, selector: "mat-menu", inputs: { backdropClass: "backdropClass", ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledby: ["aria-labelledby", "ariaLabelledby"], ariaDescribedby: ["aria-describedby", "ariaDescribedby"], xPosition: "xPosition", yPosition: "yPosition", overlapTrigger: ["overlapTrigger", "overlapTrigger", booleanAttribute], hasBackdrop: ["hasBackdrop", "hasBackdrop", (value) => (value == null ? null : booleanAttribute(value))], panelClass: ["class", "panelClass"], classList: "classList" }, outputs: { closed: "closed", close: "close" }, host: { properties: { "attr.aria-label": "null", "attr.aria-labelledby": "null", "attr.aria-describedby": "null" } }, providers: [{ provide: MAT_MENU_PANEL, useExisting: MatMenu }], queries: [{ propertyName: "lazyContent", first: true, predicate: MAT_MENU_CONTENT, descendants: true }, { propertyName: "_allItems", predicate: MatMenuItem, descendants: true }, { propertyName: "items", predicate: MatMenuItem }], viewQueries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], exportAs: ["matMenu"], ngImport: i0, template: "<ng-template>\n <div\n class=\"mat-mdc-menu-panel mat-mdc-elevation-specific\"\n [id]=\"panelId\"\n [class]=\"_classList\"\n (keydown)=\"_handleKeydown($event)\"\n (click)=\"closed.emit('click')\"\n [@transformMenu]=\"_panelAnimationState\"\n (@transformMenu.start)=\"_onAnimationStart($event)\"\n (@transformMenu.done)=\"_onAnimationDone($event)\"\n tabindex=\"-1\"\n role=\"menu\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby || null\"\n [attr.aria-describedby]=\"ariaDescribedby || null\">\n <div class=\"mat-mdc-menu-content\">\n <ng-content></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: ["mat-menu{display:none}.mat-mdc-menu-content{margin:0;padding:8px 0;outline:0}.mat-mdc-menu-content,.mat-mdc-menu-content .mat-mdc-menu-item .mat-mdc-menu-item-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;flex:1;white-space:normal;font-family:var(--mat-menu-item-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-menu-item-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-menu-item-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-menu-item-label-text-tracking, var(--mat-sys-label-large-tracking));font-weight:var(--mat-menu-item-label-text-weight, var(--mat-sys-label-large-weight))}.mat-mdc-menu-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box;outline:0;border-radius:var(--mat-menu-container-shape, var(--mat-sys-corner-extra-small));background-color:var(--mat-menu-container-color, var(--mat-sys-surface-container));will-change:transform,opacity}.mat-mdc-menu-panel.ng-animating{pointer-events:none}.mat-mdc-menu-panel.ng-animating:has(.mat-mdc-menu-content:empty){display:none}@media(forced-colors: active){.mat-mdc-menu-panel{outline:solid 1px}}.mat-mdc-menu-panel .mat-divider{color:var(--mat-menu-divider-color, var(--mat-sys-surface-variant));margin-bottom:var(--mat-menu-divider-bottom-spacing, 8px);margin-top:var(--mat-menu-divider-top-spacing, 8px)}.mat-mdc-menu-item{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;cursor:pointer;width:100%;text-align:left;box-sizing:border-box;color:inherit;font-size:inherit;background:none;text-decoration:none;margin:0;min-height:48px;padding-left:var(--mat-menu-item-leading-spacing, 12px);padding-right:var(--mat-menu-item-trailing-spacing, 12px);-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-menu-item::-moz-focus-inner{border:0}[dir=rtl] .mat-mdc-menu-item{padding-left:var(--mat-menu-item-trailing-spacing, 12px);padding-right:var(--mat-menu-item-leading-spacing, 12px)}.mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-leading-spacing, 12px);padding-right:var(--mat-menu-item-with-icon-trailing-spacing, 12px)}[dir=rtl] .mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-trailing-spacing, 12px);padding-right:var(--mat-menu-item-with-icon-leading-spacing, 12px)}.mat-mdc-menu-item,.mat-mdc-menu-item:visited,.mat-mdc-menu-item:link{color:var(--mat-menu-item-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-menu-item .mat-icon-no-color,.mat-mdc-menu-item .mat-mdc-menu-submenu-icon{color:var(--mat-menu-item-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-menu-item[disabled]{cursor:default;opacity:.38}.mat-mdc-menu-item[disabled]::after{display:block;position:absolute;content:\"\";top:0;left:0;bottom:0;right:0}.mat-mdc-menu-item:focus{outline:0}.mat-mdc-menu-item .mat-icon{flex-shrink:0;margin-right:var(--mat-menu-item-spacing, 12px);height:var(--mat-menu-item-icon-size, 24px);width:var(--mat-menu-item-icon-size, 24px)}[dir=rtl] .mat-mdc-menu-item{text-align:right}[dir=rtl] .mat-mdc-menu-item .mat-icon{margin-right:0;margin-left:var(--mat-menu-item-spacing, 12px)}.mat-mdc-menu-item:not([disabled]):hover{background-color:var(--mat-menu-item-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}.mat-mdc-menu-item:not([disabled]).cdk-program-focused,.mat-mdc-menu-item:not([disabled]).cdk-keyboard-focused,.mat-mdc-menu-item:not([disabled]).mat-mdc-menu-item-highlighted{background-color:var(--mat-menu-item-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent))}@media(forced-colors: active){.mat-mdc-menu-item{margin-top:1px}}.mat-mdc-menu-submenu-icon{width:var(--mat-menu-item-icon-size, 24px);height:10px;fill:currentColor;padding-left:var(--mat-menu-item-spacing, 12px)}[dir=rtl] .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing, 12px);padding-left:0}[dir=rtl] .mat-mdc-menu-submenu-icon polygon{transform:scaleX(-1);transform-origin:center}@media(forced-colors: active){.mat-mdc-menu-submenu-icon{fill:CanvasText}}.mat-mdc-menu-item .mat-mdc-menu-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}"], animations: [matMenuAnimations.transformMenu, matMenuAnimations.fadeInItems], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
662
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenu, deps: [], target: i0.ɵɵFactoryTarget.Component });
663
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "19.0.0-next.10", type: MatMenu, isStandalone: true, selector: "mat-menu", inputs: { backdropClass: "backdropClass", ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledby: ["aria-labelledby", "ariaLabelledby"], ariaDescribedby: ["aria-describedby", "ariaDescribedby"], xPosition: "xPosition", yPosition: "yPosition", overlapTrigger: ["overlapTrigger", "overlapTrigger", booleanAttribute], hasBackdrop: ["hasBackdrop", "hasBackdrop", (value) => (value == null ? null : booleanAttribute(value))], panelClass: ["class", "panelClass"], classList: "classList" }, outputs: { closed: "closed", close: "close" }, host: { properties: { "attr.aria-label": "null", "attr.aria-labelledby": "null", "attr.aria-describedby": "null" } }, providers: [{ provide: MAT_MENU_PANEL, useExisting: MatMenu }], queries: [{ propertyName: "lazyContent", first: true, predicate: MAT_MENU_CONTENT, descendants: true }, { propertyName: "_allItems", predicate: MatMenuItem, descendants: true }, { propertyName: "items", predicate: MatMenuItem }], viewQueries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], exportAs: ["matMenu"], ngImport: i0, template: "<ng-template>\n <div\n class=\"mat-mdc-menu-panel mat-mdc-elevation-specific\"\n [id]=\"panelId\"\n [class]=\"_classList\"\n (keydown)=\"_handleKeydown($event)\"\n (click)=\"closed.emit('click')\"\n [@transformMenu]=\"_panelAnimationState\"\n (@transformMenu.start)=\"_onAnimationStart($event)\"\n (@transformMenu.done)=\"_onAnimationDone($event)\"\n tabindex=\"-1\"\n role=\"menu\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby || null\"\n [attr.aria-describedby]=\"ariaDescribedby || null\">\n <div class=\"mat-mdc-menu-content\">\n <ng-content></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: ["mat-menu{display:none}.mat-mdc-menu-content{margin:0;padding:8px 0;outline:0}.mat-mdc-menu-content,.mat-mdc-menu-content .mat-mdc-menu-item .mat-mdc-menu-item-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;flex:1;white-space:normal;font-family:var(--mat-menu-item-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mat-menu-item-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mat-menu-item-label-text-size, var(--mat-sys-label-large-size));letter-spacing:var(--mat-menu-item-label-text-tracking, var(--mat-sys-label-large-tracking));font-weight:var(--mat-menu-item-label-text-weight, var(--mat-sys-label-large-weight))}.mat-mdc-menu-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box;outline:0;border-radius:var(--mat-menu-container-shape, var(--mat-sys-corner-extra-small));background-color:var(--mat-menu-container-color, var(--mat-sys-surface-container));will-change:transform,opacity}.mat-mdc-menu-panel.ng-animating{pointer-events:none}.mat-mdc-menu-panel.ng-animating:has(.mat-mdc-menu-content:empty){display:none}@media(forced-colors: active){.mat-mdc-menu-panel{outline:solid 1px}}.mat-mdc-menu-panel .mat-divider{color:var(--mat-menu-divider-color, var(--mat-sys-surface-variant));margin-bottom:var(--mat-menu-divider-bottom-spacing, 8px);margin-top:var(--mat-menu-divider-top-spacing, 8px)}.mat-mdc-menu-item{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;cursor:pointer;width:100%;text-align:left;box-sizing:border-box;color:inherit;font-size:inherit;background:none;text-decoration:none;margin:0;min-height:48px;padding-left:var(--mat-menu-item-leading-spacing, 12px);padding-right:var(--mat-menu-item-trailing-spacing, 12px);-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-menu-item::-moz-focus-inner{border:0}[dir=rtl] .mat-mdc-menu-item{padding-left:var(--mat-menu-item-trailing-spacing, 12px);padding-right:var(--mat-menu-item-leading-spacing, 12px)}.mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-leading-spacing, 12px);padding-right:var(--mat-menu-item-with-icon-trailing-spacing, 12px)}[dir=rtl] .mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-trailing-spacing, 12px);padding-right:var(--mat-menu-item-with-icon-leading-spacing, 12px)}.mat-mdc-menu-item,.mat-mdc-menu-item:visited,.mat-mdc-menu-item:link{color:var(--mat-menu-item-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-menu-item .mat-icon-no-color,.mat-mdc-menu-item .mat-mdc-menu-submenu-icon{color:var(--mat-menu-item-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-menu-item[disabled]{cursor:default;opacity:.38}.mat-mdc-menu-item[disabled]::after{display:block;position:absolute;content:\"\";top:0;left:0;bottom:0;right:0}.mat-mdc-menu-item:focus{outline:0}.mat-mdc-menu-item .mat-icon{flex-shrink:0;margin-right:var(--mat-menu-item-spacing, 12px);height:var(--mat-menu-item-icon-size, 24px);width:var(--mat-menu-item-icon-size, 24px)}[dir=rtl] .mat-mdc-menu-item{text-align:right}[dir=rtl] .mat-mdc-menu-item .mat-icon{margin-right:0;margin-left:var(--mat-menu-item-spacing, 12px)}.mat-mdc-menu-item:not([disabled]):hover{background-color:var(--mat-menu-item-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}.mat-mdc-menu-item:not([disabled]).cdk-program-focused,.mat-mdc-menu-item:not([disabled]).cdk-keyboard-focused,.mat-mdc-menu-item:not([disabled]).mat-mdc-menu-item-highlighted{background-color:var(--mat-menu-item-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent))}@media(forced-colors: active){.mat-mdc-menu-item{margin-top:1px}}.mat-mdc-menu-submenu-icon{width:var(--mat-menu-item-icon-size, 24px);height:10px;fill:currentColor;padding-left:var(--mat-menu-item-spacing, 12px)}[dir=rtl] .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing, 12px);padding-left:0}[dir=rtl] .mat-mdc-menu-submenu-icon polygon{transform:scaleX(-1);transform-origin:center}@media(forced-colors: active){.mat-mdc-menu-submenu-icon{fill:CanvasText}}.mat-mdc-menu-item .mat-mdc-menu-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}"], animations: [matMenuAnimations.transformMenu, matMenuAnimations.fadeInItems], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
622
664
  }
623
665
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenu, decorators: [{
624
666
  type: Component,
@@ -699,6 +741,43 @@ const passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: t
699
741
  const MENU_PANEL_TOP_PADDING = 8;
700
742
  /** Directive applied to an element that should trigger a `mat-menu`. */
701
743
  class MatMenuTrigger {
744
+ _overlay = inject(Overlay);
745
+ _element = inject(ElementRef);
746
+ _viewContainerRef = inject(ViewContainerRef);
747
+ _menuItemInstance = inject(MatMenuItem, { optional: true, self: true });
748
+ _dir = inject(Directionality, { optional: true });
749
+ _focusMonitor = inject(FocusMonitor);
750
+ _ngZone = inject(NgZone);
751
+ _scrollStrategy = inject(MAT_MENU_SCROLL_STRATEGY);
752
+ _changeDetectorRef = inject(ChangeDetectorRef);
753
+ _portal;
754
+ _overlayRef = null;
755
+ _menuOpen = false;
756
+ _closingActionsSubscription = Subscription.EMPTY;
757
+ _hoverSubscription = Subscription.EMPTY;
758
+ _menuCloseSubscription = Subscription.EMPTY;
759
+ /**
760
+ * We're specifically looking for a `MatMenu` here since the generic `MatMenuPanel`
761
+ * interface lacks some functionality around nested menus and animations.
762
+ */
763
+ _parentMaterialMenu;
764
+ /**
765
+ * Cached value of the padding of the parent menu panel.
766
+ * Used to offset sub-menus to compensate for the padding.
767
+ */
768
+ _parentInnerPadding;
769
+ /**
770
+ * Handles touch start events on the trigger.
771
+ * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.
772
+ */
773
+ _handleTouchStart = (event) => {
774
+ if (!isFakeTouchstartFromScreenReader(event)) {
775
+ this._openedBy = 'touch';
776
+ }
777
+ };
778
+ // Tracking input type is necessary so it's possible to only auto-focus
779
+ // the first item of the list when the menu is opened via the keyboard
780
+ _openedBy = undefined;
702
781
  /**
703
782
  * @deprecated
704
783
  * @breaking-change 8.0.0
@@ -733,57 +812,34 @@ class MatMenuTrigger {
733
812
  }
734
813
  this._menuItemInstance?._setTriggersSubmenu(this.triggersSubmenu());
735
814
  }
815
+ _menu;
816
+ /** Data to be passed along to any lazily-rendered content. */
817
+ menuData;
818
+ /**
819
+ * Whether focus should be restored when the menu is closed.
820
+ * Note that disabling this option can have accessibility implications
821
+ * and it's up to you to manage focus, if you decide to turn it off.
822
+ */
823
+ restoreFocus = true;
824
+ /** Event emitted when the associated menu is opened. */
825
+ menuOpened = new EventEmitter();
826
+ /**
827
+ * Event emitted when the associated menu is opened.
828
+ * @deprecated Switch to `menuOpened` instead
829
+ * @breaking-change 8.0.0
830
+ */
831
+ // tslint:disable-next-line:no-output-on-prefix
832
+ onMenuOpen = this.menuOpened;
833
+ /** Event emitted when the associated menu is closed. */
834
+ menuClosed = new EventEmitter();
835
+ /**
836
+ * Event emitted when the associated menu is closed.
837
+ * @deprecated Switch to `menuClosed` instead
838
+ * @breaking-change 8.0.0
839
+ */
840
+ // tslint:disable-next-line:no-output-on-prefix
841
+ onMenuClose = this.menuClosed;
736
842
  constructor() {
737
- this._overlay = inject(Overlay);
738
- this._element = inject(ElementRef);
739
- this._viewContainerRef = inject(ViewContainerRef);
740
- this._menuItemInstance = inject(MatMenuItem, { optional: true, self: true });
741
- this._dir = inject(Directionality, { optional: true });
742
- this._focusMonitor = inject(FocusMonitor);
743
- this._ngZone = inject(NgZone);
744
- this._scrollStrategy = inject(MAT_MENU_SCROLL_STRATEGY);
745
- this._changeDetectorRef = inject(ChangeDetectorRef);
746
- this._overlayRef = null;
747
- this._menuOpen = false;
748
- this._closingActionsSubscription = Subscription.EMPTY;
749
- this._hoverSubscription = Subscription.EMPTY;
750
- this._menuCloseSubscription = Subscription.EMPTY;
751
- /**
752
- * Handles touch start events on the trigger.
753
- * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.
754
- */
755
- this._handleTouchStart = (event) => {
756
- if (!isFakeTouchstartFromScreenReader(event)) {
757
- this._openedBy = 'touch';
758
- }
759
- };
760
- // Tracking input type is necessary so it's possible to only auto-focus
761
- // the first item of the list when the menu is opened via the keyboard
762
- this._openedBy = undefined;
763
- /**
764
- * Whether focus should be restored when the menu is closed.
765
- * Note that disabling this option can have accessibility implications
766
- * and it's up to you to manage focus, if you decide to turn it off.
767
- */
768
- this.restoreFocus = true;
769
- /** Event emitted when the associated menu is opened. */
770
- this.menuOpened = new EventEmitter();
771
- /**
772
- * Event emitted when the associated menu is opened.
773
- * @deprecated Switch to `menuOpened` instead
774
- * @breaking-change 8.0.0
775
- */
776
- // tslint:disable-next-line:no-output-on-prefix
777
- this.onMenuOpen = this.menuOpened;
778
- /** Event emitted when the associated menu is closed. */
779
- this.menuClosed = new EventEmitter();
780
- /**
781
- * Event emitted when the associated menu is closed.
782
- * @deprecated Switch to `menuClosed` instead
783
- * @breaking-change 8.0.0
784
- */
785
- // tslint:disable-next-line:no-output-on-prefix
786
- this.onMenuClose = this.menuClosed;
787
843
  const parentMenu = inject(MAT_MENU_PANEL, { optional: true });
788
844
  this._parentMaterialMenu = parentMenu instanceof MatMenu ? parentMenu : undefined;
789
845
  this._element.nativeElement.addEventListener('touchstart', this._handleTouchStart, passiveEventListenerOptions);
@@ -1125,8 +1181,8 @@ class MatMenuTrigger {
1125
1181
  }
1126
1182
  return this._portal;
1127
1183
  }
1128
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1129
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatMenuTrigger, isStandalone: true, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: { _deprecatedMatMenuTriggerFor: ["mat-menu-trigger-for", "_deprecatedMatMenuTriggerFor"], menu: ["matMenuTriggerFor", "menu"], menuData: ["matMenuTriggerData", "menuData"], restoreFocus: ["matMenuTriggerRestoreFocus", "restoreFocus"] }, outputs: { menuOpened: "menuOpened", onMenuOpen: "onMenuOpen", menuClosed: "menuClosed", onMenuClose: "onMenuClose" }, host: { listeners: { "click": "_handleClick($event)", "mousedown": "_handleMousedown($event)", "keydown": "_handleKeydown($event)" }, properties: { "attr.aria-haspopup": "menu ? \"menu\" : null", "attr.aria-expanded": "menuOpen", "attr.aria-controls": "menuOpen ? menu.panelId : null" }, classAttribute: "mat-mdc-menu-trigger" }, exportAs: ["matMenuTrigger"], ngImport: i0 }); }
1184
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1185
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatMenuTrigger, isStandalone: true, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: { _deprecatedMatMenuTriggerFor: ["mat-menu-trigger-for", "_deprecatedMatMenuTriggerFor"], menu: ["matMenuTriggerFor", "menu"], menuData: ["matMenuTriggerData", "menuData"], restoreFocus: ["matMenuTriggerRestoreFocus", "restoreFocus"] }, outputs: { menuOpened: "menuOpened", onMenuOpen: "onMenuOpen", menuClosed: "menuClosed", onMenuClose: "onMenuClose" }, host: { listeners: { "click": "_handleClick($event)", "mousedown": "_handleMousedown($event)", "keydown": "_handleKeydown($event)" }, properties: { "attr.aria-haspopup": "menu ? \"menu\" : null", "attr.aria-expanded": "menuOpen", "attr.aria-controls": "menuOpen ? menu.panelId : null" }, classAttribute: "mat-mdc-menu-trigger" }, exportAs: ["matMenuTrigger"], ngImport: i0 });
1130
1186
  }
1131
1187
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuTrigger, decorators: [{
1132
1188
  type: Directive,
@@ -1166,9 +1222,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
1166
1222
  }] } });
1167
1223
 
1168
1224
  class MatMenuModule {
1169
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1170
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuModule, imports: [CommonModule,
1171
- MatRippleModule,
1225
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1226
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuModule, imports: [MatRippleModule,
1172
1227
  MatCommonModule,
1173
1228
  OverlayModule,
1174
1229
  MatMenu,
@@ -1179,18 +1234,16 @@ class MatMenuModule {
1179
1234
  MatCommonModule,
1180
1235
  MatMenuItem,
1181
1236
  MatMenuContent,
1182
- MatMenuTrigger] }); }
1183
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuModule, providers: [MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER], imports: [CommonModule,
1184
- MatRippleModule,
1237
+ MatMenuTrigger] });
1238
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuModule, providers: [MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER], imports: [MatRippleModule,
1185
1239
  MatCommonModule,
1186
1240
  OverlayModule, CdkScrollableModule,
1187
- MatCommonModule] }); }
1241
+ MatCommonModule] });
1188
1242
  }
1189
1243
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMenuModule, decorators: [{
1190
1244
  type: NgModule,
1191
1245
  args: [{
1192
1246
  imports: [
1193
- CommonModule,
1194
1247
  MatRippleModule,
1195
1248
  MatCommonModule,
1196
1249
  OverlayModule,