import { getAnimatableNone } from '../../render/dom/value-types/animatable-none.mjs'; import { isAnimatable } from './is-animatable.mjs'; import { isNone } from './is-none.mjs'; function getKeyframes(value, valueName, target, transition) { const isTargetAnimatable = isAnimatable(valueName, target); let keyframes; if (Array.isArray(target)) { keyframes = [...target]; } else { keyframes = [null, target]; } const defaultOrigin = transition.from !== undefined ? transition.from : value.get(); let animatableTemplateValue = undefined; const noneKeyframeIndexes = []; for (let i = 0; i < keyframes.length; i++) { /** * Fill null/wildcard keyframes */ if (keyframes[i] === null) { keyframes[i] = i === 0 ? defaultOrigin : keyframes[i - 1]; } if (isNone(keyframes[i])) { noneKeyframeIndexes.push(i); } // TODO: Clean this conditional, it works for now if (typeof keyframes[i] === "string" && keyframes[i] !== "none" && keyframes[i] !== "0") { animatableTemplateValue = keyframes[i]; } } if (isTargetAnimatable && noneKeyframeIndexes.length && animatableTemplateValue) { for (let i = 0; i < noneKeyframeIndexes.length; i++) { const index = noneKeyframeIndexes[i]; keyframes[index] = getAnimatableNone(valueName, animatableTemplateValue); } } return keyframes; } export { getKeyframes };