import { RawValueSignature, SpecifyRadiiValue, TokenState, } from '@specifyapp/specify-design-token-format'; import { radiusValueToCss, rawRadiusToCss } from './radius.js'; import { unwrapInnerValue } from '../../_utils/unwrapInnerValue.js'; import { DEFAULT_UNRESOLVABLE_STRATEGY } from '../aliasStrategies/throwOnUnresolvable.js'; import { CssResolvableAliasStrategy, CssUnresolvableAliasStrategy, } from '../aliasStrategies/CssAliasStrategy.js'; /** * Converts a `TokenState<'radii'>` to a css value. * E.g: `12px 4px 5px 12px` */ export function radiiToCss( aliasStrategy: CssResolvableAliasStrategy, unresolvableAliasStrategy: CssUnresolvableAliasStrategy = DEFAULT_UNRESOLVABLE_STRATEGY, ) { return (tokenState: TokenState<'radii'>) => tokenState .getStatefulValueResult() .mapResolvableTopLevelAlias(aliasStrategy) .mapUnresolvableTopLevelAlias(alias => unresolvableAliasStrategy(tokenState, alias)) .mapTopLevelValue(value => value .mapRawValue(rawValue => rawRadiiToCss(rawValue, aliasStrategy, unresolvableAliasStrategy), ) .mapResolvableModeLevelAlias(aliasStrategy) .mapUnresolvableModeLevelAlias(alias => unresolvableAliasStrategy(tokenState, alias)) .unwrap(), ) .unwrap(); } /** * Converts a `RawValueSignature<'radii'>` to css. */ export function rawRadiiToCss( radii: RawValueSignature<'radii'>, aliasStrategy: CssResolvableAliasStrategy, unresolvableAliasStrategy: CssUnresolvableAliasStrategy = DEFAULT_UNRESOLVABLE_STRATEGY, ) { return radii .map(radius => { return unwrapInnerValue( radius.mapPrimitiveValue(rawRadiusToCss), aliasStrategy, unresolvableAliasStrategy, ); }) .join(' '); } /** * Converts a radii to css. */ export function radiiValueToCss(radii: SpecifyRadiiValue) { return radii.map(radiusValueToCss).join(' '); }