framer-motion
Version:
A simple and powerful React animation library
44 lines (41 loc) • 1.79 kB
JavaScript
import { __assign } from 'tslib';
import * as React from 'react';
import { useContext } from 'react';
import process from '../../utils/process.mjs';
import { featureDefinitions } from './definitions.mjs';
import { invariant } from 'hey-listen';
import { LazyContext } from '../../context/LazyContext.mjs';
var featureNames = Object.keys(featureDefinitions);
var numFeatures = featureNames.length;
/**
* Load features via renderless components based on the provided MotionProps.
*/
function useFeatures(props, visualElement, preloadedFeatures) {
var features = [];
var lazyContext = useContext(LazyContext);
if (!visualElement)
return null;
/**
* If we're in development mode, check to make sure we're not rendering a motion component
* as a child of LazyMotion, as this will break the file-size benefits of using it.
*/
if (process.env.NODE_ENV !== "production" &&
preloadedFeatures &&
lazyContext.strict) {
invariant(false, "You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.");
}
for (var i = 0; i < numFeatures; i++) {
var name_1 = featureNames[i];
var _a = featureDefinitions[name_1], isEnabled = _a.isEnabled, Component = _a.Component;
/**
* It might be possible in the future to use this moment to
* dynamically request functionality. In initial tests this
* was producing a lot of duplication amongst bundles.
*/
if (isEnabled(props) && Component) {
features.push(React.createElement(Component, __assign({ key: name_1 }, props, { visualElement: visualElement })));
}
}
return features;
}
export { useFeatures };