Skip to content

Commit ac17a9c

Browse files
committed
refactor(material/icon): convert to standalone
Converts `material/icon` to standalone.
1 parent 746e5ca commit ac17a9c

File tree

5 files changed

+75
-23
lines changed

5 files changed

+75
-23
lines changed

src/material/icon/icon-module.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ import {MatCommonModule} from '@angular/material/core';
1111
import {MatIcon} from './icon';
1212

1313
@NgModule({
14-
imports: [MatCommonModule],
14+
imports: [MatCommonModule, MatIcon],
1515
exports: [MatIcon, MatCommonModule],
16-
declarations: [MatIcon],
1716
})
1817
export class MatIconModule {}

src/material/icon/icon.spec.ts

Lines changed: 67 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {Component, ErrorHandler, Provider, Type, ViewChild} from '@angular/core'
99
import {MAT_ICON_DEFAULT_OPTIONS, MAT_ICON_LOCATION, MatIconModule} from './index';
1010
import {MatIconRegistry, getMatIconNoHttpProviderError} from './icon-registry';
1111
import {FAKE_SVGS} from './fake-svgs';
12-
import {wrappedErrorMessage} from '../../cdk/testing/private';
12+
import {wrappedErrorMessage} from '@angular/cdk/testing/private';
1313
import {MatIcon} from './icon';
1414

