Skip to content

Commit 40c9d8b

Browse files
committed
refactor(material/autocomplete): convert to standalone
Converts `material/autocomplete` to standalone.
1 parent 6a3d1bd commit 40c9d8b

File tree

8 files changed

+41
-13
lines changed

8 files changed

+41
-13
lines changed

src/material/autocomplete/autocomplete-origin.ts

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {Directive, ElementRef} from '@angular/core';
1515
@Directive({
1616
selector: '[matAutocompleteOrigin]',
1717
exportAs: 'matAutocompleteOrigin',
18+
standalone: true,
1819
})
1920
export class MatAutocompleteOrigin {
2021
constructor(

src/material/autocomplete/autocomplete-trigger.ts

+9
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
ElementRef,
1616
forwardRef,
1717
Host,
18+
inject,
1819
Inject,
1920
InjectionToken,
2021
Input,
@@ -82,6 +83,13 @@ export function getMatAutocompleteMissingPanelError(): Error {
8283
/** Injection token that determines the scroll handling while the autocomplete panel is open. */
8384
export const MAT_AUTOCOMPLETE_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(
8485
'mat-autocomplete-scroll-strategy',
86+
{
87+
providedIn: 'root',
88+
factory: () => {
89+
const overlay = inject(Overlay);
90+
return () => overlay.scrollStrategies.reposition();
91+
},
92+
},
8593
);
8694

8795
/** @docs-private */
@@ -118,6 +126,7 @@ export const MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER = {
118126
},
119127
exportAs: 'matAutocompleteTrigger',
120128
providers: [MAT_AUTOCOMPLETE_VALUE_ACCESSOR],
129+
standalone: true,
121130
})
122131
export class MatAutocompleteTrigger
123132
implements ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy

src/material/autocomplete/autocomplete.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
dispatchMouseEvent,
1313
MockNgZone,
1414
typeInElement,
15-
} from '../../cdk/testing/private';
15+
} from '@angular/cdk/testing/private';
1616
import {
1717
ChangeDetectionStrategy,
1818
Component,
@@ -72,8 +72,8 @@ describe('MDC-based MatAutocomplete', () => {
7272
NoopAnimationsModule,
7373
OverlayModule,
7474
],
75-
declarations: [component],
7675
providers: [{provide: NgZone, useFactory: () => (zone = new MockNgZone())}, ...providers],
76+
declarations: [component],
7777
});
7878

7979
TestBed.compileComponents();

src/material/autocomplete/autocomplete.ts

+3
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import {coerceStringArray} from '@angular/cdk/coercion';
3838
import {Platform} from '@angular/cdk/platform';
3939
import {panelAnimation} from './animations';
4040
import {Subscription} from 'rxjs';
41+
import {NgClass} from '@angular/common';
4142

