-
Notifications
You must be signed in to change notification settings - Fork 617
Incorrect/unexpected output for $dimension token types when using DTCG format spec #1398
Description
According to the DTCG format spec, the $dimension token type (source) should have a $value that:
MUST be an object containing a numeric
value(integer or floating-point) andunitof measurement ("px" or "rem").
From the DTCG spec example:
{
"spacing-stack-0": {
"$value": {
"value": 0,
"unit": "px"
},
"$type": "dimension"
},
"spacing-stack-1": {
"$value": {
"value": 0.5,
"unit": "rem"
},
"$type": "dimension"
}
}When trying this syntax for $dimension tokens in style-dictionary v4, we're seeing the following output:
Token definition:
{
"size": {
"$type": "dimension",
"border": {
"width": {
"$value": {
"value": 1,
"unit": "px"
},
"$description": "Default border width."
}
}
}
}Token output in CSS variables
(Includes a pgn prefix).
--pgn-size-border-width-value: 1; /* Default border width. */
--pgn-size-border-width-unit: 0px; /* Default border width. */I believe the expected CSS variables output should be:
--pgn-size-border-width: 1px; /* Default border width. */Our current workaround is to define the token with a $value that combines the value/unit together, e.g.:
{
"size": {
"$type": "dimension",
"border": {
"width": {
"$value": "1px"
"$description": "Default border width."
}
}
}
}It seems like style-dictionary's support for composite tokens (per the DTCG format spec) is causing $dimension tokens to output multiple variables (i.e., splitting the value from the unit) vs. outputting a single CSS variable combining the configured value/unit.
Is this by design or is there a potential bug when trying to adopt the DTCG spec for $dimension tokens? Thanks!