UNPKG

framer-motion

Version:

An open source and production-ready motion library for React on the web

63 lines (57 loc) • 1.36 kB
import { invariant } from "hey-listen" import { cubicBezier } from "popmotion" import { linear, easeIn, easeInOut, easeOut, circIn, circInOut, circOut, backIn, backInOut, backOut, anticipate, bounceIn, bounceInOut, bounceOut, } from "popmotion" import { Easing } from "../../types" const easingLookup = { linear, easeIn, easeInOut, easeOut, circIn, circInOut, circOut, backIn, backInOut, backOut, anticipate, bounceIn, bounceInOut, bounceOut, } export const easingDefinitionToFunction = (definition: Easing) => { if (Array.isArray(definition)) { // If cubic bezier definition, create bezier curve invariant( definition.length === 4, `Cubic bezier arrays must contain four numerical values.` ) const [x1, y1, x2, y2] = definition return cubicBezier(x1, y1, x2, y2) } else if (typeof definition === "string") { // Else lookup from table invariant( easingLookup[definition] !== undefined, `Invalid easing type '${definition}'` ) return easingLookup[definition] } return definition } export const isEasingArray = (ease: any): ease is Easing[] => { return Array.isArray(ease) && typeof ease[0] !== "number" }