UNPKG

framer-motion

Version:

A simple and powerful React animation library

44 lines (41 loc) 1.79 kB
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 };