framer-motion
Version:
An open source and production-ready motion library for React on the web
32 lines (27 loc) • 1.03 kB
text/typescript
import { ResolvedValueTarget } from "../../types"
import { complex } from "style-value-types"
/**
* Check if a value is animatable. Examples:
*
* ✅: 100, "100px", "#fff"
* ❌: "block", "url(2.jpg)"
* @param value
*
* @internal
*/
export const isAnimatable = (key: string, value: ResolvedValueTarget) => {
// If the list of keys tat might be non-animatable grows, replace with Set
if (key === "zIndex") return false
// If it's a number or a keyframes array, we can animate it. We might at some point
// need to do a deep isAnimatable check of keyframes, or let Popmotion handle this,
// but for now lets leave it like this for performance reasons
if (typeof value === "number" || Array.isArray(value)) return true
if (
typeof value === "string" && // It's animatable if we have a string
complex.test(value) && // And it contains numbers and/or colors
!value.startsWith("url(") // Unless it starts with "url("
) {
return true
}
return false
}