@terrazzo/token-tools
Version:
Various utilities for token types
53 lines • 2.35 kB
JavaScript
import { transformColor } from './color.js';
import { transformDimension } from './dimension.js';
import { defaultAliasTransform } from './lib.js';
/** Convert shadow subvalue to CSS */
export function transformShadowLayer(value, options) {
const { tokensSet, colorValue, partialAliasOf, transformAlias = defaultAliasTransform } = options;
const offsetX = partialAliasOf?.offsetX
? transformAlias(tokensSet[partialAliasOf.offsetX])
: transformDimension({ $value: value.offsetX }, options);
const offsetY = partialAliasOf?.offsetY
? transformAlias(tokensSet[partialAliasOf.offsetY])
: transformDimension({ $value: value.offsetY }, options);
const blur = partialAliasOf?.blur
? transformAlias(tokensSet[partialAliasOf.blur])
: transformDimension({ $value: value.blur }, options);
const spread = partialAliasOf?.spread
? transformAlias(tokensSet[partialAliasOf.spread])
: transformDimension({ $value: value.spread }, options);
const inset = value?.inset === true ? 'inset' : undefined;
return [inset, offsetX, offsetY, blur, spread, colorValue].filter(Boolean).join(' ');
}
/** Convert shadow value to CSS */
export function transformShadow(token, options) {
const { tokensSet, transformAlias = defaultAliasTransform } = options;
if (token.aliasChain?.[0]) {
return transformAlias(tokensSet[token.aliasChain[0]]);
}
const colors = token.$value.map((v, i) => token.partialAliasOf?.[i]?.color
? transformAlias(tokensSet[token.partialAliasOf[i].color])
: transformColor({ $value: v.color }, options));
const isHDR = colors.some((c) => typeof c === 'object');
// oxlint-disable-next-line func-style
const formatShadow = (colorKey) => token.$value
.map((v, i) => transformShadowLayer(v, {
...options,
tokensSet,
colorValue: typeof colors[i] === 'string'
? colors[i]
: colors[i][colorKey],
partialAliasOf: token.partialAliasOf?.[i],
transformAlias,
}))
.join(', ');
return isHDR
? {
'.': formatShadow('.'),
srgb: formatShadow('srgb'),
p3: formatShadow('p3'),
rec2020: formatShadow('rec2020'),
}
: formatShadow('.');
}
//# sourceMappingURL=shadow.js.map