motion
Version:
The Motion library for the web
38 lines (33 loc) • 1.38 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var cubicBezier = require('./cubic-bezier.cjs.js');
var popmotion = require('popmotion');
var noop = require('../../../utils/noop.cjs.js');
const namedEasings = {
ease: cubicBezier.cubicBezier(0.25, 0.1, 0.25, 1.0),
"ease-in": cubicBezier.cubicBezier(0.42, 0.0, 1.0, 1.0),
"ease-in-out": cubicBezier.cubicBezier(0.42, 0.0, 0.58, 1.0),
"ease-out": cubicBezier.cubicBezier(0.0, 0.0, 0.58, 1.0),
};
const functionArgsRegex = /\((.*?)\)/;
function getEasingFunction(definition) {
// If already an easing function, return
if (typeof definition === "function")
return definition;
// If an easing curve definition, return bezier function
if (Array.isArray(definition))
return cubicBezier.cubicBezier(...definition);
// If we have a predefined easing function, return
if (namedEasings[definition])
return namedEasings[definition];
// If this is a steps function, attempt to create easing curve
if (definition.startsWith("steps")) {
const args = functionArgsRegex.exec(definition);
if (args) {
const argsArray = args[1].split(",");
return popmotion.steps(parseFloat(argsArray[0]), argsArray[1].trim());
}
}
return noop.noopReturn;
}
exports.getEasingFunction = getEasingFunction;