@@ -3,6 +3,7 @@ import { round } from './round';
3
3
import type { FontMetrics , SupportedSubset } from './types' ;
4
4
5
5
const toPercentString = ( value : number ) => `${ round ( value * 100 ) } %` ;
6
+ const fromPercentString = ( value : string ) => parseFloat ( value ) / 100 ;
6
7
7
8
export const toCssProperty = ( property : string ) =>
8
9
property . replace ( / ( [ A - Z ] ) / g, ( property ) => `-${ property . toLowerCase ( ) } ` ) ;
@@ -40,23 +41,29 @@ interface OverrideValuesParams {
40
41
metrics : FontStackMetrics ;
41
42
fallbackMetrics : FontStackMetrics ;
42
43
subset : SupportedSubset ;
44
+ sizeAdjust ?: AtRule . FontFace [ 'sizeAdjust' ] ;
43
45
}
44
46
const calculateOverrideValues = ( {
45
47
metrics,
46
48
fallbackMetrics,
47
49
subset,
50
+ sizeAdjust : sizeAdjustOverride ,
48
51
} : OverrideValuesParams ) : AtRule . FontFace => {
49
52
// Calculate size adjust
50
53
const preferredFontXAvgRatio =
51
54
resolveXWidthAvg ( metrics , subset ) / metrics . unitsPerEm ;
52
55
const fallbackFontXAvgRatio =
53
56
resolveXWidthAvg ( fallbackMetrics , subset ) / fallbackMetrics . unitsPerEm ;
54
57
55
- const sizeAdjust =
58
+ const calculatedSizeAdjust =
56
59
preferredFontXAvgRatio && fallbackFontXAvgRatio
57
60
? preferredFontXAvgRatio / fallbackFontXAvgRatio
58
61
: 1 ;
59
62
63
+ const sizeAdjust = sizeAdjustOverride
64
+ ? fromPercentString ( sizeAdjustOverride )
65
+ : calculatedSizeAdjust ;
66
+
60
67
const adjustedEmSquare = metrics . unitsPerEm * sizeAdjust ;
61
68
62
69
// Calculate metric overrides for preferred font
@@ -185,12 +192,14 @@ type FontFaceFormatObject = {
185
192
const resolveOptions = ( options : Parameters < typeof createFontStack > [ 1 ] ) => {
186
193
const fontFaceFormat = options ?. fontFaceFormat ?? 'styleString' ;
187
194
const subset = options ?. subset ?? 'latin' ;
188
- const fontFaceProperties = options ?. fontFaceProperties ?? { } ;
195
+ const { sizeAdjust, ...fontFaceProperties } =
196
+ options ?. fontFaceProperties ?? { } ;
189
197
190
198
return {
191
199
fontFaceFormat,
192
200
subset,
193
201
fontFaceProperties,
202
+ sizeAdjust,
194
203
} as const ;
195
204
} ;
196
205
@@ -206,7 +215,7 @@ export function createFontStack(
206
215
[ metrics , ...fallbackMetrics ] : FontStackMetrics [ ] ,
207
216
optionsArg : CreateFontStackOptions = { } ,
208
217
) {
209
- const { fontFaceFormat, fontFaceProperties, subset } =
218
+ const { fontFaceFormat, fontFaceProperties, sizeAdjust , subset } =
210
219
resolveOptions ( optionsArg ) ;
211
220
const { familyName } = metrics ;
212
221
@@ -230,10 +239,8 @@ export function createFontStack(
230
239
metrics,
231
240
fallbackMetrics : fallback ,
232
241
subset,
242
+ sizeAdjust,
233
243
} ) ,
234
- ...( fontFaceProperties ?. sizeAdjust
235
- ? { sizeAdjust : fontFaceProperties . sizeAdjust }
236
- : { } ) ,
237
244
} ,
238
245
} ) ;
239
246
} ) ;
0 commit comments