@terrazzo/token-tools
Version:
Various utilities for token types
37 lines • 1.66 kB
JavaScript
import { transformColor } from './color.js';
import { defaultAliasTransform } from './lib.js';
/** Convert gradient value to CSS */
export function transformGradient(token, options) {
const { tokensSet, transformAlias = defaultAliasTransform } = options;
if (token.aliasChain?.[0]) {
return transformAlias(tokensSet[token.aliasChain[0]]);
}
let isHDR = false;
const colors = [];
const positions = [];
for (let i = 0; i < token.$value.length; i++) {
const { color, position } = token.$value[i];
const colorValue = token.partialAliasOf?.[i]?.color
? transformAlias(tokensSet[token.partialAliasOf[i].color])
: transformColor({ $value: color }, options);
if (typeof colorValue !== 'string') {
isHDR = true;
}
colors.push(colorValue);
positions.push(token.partialAliasOf?.[i]?.position
? transformAlias(tokensSet[token.partialAliasOf[i].position])
: `${+(100 * position).toFixed(3)}%`);
}
function formatStop(i, colorKey = '.') {
return `${typeof colors[i] === 'string' ? colors[i] : colors[i][colorKey]} ${positions[i]}`;
}
return isHDR
? {
'.': token.$value.map((_, i) => formatStop(i, '.')).join(', '),
srgb: token.$value.map((_, i) => formatStop(i, 'srgb')).join(', '),
p3: token.$value.map((_, i) => formatStop(i, 'p3')).join(', '),
rec2020: token.$value.map((_, i) => formatStop(i, 'rec2020')).join(', '),
}
: token.$value.map((_, i) => formatStop(i, positions[i])).join(', ');
}
//# sourceMappingURL=gradient.js.map