Skip to content

Commit 36dd77e

Browse files
asynclizcopybara-github
authored andcommitted
feat(typography): add @material/web/typography/md-typescale classes
Fixes #1050 View the updated [typography docs](https://github.com/material-components/material-web/blob/main/docs/theming/typography.md#classes) for more info. PiperOrigin-RevId: 613259080
1 parent 758e615 commit 36dd77e

File tree

7 files changed

+492
-191
lines changed

7 files changed

+492
-191
lines changed

divider/demo/stories.ts

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import '@material/web/divider/divider.js';
88

99
import {MaterialStoryInit} from './material-collection.js';
10+
import {styles as typescaleStyles} from '@material/web/typography/md-typescale.js';
1011
import {css, html} from 'lit';
1112

1213
/** Knob types for divider stories. */
@@ -18,25 +19,28 @@ export interface StoryKnobs {
1819

1920
const standard: MaterialStoryInit<StoryKnobs> = {
2021
name: 'Divider',
21-
styles: css`
22-
ul {
23-
border: 1px solid var(--md-sys-color-outline);
24-
margin: 0;
25-
padding: 0;
26-
width: 256px;
27-
}
22+
styles: [
23+
typescaleStyles,
24+
css`
25+
ul {
26+
border: 1px solid var(--md-sys-color-outline);
27+
margin: 0;
28+
padding: 0;
29+
width: 256px;
30+
}
2831
29-
li {
30-
color: var(--md-sys-color-on-background);
31-
font-family: system-ui;
32-
list-style: none;
33-
margin: 16px;
34-
}
35-
`,
32+
li {
33+
color: var(--md-sys-color-on-background);
34+
list-style: none;
35+
margin: 16px;
36+
}
37+
`,
38+
],
3639
render(knobs) {
3740
return html`
3841
<ul
39-
aria-label="A list of items with decorative and non-decorative separators">
42+
aria-label="A list of items with decorative and non-decorative separators"
43+
class="md-typescale-body-medium">
4044
<li>List item one</li>
4145
<md-divider
4246
?inset=${knobs.inset}

docs/theming/typography.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ order: 3
1010

1111
<!--*
1212
# Document freshness: For more information, see go/fresh-source.
13-
freshness: { owner: 'lizmitchell' reviewed: '2023-09-06' }
13+
freshness: { owner: 'lizmitchell' reviewed: '2024-03-05' }
1414
tag: 'docType:howTo'
1515
*-->
1616

@@ -71,6 +71,36 @@ A
7171
is a collection of font styles: `font-family`, `font-size`, `line-height`, and
7272
`font-weight`.
7373

74+
### Classes
75+
76+
<!-- go/md-typescale -->
77+
78+
Typescales can be applied to an element using the classes from the typescale
79+
stylesheet.
80+
81+
Class names follow the naming convention `.md-typescale-<scale>-<size>`.
82+
83+
```ts
84+
import {styles as typescaleStyles} from '@material/web/typography/md-typescale.js';
85+
86+
// `typescaleStyles.styleSheet` is a `CSSStyleSheet` that can be added to a
87+
// document or shadow root's `adoptedStyleSheets` to use the `.md-typescale-*`
88+
// classes.
89+
document.adoptedStyleSheets.push(typescaleStyles.styleSheet);
90+
91+
// `typescaleStyles` can also be added to a `LitElement` component's styles.
92+
class App extends LitElement {
93+
static styles = [typescaleStyles, css`...`];
94+
95+
render() {
96+
return html`
97+
<h1 class="md-typescale-display-large">Large display</h1>
98+
<p class="md-typescale-body-medium">Body text</p>
99+
`;
100+
}
101+
}
102+
```
103+
74104
### Tokens
75105

76106
Typescales can be set using

iconbutton/demo/stories.ts

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import '@material/web/iconbutton/icon-button.js';
1111
import '@material/web/iconbutton/outlined-icon-button.js';
1212

1313
import {MaterialStoryInit} from './material-collection.js';
14+
import {styles as typescaleStyles} from '@material/web/typography/md-typescale.js';
1415
import {css, html} from 'lit';
1516

1617
/** Knob types for icon button stories. */
@@ -20,33 +21,32 @@ export interface StoryKnobs {
2021
disabled: boolean;
2122
}
2223

23-
const styles = css`
24-
.column {
25-
display: flex;
26-
flex-direction: column;
27-
align-items: center;
28-
}
29-
30-
.row {
31-
display: flex;
32-
gap: 32px;
33-
}
34-
35-
p {
36-
color: var(--md-sys-color-on-surface);
37-
font: var(--md-sys-typescale-body-medium-weight, 400)
38-
var(--md-sys-typescale-body-medium-size, 0.875rem) /
39-
var(--md-sys-typescale-body-medium-line-height, 1.25rem)
40-
var(--md-sys-typescale-body-medium-font, 'Roboto');
41-
}
42-
`;
24+
const styles = [
25+
typescaleStyles,
26+
css`
27+
.column {
28+
display: flex;
29+
flex-direction: column;
30+
align-items: center;
31+
}
32+
33+
.row {
34+
display: flex;
35+
gap: 32px;
36+
}
37+
38+
p {
39+
color: var(--md-sys-color-on-surface);
40+
}
41+
`,
42+
];
4343

4444
const buttons: MaterialStoryInit<StoryKnobs> = {
4545
name: 'Icon button variants',
4646
styles,
4747
render({icon, disabled}) {
4848
return html`
49-
<div class="row">
49+
<div class="row md-typescale-body-medium">
5050
<div class="column">
5151
<p>Standard</p>
5252
<md-icon-button aria-label="Open settings" ?disabled=${disabled}>

labs/card/demo/stories.ts

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import '@material/web/labs/card/filled-card.js';
1010
import '@material/web/labs/card/outlined-card.js';
1111

1212
import {MaterialStoryInit} from './material-collection.js';
13+
import {styles as typescaleStyles} from '@material/web/typography/md-typescale.js';
1314
import {css, html} from 'lit';
1415

1516
/** Knob types for card stories. */
@@ -18,45 +19,44 @@ export interface StoryKnobs {}
1819
const MEDIA_IMAGE =
1920
'data:image/png;base64,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';
2021

21-
const styles = css`
22-
.container {
23-
display: flex;
24-
flex-wrap: wrap;
25-
gap: 8px;
26-
color: var(--md-sys-color-on-surface);
27-
font: var(--md-sys-typescale-body-medium-weight, 400)
28-
var(--md-sys-typescale-body-medium-size, 0.875rem) /
29-
var(--md-sys-typescale-body-medium-line-height, 1.25rem)
30-
var(--md-sys-typescale-body-medium-font, 'Roboto');
31-
}
22+
const styles = [
23+
typescaleStyles,
24+
css`
25+
.container {
26+
display: flex;
27+
flex-wrap: wrap;
28+
gap: 8px;
29+
color: var(--md-sys-color-on-surface);
30+
}
3231
33-
.card {
34-
width: 192px;
35-
}
32+
.card {
33+
width: 192px;
34+
}
3635
37-
img {
38-
border-radius: inherit;
39-
background: #dadce0;
40-
object-fit: contain;
41-
height: 128px;
42-
}
36+
img {
37+
border-radius: inherit;
38+
background: #dadce0;
39+
object-fit: contain;
40+
height: 128px;
41+
}
4342
44-
.content {
45-
display: flex;
46-
flex-direction: column;
47-
flex: 1;
48-
justify-content: space-between;
49-
padding: 16px;
50-
gap: 16px;
51-
}
52-
`;
43+
.content {
44+
display: flex;
45+
flex-direction: column;
46+
flex: 1;
47+
justify-content: space-between;
48+
padding: 16px;
49+
gap: 16px;
50+
}
51+
`,
52+
];
5353

5454
const cards: MaterialStoryInit<StoryKnobs> = {
5555
name: 'Cards',
5656
styles,
5757
render() {
5858
return html`
59-
<div class="container">
59+
<div class="container md-typescale-body-medium">
6060
<md-elevated-card class="card">
6161
<img src=${MEDIA_IMAGE} alt="Placeholder image" />
6262
<div class="content">A static elevated card</div>
@@ -81,7 +81,7 @@ const withActions: MaterialStoryInit<StoryKnobs> = {
8181
styles,
8282
render() {
8383
return html`
84-
<div class="container">
84+
<div class="container md-typescale-body-medium">
8585
<md-elevated-card class="card">
8686
<img src=${MEDIA_IMAGE} alt="Placeholder image" />
8787
<div class="content">

0 commit comments

Comments
 (0)