Skip to content

Commit 905f709

Browse files
committed
Added token for multiline line height in type ramp
1 parent 3cfec25 commit 905f709

File tree

11 files changed

+274
-158
lines changed

11 files changed

+274
-158
lines changed

packages/adaptive-ui-explorer/src/app.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,9 @@ export class App extends FASTElement {
258258
case "typeScaleLineHeightRatio":
259259
typeRampScale.lineHeightRatio.setValueFor(app.canvas, source.typeScaleLineHeightRatio);
260260
break;
261+
case "typeScaleLineHeightMultilineRatio":
262+
typeRampScale.lineHeightMultilineRatio.setValueFor(app.canvas, source.typeScaleLineHeightMultilineRatio);
263+
break;
261264
case "typeScaleLineHeightSnap":
262265
typeRampScale.lineHeightSnap.setValueFor(app.canvas, `${source.typeScaleLineHeightSnap}px`);
263266
break;

packages/adaptive-ui-explorer/src/components/control-pane/control-pane.template.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,20 @@ export function controlPaneTemplate<T extends ControlPane>(): ElementViewTemplat
133133
/>
134134
</div>
135135
136+
<div>
137+
<label>Type scale line height ratio (multiline)</label>
138+
<input
139+
type="number"
140+
min="1.0"
141+
max="2.0"
142+
step="0.01"
143+
value=${(x) => x.state.typeScaleLineHeightMultilineRatio}
144+
@input=${(x, c) =>
145+
x.state.typeScaleLineHeightMultilineRatio = parseFloat(c.eventTarget<HTMLInputElement>().value)
146+
}
147+
/>
148+
</div>
149+
136150
<div>
137151
<label>Type scale line height snap (px)</label>
138152
<input

packages/adaptive-ui-explorer/src/state.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export interface State {
1717
typeScaleBaseSize: number;
1818
typeScaleMultiplier: number;
1919
typeScaleLineHeightRatio: number;
20+
typeScaleLineHeightMultilineRatio: number;
2021
typeScaleLineHeightSnap: number;
2122
multiline: boolean;
2223
}
@@ -55,7 +56,10 @@ export class DefaultState implements State {
5556
public typeScaleMultiplier: number = 1.2;
5657

5758
@observable
58-
public typeScaleLineHeightRatio: number = 1.4;
59+
public typeScaleLineHeightRatio: number = 1.3;
60+
61+
@observable
62+
public typeScaleLineHeightMultilineRatio: number = 1.6;
5963

6064
@observable
6165
public typeScaleLineHeightSnap: number = 2;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
import { TypeScaleTokenGroup } from "@adaptive-web/adaptive-ui";
22

3-
export const typeRampScale = new TypeScaleTokenGroup("typography.ramp.scale", "16px", 1.2, 1.4, "2px");
3+
export const typeRampScale = new TypeScaleTokenGroup("typography.ramp.scale", "16px", 1.2, 1.3, 1.6, "2px");

packages/adaptive-ui-explorer/src/typography/typography.styles.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,43 +43,79 @@ export const typographyStyles = css`
4343
line-height: ${typeRampScale.minus2.lineHeight};
4444
}
4545
46+
.multiline p.minus2 {
47+
line-height: ${typeRampScale.minus2.lineHeightMultiline};
48+
}
49+
4650
p.minus1 {
4751
font-size: ${typeRampScale.minus1.fontSize};
4852
line-height: ${typeRampScale.minus1.lineHeight};
4953
}
5054
55+
.multiline p.minus1 {
56+
line-height: ${typeRampScale.minus1.lineHeightMultiline};
57+
}
58+
5159
p.base {
5260
font-size: ${typeRampScale.base.fontSize};
5361
line-height: ${typeRampScale.base.lineHeight};
5462
}
5563
64+
.multiline p.base {
65+
line-height: ${typeRampScale.base.lineHeightMultiline};
66+
}
67+
5668
p.plus1 {
5769
font-size: ${typeRampScale.plus1.fontSize};
5870
line-height: ${typeRampScale.plus1.lineHeight};
5971
}
6072
73+
.multiline p.plus1 {
74+
line-height: ${typeRampScale.plus1.lineHeightMultiline};
75+
}
76+
6177
p.plus2 {
6278
font-size: ${typeRampScale.plus2.fontSize};
6379
line-height: ${typeRampScale.plus2.lineHeight};
6480
}
6581
82+
.multiline p.plus2 {
83+
line-height: ${typeRampScale.plus2.lineHeightMultiline};
84+
}
85+
6686
p.plus3 {
6787
font-size: ${typeRampScale.plus3.fontSize};
6888
line-height: ${typeRampScale.plus3.lineHeight};
6989
}
7090
91+
.multiline p.plus3 {
92+
line-height: ${typeRampScale.plus3.lineHeightMultiline};
93+
}
94+
7195
p.plus4 {
7296
font-size: ${typeRampScale.plus4.fontSize};
7397
line-height: ${typeRampScale.plus4.lineHeight};
7498
}
7599
100+
.multiline p.plus4 {
101+
line-height: ${typeRampScale.plus4.lineHeightMultiline};
102+
}
103+
76104
p.plus5 {
77105
font-size: ${typeRampScale.plus5.fontSize};
78106
line-height: ${typeRampScale.plus5.lineHeight};
79107
}
80108
109+
.multiline p.plus5 {
110+
line-height: ${typeRampScale.plus5.lineHeightMultiline};
111+
}
112+
81113
p.plus6 {
82114
font-size: ${typeRampScale.plus6.fontSize};
83115
line-height: ${typeRampScale.plus6.lineHeight};
84116
}
117+
118+
.multiline p.plus6 {
119+
line-height: ${typeRampScale.plus6.lineHeightMultiline};
120+
}
85121
`;

packages/adaptive-ui-explorer/src/typography/typography.template.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const multiLineText = html<Typography>`Lorem ipsum dolor sit amet, consectetur a
66

77
export function typographyTemplate<T extends Typography>(): ElementViewTemplate<T> {
88
return html<T>`
9-
<div class="content">
9+
<div class="content${x => x.state.multiline ? ' multiline' : ''}">
1010
<p class="minus2">
1111
<span class="values">Minus 2 (font-size: ${x => x.minus2.fontSize}, line-height: ${x => x.minus2.lineHeight})</span>
1212
<span class="sample-text">${x => x.state.multiline ? multiLineText : singleLineText}</span>

packages/adaptive-ui-explorer/src/typography/typography.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { customElement, FASTElement, observable } from "@microsoft/fast-element";
2-
import { DesignToken, DesignTokenChangeRecord } from "@microsoft/fast-foundation";
1+
import { customElement, FASTElement, observable, Observable } from "@microsoft/fast-element";
32
import { State } from "../state.js";
43
import { typographyStyles as styles } from "./typography.styles.js";
54
import { typographyTemplate as template } from "./typography.template.js";
@@ -57,6 +56,16 @@ export class Typography extends FASTElement {
5756

5857
// Subscribe to token changes
5958
this.subscribeToTokenChanges();
59+
60+
// Subscribe to state.multiline changes
61+
Observable.getNotifier(this.state).subscribe(this, "multiline");
62+
}
63+
64+
disconnectedCallback(): void {
65+
super.disconnectedCallback();
66+
67+
// Unsubscribe from state changes
68+
Observable.getNotifier(this.state).unsubscribe(this, "multiline");
6069
}
6170

6271
private subscribeToTokenChanges(): void {
@@ -70,15 +79,18 @@ export class Typography extends FASTElement {
7079
positions.forEach(position => {
7180
position.fontSize.subscribe(this);
7281
position.lineHeight.subscribe(this);
82+
position.lineHeightMultiline.subscribe(this);
7383
});
7484

7585
// Also subscribe to multiplier and ratio changes
7686
typeRampScale.multiplier.subscribe(this);
7787
typeRampScale.lineHeightRatio.subscribe(this);
88+
typeRampScale.lineHeightMultilineRatio.subscribe(this);
7889
typeRampScale.lineHeightSnap.subscribe(this);
7990
}
8091

81-
handleChange(token: DesignToken<any>, record: DesignTokenChangeRecord<any>): void {
92+
handleChange(source: any, propertyName?: any): void {
93+
// Handle both DesignToken changes and Observable property changes
8294
if (!this.updateScheduled) {
8395
this.updateScheduled = true;
8496
requestAnimationFrame(() => {

packages/adaptive-ui/docs/api-report.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -867,15 +867,23 @@ export interface TypedDesignToken<T> extends DesignTokenMetadata {
867867

868868
// @public
869869
export class TypeRampPosition {
870-
constructor(baseName: string, position: string, fontSize: DesignTokenValue<string>, lineHeight: DesignTokenValue<string>);
870+
constructor(baseName: string, position: string, config: TypeRampPositionConfig);
871871
readonly fontSize: TypedCSSDesignToken<string>;
872872
readonly fontVariations: TypedCSSDesignToken<string>;
873873
readonly lineHeight: TypedCSSDesignToken<string>;
874+
readonly lineHeightMultiline: TypedCSSDesignToken<string>;
875+
}
876+
877+
// @public
878+
export interface TypeRampPositionConfig {
879+
fontSize: DesignTokenValue<string>;
880+
lineHeight: DesignTokenValue<string>;
881+
lineHeightMultiline: DesignTokenValue<string>;
874882
}
875883

876884
// @public
877885
export class TypeRampTokenGroup implements TokenGroup {
878-
constructor(name: string, minus2FontSize: DesignTokenValue<string>, minus2LineHeight: DesignTokenValue<string>, minus1FontSize: DesignTokenValue<string>, minus1LineHeight: DesignTokenValue<string>, baseFontSize: DesignTokenValue<string>, baseLineHeight: DesignTokenValue<string>, plus1FontSize: DesignTokenValue<string>, plus1LineHeight: DesignTokenValue<string>, plus2FontSize: DesignTokenValue<string>, plus2LineHeight: DesignTokenValue<string>, plus3FontSize: DesignTokenValue<string>, plus3LineHeight: DesignTokenValue<string>, plus4FontSize: DesignTokenValue<string>, plus4LineHeight: DesignTokenValue<string>, plus5FontSize: DesignTokenValue<string>, plus5LineHeight: DesignTokenValue<string>, plus6FontSize: DesignTokenValue<string>, plus6LineHeight: DesignTokenValue<string>);
886+
constructor(name: string, minus2: TypeRampPositionConfig, minus1: TypeRampPositionConfig, base: TypeRampPositionConfig, plus1: TypeRampPositionConfig, plus2: TypeRampPositionConfig, plus3: TypeRampPositionConfig, plus4: TypeRampPositionConfig, plus5: TypeRampPositionConfig, plus6: TypeRampPositionConfig);
879887
readonly base: TypeRampPosition;
880888
readonly minus1: TypeRampPosition;
881889
readonly minus2: TypeRampPosition;
@@ -891,7 +899,8 @@ export class TypeRampTokenGroup implements TokenGroup {
891899

892900
// @public
893901
export class TypeScaleTokenGroup extends TypeRampTokenGroup {
894-
constructor(name: string, baseSize: string, multiplier: number, lineHeightRatio?: number, lineHeightSnap?: string);
902+
constructor(name: string, baseSize: string, multiplier: number, lineHeightRatio?: number, lineHeightMultilineRatio?: number, lineHeightSnap?: string);
903+
readonly lineHeightMultilineRatio: TypedDesignToken<number>;
895904
readonly lineHeightRatio: TypedDesignToken<number>;
896905
readonly lineHeightSnap: TypedCSSDesignToken<string>;
897906
readonly multiplier: TypedDesignToken<number>;

0 commit comments

Comments
 (0)