Skip to content

Transforms Reference

type Transform = {
matcher?: (token: ResolvedToken) => boolean
transform: (token: ResolvedToken) => ResolvedToken
}
  • matcher (optional) — When provided, the transform applies only when matcher(token) returns true. Omit for all tokens.
  • transform — Receives a ResolvedToken and returns a new one. Should be immutable.

Import from dispersa/transforms:

import { colorToHex, nameKebabCase, dimensionToRem } from 'dispersa/transforms'

All color transforms accept color tokens. Input: color object. Output: string in target format.

TransformImportInput ExampleOutput Example
colorToHex()colorToHex{ colorSpace: 'srgb', components: [0, 0.4, 0.8] }'#0066cc'
colorToRgb()colorToRgbsame'rgb(0, 102, 204)'
colorToHsl()colorToHslsame'hsl(210, 100%, 40%)'
colorToOklch()colorToOklchsame'oklch(...)'
colorToOklab()colorToOklabsame'oklab(...)'
colorToLch()colorToLchsame'lch(...)'
colorToLab()colorToLabsame'lab(...)'
colorToHwb()colorToHwbsame'hwb(...)'
colorToColorFunction()colorToColorFunctionsameColor function string
import { colorToHex, colorToRgb } from 'dispersa/transforms'
transforms: [colorToHex()]
transforms: [colorToRgb()]

For dimension tokens. Input: { value: number, unit: string }. Output: string or number.

TransformImportInput ExampleOutput Example
dimensionToPx()dimensionToPx{ value: 16, unit: 'px' }'16px'
dimensionToRem()dimensionToRem{ value: 16, unit: 'px' }'1rem'
dimensionToUnitless()dimensionToUnitless{ value: 16, unit: 'px' }16
import { dimensionToPx, dimensionToRem } from 'dispersa/transforms'
transforms: [dimensionToPx()]
transforms: [dimensionToRem()]

Transform token paths/names. Input: the current token.name (dot-path by default, e.g. color.brand.primary). Output: formatted name.

TransformImportInput ExampleOutput Example
nameKebabCase()nameKebabCasecolor.brand.primarycolor-brand-primary
nameCamelCase()nameCamelCasecolor.brand.primarycolorBrandPrimary
nameSnakeCase()nameSnakeCasecolor.brand.primarycolor_brand_primary
namePascalCase()namePascalCasecolor.brand.primaryColorBrandPrimary
nameConstantCase()nameConstantCasecolor.brand.primaryCOLOR_BRAND_PRIMARY
namePrefix(prefix)namePrefixcolor.brand.primary + 'ds.'ds.color.brand.primary
nameSuffix(suffix)nameSuffixcolor.brand.primary + '.token'color.brand.primary.token
nameCssVar()nameCssVarcolor.brand.primary--color-brand-primary
import { nameKebabCase, nameCssVar, namePrefix } from 'dispersa/transforms'
transforms: [nameKebabCase()]
transforms: [nameCssVar()]
transforms: [namePrefix('ds-')]
transforms: [nameSuffix('-token')]

TransformImportInput ExampleOutput Example
fontWeightToNumber()fontWeightToNumber'bold'700
durationToMs()durationToMs{ value: 0.2, unit: 's' }{ value: 200, unit: 'ms' }
durationToSeconds()durationToSeconds{ value: 200, unit: 'ms' }{ value: 0.2, unit: 's' }
import { fontWeightToNumber, durationToMs } from 'dispersa/transforms'
transforms: [fontWeightToNumber()]
transforms: [durationToMs()]