| 1234567891011121314151617181920212223242526272829303132333435363738 |
- import { warnOnce } from 'motion-utils';
- function createDOMMotionComponentProxy(componentFactory) {
- if (typeof Proxy === "undefined") {
- return componentFactory;
- }
- /**
- * A cache of generated `motion` components, e.g `motion.div`, `motion.input` etc.
- * Rather than generating them anew every render.
- */
- const componentCache = new Map();
- const deprecatedFactoryFunction = (...args) => {
- if (process.env.NODE_ENV !== "production") {
- warnOnce(false, "motion() is deprecated. Use motion.create() instead.");
- }
- return componentFactory(...args);
- };
- return new Proxy(deprecatedFactoryFunction, {
- /**
- * Called when `motion` is referenced with a prop: `motion.div`, `motion.input` etc.
- * The prop name is passed through as `key` and we can use that to generate a `motion`
- * DOM component with that name.
- */
- get: (_target, key) => {
- if (key === "create")
- return componentFactory;
- /**
- * If this element doesn't exist in the component cache, create it and cache.
- */
- if (!componentCache.has(key)) {
- componentCache.set(key, componentFactory(key));
- }
- return componentCache.get(key);
- },
- });
- }
- export { createDOMMotionComponentProxy };
|