1515
/** Returns the CSS classes assigned to an element as a sorted array. */
@@ -44,8 +44,7 @@ function verifyPathChildElement(element: Element, attributeValue: string): void
4444
/** Creates a test component fixture. */
4545
function createComponent<T>(component: Type<T>, providers: Provider[] = []) {
4646
TestBed.configureTestingModule({
47-
imports: [MatIconModule],
48-
declarations: [component],
47+
imports: [MatIconModule, component],
4948
providers: [...providers],
5049
});
5150

@@ -65,8 +64,9 @@ describe('MatIcon', () => {
6564
errorHandler = jasmine.createSpyObj('errorHandler', ['handleError']);
6665

6766
TestBed.configureTestingModule({
68-
imports: [HttpClientTestingModule, MatIconModule],
69-
declarations: [
67+
imports: [
68+
HttpClientTestingModule,
69+
MatIconModule,
7070
IconWithColor,
7171
IconWithLigature,
7272
IconWithLigatureByAttribute,
@@ -1297,6 +1297,13 @@ describe('MatIcon without HttpClientModule', () => {
12971297
let iconRegistry: MatIconRegistry;
12981298
let sanitizer: DomSanitizer;
12991299

1300+
@Component({
1301+
template: `<mat-icon [svgIcon]="iconName"></mat-icon>`,
1302+
})
1303+
class IconFromSvgName {
1304+
iconName: string | undefined = '';
1305+
}
1306+
13001307
beforeEach(waitForAsync(() => {
13011308
TestBed.configureTestingModule({
13021309
imports: [MatIconModule],
@@ -1390,58 +1397,102 @@ describe('MatIcon with default options', () => {
13901397
}));
13911398
});
13921399

1393-
@Component({template: `<mat-icon>{{iconName}}</mat-icon>`})
1400+
@Component({
1401+
template: `<mat-icon>{{iconName}}</mat-icon>`,
1402+
standalone: true,
1403+
imports: [HttpClientTestingModule, MatIconModule],
1404+
})
13941405
class IconWithLigature {
13951406
iconName = '';
13961407
}
13971408

1398-
@Component({template: `<mat-icon [fontIcon]="iconName"></mat-icon>`})
1409+
@Component({
1410+
template: `<mat-icon [fontIcon]="iconName"></mat-icon>`,
1411+
standalone: true,
1412+
imports: [HttpClientTestingModule, MatIconModule],
1413+
})
13991414
class IconWithLigatureByAttribute {
14001415
iconName = '';
14011416
}
14021417

1403-
@Component({template: `<mat-icon [color]="iconColor">{{iconName}}</mat-icon>`})
1418+
@Component({
1419+
template: `<mat-icon [color]="iconColor">{{iconName}}</mat-icon>`,
1420+
standalone: true,
1421+
imports: [HttpClientTestingModule, MatIconModule],
1422+
})
14041423
class IconWithColor {
14051424
iconName = '';
14061425
iconColor = 'primary';
14071426
}
14081427

1409-
@Component({template: `<mat-icon [fontSet]="fontSet" [fontIcon]="fontIcon"></mat-icon>`})
1428+
@Component({
1429+
template: `<mat-icon [fontSet]="fontSet" [fontIcon]="fontIcon"></mat-icon>`,
1430+
standalone: true,
1431+
imports: [HttpClientTestingModule, MatIconModule],
1432+
})
14101433
class IconWithCustomFontCss {
14111434
fontSet = '';
14121435
fontIcon = '';
14131436
}
14141437

1415-
@Component({template: `<mat-icon [svgIcon]="iconName"></mat-icon>`})
1438+
@Component({
1439+
template: `<mat-icon [svgIcon]="iconName"></mat-icon>`,
1440+
standalone: true,
1441+
imports: [HttpClientTestingModule, MatIconModule],
1442+
})
14161443
class IconFromSvgName {
14171444
iconName: string | undefined = '';
14181445
}
14191446

1420-
@Component({template: '<mat-icon aria-hidden="false">face</mat-icon>'})
1447+
@Component({
1448+
template: '<mat-icon aria-hidden="false">face</mat-icon>',
1449+
standalone: true,
1450+
imports: [HttpClientTestingModule, MatIconModule],
1451+
})
14211452
class IconWithAriaHiddenFalse {}
14221453

1423-
@Component({template: `@if (showIcon) {<mat-icon [svgIcon]="iconName">{{iconName}}</mat-icon>}`})
1454+
@Component({
1455+
template: `@if (showIcon) {<mat-icon [svgIcon]="iconName">{{iconName}}</mat-icon>}`,
1456+
standalone: true,
1457+
imports: [HttpClientTestingModule, MatIconModule],
1458+
})
14241459
class IconWithBindingAndNgIf {
14251460
iconName = 'fluffy';
14261461
showIcon = true;
14271462
}
14281463

1429-
@Component({template: `<mat-icon [inline]="inline">{{iconName}}</mat-icon>`})
1464+
@Component({
1465+
template: `<mat-icon [inline]="inline">{{iconName}}</mat-icon>`,
1466+
standalone: true,
1467+
imports: [HttpClientTestingModule, MatIconModule],
1468+
})
14301469
class InlineIcon {
14311470
inline = false;
14321471
}
14331472

1434-
@Component({template: `<mat-icon [svgIcon]="iconName"><div>Hello</div></mat-icon>`})
1473+
@Component({
1474+
template: `<mat-icon [svgIcon]="iconName"><div>Hello</div></mat-icon>`,
1475+
standalone: true,
1476+
imports: [HttpClientTestingModule, MatIconModule],
1477+
})
14351478
class SvgIconWithUserContent {
14361479
iconName: string | undefined = '';
14371480
}
14381481

1439-
@Component({template: '<mat-icon [svgIcon]="iconName">house</mat-icon>'})
1482+
@Component({
1483+
template: '<mat-icon [svgIcon]="iconName">house</mat-icon>',
1484+
standalone: true,
1485+
imports: [HttpClientTestingModule, MatIconModule],
1486+
})
14401487
class IconWithLigatureAndSvgBinding {
14411488
iconName: string | undefined;
14421489
}
14431490

1444-
@Component({template: `<mat-icon></mat-icon>`})
1491+
@Component({
1492+
template: `<mat-icon></mat-icon>`,
1493+
standalone: true,
1494+
imports: [HttpClientTestingModule, MatIconModule],
1495+
})
14451496
class BlankIcon {
14461497
@ViewChild(MatIcon) icon: MatIcon;
14471498
}

src/material/icon/icon.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ const funcIriPattern = /^url\(['"]?#(.*?)['"]?\)$/;
145145
},
146146
encapsulation: ViewEncapsulation.None,
147147
changeDetection: ChangeDetectionStrategy.OnPush,
148+
standalone: true,
148149
})
149150
export class MatIcon implements OnInit, AfterViewChecked, OnDestroy {
150151
private _defaultColor: ThemePalette;

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ describe('MatIconHarness', () => {
1313

1414
beforeEach(async () => {
1515
await TestBed.configureTestingModule({
16-
imports: [MatIconModule],
17-
declarations: [IconHarnessTest],
16+
imports: [MatIconModule, IconHarnessTest],
1817
}).compileComponents();
1918

2019
const registry = TestBed.inject(MatIconRegistry);
@@ -115,5 +114,7 @@ describe('MatIconHarness', () => {
115114
<mat-icon>ligature_icon_with_additional_content <span class="fake-badge">Hello</span></mat-icon>
116115
<mat-icon><span>ligature_icon_with_indirect_name</span></mat-icon>
117116
`,
117+
standalone: true,
118+
imports: [MatIconModule],
118119
})
119120
class IconHarnessTest {}

tools/public_api_guard/material/icon.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { ElementRef } from '@angular/core';
1010
import { ErrorHandler } from '@angular/core';
1111
import { HttpClient } from '@angular/common/http';
1212
import * as i0 from '@angular/core';
13-
import * as i2 from '@angular/material/core';
13+
import * as i1 from '@angular/material/core';
1414
import { InjectionToken } from '@angular/core';
1515
import { Observable } from 'rxjs';
1616
import { OnDestroy } from '@angular/core';
@@ -89,7 +89,7 @@ export class MatIcon implements OnInit, AfterViewChecked, OnDestroy {
8989
// (undocumented)
9090
_usingFontIcon(): boolean;
9191
// (undocumented)
92-
static ɵcmp: i0.ɵɵComponentDeclaration<MatIcon, "mat-icon", ["matIcon"], { "color": { "alias": "color"; "required": false; }; "inline": { "alias": "inline"; "required": false; }; "svgIcon": { "alias": "svgIcon"; "required": false; }; "fontSet": { "alias": "fontSet"; "required": false; }; "fontIcon": { "alias": "fontIcon"; "required": false; }; }, {}, never, ["*"], false, never>;
92+
static ɵcmp: i0.ɵɵComponentDeclaration<MatIcon, "mat-icon", ["matIcon"], { "color": { "alias": "color"; "required": false; }; "inline": { "alias": "inline"; "required": false; }; "svgIcon": { "alias": "svgIcon"; "required": false; }; "fontSet": { "alias": "fontSet"; "required": false; }; "fontIcon": { "alias": "fontIcon"; "required": false; }; }, {}, never, ["*"], true, never>;
9393
// (undocumented)
9494
static ɵfac: i0.ɵɵFactoryDeclaration<MatIcon, [null, null, { attribute: "aria-hidden"; }, null, null, { optional: true; }]>;
9595
}
@@ -113,7 +113,7 @@ export class MatIconModule {
113113
// (undocumented)
114114
static ɵinj: i0.ɵɵInjectorDeclaration<MatIconModule>;
115115
// (undocumented)
116-
static ɵmod: i0.ɵɵNgModuleDeclaration<MatIconModule, [typeof i1.MatIcon], [typeof i2.MatCommonModule], [typeof i1.MatIcon, typeof i2.MatCommonModule]>;
116+
static ɵmod: i0.ɵɵNgModuleDeclaration<MatIconModule, never, [typeof i1.MatCommonModule, typeof i2.MatIcon], [typeof i2.MatIcon, typeof i1.MatCommonModule]>;
117117
}
118118

119119
// @public

0 commit comments

Comments
 (0)