Skip to content

Commit 20753ff

Browse files
[WIP] separate typography tokens (#165)
* separate typography tokens
1 parent 4991ca2 commit 20753ff

17 files changed

+878
-137
lines changed

src/config/defaultSettings.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export const defaultSettings: Settings = {
1919
prefix: {
2020
color: 'color',
2121
gradient: 'gradient',
22+
typography: 'typography',
2223
font: 'font',
2324
effect: 'effect',
2425
grid: 'grid',
@@ -33,6 +34,7 @@ export const defaultSettings: Settings = {
3334
color: true,
3435
gradient: true,
3536
font: true,
37+
typography: true,
3638
effect: true,
3739
grid: true,
3840
border: true,

src/config/tokenTypes.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,14 @@ export const tokenTypes = {
99
key: 'gradient'
1010
},
1111
font: {
12-
label: 'Fonts',
12+
label: 'Font Styles',
1313
key: 'font'
1414
},
15+
typography: {
16+
label: 'Typography',
17+
key: 'typography',
18+
exclude: ['original']
19+
},
1520
effect: {
1621
label: 'Effects',
1722
key: 'effect'

src/transformer/originalFormatTransformer.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { internalTokenInterface, tokenCategoryTypes } from '@typings/propertyObj
22
import { OriginalFormatTokenInterface } from '@typings/originalFormatProperties'
33
import { convertRgbaObjectToString } from '../utilities/convertColor'
44
import { PropertyType, UnitTypePixel } from '@typings/valueTypes'
5-
import { tokenExtensions } from './tokenExtensions'
65
import config from '@config/config'
76

87
const sizeValueTransformer = ({ width }) => ({
@@ -185,8 +184,7 @@ const transformer = (token: internalTokenInterface): OriginalFormatTokenInterfac
185184
category: token.category,
186185
exportKey: token.extensions[config.key.extensionPluginData].exportKey,
187186
...(token.description && token.description.length > 0 && { comment: token.description }),
188-
...(valueTransformer[token.category as tokenCategoryTypes](token.values) || {}),
189-
...tokenExtensions(token)
187+
...(valueTransformer[token.category as tokenCategoryTypes](token.values) || {})
190188
}
191189
}
192190

src/transformer/standardTransformer.ts

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ const spacingValueTransformer = ({ values }): StandardTokenDataInterface => ({
6969
}
7070
})
7171

72-
const fontValueTransformer = ({ values }): StandardTokenDataInterface => ({
72+
const fontStyleValueTransformer = ({ values }): StandardTokenDataInterface => ({
7373
type: 'custom-fontStyle' as StandardTokenTypes,
7474
value: {
7575
fontSize: values.fontSize.value,
@@ -86,6 +86,53 @@ const fontValueTransformer = ({ values }): StandardTokenDataInterface => ({
8686
}
8787
})
8888

89+
const typographyValueTransformer = ({ name, values }) => ({
90+
fontSize: {
91+
type: 'dimension' as StandardTokenTypes,
92+
value: values.fontSize.value
93+
},
94+
textDecoration: {
95+
type: 'string' as StandardTokenTypes,
96+
value: values.textDecoration.value
97+
},
98+
fontFamily: {
99+
type: 'string' as StandardTokenTypes,
100+
value: values.fontFamily.value
101+
},
102+
fontWeight: {
103+
type: 'number' as StandardTokenTypes,
104+
value: values.fontWeight.value
105+
},
106+
fontStyle: {
107+
type: 'string' as StandardTokenTypes,
108+
value: values.fontStyle.value
109+
},
110+
fontStretch: {
111+
type: 'string' as StandardTokenTypes,
112+
value: values.fontStretch.value
113+
},
114+
letterSpacing: {
115+
type: 'dimension' as StandardTokenTypes,
116+
value: letterSpacingToDimensions(values)
117+
},
118+
lineHeight: {
119+
type: 'dimension' as StandardTokenTypes,
120+
value: lineHeightToDimension(values)
121+
},
122+
paragraphIndent: {
123+
type: 'dimension' as StandardTokenTypes,
124+
value: values.paragraphIndent.value
125+
},
126+
paragraphSpacing: {
127+
type: 'dimension' as StandardTokenTypes,
128+
value: values.paragraphSpacing.value
129+
},
130+
textCase: {
131+
type: 'string' as StandardTokenTypes,
132+
value: values.textCase.value
133+
}
134+
})
135+
89136
const colorValueTransformer = ({ fill }): StandardTokenDataInterface => ({
90137
type: 'color' as StandardTokenTypes,
91138
value: rgbaObjectToHex8(fill.value)
@@ -182,7 +229,7 @@ const valueTransformer = {
182229
size: widthToDimensionTransformer,
183230
color: fillValueTransformer,
184231
gradient: fillValueTransformer,
185-
font: fontValueTransformer,
232+
font: fontStyleValueTransformer,
186233
effect: effectValueTransformer,
187234
grid: gridValueTransformer,
188235
border: borderValueTransformer,
@@ -195,6 +242,14 @@ const valueTransformer = {
195242
const transformTokens = (token: internalTokenInterface): StandardTokenDataInterface | StandardTokenGroup => valueTransformer[token.category](token)
196243

197244
const transformer = (token: internalTokenInterface): StandardTokenInterface | StandardTokenGroup => {
245+
if (token.category === 'typography') {
246+
// @ts-ignore
247+
return {
248+
name: token.name,
249+
description: token.description,
250+
...typographyValueTransformer(token)
251+
}
252+
}
198253
// @ts-ignore
199254
return {
200255
name: token.name,

src/ui/components/FileExportSettings.tsx

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,16 @@ export const FileExportSettings = () => {
9191
</Row>
9292
<Title size='large' weight='bold'>Include types in export</Title>
9393
<div className='grid-3-col'>
94-
{Object.entries(tokenTypes).map(([, { key, label }]) =>
95-
<Checkbox
96-
key={key}
97-
label={label}
98-
checked={settings.exports[key]}
99-
onChange={value => updateSettings((draft: Settings) => { draft.exports[key] = value })}
100-
/>)}
94+
{Object.entries(tokenTypes)
95+
// @ts-ignore
96+
.map(([, { key, label, exclude = undefined }]) =>
97+
(exclude === undefined || !exclude.includes(settings.tokenFormat)) &&
98+
<Checkbox
99+
key={key}
100+
label={label}
101+
checked={settings.exports[key]}
102+
onChange={value => updateSettings((draft: Settings) => { draft.exports[key] = value })}
103+
/>)}
101104
</div>
102105
<Footer>
103106
<WebLink align='start' href='https://github.com/lukasoppermann/design-tokens#design-tokens'>Documentation</WebLink>

src/utilities/prepareExport.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,35 @@ import { Settings } from '../../types/settings'
33
import { transformer as originalFormatTransformer } from '@src/transformer/originalFormatTransformer'
44
import { transformer as standardTransformer } from '@src/transformer/standardTransformer'
55
import { groupByKeyAndName } from '@utils/groupByName'
6+
import { tokenTypes } from '@config/tokenTypes'
7+
import { tokenCategoryType } from '@typings/tokenCategory'
8+
import { tokenExportKeyType } from '@typings/tokenExportKey'
9+
import config from '@config/config'
610

711
const tokenTransformer = {
812
original: originalFormatTransformer,
913
standard: standardTransformer
1014
}
1115

16+
const createTypographyTokens = (tokens: internalTokenInterface[], format) => {
17+
if (format === 'standard') {
18+
return JSON.parse(JSON.stringify(tokens.filter(item => item.category === tokenTypes.font.key)))
19+
.map(item => {
20+
item.name = 'typography/' + item.name.substr(item.name.indexOf('/') + 1).trim().trimStart()
21+
item.category = tokenTypes.typography.key as tokenCategoryType
22+
item.exportKey = tokenTypes.typography.key as tokenExportKeyType
23+
item.extensions[config.key.extensionPluginData].exportKey = tokenTypes.typography.key as tokenCategoryType
24+
return item
25+
})
26+
}
27+
return []
28+
}
29+
1230
export const prepareExport = (tokens: string, settings: Settings) => {
1331
// parse json string
14-
const tokenArray: internalTokenInterface[] = JSON.parse(tokens)
32+
let tokenArray: internalTokenInterface[] = JSON.parse(tokens)
33+
// duplicate font if typography is true && format = standard
34+
tokenArray = [...tokenArray, ...createTypographyTokens(tokenArray, settings.tokenFormat)]
1535
// filter by user setting for export keys
1636
const tokensFiltered: internalTokenInterface[] = tokenArray.filter(({ exportKey }) => settings.exports[exportKey])
1737
// converted values

0 commit comments

Comments
 (0)