diff --git a/packages/framer-motion/src/render/dom/DOMVisualElement.ts b/packages/framer-motion/src/render/dom/DOMVisualElement.ts index 61932f9c21..fef09717af 100644 --- a/packages/framer-motion/src/render/dom/DOMVisualElement.ts +++ b/packages/framer-motion/src/render/dom/DOMVisualElement.ts @@ -54,7 +54,17 @@ export abstract class DOMVisualElement< } if (isMounted) { - checkTargetForNewValues(this, target, origin as any) + const newValues = checkTargetForNewValues( + this, + target, + origin as any + ) + + // If new values have been added, for instance named color values, transform these + if (transformValues && newValues) { + origin = transformValues(origin as any) + } + const parsed = parseDomVariant(this, target, origin, transitionEnd) transitionEnd = parsed.transitionEnd target = parsed.target diff --git a/packages/framer-motion/src/render/utils/setters.ts b/packages/framer-motion/src/render/utils/setters.ts index 74f58c2543..c1f6cf0e33 100644 --- a/packages/framer-motion/src/render/utils/setters.ts +++ b/packages/framer-motion/src/render/utils/setters.ts @@ -84,14 +84,14 @@ export function checkTargetForNewValues( visualElement: VisualElement, target: TargetWithKeyframes, origin: ResolvedValues -) { +): boolean { const newValueKeys = Object.keys(target).filter( (key) => !visualElement.hasValue(key) ) const numNewValues = newValueKeys.length - if (!numNewValues) return + if (!numNewValues) return false for (let i = 0; i < numNewValues; i++) { const key = newValueKeys[i] @@ -140,6 +140,8 @@ export function checkTargetForNewValues( } if (value !== null) visualElement.setBaseTarget(key, value) } + + return true } export function getOriginFromTransition(key: string, transition: Transition) {