UNPKG

@terrazzo/token-tools

Version:

Various utilities for token types

53 lines 2.35 kB
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