framer-motion
Version:
A simple and powerful React animation library
51 lines (48 loc) • 1.75 kB
JavaScript
import { __spreadArray, __read } from 'tslib';
import { SubscriptionManager } from '../../utils/subscription-manager.mjs';
var names = [
"LayoutMeasure",
"BeforeLayoutMeasure",
"LayoutUpdate",
"ViewportBoxUpdate",
"Update",
"Render",
"AnimationComplete",
"LayoutAnimationComplete",
"AnimationStart",
"LayoutAnimationStart",
"SetAxisTarget",
"Unmount",
];
function createLifecycles() {
var managers = names.map(function () { return new SubscriptionManager(); });
var propSubscriptions = {};
var lifecycles = {
clearAllListeners: function () { return managers.forEach(function (manager) { return manager.clear(); }); },
updatePropListeners: function (props) {
names.forEach(function (name) {
var _a;
var on = "on" + name;
var propListener = props[on];
// Unsubscribe existing subscription
(_a = propSubscriptions[name]) === null || _a === void 0 ? void 0 : _a.call(propSubscriptions);
// Add new subscription
if (propListener) {
propSubscriptions[name] = lifecycles[on](propListener);
}
});
},
};
managers.forEach(function (manager, i) {
lifecycles["on" + names[i]] = function (handler) { return manager.add(handler); };
lifecycles["notify" + names[i]] = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return manager.notify.apply(manager, __spreadArray([], __read(args), false));
};
});
return lifecycles;
}
export { createLifecycles };