@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.
- package/autocomplete/_autocomplete-theme.scss +8 -4
- package/autocomplete/index.d.ts +5 -6
- package/badge/_badge-theme.scss +10 -6
- package/bottom-sheet/_bottom-sheet-theme.scss +8 -4
- package/button/_button-theme.scss +10 -6
- package/button/_fab-theme.scss +10 -6
- package/button/_icon-button-theme.scss +8 -4
- package/button/index.d.ts +1 -1
- package/button-toggle/_button-toggle-theme.scss +11 -6
- package/card/_card-theme.scss +8 -4
- package/card/index.d.ts +2 -3
- package/checkbox/_checkbox-theme.scss +10 -6
- package/chips/_chips-theme.scss +10 -6
- package/core/_core-theme.scss +4 -7
- package/core/_core.scss +2 -5
- package/core/option/_optgroup-theme.scss +8 -4
- package/core/option/_option-theme.scss +10 -6
- package/core/ripple/_ripple-theme.scss +8 -4
- package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.scss +10 -6
- package/core/theming/_config-validation.scss +4 -4
- package/core/theming/_definition.scss +12 -2
- package/core/tokens/_m3-system.scss +55 -39
- package/datepicker/_datepicker-theme.scss +10 -6
- package/datepicker/index.d.ts +32 -33
- package/dialog/_dialog-theme.scss +8 -4
- package/divider/_divider-theme.scss +8 -4
- package/expansion/_expansion-theme.scss +8 -4
- package/fesm2022/autocomplete/testing.mjs +2 -5
- package/fesm2022/autocomplete/testing.mjs.map +1 -1
- package/fesm2022/autocomplete.mjs +220 -141
- package/fesm2022/autocomplete.mjs.map +1 -1
- package/fesm2022/badge/testing.mjs +2 -5
- package/fesm2022/badge/testing.mjs.map +1 -1
- package/fesm2022/badge.mjs +41 -30
- package/fesm2022/badge.mjs.map +1 -1
- package/fesm2022/bottom-sheet/testing.mjs +1 -1
- package/fesm2022/bottom-sheet/testing.mjs.map +1 -1
- package/fesm2022/bottom-sheet.mjs +76 -54
- package/fesm2022/bottom-sheet.mjs.map +1 -1
- package/fesm2022/button/testing.mjs +2 -2
- package/fesm2022/button/testing.mjs.map +1 -1
- package/fesm2022/button-toggle/testing.mjs +4 -7
- package/fesm2022/button-toggle/testing.mjs.map +1 -1
- package/fesm2022/button-toggle.mjs +78 -40
- package/fesm2022/button-toggle.mjs.map +1 -1
- package/fesm2022/button.mjs +87 -60
- package/fesm2022/button.mjs.map +1 -1
- package/fesm2022/card/testing.mjs +3 -6
- package/fesm2022/card/testing.mjs.map +1 -1
- package/fesm2022/card.mjs +38 -40
- package/fesm2022/card.mjs.map +1 -1
- package/fesm2022/checkbox/testing.mjs +4 -7
- package/fesm2022/checkbox/testing.mjs.map +1 -1
- package/fesm2022/checkbox.mjs +99 -56
- package/fesm2022/checkbox.mjs.map +1 -1
- package/fesm2022/chips/testing.mjs +11 -14
- package/fesm2022/chips/testing.mjs.map +1 -1
- package/fesm2022/chips.mjs +303 -251
- package/fesm2022/chips.mjs.map +1 -1
- package/fesm2022/core/testing.mjs +5 -11
- package/fesm2022/core/testing.mjs.map +1 -1
- package/fesm2022/core.mjs +217 -160
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/datepicker/testing.mjs +13 -22
- package/fesm2022/datepicker/testing.mjs.map +1 -1
- package/fesm2022/datepicker.mjs +788 -533
- package/fesm2022/datepicker.mjs.map +1 -1
- package/fesm2022/dialog/testing.mjs +15 -9
- package/fesm2022/dialog/testing.mjs.map +1 -1
- package/fesm2022/dialog.mjs +210 -140
- package/fesm2022/dialog.mjs.map +1 -1
- package/fesm2022/divider/testing.mjs +1 -1
- package/fesm2022/divider/testing.mjs.map +1 -1
- package/fesm2022/divider.mjs +7 -9
- package/fesm2022/divider.mjs.map +1 -1
- package/fesm2022/expansion/testing.mjs +7 -10
- package/fesm2022/expansion/testing.mjs.map +1 -1
- package/fesm2022/expansion.mjs +76 -65
- package/fesm2022/expansion.mjs.map +1 -1
- package/fesm2022/form-field/testing.mjs +12 -15
- package/fesm2022/form-field/testing.mjs.map +1 -1
- package/fesm2022/form-field.mjs +165 -111
- package/fesm2022/form-field.mjs.map +1 -1
- package/fesm2022/grid-list/testing.mjs +11 -17
- package/fesm2022/grid-list/testing.mjs.map +1 -1
- package/fesm2022/grid-list.mjs +65 -43
- package/fesm2022/grid-list.mjs.map +1 -1
- package/fesm2022/icon/testing.mjs +6 -6
- package/fesm2022/icon/testing.mjs.map +1 -1
- package/fesm2022/icon.mjs +62 -42
- package/fesm2022/icon.mjs.map +1 -1
- package/fesm2022/input/testing.mjs +3 -3
- package/fesm2022/input/testing.mjs.map +1 -1
- package/fesm2022/input.mjs +101 -69
- package/fesm2022/input.mjs.map +1 -1
- package/fesm2022/list/testing.mjs +21 -38
- package/fesm2022/list/testing.mjs.map +1 -1
- package/fesm2022/list.mjs +175 -164
- package/fesm2022/list.mjs.map +1 -1
- package/fesm2022/menu/testing.mjs +3 -6
- package/fesm2022/menu/testing.mjs.map +1 -1
- package/fesm2022/menu.mjs +171 -118
- package/fesm2022/menu.mjs.map +1 -1
- package/fesm2022/paginator/testing.mjs +10 -13
- package/fesm2022/paginator/testing.mjs.map +1 -1
- package/fesm2022/paginator.mjs +79 -54
- package/fesm2022/paginator.mjs.map +1 -1
- package/fesm2022/progress-bar/testing.mjs +1 -1
- package/fesm2022/progress-bar/testing.mjs.map +1 -1
- package/fesm2022/progress-bar.mjs +33 -32
- package/fesm2022/progress-bar.mjs.map +1 -1
- package/fesm2022/progress-spinner/testing.mjs +1 -1
- package/fesm2022/progress-spinner/testing.mjs.map +1 -1
- package/fesm2022/progress-spinner.mjs +25 -11
- package/fesm2022/progress-spinner.mjs.map +1 -1
- package/fesm2022/radio/testing.mjs +6 -12
- package/fesm2022/radio/testing.mjs.map +1 -1
- package/fesm2022/radio.mjs +119 -82
- package/fesm2022/radio.mjs.map +1 -1
- package/fesm2022/select/testing.mjs +6 -9
- package/fesm2022/select/testing.mjs.map +1 -1
- package/fesm2022/select.mjs +215 -177
- package/fesm2022/select.mjs.map +1 -1
- package/fesm2022/sidenav/testing.mjs +6 -6
- package/fesm2022/sidenav/testing.mjs.map +1 -1
- package/fesm2022/sidenav.mjs +125 -112
- package/fesm2022/sidenav.mjs.map +1 -1
- package/fesm2022/slide-toggle/testing.mjs +3 -6
- package/fesm2022/slide-toggle/testing.mjs.map +1 -1
- package/fesm2022/slide-toggle.mjs +72 -41
- package/fesm2022/slide-toggle.mjs.map +1 -1
- package/fesm2022/slider/testing.mjs +2 -2
- package/fesm2022/slider/testing.mjs.map +1 -1
- package/fesm2022/slider.mjs +255 -185
- package/fesm2022/slider.mjs.map +1 -1
- package/fesm2022/snack-bar/testing.mjs +4 -7
- package/fesm2022/snack-bar/testing.mjs.map +1 -1
- package/fesm2022/snack-bar.mjs +133 -98
- package/fesm2022/snack-bar.mjs.map +1 -1
- package/fesm2022/sort/testing.mjs +3 -6
- package/fesm2022/sort/testing.mjs.map +1 -1
- package/fesm2022/sort.mjs +89 -68
- package/fesm2022/sort.mjs.map +1 -1
- package/fesm2022/stepper/testing.mjs +4 -4
- package/fesm2022/stepper/testing.mjs.map +1 -1
- package/fesm2022/stepper.mjs +133 -95
- package/fesm2022/stepper.mjs.map +1 -1
- package/fesm2022/table/testing.mjs +13 -25
- package/fesm2022/table/testing.mjs.map +1 -1
- package/fesm2022/table.mjs +164 -159
- package/fesm2022/table.mjs.map +1 -1
- package/fesm2022/tabs/testing.mjs +5 -5
- package/fesm2022/tabs/testing.mjs.map +1 -1
- package/fesm2022/tabs.mjs +308 -225
- package/fesm2022/tabs.mjs.map +1 -1
- package/fesm2022/timepicker/testing.mjs +7 -16
- package/fesm2022/timepicker/testing.mjs.map +1 -1
- package/fesm2022/timepicker.mjs +152 -146
- package/fesm2022/timepicker.mjs.map +1 -1
- package/fesm2022/toolbar/testing.mjs +2 -5
- package/fesm2022/toolbar/testing.mjs.map +1 -1
- package/fesm2022/toolbar.mjs +22 -12
- package/fesm2022/toolbar.mjs.map +1 -1
- package/fesm2022/tooltip/testing.mjs +6 -9
- package/fesm2022/tooltip/testing.mjs.map +1 -1
- package/fesm2022/tooltip.mjs +93 -69
- package/fesm2022/tooltip.mjs.map +1 -1
- package/fesm2022/tree/testing.mjs +3 -6
- package/fesm2022/tree/testing.mjs.map +1 -1
- package/fesm2022/tree.mjs +48 -46
- package/fesm2022/tree.mjs.map +1 -1
- package/form-field/_form-field-theme.scss +9 -5
- package/form-field/index.d.ts +8 -9
- package/grid-list/_grid-list-theme.scss +8 -4
- package/icon/_icon-theme.scss +10 -6
- package/input/_input-theme.scss +8 -4
- package/list/_list-theme.scss +8 -4
- package/list/index.d.ts +20 -21
- package/menu/_menu-theme.scss +8 -4
- package/menu/index.d.ts +8 -9
- package/package.json +2 -2
- package/paginator/_paginator-theme.scss +8 -4
- package/prebuilt-themes/azure-blue.css +1 -1
- package/prebuilt-themes/cyan-orange.css +1 -1
- package/prebuilt-themes/deeppurple-amber.css +1 -1
- package/prebuilt-themes/indigo-pink.css +1 -1
- package/prebuilt-themes/magenta-violet.css +1 -1
- package/prebuilt-themes/pink-bluegrey.css +1 -1
- package/prebuilt-themes/purple-green.css +1 -1
- package/prebuilt-themes/rose-red.css +1 -1
- package/progress-bar/_progress-bar-theme.scss +11 -9
- package/progress-spinner/_progress-spinner-theme.scss +11 -9
- package/progress-spinner/index.d.ts +3 -4
- package/radio/_radio-theme.scss +10 -6
- package/radio/index.d.ts +2 -3
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-add/index.mjs +1 -1
- package/schematics/ng-add/theming/create-custom-theme.js +1 -6
- package/schematics/ng-add/theming/create-custom-theme.mjs +1 -6
- package/schematics/ng-generate/theme-color/index_bundled.js +35 -9
- package/schematics/ng-generate/theme-color/index_bundled.js.map +2 -2
- package/schematics/ng-update/index_bundled.js +6 -1
- package/schematics/ng-update/index_bundled.js.map +1 -1
- package/select/_select-theme.scss +10 -6
- package/select/index.d.ts +6 -7
- package/sidenav/_sidenav-theme.scss +8 -4
- package/slide-toggle/_slide-toggle-theme.scss +10 -6
- package/slider/_slider-theme.scss +10 -6
- package/snack-bar/_snack-bar-theme.scss +10 -6
- package/sort/_sort-theme.scss +8 -4
- package/stepper/_stepper-theme.scss +10 -6
- package/stepper/index.d.ts +14 -15
- package/table/_table-theme.scss +8 -4
- package/tabs/_tabs-theme.scss +10 -6
- package/timepicker/_timepicker-theme.scss +10 -6
- package/toolbar/_toolbar-theme.scss +10 -6
- package/tooltip/_tooltip-theme.scss +8 -4
- package/tooltip/index.d.ts +5 -6
- package/tree/_tree-theme.scss +8 -4
|
@@ -2,20 +2,20 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { InjectionToken, inject, ChangeDetectorRef, ElementRef, EventEmitter, booleanAttribute, TemplateRef, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, ContentChildren, Input, Output, Directive, forwardRef, ViewContainerRef, NgZone, Injector, afterNextRender, NgModule } from '@angular/core';
|
|
3
3
|
import { MAT_OPTION_PARENT_COMPONENT, MatOption, MAT_OPTGROUP, MatOptionSelectionChange, _countGroupLabelsBeforeOption, _getOptionScrollPosition, MatOptionModule, MatCommonModule } from '@angular/material/core';
|
|
4
4
|
export { MatOptgroup, MatOption } from '@angular/material/core';
|
|
5
|
-
import { DOCUMENT, CommonModule } from '@angular/common';
|
|
6
5
|
import { ViewportRuler, CdkScrollableModule } from '@angular/cdk/scrolling';
|
|
7
6
|
import { Overlay, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
|
|
8
7
|
import { ActiveDescendantKeyManager, removeAriaReferencedId, addAriaReferencedId } from '@angular/cdk/a11y';
|
|
9
8
|
import { Platform, _getEventTarget } from '@angular/cdk/platform';
|
|
10
9
|
import { trigger, state, style, transition, group, animate } from '@angular/animations';
|
|
11
|
-
import { Subscription, Subject,
|
|
10
|
+
import { Subscription, Subject, merge, of, defer, fromEvent, Observable } from 'rxjs';
|
|
12
11
|
import { Directionality } from '@angular/cdk/bidi';
|
|
13
|
-
import { ESCAPE,
|
|
12
|
+
import { hasModifierKey, ESCAPE, ENTER, UP_ARROW, DOWN_ARROW, TAB } from '@angular/cdk/keycodes';
|
|
14
13
|
import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
|
|
15
14
|
import { TemplatePortal } from '@angular/cdk/portal';
|
|
15
|
+
import { DOCUMENT } from '@angular/common';
|
|
16
16
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
17
17
|
import { MAT_FORM_FIELD } from '@angular/material/form-field';
|
|
18
|
-
import {
|
|
18
|
+
import { filter, map, startWith, switchMap, tap, delay, take } from 'rxjs/operators';
|
|
19
19
|
|
|
20
20
|
// Animation values come from
|
|
21
21
|
// TODO(mmalerba): Ideally find a way to import the values from MDC's code.
|
|
@@ -40,6 +40,8 @@ const panelAnimation = trigger('panelAnimation', [
|
|
|
40
40
|
let _uniqueAutocompleteIdCounter = 0;
|
|
41
41
|
/** Event object that is emitted when an autocomplete option is selected. */
|
|
42
42
|
class MatAutocompleteSelectedEvent {
|
|
43
|
+
source;
|
|
44
|
+
option;
|
|
43
45
|
constructor(
|
|
44
46
|
/** Reference to the autocomplete panel that emitted the event. */
|
|
45
47
|
source,
|
|
@@ -65,15 +67,76 @@ function MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY() {
|
|
|
65
67
|
}
|
|
66
68
|
/** Autocomplete component. */
|
|
67
69
|
class MatAutocomplete {
|
|
70
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
71
|
+
_elementRef = inject(ElementRef);
|
|
72
|
+
_defaults = inject(MAT_AUTOCOMPLETE_DEFAULT_OPTIONS);
|
|
73
|
+
_activeOptionChanges = Subscription.EMPTY;
|
|
74
|
+
/** Emits when the panel animation is done. Null if the panel doesn't animate. */
|
|
75
|
+
_animationDone = new EventEmitter();
|
|
76
|
+
/** Manages active item in option list based on key events. */
|
|
77
|
+
_keyManager;
|
|
78
|
+
/** Whether the autocomplete panel should be visible, depending on option length. */
|
|
79
|
+
showPanel = false;
|
|
68
80
|
/** Whether the autocomplete panel is open. */
|
|
69
81
|
get isOpen() {
|
|
70
82
|
return this._isOpen && this.showPanel;
|
|
71
83
|
}
|
|
84
|
+
_isOpen = false;
|
|
85
|
+
/** Latest trigger that opened the autocomplete. */
|
|
86
|
+
_latestOpeningTrigger;
|
|
72
87
|
/** @docs-private Sets the theme color of the panel. */
|
|
73
88
|
_setColor(value) {
|
|
74
89
|
this._color = value;
|
|
75
90
|
this._changeDetectorRef.markForCheck();
|
|
76
91
|
}
|
|
92
|
+
/** @docs-private theme color of the panel */
|
|
93
|
+
_color;
|
|
94
|
+
// The @ViewChild query for TemplateRef here needs to be static because some code paths
|
|
95
|
+
// lead to the overlay being created before change detection has finished for this component.
|
|
96
|
+
// Notably, another component may trigger `focus` on the autocomplete-trigger.
|
|
97
|
+
/** @docs-private */
|
|
98
|
+
template;
|
|
99
|
+
/** Element for the panel containing the autocomplete options. */
|
|
100
|
+
panel;
|
|
101
|
+
/** Reference to all options within the autocomplete. */
|
|
102
|
+
options;
|
|
103
|
+
/** Reference to all option groups within the autocomplete. */
|
|
104
|
+
optionGroups;
|
|
105
|
+
/** Aria label of the autocomplete. */
|
|
106
|
+
ariaLabel;
|
|
107
|
+
/** Input that can be used to specify the `aria-labelledby` attribute. */
|
|
108
|
+
ariaLabelledby;
|
|
109
|
+
/** Function that maps an option's control value to its display value in the trigger. */
|
|
110
|
+
displayWith = null;
|
|
111
|
+
/**
|
|
112
|
+
* Whether the first option should be highlighted when the autocomplete panel is opened.
|
|
113
|
+
* Can be configured globally through the `MAT_AUTOCOMPLETE_DEFAULT_OPTIONS` token.
|
|
114
|
+
*/
|
|
115
|
+
autoActiveFirstOption;
|
|
116
|
+
/** Whether the active option should be selected as the user is navigating. */
|
|
117
|
+
autoSelectActiveOption;
|
|
118
|
+
/**
|
|
119
|
+
* Whether the user is required to make a selection when they're interacting with the
|
|
120
|
+
* autocomplete. If the user moves away from the autocomplete without selecting an option from
|
|
121
|
+
* the list, the value will be reset. If the user opens the panel and closes it without
|
|
122
|
+
* interacting or selecting a value, the initial value will be kept.
|
|
123
|
+
*/
|
|
124
|
+
requireSelection;
|
|
125
|
+
/**
|
|
126
|
+
* Specify the width of the autocomplete panel. Can be any CSS sizing value, otherwise it will
|
|
127
|
+
* match the width of its host.
|
|
128
|
+
*/
|
|
129
|
+
panelWidth;
|
|
130
|
+
/** Whether ripples are disabled within the autocomplete panel. */
|
|
131
|
+
disableRipple;
|
|
132
|
+
/** Event that is emitted whenever an option from the list is selected. */
|
|
133
|
+
optionSelected = new EventEmitter();
|
|
134
|
+
/** Event that is emitted when the autocomplete panel is opened. */
|
|
135
|
+
opened = new EventEmitter();
|
|
136
|
+
/** Event that is emitted when the autocomplete panel is closed. */
|
|
137
|
+
closed = new EventEmitter();
|
|
138
|
+
/** Emits whenever an option is activated. */
|
|
139
|
+
optionActivated = new EventEmitter();
|
|
77
140
|
/**
|
|
78
141
|
* Takes classes set on the host mat-autocomplete element and applies them to the panel
|
|
79
142
|
* inside the overlay container to allow for easy styling.
|
|
@@ -82,6 +145,7 @@ class MatAutocomplete {
|
|
|
82
145
|
this._classList = value;
|
|
83
146
|
this._elementRef.nativeElement.className = '';
|
|
84
147
|
}
|
|
148
|
+
_classList;
|
|
85
149
|
/** Whether checkmark indicator for single-selection options is hidden. */
|
|
86
150
|
get hideSingleSelectionIndicator() {
|
|
87
151
|
return this._hideSingleSelectionIndicator;
|
|
@@ -90,6 +154,7 @@ class MatAutocomplete {
|
|
|
90
154
|
this._hideSingleSelectionIndicator = value;
|
|
91
155
|
this._syncParentProperties();
|
|
92
156
|
}
|
|
157
|
+
_hideSingleSelectionIndicator;
|
|
93
158
|
/** Syncs the parent state with the individual options. */
|
|
94
159
|
_syncParentProperties() {
|
|
95
160
|
if (this.options) {
|
|
@@ -98,28 +163,14 @@ class MatAutocomplete {
|
|
|
98
163
|
}
|
|
99
164
|
}
|
|
100
165
|
}
|
|
166
|
+
/** Unique ID to be used by autocomplete trigger's "aria-owns" property. */
|
|
167
|
+
id = `mat-autocomplete-${_uniqueAutocompleteIdCounter++}`;
|
|
168
|
+
/**
|
|
169
|
+
* Tells any descendant `mat-optgroup` to use the inert a11y pattern.
|
|
170
|
+
* @docs-private
|
|
171
|
+
*/
|
|
172
|
+
inertGroups;
|
|
101
173
|
constructor() {
|
|
102
|
-
this._changeDetectorRef = inject(ChangeDetectorRef);
|
|
103
|
-
this._elementRef = inject(ElementRef);
|
|
104
|
-
this._defaults = inject(MAT_AUTOCOMPLETE_DEFAULT_OPTIONS);
|
|
105
|
-
this._activeOptionChanges = Subscription.EMPTY;
|
|
106
|
-
/** Emits when the panel animation is done. Null if the panel doesn't animate. */
|
|
107
|
-
this._animationDone = new EventEmitter();
|
|
108
|
-
/** Whether the autocomplete panel should be visible, depending on option length. */
|
|
109
|
-
this.showPanel = false;
|
|
110
|
-
this._isOpen = false;
|
|
111
|
-
/** Function that maps an option's control value to its display value in the trigger. */
|
|
112
|
-
this.displayWith = null;
|
|
113
|
-
/** Event that is emitted whenever an option from the list is selected. */
|
|
114
|
-
this.optionSelected = new EventEmitter();
|
|
115
|
-
/** Event that is emitted when the autocomplete panel is opened. */
|
|
116
|
-
this.opened = new EventEmitter();
|
|
117
|
-
/** Event that is emitted when the autocomplete panel is closed. */
|
|
118
|
-
this.closed = new EventEmitter();
|
|
119
|
-
/** Emits whenever an option is activated. */
|
|
120
|
-
this.optionActivated = new EventEmitter();
|
|
121
|
-
/** Unique ID to be used by autocomplete trigger's "aria-owns" property. */
|
|
122
|
-
this.id = `mat-autocomplete-${_uniqueAutocompleteIdCounter++}`;
|
|
123
174
|
const platform = inject(Platform);
|
|
124
175
|
// TODO(crisbeto): the problem that the `inertGroups` option resolves is only present on
|
|
125
176
|
// Safari using VoiceOver. We should occasionally check back to see whether the bug
|
|
@@ -196,8 +247,8 @@ class MatAutocomplete {
|
|
|
196
247
|
_skipPredicate() {
|
|
197
248
|
return false;
|
|
198
249
|
}
|
|
199
|
-
static
|
|
200
|
-
static
|
|
250
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatAutocomplete, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
251
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "19.0.0-next.10", type: MatAutocomplete, isStandalone: true, selector: "mat-autocomplete", inputs: { ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledby: ["aria-labelledby", "ariaLabelledby"], displayWith: "displayWith", autoActiveFirstOption: ["autoActiveFirstOption", "autoActiveFirstOption", booleanAttribute], autoSelectActiveOption: ["autoSelectActiveOption", "autoSelectActiveOption", booleanAttribute], requireSelection: ["requireSelection", "requireSelection", booleanAttribute], panelWidth: "panelWidth", disableRipple: ["disableRipple", "disableRipple", booleanAttribute], classList: ["class", "classList"], hideSingleSelectionIndicator: ["hideSingleSelectionIndicator", "hideSingleSelectionIndicator", booleanAttribute] }, outputs: { optionSelected: "optionSelected", opened: "opened", closed: "closed", optionActivated: "optionActivated" }, host: { classAttribute: "mat-mdc-autocomplete" }, providers: [{ provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatAutocomplete }], queries: [{ propertyName: "options", predicate: MatOption, descendants: true }, { propertyName: "optionGroups", predicate: MAT_OPTGROUP, descendants: true }], viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true, static: true }, { propertyName: "panel", first: true, predicate: ["panel"], descendants: true }], exportAs: ["matAutocomplete"], ngImport: i0, template: "<ng-template let-formFieldId=\"id\">\n <div\n class=\"mat-mdc-autocomplete-panel mdc-menu-surface mdc-menu-surface--open\"\n role=\"listbox\"\n [id]=\"id\"\n [class]=\"_classList\"\n [class.mat-mdc-autocomplete-visible]=\"showPanel\"\n [class.mat-mdc-autocomplete-hidden]=\"!showPanel\"\n [class.mat-primary]=\"_color === 'primary'\"\n [class.mat-accent]=\"_color === 'accent'\"\n [class.mat-warn]=\"_color === 'warn'\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"_getPanelAriaLabelledby(formFieldId)\"\n [@panelAnimation]=\"isOpen ? 'visible' : 'hidden'\"\n (@panelAnimation.done)=\"_animationDone.next($event)\"\n #panel>\n <ng-content></ng-content>\n </div>\n</ng-template>\n", styles: ["div.mat-mdc-autocomplete-panel{width:100%;max-height:256px;visibility:hidden;transform-origin:center top;overflow:auto;padding:8px 0;box-sizing:border-box;position:static;border-radius:var(--mat-autocomplete-container-shape, var(--mat-sys-corner-extra-small));box-shadow:var(--mat-autocomplete-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));background-color:var(--mat-autocomplete-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){div.mat-mdc-autocomplete-panel{outline:solid 1px}}.cdk-overlay-pane:not(.mat-mdc-autocomplete-panel-above) div.mat-mdc-autocomplete-panel{border-top-left-radius:0;border-top-right-radius:0}.mat-mdc-autocomplete-panel-above div.mat-mdc-autocomplete-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:center bottom}div.mat-mdc-autocomplete-panel.mat-mdc-autocomplete-visible{visibility:visible}div.mat-mdc-autocomplete-panel.mat-mdc-autocomplete-hidden{visibility:hidden;pointer-events:none}mat-autocomplete{display:none}"], animations: [panelAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
201
252
|
}
|
|
202
253
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatAutocomplete, decorators: [{
|
|
203
254
|
type: Component,
|
|
@@ -259,11 +310,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
259
310
|
* as a connection point for an autocomplete panel.
|
|
260
311
|
*/
|
|
261
312
|
class MatAutocompleteOrigin {
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
}
|
|
265
|
-
static
|
|
266
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatAutocompleteOrigin, isStandalone: true, selector: "[matAutocompleteOrigin]", exportAs: ["matAutocompleteOrigin"], ngImport: i0 }); }
|
|
313
|
+
elementRef = inject(ElementRef);
|
|
314
|
+
constructor() { }
|
|
315
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatAutocompleteOrigin, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
316
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatAutocompleteOrigin, isStandalone: true, selector: "[matAutocompleteOrigin]", exportAs: ["matAutocompleteOrigin"], ngImport: i0 });
|
|
267
317
|
}
|
|
268
318
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatAutocompleteOrigin, decorators: [{
|
|
269
319
|
type: Directive,
|
|
@@ -311,104 +361,99 @@ const MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER = {
|
|
|
311
361
|
};
|
|
312
362
|
/** Base class with all of the `MatAutocompleteTrigger` functionality. */
|
|
313
363
|
class MatAutocompleteTrigger {
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
this.
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
* inside an aria-modal, we apply aria-owns to the parent modal with the `id` of the options
|
|
408
|
-
* panel. Track the modal we have changed so we can undo the changes on destroy.
|
|
409
|
-
*/
|
|
410
|
-
this._trackedModal = null;
|
|
411
|
-
}
|
|
364
|
+
_element = inject(ElementRef);
|
|
365
|
+
_overlay = inject(Overlay);
|
|
366
|
+
_viewContainerRef = inject(ViewContainerRef);
|
|
367
|
+
_zone = inject(NgZone);
|
|
368
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
369
|
+
_dir = inject(Directionality, { optional: true });
|
|
370
|
+
_formField = inject(MAT_FORM_FIELD, { optional: true, host: true });
|
|
371
|
+
_document = inject(DOCUMENT);
|
|
372
|
+
_viewportRuler = inject(ViewportRuler);
|
|
373
|
+
_defaults = inject(MAT_AUTOCOMPLETE_DEFAULT_OPTIONS, { optional: true });
|
|
374
|
+
_overlayRef;
|
|
375
|
+
_portal;
|
|
376
|
+
_componentDestroyed = false;
|
|
377
|
+
_scrollStrategy = inject(MAT_AUTOCOMPLETE_SCROLL_STRATEGY);
|
|
378
|
+
_keydownSubscription;
|
|
379
|
+
_outsideClickSubscription;
|
|
380
|
+
/** Old value of the native input. Used to work around issues with the `input` event on IE. */
|
|
381
|
+
_previousValue;
|
|
382
|
+
/** Value of the input element when the panel was attached (even if there are no options). */
|
|
383
|
+
_valueOnAttach;
|
|
384
|
+
/** Value on the previous keydown event. */
|
|
385
|
+
_valueOnLastKeydown;
|
|
386
|
+
/** Strategy that is used to position the panel. */
|
|
387
|
+
_positionStrategy;
|
|
388
|
+
/** Whether or not the label state is being overridden. */
|
|
389
|
+
_manuallyFloatingLabel = false;
|
|
390
|
+
/** The subscription for closing actions (some are bound to document). */
|
|
391
|
+
_closingActionsSubscription;
|
|
392
|
+
/** Subscription to viewport size changes. */
|
|
393
|
+
_viewportSubscription = Subscription.EMPTY;
|
|
394
|
+
/** Implements BreakpointObserver to be used to detect handset landscape */
|
|
395
|
+
_breakpointObserver = inject(BreakpointObserver);
|
|
396
|
+
_handsetLandscapeSubscription = Subscription.EMPTY;
|
|
397
|
+
/**
|
|
398
|
+
* Whether the autocomplete can open the next time it is focused. Used to prevent a focused,
|
|
399
|
+
* closed autocomplete from being reopened if the user switches to another browser tab and then
|
|
400
|
+
* comes back.
|
|
401
|
+
*/
|
|
402
|
+
_canOpenOnNextFocus = true;
|
|
403
|
+
/** Value inside the input before we auto-selected an option. */
|
|
404
|
+
_valueBeforeAutoSelection;
|
|
405
|
+
/**
|
|
406
|
+
* Current option that we have auto-selected as the user is navigating,
|
|
407
|
+
* but which hasn't been propagated to the model value yet.
|
|
408
|
+
*/
|
|
409
|
+
_pendingAutoselectedOption;
|
|
410
|
+
/** Stream of keyboard events that can close the panel. */
|
|
411
|
+
_closeKeyEventStream = new Subject();
|
|
412
|
+
/**
|
|
413
|
+
* Event handler for when the window is blurred. Needs to be an
|
|
414
|
+
* arrow function in order to preserve the context.
|
|
415
|
+
*/
|
|
416
|
+
_windowBlurHandler = () => {
|
|
417
|
+
// If the user blurred the window while the autocomplete is focused, it means that it'll be
|
|
418
|
+
// refocused when they come back. In this case we want to skip the first focus event, if the
|
|
419
|
+
// pane was closed, in order to avoid reopening it unintentionally.
|
|
420
|
+
this._canOpenOnNextFocus =
|
|
421
|
+
this._document.activeElement !== this._element.nativeElement || this.panelOpen;
|
|
422
|
+
};
|
|
423
|
+
/** `View -> model callback called when value changes` */
|
|
424
|
+
_onChange = () => { };
|
|
425
|
+
/** `View -> model callback called when autocomplete has been touched` */
|
|
426
|
+
_onTouched = () => { };
|
|
427
|
+
/** The autocomplete panel to be attached to this trigger. */
|
|
428
|
+
autocomplete;
|
|
429
|
+
/**
|
|
430
|
+
* Position of the autocomplete panel relative to the trigger element. A position of `auto`
|
|
431
|
+
* will render the panel underneath the trigger if there is enough space for it to fit in
|
|
432
|
+
* the viewport, otherwise the panel will be shown above it. If the position is set to
|
|
433
|
+
* `above` or `below`, the panel will always be shown above or below the trigger. no matter
|
|
434
|
+
* whether it fits completely in the viewport.
|
|
435
|
+
*/
|
|
436
|
+
position = 'auto';
|
|
437
|
+
/**
|
|
438
|
+
* Reference relative to which to position the autocomplete panel.
|
|
439
|
+
* Defaults to the autocomplete trigger element.
|
|
440
|
+
*/
|
|
441
|
+
connectedTo;
|
|
442
|
+
/**
|
|
443
|
+
* `autocomplete` attribute to be set on the input element.
|
|
444
|
+
* @docs-private
|
|
445
|
+
*/
|
|
446
|
+
autocompleteAttribute = 'off';
|
|
447
|
+
/**
|
|
448
|
+
* Whether the autocomplete is disabled. When disabled, the element will
|
|
449
|
+
* act as a regular input and the user won't be able to open the panel.
|
|
450
|
+
*/
|
|
451
|
+
autocompleteDisabled;
|
|
452
|
+
_initialized = new Subject();
|
|
453
|
+
_injector = inject(Injector);
|
|
454
|
+
constructor() { }
|
|
455
|
+
/** Class to apply to the panel when it's above the input. */
|
|
456
|
+
_aboveClass = 'mat-mdc-autocomplete-panel-above';
|
|
412
457
|
ngAfterViewInit() {
|
|
413
458
|
this._initialized.next();
|
|
414
459
|
this._initialized.complete();
|
|
@@ -441,6 +486,7 @@ class MatAutocompleteTrigger {
|
|
|
441
486
|
get panelOpen() {
|
|
442
487
|
return this._overlayAttached && this.autocomplete.showPanel;
|
|
443
488
|
}
|
|
489
|
+
_overlayAttached = false;
|
|
444
490
|
/** Opens the autocomplete suggestion panel. */
|
|
445
491
|
openPanel() {
|
|
446
492
|
this._openPanelInternal();
|
|
@@ -507,6 +553,16 @@ class MatAutocompleteTrigger {
|
|
|
507
553
|
// Normalize the output so we return a consistent type.
|
|
508
554
|
map(event => (event instanceof MatOptionSelectionChange ? event : null)));
|
|
509
555
|
}
|
|
556
|
+
/** Stream of changes to the selection state of the autocomplete options. */
|
|
557
|
+
optionSelections = defer(() => {
|
|
558
|
+
const options = this.autocomplete ? this.autocomplete.options : null;
|
|
559
|
+
if (options) {
|
|
560
|
+
return options.changes.pipe(startWith(options), switchMap(() => merge(...options.map(option => option.onSelectionChange))));
|
|
561
|
+
}
|
|
562
|
+
// If there are any subscribers before `ngAfterViewInit`, the `autocomplete` will be undefined.
|
|
563
|
+
// Return a stream that we'll replace with the real one once everything is in place.
|
|
564
|
+
return this._initialized.pipe(switchMap(() => this.optionSelections));
|
|
565
|
+
});
|
|
510
566
|
/** The currently active option, coerced to MatOption type. */
|
|
511
567
|
get activeOption() {
|
|
512
568
|
if (this.autocomplete && this.autocomplete._keyManager) {
|
|
@@ -885,6 +941,26 @@ class MatAutocompleteTrigger {
|
|
|
885
941
|
this._emitOpened();
|
|
886
942
|
}
|
|
887
943
|
}
|
|
944
|
+
/** Handles keyboard events coming from the overlay panel. */
|
|
945
|
+
_handlePanelKeydown = (event) => {
|
|
946
|
+
// Close when pressing ESCAPE or ALT + UP_ARROW, based on the a11y guidelines.
|
|
947
|
+
// See: https://www.w3.org/TR/wai-aria-practices-1.1/#textbox-keyboard-interaction
|
|
948
|
+
if ((event.keyCode === ESCAPE && !hasModifierKey(event)) ||
|
|
949
|
+
(event.keyCode === UP_ARROW && hasModifierKey(event, 'altKey'))) {
|
|
950
|
+
// If the user had typed something in before we autoselected an option, and they decided
|
|
951
|
+
// to cancel the selection, restore the input value to the one they had typed in.
|
|
952
|
+
if (this._pendingAutoselectedOption) {
|
|
953
|
+
this._updateNativeInputValue(this._valueBeforeAutoSelection ?? '');
|
|
954
|
+
this._pendingAutoselectedOption = null;
|
|
955
|
+
}
|
|
956
|
+
this._closeKeyEventStream.next();
|
|
957
|
+
this._resetActiveItem();
|
|
958
|
+
// We need to stop propagation, otherwise the event will eventually
|
|
959
|
+
// reach the input itself and cause the overlay to be reopened.
|
|
960
|
+
event.stopPropagation();
|
|
961
|
+
event.preventDefault();
|
|
962
|
+
}
|
|
963
|
+
};
|
|
888
964
|
/** Updates the panel's visibility state and any trigger state tied to id. */
|
|
889
965
|
_updatePanelState() {
|
|
890
966
|
this.autocomplete._setVisibility();
|
|
@@ -1034,6 +1110,12 @@ class MatAutocompleteTrigger {
|
|
|
1034
1110
|
}
|
|
1035
1111
|
}
|
|
1036
1112
|
}
|
|
1113
|
+
/**
|
|
1114
|
+
* Track which modal we have modified the `aria-owns` attribute of. When the combobox trigger is
|
|
1115
|
+
* inside an aria-modal, we apply aria-owns to the parent modal with the `id` of the options
|
|
1116
|
+
* panel. Track the modal we have changed so we can undo the changes on destroy.
|
|
1117
|
+
*/
|
|
1118
|
+
_trackedModal = null;
|
|
1037
1119
|
/**
|
|
1038
1120
|
* If the autocomplete trigger is inside of an `aria-modal` element, connect
|
|
1039
1121
|
* that modal to the options panel with `aria-owns`.
|
|
@@ -1080,8 +1162,8 @@ class MatAutocompleteTrigger {
|
|
|
1080
1162
|
this._trackedModal = null;
|
|
1081
1163
|
}
|
|
1082
1164
|
}
|
|
1083
|
-
static
|
|
1084
|
-
static
|
|
1165
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatAutocompleteTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1166
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.0.0-next.10", type: MatAutocompleteTrigger, isStandalone: true, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: { autocomplete: ["matAutocomplete", "autocomplete"], position: ["matAutocompletePosition", "position"], connectedTo: ["matAutocompleteConnectedTo", "connectedTo"], autocompleteAttribute: ["autocomplete", "autocompleteAttribute"], autocompleteDisabled: ["matAutocompleteDisabled", "autocompleteDisabled", booleanAttribute] }, host: { listeners: { "focusin": "_handleFocus()", "blur": "_onTouched()", "input": "_handleInput($event)", "keydown": "_handleKeydown($event)", "click": "_handleClick()" }, properties: { "attr.autocomplete": "autocompleteAttribute", "attr.role": "autocompleteDisabled ? null : \"combobox\"", "attr.aria-autocomplete": "autocompleteDisabled ? null : \"list\"", "attr.aria-activedescendant": "(panelOpen && activeOption) ? activeOption.id : null", "attr.aria-expanded": "autocompleteDisabled ? null : panelOpen.toString()", "attr.aria-controls": "(autocompleteDisabled || !panelOpen) ? null : autocomplete?.id", "attr.aria-haspopup": "autocompleteDisabled ? null : \"listbox\"" }, classAttribute: "mat-mdc-autocomplete-trigger" }, providers: [MAT_AUTOCOMPLETE_VALUE_ACCESSOR], exportAs: ["matAutocompleteTrigger"], usesOnChanges: true, ngImport: i0 });
|
|
1085
1167
|
}
|
|
1086
1168
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatAutocompleteTrigger, decorators: [{
|
|
1087
1169
|
type: Directive,
|
|
@@ -1125,11 +1207,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
1125
1207
|
}] } });
|
|
1126
1208
|
|
|
1127
1209
|
class MatAutocompleteModule {
|
|
1128
|
-
static
|
|
1129
|
-
static
|
|
1210
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatAutocompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1211
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatAutocompleteModule, imports: [OverlayModule,
|
|
1130
1212
|
MatOptionModule,
|
|
1131
1213
|
MatCommonModule,
|
|
1132
|
-
CommonModule,
|
|
1133
1214
|
MatAutocomplete,
|
|
1134
1215
|
MatAutocompleteTrigger,
|
|
1135
1216
|
MatAutocompleteOrigin], exports: [CdkScrollableModule,
|
|
@@ -1137,13 +1218,12 @@ class MatAutocompleteModule {
|
|
|
1137
1218
|
MatOptionModule,
|
|
1138
1219
|
MatCommonModule,
|
|
1139
1220
|
MatAutocompleteTrigger,
|
|
1140
|
-
MatAutocompleteOrigin] });
|
|
1141
|
-
static
|
|
1221
|
+
MatAutocompleteOrigin] });
|
|
1222
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatAutocompleteModule, providers: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER], imports: [OverlayModule,
|
|
1142
1223
|
MatOptionModule,
|
|
1143
|
-
MatCommonModule,
|
|
1144
|
-
CommonModule, CdkScrollableModule,
|
|
1224
|
+
MatCommonModule, CdkScrollableModule,
|
|
1145
1225
|
MatOptionModule,
|
|
1146
|
-
MatCommonModule] });
|
|
1226
|
+
MatCommonModule] });
|
|
1147
1227
|
}
|
|
1148
1228
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatAutocompleteModule, decorators: [{
|
|
1149
1229
|
type: NgModule,
|
|
@@ -1152,7 +1232,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
1152
1232
|
OverlayModule,
|
|
1153
1233
|
MatOptionModule,
|
|
1154
1234
|
MatCommonModule,
|
|
1155
|
-
CommonModule,
|
|
1156
1235
|
MatAutocomplete,
|
|
1157
1236
|
MatAutocompleteTrigger,
|
|
1158
1237
|
MatAutocompleteOrigin,
|