Skip to content

Commit 0387b26

Browse files
asynclizcopybara-github
authored andcommitted
feat(labs): add expressive icon component
PiperOrigin-RevId: 906605113
1 parent 026f39d commit 0387b26

7 files changed

Lines changed: 39 additions & 6 deletions

File tree

icon/internal/icon.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import {html, LitElement} from 'lit';
88

99
/**
10-
* TODO(b/265336902): add docs
10+
* An icon element.
1111
*/
1212
export class Icon extends LitElement {
1313
protected override render() {

labs/gb/components/fab/demo/stories.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
* SPDX-License-Identifier: Apache-2.0
55
*/
66

7-
import '@material/web/icon/icon.js';
87
import '@material/web/labs/gb/components/fab/md-fab.js';
8+
import '@material/web/labs/gb/styles/icon/md-icon.js';
99

1010
import {MaterialStoryInit} from './material-collection.js';
1111
import {FabColor, FabSize} from '@material/web/labs/gb/components/fab/fab.js';

labs/gb/components/iconbutton/demo/stories.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
* SPDX-License-Identifier: Apache-2.0
55
*/
66

7-
import '@material/web/icon/icon.js';
87
import '@material/web/labs/gb/components/iconbutton/md-icon-button.js';
8+
import '@material/web/labs/gb/styles/icon/md-icon.js';
99

1010
import {MaterialStoryInit} from './material-collection.js';
1111
import {

labs/gb/components/list/demo/stories.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
* SPDX-License-Identifier: Apache-2.0
55
*/
66

7-
import '@material/web/icon/icon.js';
87
import '@material/web/labs/gb/components/list/md-list.js';
98
import '@material/web/labs/gb/components/list/md-list-item.js';
9+
import '@material/web/labs/gb/styles/icon/md-icon.js';
1010

1111
import {MaterialStoryInit} from './material-collection.js';
1212
import {styles as checkboxStyles} from '@material/web/labs/gb/components/checkbox/checkbox.cssresult.js';

labs/gb/components/switch/demo/stories.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
* SPDX-License-Identifier: Apache-2.0
55
*/
66

7-
import '@material/web/icon/icon.js';
87
import '@material/web/labs/gb/components/switch/md-switch.js';
8+
import '@material/web/labs/gb/styles/icon/md-icon.js';
99

1010
import {MaterialStoryInit} from './material-collection.js';
1111
import {adoptStyles} from '@material/web/labs/gb/styles/adopt-styles.js';

labs/gb/styles/icon/md-icon.scss

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@
4040
}
4141

4242
@layer md.sys.icon {
43-
.md-icon {
43+
.md-icon,
44+
:host(.md-icon) {
4445
display: inline-flex;
4546
place-items: center;
4647
place-content: center;

labs/gb/styles/icon/md-icon.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* @license
3+
* Copyright 2026 Google LLC
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
import {type CSSResultOrNative} from 'lit';
8+
import {customElement} from 'lit/decorators.js';
9+
import {Icon as IconBase} from '../../../../icon/internal/icon.js';
10+
11+
import iconStyles from './md-icon.css' with {type: 'css'}; // github-only
12+
// import iconStyles from './md-icon.cssresult.js'; // google3-only
13+
14+
declare global {
15+
interface HTMLElementTagNameMap {
16+
/** A Material Design icon component. */
17+
'md-icon': Icon;
18+
}
19+
}
20+
21+
/**
22+
* A Material Design icon component.
23+
*/
24+
@customElement('md-icon')
25+
export class Icon extends IconBase {
26+
static override styles: CSSResultOrNative[] = [iconStyles];
27+
28+
override connectedCallback() {
29+
super.connectedCallback();
30+
this.classList.add('md-icon');
31+
}
32+
}

0 commit comments

Comments
 (0)