4243
/**
4344
* Autocomplete IDs need to be unique across components, so this counter exists outside of
@@ -118,6 +119,8 @@ export function MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY(): MatAutocompleteDefau
118119
},
119120
providers: [{provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatAutocomplete}],
120121
animations: [panelAnimation],
122+
standalone: true,
123+
imports: [NgClass],
121124
})
122125
export class MatAutocomplete implements AfterContentInit, OnDestroy {
123126
private _activeOptionChanges = Subscription.EMPTY;

src/material/autocomplete/module.ts

+9-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,15 @@ import {
1919
import {MatAutocompleteOrigin} from './autocomplete-origin';
2020

2121
@NgModule({
22-
imports: [OverlayModule, MatOptionModule, MatCommonModule, CommonModule],
22+
imports: [
23+
OverlayModule,
24+
MatOptionModule,
25+
MatCommonModule,
26+
CommonModule,
27+
MatAutocomplete,
28+
MatAutocompleteTrigger,
29+
MatAutocompleteOrigin,
30+
],
2331
exports: [
2432
CdkScrollableModule,
2533
MatAutocomplete,
@@ -28,7 +36,6 @@ import {MatAutocompleteOrigin} from './autocomplete-origin';
2836
MatAutocompleteTrigger,
2937
MatAutocompleteOrigin,
3038
],
31-
declarations: [MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteOrigin],
3239
providers: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER],
3340
})
3441
export class MatAutocompleteModule {}

src/material/autocomplete/public-api.ts

+3
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,6 @@ export * from './module';
1010
export * from './autocomplete';
1111
export * from './autocomplete-origin';
1212
export * from './autocomplete-trigger';
13+
14+
// Re-export these since they're required to be used together with `mat-autocomplete`.
15+
export {MatOption, MatOptgroup} from '@angular/material/core';

src/material/autocomplete/testing/autocomplete-harness.spec.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ describe('MatAutocompleteHarness', () => {
1212

1313
beforeEach(async () => {
1414
await TestBed.configureTestingModule({
15-
imports: [NoopAnimationsModule, MatAutocompleteModule],
16-
declarations: [AutocompleteHarnessTest],
15+
imports: [NoopAnimationsModule, MatAutocompleteModule, AutocompleteHarnessTest],
1716
}).compileComponents();
1817

1918
fixture = TestBed.createComponent(AutocompleteHarnessTest);
@@ -177,6 +176,8 @@ describe('MatAutocompleteHarness', () => {
177176
<input id="prefilled" [matAutocomplete]="autocomplete" value="Prefilled value">
178177
<input id="grouped" [matAutocomplete]="groupedAutocomplete">
179178
`,
179+
standalone: true,
180+
imports: [MatAutocompleteModule],
180181
})
181182
class AutocompleteHarnessTest {
182183
states = [

tools/public_api_guard/material/autocomplete.md

+11-7
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ import { Directionality } from '@angular/cdk/bidi';
1414
import { ElementRef } from '@angular/core';
1515
import { EventEmitter } from '@angular/core';
1616
import * as i0 from '@angular/core';
17-
import * as i4 from '@angular/cdk/overlay';
18-
import * as i5 from '@angular/material/core';
19-
import * as i6 from '@angular/common';
17+
import * as i1 from '@angular/cdk/overlay';
18+
import * as i2 from '@angular/material/core';
19+
import * as i3 from '@angular/common';
2020
import * as i7 from '@angular/cdk/scrolling';
2121
import { InjectionToken } from '@angular/core';
2222
import { MatFormField } from '@angular/material/form-field';
@@ -122,7 +122,7 @@ export class MatAutocomplete implements AfterContentInit, OnDestroy {
122122
_syncParentProperties(): void;
123123
template: TemplateRef<any>;
124124
// (undocumented)
125-
static ɵcmp: i0.ɵɵComponentDeclaration<MatAutocomplete, "mat-autocomplete", ["matAutocomplete"], { "ariaLabel": { "alias": "aria-label"; "required": false; }; "ariaLabelledby": { "alias": "aria-labelledby"; "required": false; }; "displayWith": { "alias": "displayWith"; "required": false; }; "autoActiveFirstOption": { "alias": "autoActiveFirstOption"; "required": false; }; "autoSelectActiveOption": { "alias": "autoSelectActiveOption"; "required": false; }; "requireSelection": { "alias": "requireSelection"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; "disableRipple": { "alias": "disableRipple"; "required": false; }; "classList": { "alias": "class"; "required": false; }; "hideSingleSelectionIndicator": { "alias": "hideSingleSelectionIndicator"; "required": false; }; }, { "optionSelected": "optionSelected"; "opened": "opened"; "closed": "closed"; "optionActivated": "optionActivated"; }, ["options", "optionGroups"], ["*"], false, never>;
125+
static ɵcmp: i0.ɵɵComponentDeclaration<MatAutocomplete, "mat-autocomplete", ["matAutocomplete"], { "ariaLabel": { "alias": "aria-label"; "required": false; }; "ariaLabelledby": { "alias": "aria-labelledby"; "required": false; }; "displayWith": { "alias": "displayWith"; "required": false; }; "autoActiveFirstOption": { "alias": "autoActiveFirstOption"; "required": false; }; "autoSelectActiveOption": { "alias": "autoSelectActiveOption"; "required": false; }; "requireSelection": { "alias": "requireSelection"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; "disableRipple": { "alias": "disableRipple"; "required": false; }; "classList": { "alias": "class"; "required": false; }; "hideSingleSelectionIndicator": { "alias": "hideSingleSelectionIndicator"; "required": false; }; }, { "optionSelected": "optionSelected"; "opened": "opened"; "closed": "closed"; "optionActivated": "optionActivated"; }, ["options", "optionGroups"], ["*"], true, never>;
126126
// (undocumented)
127127
static ɵfac: i0.ɵɵFactoryDeclaration<MatAutocomplete, never>;
128128
}
@@ -149,7 +149,7 @@ export class MatAutocompleteModule {
149149
// (undocumented)
150150
static ɵinj: i0.ɵɵInjectorDeclaration<MatAutocompleteModule>;
151151
// (undocumented)
152-
static ɵmod: i0.ɵɵNgModuleDeclaration<MatAutocompleteModule, [typeof i1.MatAutocomplete, typeof i2.MatAutocompleteTrigger, typeof i3.MatAutocompleteOrigin], [typeof i4.OverlayModule, typeof i5.MatOptionModule, typeof i5.MatCommonModule, typeof i6.CommonModule], [typeof i7.CdkScrollableModule, typeof i1.MatAutocomplete, typeof i5.MatOptionModule, typeof i5.MatCommonModule, typeof i2.MatAutocompleteTrigger, typeof i3.MatAutocompleteOrigin]>;
152+
static ɵmod: i0.ɵɵNgModuleDeclaration<MatAutocompleteModule, never, [typeof i1.OverlayModule, typeof i2.MatOptionModule, typeof i2.MatCommonModule, typeof i3.CommonModule, typeof i4.MatAutocomplete, typeof i5.MatAutocompleteTrigger, typeof i6.MatAutocompleteOrigin], [typeof i7.CdkScrollableModule, typeof i4.MatAutocomplete, typeof i2.MatOptionModule, typeof i2.MatCommonModule, typeof i5.MatAutocompleteTrigger, typeof i6.MatAutocompleteOrigin]>;
153153
}
154154

155155
// @public
@@ -158,7 +158,7 @@ export class MatAutocompleteOrigin {
158158
elementRef: ElementRef<HTMLElement>);
159159
elementRef: ElementRef<HTMLElement>;
160160
// (undocumented)
161-
static ɵdir: i0.ɵɵDirectiveDeclaration<MatAutocompleteOrigin, "[matAutocompleteOrigin]", ["matAutocompleteOrigin"], {}, {}, never, never, false, never>;
161+
static ɵdir: i0.ɵɵDirectiveDeclaration<MatAutocompleteOrigin, "[matAutocompleteOrigin]", ["matAutocompleteOrigin"], {}, {}, never, never, true, never>;
162162
// (undocumented)
163163
static ɵfac: i0.ɵɵFactoryDeclaration<MatAutocompleteOrigin, never>;
164164
}
@@ -214,11 +214,15 @@ export class MatAutocompleteTrigger implements ControlValueAccessor, AfterViewIn
214214
// (undocumented)
215215
writeValue(value: any): void;
216216
// (undocumented)
217-
static ɵdir: i0.ɵɵDirectiveDeclaration<MatAutocompleteTrigger, "input[matAutocomplete], textarea[matAutocomplete]", ["matAutocompleteTrigger"], { "autocomplete": { "alias": "matAutocomplete"; "required": false; }; "position": { "alias": "matAutocompletePosition"; "required": false; }; "connectedTo": { "alias": "matAutocompleteConnectedTo"; "required": false; }; "autocompleteAttribute": { "alias": "autocomplete"; "required": false; }; "autocompleteDisabled": { "alias": "matAutocompleteDisabled"; "required": false; }; }, {}, never, never, false, never>;
217+
static ɵdir: i0.ɵɵDirectiveDeclaration<MatAutocompleteTrigger, "input[matAutocomplete], textarea[matAutocomplete]", ["matAutocompleteTrigger"], { "autocomplete": { "alias": "matAutocomplete"; "required": false; }; "position": { "alias": "matAutocompletePosition"; "required": false; }; "connectedTo": { "alias": "matAutocompleteConnectedTo"; "required": false; }; "autocompleteAttribute": { "alias": "autocomplete"; "required": false; }; "autocompleteDisabled": { "alias": "matAutocompleteDisabled"; "required": false; }; }, {}, never, never, true, never>;
218218
// (undocumented)
219219
static ɵfac: i0.ɵɵFactoryDeclaration<MatAutocompleteTrigger, [null, null, null, null, null, null, { optional: true; }, { optional: true; host: true; }, { optional: true; }, null, { optional: true; }]>;
220220
}
221221

222+
export { MatOptgroup }
223+
224+
export { MatOption }
225+
222226
// (No @packageDocumentation comment for this package)
223227

224228
```

0 commit comments

Comments
 (0)