import { mixNumber } from '../../utils/mix/number.mjs'; import { percent, px } from '../../value/types/numbers/units.mjs'; import { progress, circOut, noop } from 'motion-utils'; const borders = ["TopLeft", "TopRight", "BottomLeft", "BottomRight"]; const numBorders = borders.length; const asNumber = (value) => typeof value === "string" ? parseFloat(value) : value; const isPx = (value) => typeof value === "number" || px.test(value); function mixValues(target, follow, lead, progress, shouldCrossfadeOpacity, isOnlyMember) { if (shouldCrossfadeOpacity) { target.opacity = mixNumber(0, lead.opacity ?? 1, easeCrossfadeIn(progress)); target.opacityExit = mixNumber(follow.opacity ?? 1, 0, easeCrossfadeOut(progress)); } else if (isOnlyMember) { target.opacity = mixNumber(follow.opacity ?? 1, lead.opacity ?? 1, progress); } /** * Mix border radius */ for (let i = 0; i < numBorders; i++) { const borderLabel = `border${borders[i]}Radius`; let followRadius = getRadius(follow, borderLabel); let leadRadius = getRadius(lead, borderLabel); if (followRadius === undefined && leadRadius === undefined) continue; followRadius || (followRadius = 0); leadRadius || (leadRadius = 0); const canMix = followRadius === 0 || leadRadius === 0 || isPx(followRadius) === isPx(leadRadius); if (canMix) { target[borderLabel] = Math.max(mixNumber(asNumber(followRadius), asNumber(leadRadius), progress), 0); if (percent.test(leadRadius) || percent.test(followRadius)) { target[borderLabel] += "%"; } } else { target[borderLabel] = leadRadius; } } /** * Mix rotation */ if (follow.rotate || lead.rotate) { target.rotate = mixNumber(follow.rotate || 0, lead.rotate || 0, progress); } } function getRadius(values, radiusName) { return values[radiusName] !== undefined ? values[radiusName] : values.borderRadius; } const easeCrossfadeIn = /*@__PURE__*/ compress(0, 0.5, circOut); const easeCrossfadeOut = /*@__PURE__*/ compress(0.5, 0.95, noop); function compress(min, max, easing) { return (p) => { // Could replace ifs with clamp if (p < min) return 0; if (p > max) return 1; return easing(progress(min, max, p)); }; } export { mixValues }; //# sourceMappingURL=mix-values.mjs.map