Blame view

天文台pc/tianwentai-ui/node_modules/framer-motion/dist/es/components/LazyMotion/index.mjs 2.03 KB
bc518174   王天杨   提交两个项目文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
  "use client";
  import { jsx } from 'react/jsx-runtime';
  import { useState, useRef, useEffect } from 'react';
  import { LazyContext } from '../../context/LazyContext.mjs';
  import { loadFeatures } from '../../motion/features/load-features.mjs';
  
  /**
   * Used in conjunction with the `m` component to reduce bundle size.
   *
   * `m` is a version of the `motion` component that only loads functionality
   * critical for the initial render.
   *
   * `LazyMotion` can then be used to either synchronously or asynchronously
   * load animation and gesture support.
   *
   * ```jsx
   * // Synchronous loading
   * import { LazyMotion, m, domAnimation } from "framer-motion"
   *
   * function App() {
   *   return (
   *     <LazyMotion features={domAnimation}>
   *       <m.div animate={{ scale: 2 }} />
   *     </LazyMotion>
   *   )
   * }
   *
   * // Asynchronous loading
   * import { LazyMotion, m } from "framer-motion"
   *
   * function App() {
   *   return (
   *     <LazyMotion features={() => import('./path/to/domAnimation')}>
   *       <m.div animate={{ scale: 2 }} />
   *     </LazyMotion>
   *   )
   * }
   * ```
   *
   * @public
   */
  function LazyMotion({ children, features, strict = false }) {
      const [, setIsLoaded] = useState(!isLazyBundle(features));
      const loadedRenderer = useRef(undefined);
      /**
       * If this is a synchronous load, load features immediately
       */
      if (!isLazyBundle(features)) {
          const { renderer, ...loadedFeatures } = features;
          loadedRenderer.current = renderer;
          loadFeatures(loadedFeatures);
      }
      useEffect(() => {
          if (isLazyBundle(features)) {
              features().then(({ renderer, ...loadedFeatures }) => {
                  loadFeatures(loadedFeatures);
                  loadedRenderer.current = renderer;
                  setIsLoaded(true);
              });
          }
      }, []);
      return (jsx(LazyContext.Provider, { value: { renderer: loadedRenderer.current, strict }, children: children }));
  }
  function isLazyBundle(features) {
      return typeof features === "function";
  }
  
  export { LazyMotion };
  //# sourceMappingURL=index.mjs.map