1- const _ = require ( 'lodash' ) ;
21const inter = require ( '../inter.json' ) ;
32
43/**
@@ -13,6 +12,54 @@ const filterObject = (obj, cb) => Object.fromEntries(Object.entries(obj).filter(
1312const round = ( num , prec = 3 ) => parseFloat ( num . toFixed ( prec ) ) ;
1413const unquote = str => str . replace ( / ^ [ ' " ] | [ ' " ] $ / g, '' ) . trim ( ) ;
1514
15+ const unitsDefaults = ( baseFontSize = 16 ) => ( {
16+ 'ch' : 8 ,
17+ 'ex' : 7.15625 ,
18+ 'em' : baseFontSize ,
19+ 'rem' : baseFontSize ,
20+ '%' : baseFontSize / 100 ,
21+ 'in' : 96 ,
22+ 'cm' : 96 / 2.54 ,
23+ 'mm' : 96 / 25.4 ,
24+ 'pt' : 96 / 72 ,
25+ 'pc' : 96 / 6 ,
26+ 'px' : 1
27+ } ) ;
28+
29+ /**
30+ * Parses CSS size/length value
31+ *
32+ * @param {any } value Any CSS size value with units
33+ * @param {Number } lineHeight Relative line height
34+ *
35+ * @return {Array }
36+ */
37+ function parseUnit ( value ) {
38+ let str = String ( value ) ;
39+ return [
40+ parseFloat ( str , 10 ) ,
41+ str . match ( / [ \d . \- \+ ] * \s * ( .* ) / ) [ 1 ] || ''
42+ ]
43+ }
44+
45+ function getUnitConverter ( baseFontSize = 16 ) {
46+ const defaults = unitsDefaults ( baseFontSize ) ;
47+
48+ return function toPX ( str ) {
49+ if ( isEmpty ( str ) ) return 0 ;
50+ if ( defaults [ str ] ) return defaults [ str ] ;
51+
52+ let [ value , unit ] = parseUnit ( str ) ;
53+
54+ if ( ! isNaN ( value ) && unit ) {
55+ let px = toPX ( unit ) ;
56+ return typeof px === 'number' ? value * px : 0 ;
57+ }
58+
59+ return 0 ;
60+ }
61+ }
62+
1663/**
1764 * Calculates line height
1865 *
@@ -116,9 +163,8 @@ function generateFeatures(features, availableFeatures, { disableUnusedFeatures =
116163 features = Object . assign ( { } , available , features ) ;
117164 }
118165
119- settings = Object . entries ( features ) . map ( ( [ key , value ] ) => `"${ key } " ${ value } ` ) ;
120-
121- return settings
166+ return Object . entries ( features )
167+ . map ( ( [ key , value ] ) => `"${ key } " ${ value } ` )
122168 . filter ( val => ! ! val )
123169 . sort ( )
124170 . join ( ', ' )
@@ -178,27 +224,26 @@ module.exports = (opts = {}) => {
178224
179225 // Add .text-inter-{size} utility classes
180226 // Modifiers are inherited from fontSize config
181- const textSizeUtilities = Object . fromEntries (
182- Object . entries ( theme ( 'fontSize' , { } ) ) . flatMap ( ( [ modifier , fontSize ] ) => {
183- if ( fontSize . slice ( - 3 ) === 'rem' ) {
184- fontSize = parseFloat ( fontSize . slice ( 0 , - 3 ) ) * options . baseFontSize ;
185- } else if ( fontSize . slice ( - 2 ) === 'em' ) {
186- fontSize = parseFloat ( fontSize . slice ( 0 , - 2 ) ) * options . baseFontSize ;
187- }
227+ const px = getUnitConverter ( options . baseFontSize ) ;
188228
189- let selector = fontInterSelector ( `.${ e ( `text-inter-${ modifier } ` ) } ` ) ;
190- let baseRule = fontSizeRule ( selector , fontSize , options . baseLineHeight , options ) ;
191-
192- let leadingRules = Object . entries ( theme ( 'lineHeight' , { } ) ) . map ( ( [ modifier , lineHeight ] ) => {
193- let inheritSelector = fontInterSelector ( selector , `.${ e ( `leading-${ modifier } ` ) } ` ) ;
194- return fontSizeRule ( inheritSelector , fontSize , lineHeight , options ) ;
195- } ) ;
196-
197- // TODO: Add modifiers for tailwind's tracking
198- let trackingRules = [ ] ;
199-
200- return [ baseRule , ...leadingRules , ...trackingRules ] ;
201- } )
229+ const textSizeUtilities = Object . fromEntries (
230+ Object . entries ( theme ( 'fontSize' , { } ) )
231+ . flatMap ( ( [ modifier , fontSize ] ) => {
232+ let size = px ( fontSize ) ;
233+ let selector = fontInterSelector ( `.${ e ( `text-inter-${ modifier } ` ) } ` ) ;
234+ let baseRule = fontSizeRule ( selector , size , options . baseLineHeight , options ) ;
235+
236+ let leadingRules = Object . entries ( theme ( 'lineHeight' , { } ) )
237+ . map ( ( [ modifier , lineHeight ] ) => {
238+ let inheritSelector = fontInterSelector ( selector , `.${ e ( `leading-${ modifier } ` ) } ` ) ;
239+ return fontSizeRule ( inheritSelector , size , lineHeight , options ) ;
240+ } ) ;
241+
242+ // TODO: Add modifiers for tailwind's tracking
243+ let trackingRules = [ ] ;
244+
245+ return [ baseRule , ...leadingRules , ...trackingRules ] ;
246+ } )
202247 ) ;
203248
204249 addUtilities ( textSizeUtilities , variants ( 'fontSize' ) ) ;
0 commit comments