motion 10.18.0 → 11.11.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (384) hide show
  1. package/.turbo/turbo-build.log +32 -0
  2. package/{LICENSE → LICENSE.md} +2 -2
  3. package/README.md +99 -7
  4. package/dist/cjs/index.js +6117 -0
  5. package/dist/cjs/react-client.js +10003 -0
  6. package/dist/cjs/react-m.js +1852 -0
  7. package/dist/es/framer-motion/dist/es/animation/GroupPlaybackControls.mjs +78 -0
  8. package/dist/es/framer-motion/dist/es/animation/animate/index.mjs +34 -0
  9. package/dist/es/framer-motion/dist/es/animation/animate/resolve-subjects.mjs +19 -0
  10. package/dist/es/framer-motion/dist/es/animation/animate/sequence.mjs +14 -0
  11. package/dist/es/framer-motion/dist/es/animation/animate/single-value.mjs +11 -0
  12. package/dist/es/framer-motion/dist/es/animation/animate/subject.mjs +52 -0
  13. package/dist/es/framer-motion/dist/es/animation/animators/AcceleratedAnimation.mjs +318 -0
  14. package/dist/es/framer-motion/dist/es/animation/animators/BaseAnimation.mjs +113 -0
  15. package/dist/es/framer-motion/dist/es/animation/animators/MainThreadAnimation.mjs +384 -0
  16. package/dist/es/framer-motion/dist/es/animation/animators/drivers/driver-frameloop.mjs +17 -0
  17. package/dist/es/framer-motion/dist/es/animation/animators/utils/accelerated-values.mjs +14 -0
  18. package/dist/es/framer-motion/dist/es/animation/animators/utils/can-animate.mjs +42 -0
  19. package/dist/es/framer-motion/dist/es/animation/animators/waapi/NativeAnimation.mjs +169 -0
  20. package/dist/es/framer-motion/dist/es/animation/animators/waapi/animate-elements.mjs +36 -0
  21. package/dist/es/framer-motion/dist/es/animation/animators/waapi/animate-style.mjs +12 -0
  22. package/dist/es/framer-motion/dist/es/animation/animators/waapi/easing.mjs +44 -0
  23. package/dist/es/framer-motion/dist/es/animation/animators/waapi/index.mjs +23 -0
  24. package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/attach-timeline.mjs +6 -0
  25. package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs +12 -0
  26. package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/linear.mjs +15 -0
  27. package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/memo-supports.mjs +9 -0
  28. package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/style.mjs +8 -0
  29. package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/supports-flags.mjs +9 -0
  30. package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/supports-linear-easing.mjs +15 -0
  31. package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/supports-partial-keyframes.mjs +13 -0
  32. package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/supports-waapi.mjs +5 -0
  33. package/dist/es/framer-motion/dist/es/animation/generators/inertia.mjs +87 -0
  34. package/dist/es/framer-motion/dist/es/animation/generators/keyframes.mjs +51 -0
  35. package/dist/es/framer-motion/dist/es/animation/generators/spring/find.mjs +89 -0
  36. package/dist/es/framer-motion/dist/es/animation/generators/spring/index.mjs +129 -0
  37. package/dist/es/framer-motion/dist/es/animation/generators/utils/calc-duration.mjs +17 -0
  38. package/dist/es/framer-motion/dist/es/animation/generators/utils/is-generator.mjs +5 -0
  39. package/dist/es/framer-motion/dist/es/animation/generators/utils/velocity.mjs +9 -0
  40. package/dist/es/framer-motion/dist/es/animation/hooks/animation-controls.mjs +80 -0
  41. package/dist/es/framer-motion/dist/es/animation/hooks/use-animate-style.mjs +17 -0
  42. package/dist/es/framer-motion/dist/es/animation/hooks/use-animate.mjs +17 -0
  43. package/dist/es/framer-motion/dist/es/animation/hooks/use-animated-state.mjs +64 -0
  44. package/dist/es/framer-motion/dist/es/animation/hooks/use-animation.mjs +41 -0
  45. package/dist/es/framer-motion/dist/es/animation/interfaces/motion-value.mjs +113 -0
  46. package/dist/es/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs +75 -0
  47. package/dist/es/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs +66 -0
  48. package/dist/es/framer-motion/dist/es/animation/interfaces/visual-element.mjs +26 -0
  49. package/dist/es/framer-motion/dist/es/animation/optimized-appear/data-id.mjs +6 -0
  50. package/dist/es/framer-motion/dist/es/animation/optimized-appear/get-appear-id.mjs +7 -0
  51. package/dist/es/framer-motion/dist/es/animation/optimized-appear/handoff.mjs +40 -0
  52. package/dist/es/framer-motion/dist/es/animation/optimized-appear/start.mjs +173 -0
  53. package/dist/es/framer-motion/dist/es/animation/optimized-appear/store-id.mjs +8 -0
  54. package/dist/es/framer-motion/dist/es/animation/optimized-appear/store.mjs +4 -0
  55. package/dist/es/framer-motion/dist/es/animation/sequence/create.mjs +230 -0
  56. package/dist/es/framer-motion/dist/es/animation/sequence/utils/calc-time.mjs +21 -0
  57. package/dist/es/framer-motion/dist/es/animation/sequence/utils/edit.mjs +31 -0
  58. package/dist/es/framer-motion/dist/es/animation/sequence/utils/sort.mjs +14 -0
  59. package/dist/es/framer-motion/dist/es/animation/utils/create-visual-element.mjs +44 -0
  60. package/dist/es/framer-motion/dist/es/animation/utils/default-transitions.mjs +40 -0
  61. package/dist/es/framer-motion/dist/es/animation/utils/get-value-transition.mjs +9 -0
  62. package/dist/es/framer-motion/dist/es/animation/utils/is-animatable.mjs +30 -0
  63. package/dist/es/framer-motion/dist/es/animation/utils/is-animation-controls.mjs +7 -0
  64. package/dist/es/framer-motion/dist/es/animation/utils/is-dom-keyframes.mjs +5 -0
  65. package/dist/es/framer-motion/dist/es/animation/utils/is-keyframes-target.mjs +5 -0
  66. package/dist/es/framer-motion/dist/es/animation/utils/is-none.mjs +15 -0
  67. package/dist/es/framer-motion/dist/es/animation/utils/is-transition-defined.mjs +10 -0
  68. package/dist/es/framer-motion/dist/es/animation/utils/stagger.mjs +26 -0
  69. package/dist/es/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs +77 -0
  70. package/dist/es/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs +61 -0
  71. package/dist/es/framer-motion/dist/es/components/AnimatePresence/index.mjs +163 -0
  72. package/dist/es/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs +66 -0
  73. package/dist/es/framer-motion/dist/es/components/AnimatePresence/utils.mjs +14 -0
  74. package/dist/es/framer-motion/dist/es/components/AnimateSharedLayout.mjs +15 -0
  75. package/dist/es/framer-motion/dist/es/components/LayoutGroup/index.mjs +32 -0
  76. package/dist/es/framer-motion/dist/es/components/LazyMotion/index.mjs +68 -0
  77. package/dist/es/framer-motion/dist/es/components/MotionConfig/index.mjs +48 -0
  78. package/dist/es/framer-motion/dist/es/components/Reorder/Group.mjs +53 -0
  79. package/dist/es/framer-motion/dist/es/components/Reorder/Item.mjs +34 -0
  80. package/dist/es/framer-motion/dist/es/components/Reorder/namespace.mjs +2 -0
  81. package/dist/es/framer-motion/dist/es/components/Reorder/utils/check-reorder.mjs +24 -0
  82. package/dist/es/framer-motion/dist/es/context/DeprecatedLayoutGroupContext.mjs +10 -0
  83. package/dist/es/framer-motion/dist/es/context/LayoutGroupContext.mjs +6 -0
  84. package/dist/es/framer-motion/dist/es/context/LazyContext.mjs +6 -0
  85. package/dist/es/framer-motion/dist/es/context/MotionConfigContext.mjs +13 -0
  86. package/dist/es/framer-motion/dist/es/context/MotionContext/create.mjs +13 -0
  87. package/dist/es/framer-motion/dist/es/context/MotionContext/index.mjs +6 -0
  88. package/dist/es/framer-motion/dist/es/context/MotionContext/utils.mjs +17 -0
  89. package/dist/es/framer-motion/dist/es/context/PresenceContext.mjs +9 -0
  90. package/dist/es/framer-motion/dist/es/context/ReorderContext.mjs +6 -0
  91. package/dist/es/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs +9 -0
  92. package/dist/es/framer-motion/dist/es/easing/anticipate.mjs +5 -0
  93. package/dist/es/framer-motion/dist/es/easing/back.mjs +9 -0
  94. package/dist/es/framer-motion/dist/es/easing/circ.mjs +8 -0
  95. package/dist/es/framer-motion/dist/es/easing/cubic-bezier.mjs +51 -0
  96. package/dist/es/framer-motion/dist/es/easing/ease.mjs +7 -0
  97. package/dist/es/framer-motion/dist/es/easing/modifiers/mirror.mjs +5 -0
  98. package/dist/es/framer-motion/dist/es/easing/modifiers/reverse.mjs +5 -0
  99. package/dist/es/framer-motion/dist/es/easing/steps.mjs +15 -0
  100. package/dist/es/framer-motion/dist/es/easing/utils/create-generator-easing.mjs +17 -0
  101. package/dist/es/framer-motion/dist/es/easing/utils/get-easing-for-segment.mjs +8 -0
  102. package/dist/es/framer-motion/dist/es/easing/utils/is-bezier-definition.mjs +3 -0
  103. package/dist/es/framer-motion/dist/es/easing/utils/is-easing-array.mjs +5 -0
  104. package/dist/es/framer-motion/dist/es/easing/utils/map.mjs +38 -0
  105. package/dist/es/framer-motion/dist/es/events/add-dom-event.mjs +6 -0
  106. package/dist/es/framer-motion/dist/es/events/add-pointer-event.mjs +8 -0
  107. package/dist/es/framer-motion/dist/es/events/event-info.mjs +15 -0
  108. package/dist/es/framer-motion/dist/es/events/use-dom-event.mjs +34 -0
  109. package/dist/es/framer-motion/dist/es/events/utils/is-primary-pointer.mjs +18 -0
  110. package/dist/es/framer-motion/dist/es/frameloop/batcher.mjs +74 -0
  111. package/dist/es/framer-motion/dist/es/frameloop/frame.mjs +6 -0
  112. package/dist/es/framer-motion/dist/es/frameloop/index-legacy.mjs +20 -0
  113. package/dist/es/framer-motion/dist/es/frameloop/microtask.mjs +5 -0
  114. package/dist/es/framer-motion/dist/es/frameloop/render-step.mjs +80 -0
  115. package/dist/es/framer-motion/dist/es/frameloop/sync-time.mjs +31 -0
  116. package/dist/es/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs +487 -0
  117. package/dist/es/framer-motion/dist/es/gestures/drag/index.mjs +27 -0
  118. package/dist/es/framer-motion/dist/es/gestures/drag/use-drag-controls.mjs +88 -0
  119. package/dist/es/framer-motion/dist/es/gestures/drag/utils/constraints.mjs +129 -0
  120. package/dist/es/framer-motion/dist/es/gestures/drag/utils/lock.mjs +53 -0
  121. package/dist/es/framer-motion/dist/es/gestures/focus.mjs +41 -0
  122. package/dist/es/framer-motion/dist/es/gestures/hover.mjs +33 -0
  123. package/dist/es/framer-motion/dist/es/gestures/pan/PanSession.mjs +156 -0
  124. package/dist/es/framer-motion/dist/es/gestures/pan/index.mjs +50 -0
  125. package/dist/es/framer-motion/dist/es/gestures/press.mjs +130 -0
  126. package/dist/es/framer-motion/dist/es/gestures/utils/is-node-or-child.mjs +20 -0
  127. package/dist/es/framer-motion/dist/es/motion/features/Feature.mjs +9 -0
  128. package/dist/es/framer-motion/dist/es/motion/features/animation/exit.mjs +31 -0
  129. package/dist/es/framer-motion/dist/es/motion/features/animation/index.mjs +41 -0
  130. package/dist/es/framer-motion/dist/es/motion/features/animations.mjs +13 -0
  131. package/dist/es/framer-motion/dist/es/motion/features/definitions.mjs +28 -0
  132. package/dist/es/framer-motion/dist/es/motion/features/drag.mjs +17 -0
  133. package/dist/es/framer-motion/dist/es/motion/features/gestures.mjs +21 -0
  134. package/dist/es/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs +134 -0
  135. package/dist/es/framer-motion/dist/es/motion/features/layout.mjs +11 -0
  136. package/dist/es/framer-motion/dist/es/motion/features/load-features.mjs +12 -0
  137. package/dist/es/framer-motion/dist/es/motion/features/viewport/index.mjs +72 -0
  138. package/dist/es/framer-motion/dist/es/motion/features/viewport/observers.mjs +49 -0
  139. package/dist/es/framer-motion/dist/es/motion/index.mjs +98 -0
  140. package/dist/es/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs +11 -0
  141. package/dist/es/framer-motion/dist/es/motion/utils/is-motion-component.mjs +12 -0
  142. package/dist/es/framer-motion/dist/es/motion/utils/symbol.mjs +3 -0
  143. package/dist/es/framer-motion/dist/es/motion/utils/unwrap-motion-component.mjs +17 -0
  144. package/dist/es/framer-motion/dist/es/motion/utils/use-motion-ref.mjs +36 -0
  145. package/dist/es/framer-motion/dist/es/motion/utils/use-visual-element.mjs +134 -0
  146. package/dist/es/framer-motion/dist/es/motion/utils/use-visual-state.mjs +82 -0
  147. package/dist/es/framer-motion/dist/es/motion/utils/valid-prop.mjs +57 -0
  148. package/dist/es/framer-motion/dist/es/projection/animation/mix-values.mjs +93 -0
  149. package/dist/es/framer-motion/dist/es/projection/geometry/conversion.mjs +33 -0
  150. package/dist/es/framer-motion/dist/es/projection/geometry/copy.mjs +31 -0
  151. package/dist/es/framer-motion/dist/es/projection/geometry/delta-apply.mjs +119 -0
  152. package/dist/es/framer-motion/dist/es/projection/geometry/delta-calc.mjs +52 -0
  153. package/dist/es/framer-motion/dist/es/projection/geometry/delta-remove.mjs +54 -0
  154. package/dist/es/framer-motion/dist/es/projection/geometry/models.mjs +17 -0
  155. package/dist/es/framer-motion/dist/es/projection/geometry/utils.mjs +31 -0
  156. package/dist/es/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs +13 -0
  157. package/dist/es/framer-motion/dist/es/projection/node/HTMLProjectionNode.mjs +27 -0
  158. package/dist/es/framer-motion/dist/es/projection/node/create-projection-node.mjs +1583 -0
  159. package/dist/es/framer-motion/dist/es/projection/node/group.mjs +24 -0
  160. package/dist/es/framer-motion/dist/es/projection/node/state.mjs +19 -0
  161. package/dist/es/framer-motion/dist/es/projection/shared/stack.mjs +112 -0
  162. package/dist/es/framer-motion/dist/es/projection/styles/scale-border-radius.mjs +41 -0
  163. package/dist/es/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs +35 -0
  164. package/dist/es/framer-motion/dist/es/projection/styles/scale-correction.mjs +6 -0
  165. package/dist/es/framer-motion/dist/es/projection/styles/transform.mjs +49 -0
  166. package/dist/es/framer-motion/dist/es/projection/use-instant-layout-transition.mjs +14 -0
  167. package/dist/es/framer-motion/dist/es/projection/use-reset-projection.mjs +14 -0
  168. package/dist/es/framer-motion/dist/es/projection/utils/each-axis.mjs +5 -0
  169. package/dist/es/framer-motion/dist/es/projection/utils/has-transform.mjs +26 -0
  170. package/dist/es/framer-motion/dist/es/projection/utils/measure.mjs +17 -0
  171. package/dist/es/framer-motion/dist/es/render/VisualElement.mjs +477 -0
  172. package/dist/es/framer-motion/dist/es/render/components/create-factory.mjs +23 -0
  173. package/dist/es/framer-motion/dist/es/render/components/create-proxy.mjs +38 -0
  174. package/dist/es/framer-motion/dist/es/render/components/m/create.mjs +6 -0
  175. package/dist/es/framer-motion/dist/es/render/components/m/elements.mjs +227 -0
  176. package/dist/es/framer-motion/dist/es/render/components/m/proxy.mjs +6 -0
  177. package/dist/es/framer-motion/dist/es/render/components/motion/create.mjs +15 -0
  178. package/dist/es/framer-motion/dist/es/render/components/motion/elements.mjs +194 -0
  179. package/dist/es/framer-motion/dist/es/render/components/motion/proxy.mjs +6 -0
  180. package/dist/es/framer-motion/dist/es/render/dom/DOMKeyframesResolver.mjs +130 -0
  181. package/dist/es/framer-motion/dist/es/render/dom/DOMVisualElement.mjs +28 -0
  182. package/dist/es/framer-motion/dist/es/render/dom/create-visual-element.mjs +14 -0
  183. package/dist/es/framer-motion/dist/es/render/dom/features-animation.mjs +14 -0
  184. package/dist/es/framer-motion/dist/es/render/dom/features-max.mjs +14 -0
  185. package/dist/es/framer-motion/dist/es/render/dom/features-min.mjs +12 -0
  186. package/dist/es/framer-motion/dist/es/render/dom/resize/handle-element.mjs +64 -0
  187. package/dist/es/framer-motion/dist/es/render/dom/resize/handle-window.mjs +30 -0
  188. package/dist/es/framer-motion/dist/es/render/dom/resize/index.mjs +8 -0
  189. package/dist/es/framer-motion/dist/es/render/dom/scroll/index.mjs +80 -0
  190. package/dist/es/framer-motion/dist/es/render/dom/scroll/info.mjs +56 -0
  191. package/dist/es/framer-motion/dist/es/render/dom/scroll/observe.mjs +18 -0
  192. package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/edge.mjs +45 -0
  193. package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/index.mjs +59 -0
  194. package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/inset.mjs +45 -0
  195. package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/offset.mjs +35 -0
  196. package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/presets.mjs +20 -0
  197. package/dist/es/framer-motion/dist/es/render/dom/scroll/on-scroll-handler.mjs +48 -0
  198. package/dist/es/framer-motion/dist/es/render/dom/scroll/supports.mjs +5 -0
  199. package/dist/es/framer-motion/dist/es/render/dom/scroll/track.mjs +84 -0
  200. package/dist/es/framer-motion/dist/es/render/dom/use-render.mjs +33 -0
  201. package/dist/es/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs +6 -0
  202. package/dist/es/framer-motion/dist/es/render/dom/utils/css-variables-conversion.mjs +42 -0
  203. package/dist/es/framer-motion/dist/es/render/dom/utils/filter-props.mjs +59 -0
  204. package/dist/es/framer-motion/dist/es/render/dom/utils/is-css-variable.mjs +15 -0
  205. package/dist/es/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs +30 -0
  206. package/dist/es/framer-motion/dist/es/render/dom/utils/is-svg-element.mjs +5 -0
  207. package/dist/es/framer-motion/dist/es/render/dom/utils/resolve-element.mjs +28 -0
  208. package/dist/es/framer-motion/dist/es/render/dom/utils/unit-conversion.mjs +65 -0
  209. package/dist/es/framer-motion/dist/es/render/dom/value-types/animatable-none.mjs +15 -0
  210. package/dist/es/framer-motion/dist/es/render/dom/value-types/defaults.mjs +30 -0
  211. package/dist/es/framer-motion/dist/es/render/dom/value-types/dimensions.mjs +15 -0
  212. package/dist/es/framer-motion/dist/es/render/dom/value-types/find.mjs +15 -0
  213. package/dist/es/framer-motion/dist/es/render/dom/value-types/get-as-type.mjs +10 -0
  214. package/dist/es/framer-motion/dist/es/render/dom/value-types/number-browser.mjs +41 -0
  215. package/dist/es/framer-motion/dist/es/render/dom/value-types/number.mjs +18 -0
  216. package/dist/es/framer-motion/dist/es/render/dom/value-types/test.mjs +6 -0
  217. package/dist/es/framer-motion/dist/es/render/dom/value-types/transform.mjs +31 -0
  218. package/dist/es/framer-motion/dist/es/render/dom/value-types/type-auto.mjs +9 -0
  219. package/dist/es/framer-motion/dist/es/render/dom/value-types/type-int.mjs +8 -0
  220. package/dist/es/framer-motion/dist/es/render/dom/viewport/index.mjs +43 -0
  221. package/dist/es/framer-motion/dist/es/render/html/HTMLVisualElement.mjs +57 -0
  222. package/dist/es/framer-motion/dist/es/render/html/config-motion.mjs +12 -0
  223. package/dist/es/framer-motion/dist/es/render/html/use-props.mjs +57 -0
  224. package/dist/es/framer-motion/dist/es/render/html/utils/build-styles.mjs +65 -0
  225. package/dist/es/framer-motion/dist/es/render/html/utils/build-transform.mjs +62 -0
  226. package/dist/es/framer-motion/dist/es/render/html/utils/create-render-state.mjs +8 -0
  227. package/dist/es/framer-motion/dist/es/render/html/utils/make-none-animatable.mjs +30 -0
  228. package/dist/es/framer-motion/dist/es/render/html/utils/render.mjs +9 -0
  229. package/dist/es/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs +20 -0
  230. package/dist/es/framer-motion/dist/es/render/html/utils/transform.mjs +28 -0
  231. package/dist/es/framer-motion/dist/es/render/object/ObjectVisualElement.mjs +41 -0
  232. package/dist/es/framer-motion/dist/es/render/store.mjs +3 -0
  233. package/dist/es/framer-motion/dist/es/render/svg/SVGVisualElement.mjs +45 -0
  234. package/dist/es/framer-motion/dist/es/render/svg/config-motion.mjs +40 -0
  235. package/dist/es/framer-motion/dist/es/render/svg/lowercase-elements.mjs +33 -0
  236. package/dist/es/framer-motion/dist/es/render/svg/use-props.mjs +24 -0
  237. package/dist/es/framer-motion/dist/es/render/svg/utils/build-attrs.mjs +52 -0
  238. package/dist/es/framer-motion/dist/es/render/svg/utils/camel-case-attrs.mjs +30 -0
  239. package/dist/es/framer-motion/dist/es/render/svg/utils/create-render-state.mjs +8 -0
  240. package/dist/es/framer-motion/dist/es/render/svg/utils/is-svg-tag.mjs +3 -0
  241. package/dist/es/framer-motion/dist/es/render/svg/utils/path.mjs +32 -0
  242. package/dist/es/framer-motion/dist/es/render/svg/utils/render.mjs +12 -0
  243. package/dist/es/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs +19 -0
  244. package/dist/es/framer-motion/dist/es/render/svg/utils/transform-origin.mjs +18 -0
  245. package/dist/es/framer-motion/dist/es/render/utils/KeyframesResolver.mjs +164 -0
  246. package/dist/es/framer-motion/dist/es/render/utils/animation-state.mjs +332 -0
  247. package/dist/es/framer-motion/dist/es/render/utils/compare-by-depth.mjs +3 -0
  248. package/dist/es/framer-motion/dist/es/render/utils/flat-tree.mjs +24 -0
  249. package/dist/es/framer-motion/dist/es/render/utils/get-variant-context.mjs +28 -0
  250. package/dist/es/framer-motion/dist/es/render/utils/is-controlling-variants.mjs +13 -0
  251. package/dist/es/framer-motion/dist/es/render/utils/is-variant-label.mjs +8 -0
  252. package/dist/es/framer-motion/dist/es/render/utils/motion-values.mjs +59 -0
  253. package/dist/es/framer-motion/dist/es/render/utils/resolve-dynamic-variants.mjs +8 -0
  254. package/dist/es/framer-motion/dist/es/render/utils/resolve-variants.mjs +36 -0
  255. package/dist/es/framer-motion/dist/es/render/utils/setters.mjs +27 -0
  256. package/dist/es/framer-motion/dist/es/render/utils/variant-props.mjs +12 -0
  257. package/dist/es/framer-motion/dist/es/utils/GlobalConfig.mjs +6 -0
  258. package/dist/es/framer-motion/dist/es/utils/array.mjs +21 -0
  259. package/dist/es/framer-motion/dist/es/utils/clamp.mjs +9 -0
  260. package/dist/es/framer-motion/dist/es/utils/delay.mjs +24 -0
  261. package/dist/es/framer-motion/dist/es/utils/distance.mjs +9 -0
  262. package/dist/es/framer-motion/dist/es/utils/errors.mjs +18 -0
  263. package/dist/es/framer-motion/dist/es/utils/get-context-window.mjs +6 -0
  264. package/dist/es/framer-motion/dist/es/utils/hsla-to-rgba.mjs +42 -0
  265. package/dist/es/framer-motion/dist/es/utils/interpolate.mjs +75 -0
  266. package/dist/es/framer-motion/dist/es/utils/is-browser.mjs +3 -0
  267. package/dist/es/framer-motion/dist/es/utils/is-numerical-string.mjs +6 -0
  268. package/dist/es/framer-motion/dist/es/utils/is-ref-object.mjs +7 -0
  269. package/dist/es/framer-motion/dist/es/utils/is-zero-value-string.mjs +6 -0
  270. package/dist/es/framer-motion/dist/es/utils/memo.mjs +10 -0
  271. package/dist/es/framer-motion/dist/es/utils/mix/color.mjs +47 -0
  272. package/dist/es/framer-motion/dist/es/utils/mix/complex.mjs +94 -0
  273. package/dist/es/framer-motion/dist/es/utils/mix/immediate.mjs +5 -0
  274. package/dist/es/framer-motion/dist/es/utils/mix/index.mjs +14 -0
  275. package/dist/es/framer-motion/dist/es/utils/mix/number.mjs +26 -0
  276. package/dist/es/framer-motion/dist/es/utils/mix/visibility.mjs +16 -0
  277. package/dist/es/framer-motion/dist/es/utils/noop.mjs +3 -0
  278. package/dist/es/framer-motion/dist/es/utils/offsets/default.mjs +9 -0
  279. package/dist/es/framer-motion/dist/es/utils/offsets/fill.mjs +12 -0
  280. package/dist/es/framer-motion/dist/es/utils/offsets/time.mjs +5 -0
  281. package/dist/es/framer-motion/dist/es/utils/pipe.mjs +11 -0
  282. package/dist/es/framer-motion/dist/es/utils/progress.mjs +18 -0
  283. package/dist/es/framer-motion/dist/es/utils/reduced-motion/index.mjs +19 -0
  284. package/dist/es/framer-motion/dist/es/utils/reduced-motion/state.mjs +5 -0
  285. package/dist/es/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion-config.mjs +19 -0
  286. package/dist/es/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.mjs +47 -0
  287. package/dist/es/framer-motion/dist/es/utils/resolve-value.mjs +11 -0
  288. package/dist/es/framer-motion/dist/es/utils/shallow-compare.mjs +14 -0
  289. package/dist/es/framer-motion/dist/es/utils/subscription-manager.mjs +40 -0
  290. package/dist/es/framer-motion/dist/es/utils/time-conversion.mjs +10 -0
  291. package/dist/es/framer-motion/dist/es/utils/transform.mjs +21 -0
  292. package/dist/es/framer-motion/dist/es/utils/use-animation-frame.mjs +21 -0
  293. package/dist/es/framer-motion/dist/es/utils/use-constant.mjs +18 -0
  294. package/dist/es/framer-motion/dist/es/utils/use-cycle.mjs +47 -0
  295. package/dist/es/framer-motion/dist/es/utils/use-force-update.mjs +19 -0
  296. package/dist/es/framer-motion/dist/es/utils/use-in-view.mjs +23 -0
  297. package/dist/es/framer-motion/dist/es/utils/use-instant-transition-state.mjs +5 -0
  298. package/dist/es/framer-motion/dist/es/utils/use-instant-transition.mjs +41 -0
  299. package/dist/es/framer-motion/dist/es/utils/use-is-mounted.mjs +15 -0
  300. package/dist/es/framer-motion/dist/es/utils/use-isomorphic-effect.mjs +6 -0
  301. package/dist/es/framer-motion/dist/es/utils/use-motion-value-event.mjs +13 -0
  302. package/dist/es/framer-motion/dist/es/utils/use-unmount-effect.mjs +7 -0
  303. package/dist/es/framer-motion/dist/es/utils/velocity-per-second.mjs +11 -0
  304. package/dist/es/framer-motion/dist/es/utils/warn-once.mjs +11 -0
  305. package/dist/es/framer-motion/dist/es/utils/wrap.mjs +6 -0
  306. package/dist/es/framer-motion/dist/es/value/index.mjs +319 -0
  307. package/dist/es/framer-motion/dist/es/value/scroll/use-element-scroll.mjs +14 -0
  308. package/dist/es/framer-motion/dist/es/value/scroll/use-viewport-scroll.mjs +14 -0
  309. package/dist/es/framer-motion/dist/es/value/types/color/hex.mjs +40 -0
  310. package/dist/es/framer-motion/dist/es/value/types/color/hsla.mjs +22 -0
  311. package/dist/es/framer-motion/dist/es/value/types/color/index.mjs +27 -0
  312. package/dist/es/framer-motion/dist/es/value/types/color/rgba.mjs +25 -0
  313. package/dist/es/framer-motion/dist/es/value/types/color/utils.mjs +29 -0
  314. package/dist/es/framer-motion/dist/es/value/types/complex/filter.mjs +30 -0
  315. package/dist/es/framer-motion/dist/es/value/types/complex/index.mjs +92 -0
  316. package/dist/es/framer-motion/dist/es/value/types/numbers/index.mjs +17 -0
  317. package/dist/es/framer-motion/dist/es/value/types/numbers/units.mjs +17 -0
  318. package/dist/es/framer-motion/dist/es/value/types/utils/color-regex.mjs +3 -0
  319. package/dist/es/framer-motion/dist/es/value/types/utils/float-regex.mjs +3 -0
  320. package/dist/es/framer-motion/dist/es/value/types/utils/is-nullish.mjs +5 -0
  321. package/dist/es/framer-motion/dist/es/value/types/utils/sanitize.mjs +5 -0
  322. package/dist/es/framer-motion/dist/es/value/types/utils/single-color-regex.mjs +3 -0
  323. package/dist/es/framer-motion/dist/es/value/use-combine-values.mjs +37 -0
  324. package/dist/es/framer-motion/dist/es/value/use-computed.mjs +19 -0
  325. package/dist/es/framer-motion/dist/es/value/use-inverted-scale.mjs +52 -0
  326. package/dist/es/framer-motion/dist/es/value/use-motion-template.mjs +45 -0
  327. package/dist/es/framer-motion/dist/es/value/use-motion-value.mjs +38 -0
  328. package/dist/es/framer-motion/dist/es/value/use-scroll.mjs +39 -0
  329. package/dist/es/framer-motion/dist/es/value/use-spring.mjs +85 -0
  330. package/dist/es/framer-motion/dist/es/value/use-time.mjs +10 -0
  331. package/dist/es/framer-motion/dist/es/value/use-transform.mjs +29 -0
  332. package/dist/es/framer-motion/dist/es/value/use-velocity.mjs +35 -0
  333. package/dist/es/framer-motion/dist/es/value/use-will-change/WillChangeMotionValue.mjs +22 -0
  334. package/dist/es/framer-motion/dist/es/value/use-will-change/add-will-change.mjs +14 -0
  335. package/dist/es/framer-motion/dist/es/value/use-will-change/get-will-change-name.mjs +14 -0
  336. package/dist/es/framer-motion/dist/es/value/use-will-change/index.mjs +8 -0
  337. package/dist/es/framer-motion/dist/es/value/use-will-change/is.mjs +7 -0
  338. package/dist/es/framer-motion/dist/es/value/utils/is-motion-value.mjs +3 -0
  339. package/dist/es/framer-motion/dist/es/value/utils/resolve-motion-value.mjs +16 -0
  340. package/dist/es/motion/lib/index.mjs +30 -0
  341. package/dist/es/motion/lib/react-client.mjs +3 -0
  342. package/dist/es/motion/lib/react-m.mjs +3 -0
  343. package/dist/es/motion/lib/react.mjs +110 -0
  344. package/dist/index.d.ts +1 -0
  345. package/dist/motion.dev.js +6121 -0
  346. package/dist/motion.js +1 -0
  347. package/dist/react-client.d.ts +1 -0
  348. package/dist/react-m.d.ts +1 -0
  349. package/dist/react.d.ts +1 -0
  350. package/lib/index.js +1 -3
  351. package/lib/index.js.map +1 -1
  352. package/lib/react-client.js +3 -0
  353. package/lib/react-client.js.map +1 -0
  354. package/lib/react-m.js +3 -0
  355. package/lib/react-m.js.map +1 -0
  356. package/lib/react.js +3 -0
  357. package/lib/react.js.map +1 -0
  358. package/package.json +79 -29
  359. package/react/package.json +6 -0
  360. package/react-client/package.json +6 -0
  361. package/react-m/package.json +6 -0
  362. package/rollup.config.mjs +184 -0
  363. package/src/index.ts +1 -0
  364. package/src/react-client.ts +3 -0
  365. package/src/react-m.ts +3 -0
  366. package/src/react.ts +3 -0
  367. package/tsconfig.json +25 -0
  368. package/types/index.d.ts +1 -4
  369. package/types/react-client.d.ts +1 -0
  370. package/types/react-m.d.ts +1 -0
  371. package/types/react.d.ts +1 -0
  372. package/CHANGELOG.md +0 -378
  373. package/dist/animate.cjs.js +0 -22
  374. package/dist/animate.es.js +0 -19
  375. package/dist/main.cjs.js +0 -21
  376. package/dist/main.es.js +0 -3
  377. package/dist/motion.min.js +0 -1
  378. package/dist/motion.umd.js +0 -2364
  379. package/dist/size-index.js +0 -1
  380. package/lib/animate.js +0 -17
  381. package/lib/animate.js.map +0 -1
  382. package/types/animate.d.ts +0 -6
  383. package/types/animate.d.ts.map +0 -1
  384. package/types/index.d.ts.map +0 -1
@@ -0,0 +1,384 @@
1
+ import { KeyframeResolver } from '../../render/utils/KeyframesResolver.mjs';
2
+ import { spring } from '../generators/spring/index.mjs';
3
+ import { inertia } from '../generators/inertia.mjs';
4
+ import { keyframes } from '../generators/keyframes.mjs';
5
+ import { BaseAnimation } from './BaseAnimation.mjs';
6
+ import { pipe } from '../../utils/pipe.mjs';
7
+ import { mix } from '../../utils/mix/index.mjs';
8
+ import { calcGeneratorDuration } from '../generators/utils/calc-duration.mjs';
9
+ import { millisecondsToSeconds, secondsToMilliseconds } from '../../utils/time-conversion.mjs';
10
+ import { clamp } from '../../utils/clamp.mjs';
11
+ import { invariant } from '../../utils/errors.mjs';
12
+ import { frameloopDriver } from './drivers/driver-frameloop.mjs';
13
+ import { getFinalKeyframe } from './waapi/utils/get-final-keyframe.mjs';
14
+ import { isGenerator } from '../generators/utils/is-generator.mjs';
15
+
16
+ const generators = {
17
+ decay: inertia,
18
+ inertia,
19
+ tween: keyframes,
20
+ keyframes: keyframes,
21
+ spring,
22
+ };
23
+ const percentToProgress = (percent) => percent / 100;
24
+ /**
25
+ * Animation that runs on the main thread. Designed to be WAAPI-spec in the subset of
26
+ * features we expose publically. Mostly the compatibility is to ensure visual identity
27
+ * between both WAAPI and main thread animations.
28
+ */
29
+ class MainThreadAnimation extends BaseAnimation {
30
+ constructor(options) {
31
+ super(options);
32
+ /**
33
+ * The time at which the animation was paused.
34
+ */
35
+ this.holdTime = null;
36
+ /**
37
+ * The time at which the animation was cancelled.
38
+ */
39
+ this.cancelTime = null;
40
+ /**
41
+ * The current time of the animation.
42
+ */
43
+ this.currentTime = 0;
44
+ /**
45
+ * Playback speed as a factor. 0 would be stopped, -1 reverse and 2 double speed.
46
+ */
47
+ this.playbackSpeed = 1;
48
+ /**
49
+ * The state of the animation to apply when the animation is resolved. This
50
+ * allows calls to the public API to control the animation before it is resolved,
51
+ * without us having to resolve it first.
52
+ */
53
+ this.pendingPlayState = "running";
54
+ /**
55
+ * The time at which the animation was started.
56
+ */
57
+ this.startTime = null;
58
+ this.state = "idle";
59
+ /**
60
+ * This method is bound to the instance to fix a pattern where
61
+ * animation.stop is returned as a reference from a useEffect.
62
+ */
63
+ this.stop = () => {
64
+ this.resolver.cancel();
65
+ this.isStopped = true;
66
+ if (this.state === "idle")
67
+ return;
68
+ this.teardown();
69
+ const { onStop } = this.options;
70
+ onStop && onStop();
71
+ };
72
+ const { name, motionValue, element, keyframes } = this.options;
73
+ const KeyframeResolver$1 = (element === null || element === void 0 ? void 0 : element.KeyframeResolver) || KeyframeResolver;
74
+ const onResolved = (resolvedKeyframes, finalKeyframe) => this.onKeyframesResolved(resolvedKeyframes, finalKeyframe);
75
+ this.resolver = new KeyframeResolver$1(keyframes, onResolved, name, motionValue, element);
76
+ this.resolver.scheduleResolve();
77
+ }
78
+ initPlayback(keyframes$1) {
79
+ const { type = "keyframes", repeat = 0, repeatDelay = 0, repeatType, velocity = 0, } = this.options;
80
+ const generatorFactory = isGenerator(type)
81
+ ? type
82
+ : generators[type] || keyframes;
83
+ /**
84
+ * If our generator doesn't support mixing numbers, we need to replace keyframes with
85
+ * [0, 100] and then make a function that maps that to the actual keyframes.
86
+ *
87
+ * 100 is chosen instead of 1 as it works nicer with spring animations.
88
+ */
89
+ let mapPercentToKeyframes;
90
+ let mirroredGenerator;
91
+ if (generatorFactory !== keyframes &&
92
+ typeof keyframes$1[0] !== "number") {
93
+ if (process.env.NODE_ENV !== "production") {
94
+ invariant(keyframes$1.length === 2, `Only two keyframes currently supported with spring and inertia animations. Trying to animate ${keyframes$1}`);
95
+ }
96
+ mapPercentToKeyframes = pipe(percentToProgress, mix(keyframes$1[0], keyframes$1[1]));
97
+ keyframes$1 = [0, 100];
98
+ }
99
+ const generator = generatorFactory({ ...this.options, keyframes: keyframes$1 });
100
+ /**
101
+ * If we have a mirror repeat type we need to create a second generator that outputs the
102
+ * mirrored (not reversed) animation and later ping pong between the two generators.
103
+ */
104
+ if (repeatType === "mirror") {
105
+ mirroredGenerator = generatorFactory({
106
+ ...this.options,
107
+ keyframes: [...keyframes$1].reverse(),
108
+ velocity: -velocity,
109
+ });
110
+ }
111
+ /**
112
+ * If duration is undefined and we have repeat options,
113
+ * we need to calculate a duration from the generator.
114
+ *
115
+ * We set it to the generator itself to cache the duration.
116
+ * Any timeline resolver will need to have already precalculated
117
+ * the duration by this step.
118
+ */
119
+ if (generator.calculatedDuration === null) {
120
+ generator.calculatedDuration = calcGeneratorDuration(generator);
121
+ }
122
+ const { calculatedDuration } = generator;
123
+ const resolvedDuration = calculatedDuration + repeatDelay;
124
+ const totalDuration = resolvedDuration * (repeat + 1) - repeatDelay;
125
+ return {
126
+ generator,
127
+ mirroredGenerator,
128
+ mapPercentToKeyframes,
129
+ calculatedDuration,
130
+ resolvedDuration,
131
+ totalDuration,
132
+ };
133
+ }
134
+ onPostResolved() {
135
+ const { autoplay = true } = this.options;
136
+ this.play();
137
+ if (this.pendingPlayState === "paused" || !autoplay) {
138
+ this.pause();
139
+ }
140
+ else {
141
+ this.state = this.pendingPlayState;
142
+ }
143
+ }
144
+ tick(timestamp, sample = false) {
145
+ const { resolved } = this;
146
+ // If the animations has failed to resolve, return the final keyframe.
147
+ if (!resolved) {
148
+ const { keyframes } = this.options;
149
+ return { done: true, value: keyframes[keyframes.length - 1] };
150
+ }
151
+ const { finalKeyframe, generator, mirroredGenerator, mapPercentToKeyframes, keyframes, calculatedDuration, totalDuration, resolvedDuration, } = resolved;
152
+ if (this.startTime === null)
153
+ return generator.next(0);
154
+ const { delay, repeat, repeatType, repeatDelay, onUpdate } = this.options;
155
+ /**
156
+ * requestAnimationFrame timestamps can come through as lower than
157
+ * the startTime as set by performance.now(). Here we prevent this,
158
+ * though in the future it could be possible to make setting startTime
159
+ * a pending operation that gets resolved here.
160
+ */
161
+ if (this.speed > 0) {
162
+ this.startTime = Math.min(this.startTime, timestamp);
163
+ }
164
+ else if (this.speed < 0) {
165
+ this.startTime = Math.min(timestamp - totalDuration / this.speed, this.startTime);
166
+ }
167
+ // Update currentTime
168
+ if (sample) {
169
+ this.currentTime = timestamp;
170
+ }
171
+ else if (this.holdTime !== null) {
172
+ this.currentTime = this.holdTime;
173
+ }
174
+ else {
175
+ // Rounding the time because floating point arithmetic is not always accurate, e.g. 3000.367 - 1000.367 =
176
+ // 2000.0000000000002. This is a problem when we are comparing the currentTime with the duration, for
177
+ // example.
178
+ this.currentTime =
179
+ Math.round(timestamp - this.startTime) * this.speed;
180
+ }
181
+ // Rebase on delay
182
+ const timeWithoutDelay = this.currentTime - delay * (this.speed >= 0 ? 1 : -1);
183
+ const isInDelayPhase = this.speed >= 0
184
+ ? timeWithoutDelay < 0
185
+ : timeWithoutDelay > totalDuration;
186
+ this.currentTime = Math.max(timeWithoutDelay, 0);
187
+ // If this animation has finished, set the current time to the total duration.
188
+ if (this.state === "finished" && this.holdTime === null) {
189
+ this.currentTime = totalDuration;
190
+ }
191
+ let elapsed = this.currentTime;
192
+ let frameGenerator = generator;
193
+ if (repeat) {
194
+ /**
195
+ * Get the current progress (0-1) of the animation. If t is >
196
+ * than duration we'll get values like 2.5 (midway through the
197
+ * third iteration)
198
+ */
199
+ const progress = Math.min(this.currentTime, totalDuration) / resolvedDuration;
200
+ /**
201
+ * Get the current iteration (0 indexed). For instance the floor of
202
+ * 2.5 is 2.
203
+ */
204
+ let currentIteration = Math.floor(progress);
205
+ /**
206
+ * Get the current progress of the iteration by taking the remainder
207
+ * so 2.5 is 0.5 through iteration 2
208
+ */
209
+ let iterationProgress = progress % 1.0;
210
+ /**
211
+ * If iteration progress is 1 we count that as the end
212
+ * of the previous iteration.
213
+ */
214
+ if (!iterationProgress && progress >= 1) {
215
+ iterationProgress = 1;
216
+ }
217
+ iterationProgress === 1 && currentIteration--;
218
+ currentIteration = Math.min(currentIteration, repeat + 1);
219
+ /**
220
+ * Reverse progress if we're not running in "normal" direction
221
+ */
222
+ const isOddIteration = Boolean(currentIteration % 2);
223
+ if (isOddIteration) {
224
+ if (repeatType === "reverse") {
225
+ iterationProgress = 1 - iterationProgress;
226
+ if (repeatDelay) {
227
+ iterationProgress -= repeatDelay / resolvedDuration;
228
+ }
229
+ }
230
+ else if (repeatType === "mirror") {
231
+ frameGenerator = mirroredGenerator;
232
+ }
233
+ }
234
+ elapsed = clamp(0, 1, iterationProgress) * resolvedDuration;
235
+ }
236
+ /**
237
+ * If we're in negative time, set state as the initial keyframe.
238
+ * This prevents delay: x, duration: 0 animations from finishing
239
+ * instantly.
240
+ */
241
+ const state = isInDelayPhase
242
+ ? { done: false, value: keyframes[0] }
243
+ : frameGenerator.next(elapsed);
244
+ if (mapPercentToKeyframes) {
245
+ state.value = mapPercentToKeyframes(state.value);
246
+ }
247
+ let { done } = state;
248
+ if (!isInDelayPhase && calculatedDuration !== null) {
249
+ done =
250
+ this.speed >= 0
251
+ ? this.currentTime >= totalDuration
252
+ : this.currentTime <= 0;
253
+ }
254
+ const isAnimationFinished = this.holdTime === null &&
255
+ (this.state === "finished" || (this.state === "running" && done));
256
+ if (isAnimationFinished && finalKeyframe !== undefined) {
257
+ state.value = getFinalKeyframe(keyframes, this.options, finalKeyframe);
258
+ }
259
+ if (onUpdate) {
260
+ onUpdate(state.value);
261
+ }
262
+ if (isAnimationFinished) {
263
+ this.finish();
264
+ }
265
+ return state;
266
+ }
267
+ get duration() {
268
+ const { resolved } = this;
269
+ return resolved ? millisecondsToSeconds(resolved.calculatedDuration) : 0;
270
+ }
271
+ get time() {
272
+ return millisecondsToSeconds(this.currentTime);
273
+ }
274
+ set time(newTime) {
275
+ newTime = secondsToMilliseconds(newTime);
276
+ this.currentTime = newTime;
277
+ if (this.holdTime !== null || this.speed === 0) {
278
+ this.holdTime = newTime;
279
+ }
280
+ else if (this.driver) {
281
+ this.startTime = this.driver.now() - newTime / this.speed;
282
+ }
283
+ }
284
+ get speed() {
285
+ return this.playbackSpeed;
286
+ }
287
+ set speed(newSpeed) {
288
+ const hasChanged = this.playbackSpeed !== newSpeed;
289
+ this.playbackSpeed = newSpeed;
290
+ if (hasChanged) {
291
+ this.time = millisecondsToSeconds(this.currentTime);
292
+ }
293
+ }
294
+ play() {
295
+ if (!this.resolver.isScheduled) {
296
+ this.resolver.resume();
297
+ }
298
+ if (!this._resolved) {
299
+ this.pendingPlayState = "running";
300
+ return;
301
+ }
302
+ if (this.isStopped)
303
+ return;
304
+ const { driver = frameloopDriver, onPlay, startTime } = this.options;
305
+ if (!this.driver) {
306
+ this.driver = driver((timestamp) => this.tick(timestamp));
307
+ }
308
+ onPlay && onPlay();
309
+ const now = this.driver.now();
310
+ if (this.holdTime !== null) {
311
+ this.startTime = now - this.holdTime;
312
+ }
313
+ else if (!this.startTime) {
314
+ this.startTime = startTime !== null && startTime !== void 0 ? startTime : this.calcStartTime();
315
+ }
316
+ else if (this.state === "finished") {
317
+ this.startTime = now;
318
+ }
319
+ if (this.state === "finished") {
320
+ this.updateFinishedPromise();
321
+ }
322
+ this.cancelTime = this.startTime;
323
+ this.holdTime = null;
324
+ /**
325
+ * Set playState to running only after we've used it in
326
+ * the previous logic.
327
+ */
328
+ this.state = "running";
329
+ this.driver.start();
330
+ }
331
+ pause() {
332
+ var _a;
333
+ if (!this._resolved) {
334
+ this.pendingPlayState = "paused";
335
+ return;
336
+ }
337
+ this.state = "paused";
338
+ this.holdTime = (_a = this.currentTime) !== null && _a !== void 0 ? _a : 0;
339
+ }
340
+ complete() {
341
+ if (this.state !== "running") {
342
+ this.play();
343
+ }
344
+ this.pendingPlayState = this.state = "finished";
345
+ this.holdTime = null;
346
+ }
347
+ finish() {
348
+ this.teardown();
349
+ this.state = "finished";
350
+ const { onComplete } = this.options;
351
+ onComplete && onComplete();
352
+ }
353
+ cancel() {
354
+ if (this.cancelTime !== null) {
355
+ this.tick(this.cancelTime);
356
+ }
357
+ this.teardown();
358
+ this.updateFinishedPromise();
359
+ }
360
+ teardown() {
361
+ this.state = "idle";
362
+ this.stopDriver();
363
+ this.resolveFinishedPromise();
364
+ this.updateFinishedPromise();
365
+ this.startTime = this.cancelTime = null;
366
+ this.resolver.cancel();
367
+ }
368
+ stopDriver() {
369
+ if (!this.driver)
370
+ return;
371
+ this.driver.stop();
372
+ this.driver = undefined;
373
+ }
374
+ sample(time) {
375
+ this.startTime = 0;
376
+ return this.tick(time, true);
377
+ }
378
+ }
379
+ // Legacy interface
380
+ function animateValue(options) {
381
+ return new MainThreadAnimation(options);
382
+ }
383
+
384
+ export { MainThreadAnimation, animateValue };
@@ -0,0 +1,17 @@
1
+ import { time } from '../../../frameloop/sync-time.mjs';
2
+ import { frame, cancelFrame, frameData } from '../../../frameloop/frame.mjs';
3
+
4
+ const frameloopDriver = (update) => {
5
+ const passTimestamp = ({ timestamp }) => update(timestamp);
6
+ return {
7
+ start: () => frame.update(passTimestamp, true),
8
+ stop: () => cancelFrame(passTimestamp),
9
+ /**
10
+ * If we're processing this frame we can use the
11
+ * framelocked timestamp to keep things in sync.
12
+ */
13
+ now: () => (frameData.isProcessing ? frameData.timestamp : time.now()),
14
+ };
15
+ };
16
+
17
+ export { frameloopDriver };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * A list of values that can be hardware-accelerated.
3
+ */
4
+ const acceleratedValues = new Set([
5
+ "opacity",
6
+ "clipPath",
7
+ "filter",
8
+ "transform",
9
+ // TODO: Can be accelerated but currently disabled until https://issues.chromium.org/issues/41491098 is resolved
10
+ // or until we implement support for linear() easing.
11
+ // "background-color"
12
+ ]);
13
+
14
+ export { acceleratedValues };
@@ -0,0 +1,42 @@
1
+ import { warning } from '../../../utils/errors.mjs';
2
+ import { isGenerator } from '../../generators/utils/is-generator.mjs';
3
+ import { isAnimatable } from '../../utils/is-animatable.mjs';
4
+
5
+ function hasKeyframesChanged(keyframes) {
6
+ const current = keyframes[0];
7
+ if (keyframes.length === 1)
8
+ return true;
9
+ for (let i = 0; i < keyframes.length; i++) {
10
+ if (keyframes[i] !== current)
11
+ return true;
12
+ }
13
+ }
14
+ function canAnimate(keyframes, name, type, velocity) {
15
+ /**
16
+ * Check if we're able to animate between the start and end keyframes,
17
+ * and throw a warning if we're attempting to animate between one that's
18
+ * animatable and another that isn't.
19
+ */
20
+ const originKeyframe = keyframes[0];
21
+ if (originKeyframe === null)
22
+ return false;
23
+ /**
24
+ * These aren't traditionally animatable but we do support them.
25
+ * In future we could look into making this more generic or replacing
26
+ * this function with mix() === mixImmediate
27
+ */
28
+ if (name === "display" || name === "visibility")
29
+ return true;
30
+ const targetKeyframe = keyframes[keyframes.length - 1];
31
+ const isOriginAnimatable = isAnimatable(originKeyframe, name);
32
+ const isTargetAnimatable = isAnimatable(targetKeyframe, name);
33
+ warning(isOriginAnimatable === isTargetAnimatable, `You are trying to animate ${name} from "${originKeyframe}" to "${targetKeyframe}". ${originKeyframe} is not an animatable value - to enable this animation set ${originKeyframe} to a value animatable to ${targetKeyframe} via the \`style\` property.`);
34
+ // Always skip if any of these are true
35
+ if (!isOriginAnimatable || !isTargetAnimatable) {
36
+ return false;
37
+ }
38
+ return (hasKeyframesChanged(keyframes) ||
39
+ ((type === "spring" || isGenerator(type)) && velocity));
40
+ }
41
+
42
+ export { canAnimate };
@@ -0,0 +1,169 @@
1
+ import { startWaapiAnimation } from './index.mjs';
2
+ import { createGeneratorEasing } from '../../../easing/utils/create-generator-easing.mjs';
3
+ import { browserNumberValueTypes } from '../../../render/dom/value-types/number-browser.mjs';
4
+ import { invariant } from '../../../utils/errors.mjs';
5
+ import { noop } from '../../../utils/noop.mjs';
6
+ import { secondsToMilliseconds, millisecondsToSeconds } from '../../../utils/time-conversion.mjs';
7
+ import { isGenerator } from '../../generators/utils/is-generator.mjs';
8
+ import { attachTimeline } from './utils/attach-timeline.mjs';
9
+ import { getFinalKeyframe } from './utils/get-final-keyframe.mjs';
10
+ import { setCSSVar, setStyle } from './utils/style.mjs';
11
+ import { supportsLinearEasing } from './utils/supports-linear-easing.mjs';
12
+ import { supportsPartialKeyframes } from './utils/supports-partial-keyframes.mjs';
13
+ import { supportsWaapi } from './utils/supports-waapi.mjs';
14
+
15
+ const state = new WeakMap();
16
+ function hydrateKeyframes(valueName, keyframes, read) {
17
+ for (let i = 0; i < keyframes.length; i++) {
18
+ if (keyframes[i] === null) {
19
+ keyframes[i] = i === 0 ? read() : keyframes[i - 1];
20
+ }
21
+ if (typeof keyframes[i] === "number" &&
22
+ browserNumberValueTypes[valueName]) {
23
+ keyframes[i] = browserNumberValueTypes[valueName].transform(keyframes[i]);
24
+ }
25
+ }
26
+ if (!supportsPartialKeyframes() && keyframes.length < 2) {
27
+ keyframes.unshift(read());
28
+ }
29
+ }
30
+ const defaultEasing = "easeOut";
31
+ function getElementAnimationState(element) {
32
+ const animationState = state.get(element) || new Map();
33
+ state.set(element, animationState);
34
+ return state.get(element);
35
+ }
36
+ class NativeAnimation {
37
+ constructor(element, valueName, valueKeyframes, options) {
38
+ const isCSSVar = valueName.startsWith("--");
39
+ this.setValue = isCSSVar ? setCSSVar : setStyle;
40
+ this.options = options;
41
+ this.updateFinishedPromise();
42
+ invariant(typeof options.type !== "string", `animateMini doesn't support "type" as a string. Did you mean to import { spring } from "framer-motion"?`);
43
+ const existingAnimation = getElementAnimationState(element).get(valueName);
44
+ existingAnimation && existingAnimation.stop();
45
+ const readInitialKeyframe = () => {
46
+ return valueName.startsWith("--")
47
+ ? element.style.getPropertyValue(valueName)
48
+ : window.getComputedStyle(element)[valueName];
49
+ };
50
+ if (!Array.isArray(valueKeyframes)) {
51
+ valueKeyframes = [valueKeyframes];
52
+ }
53
+ hydrateKeyframes(valueName, valueKeyframes, readInitialKeyframe);
54
+ if (isGenerator(options.type)) {
55
+ const generatorOptions = createGeneratorEasing(options, 100, options.type);
56
+ options.ease = supportsLinearEasing()
57
+ ? generatorOptions.ease
58
+ : defaultEasing;
59
+ options.duration = secondsToMilliseconds(generatorOptions.duration);
60
+ options.type = "keyframes";
61
+ }
62
+ else {
63
+ options.ease = options.ease || defaultEasing;
64
+ }
65
+ this.removeAnimation = () => { var _a; return (_a = state.get(element)) === null || _a === void 0 ? void 0 : _a.delete(valueName); };
66
+ const onFinish = () => {
67
+ this.setValue(element, valueName, getFinalKeyframe(valueKeyframes, this.options));
68
+ this.cancel();
69
+ this.resolveFinishedPromise();
70
+ };
71
+ if (!supportsWaapi()) {
72
+ onFinish();
73
+ }
74
+ else {
75
+ this.animation = startWaapiAnimation(element, valueName, valueKeyframes, options);
76
+ if (options.autoplay === false) {
77
+ this.animation.pause();
78
+ }
79
+ this.animation.onfinish = onFinish;
80
+ if (this.pendingTimeline) {
81
+ attachTimeline(this.animation, this.pendingTimeline);
82
+ }
83
+ getElementAnimationState(element).set(valueName, this);
84
+ }
85
+ }
86
+ get duration() {
87
+ return millisecondsToSeconds(this.options.duration || 300);
88
+ }
89
+ get time() {
90
+ var _a;
91
+ if (this.animation) {
92
+ return millisecondsToSeconds(((_a = this.animation) === null || _a === void 0 ? void 0 : _a.currentTime) || 0);
93
+ }
94
+ return 0;
95
+ }
96
+ set time(newTime) {
97
+ if (this.animation) {
98
+ this.animation.currentTime = secondsToMilliseconds(newTime);
99
+ }
100
+ }
101
+ get speed() {
102
+ return this.animation ? this.animation.playbackRate : 1;
103
+ }
104
+ set speed(newSpeed) {
105
+ if (this.animation) {
106
+ this.animation.playbackRate = newSpeed;
107
+ }
108
+ }
109
+ get state() {
110
+ return this.animation ? this.animation.playState : "finished";
111
+ }
112
+ get startTime() {
113
+ return this.animation ? this.animation.startTime : null;
114
+ }
115
+ play() {
116
+ if (this.state === "finished") {
117
+ this.updateFinishedPromise();
118
+ }
119
+ this.animation && this.animation.play();
120
+ }
121
+ pause() {
122
+ this.animation && this.animation.pause();
123
+ }
124
+ stop() {
125
+ if (!this.animation ||
126
+ this.state === "idle" ||
127
+ this.state === "finished") {
128
+ return;
129
+ }
130
+ if (this.animation.commitStyles) {
131
+ this.animation.commitStyles();
132
+ }
133
+ this.cancel();
134
+ }
135
+ complete() {
136
+ this.animation && this.animation.finish();
137
+ }
138
+ cancel() {
139
+ this.removeAnimation();
140
+ try {
141
+ this.animation && this.animation.cancel();
142
+ }
143
+ catch (e) { }
144
+ }
145
+ /**
146
+ * Allows the returned animation to be awaited or promise-chained. Currently
147
+ * resolves when the animation finishes at all but in a future update could/should
148
+ * reject if its cancels.
149
+ */
150
+ then(resolve, reject) {
151
+ return this.currentFinishedPromise.then(resolve, reject);
152
+ }
153
+ updateFinishedPromise() {
154
+ this.currentFinishedPromise = new Promise((resolve) => {
155
+ this.resolveFinishedPromise = resolve;
156
+ });
157
+ }
158
+ attachTimeline(timeline) {
159
+ if (!this.animation) {
160
+ this.pendingTimeline = timeline;
161
+ }
162
+ else {
163
+ attachTimeline(this.animation, timeline);
164
+ }
165
+ return noop;
166
+ }
167
+ }
168
+
169
+ export { NativeAnimation };
@@ -0,0 +1,36 @@
1
+ import { resolveElements } from '../../../render/dom/utils/resolve-element.mjs';
2
+ import { invariant } from '../../../utils/errors.mjs';
3
+ import { secondsToMilliseconds } from '../../../utils/time-conversion.mjs';
4
+ import { getValueTransition } from '../../utils/get-value-transition.mjs';
5
+ import { NativeAnimation } from './NativeAnimation.mjs';
6
+
7
+ function animateElements(elementOrSelector, keyframes, options, scope) {
8
+ const elements = resolveElements(elementOrSelector, scope);
9
+ const numElements = elements.length;
10
+ invariant(Boolean(numElements), "No valid element provided.");
11
+ const animations = [];
12
+ for (let i = 0; i < numElements; i++) {
13
+ const element = elements[i];
14
+ const elementTransition = { ...options };
15
+ /**
16
+ * Resolve stagger function if provided.
17
+ */
18
+ if (typeof elementTransition.delay === "function") {
19
+ elementTransition.delay = elementTransition.delay(i, numElements);
20
+ }
21
+ for (const valueName in keyframes) {
22
+ const valueKeyframes = keyframes[valueName];
23
+ const valueOptions = {
24
+ ...getValueTransition(options, valueName),
25
+ };
26
+ valueOptions.duration = valueOptions.duration
27
+ ? secondsToMilliseconds(valueOptions.duration)
28
+ : valueOptions.duration;
29
+ valueOptions.delay = secondsToMilliseconds(valueOptions.delay || 0);
30
+ animations.push(new NativeAnimation(element, valueName, valueKeyframes, valueOptions));
31
+ }
32
+ }
33
+ return animations;
34
+ }
35
+
36
+ export { animateElements };
@@ -0,0 +1,12 @@
1
+ import { GroupPlaybackControls } from '../../GroupPlaybackControls.mjs';
2
+ import { animateElements } from './animate-elements.mjs';
3
+
4
+ const createScopedWaapiAnimate = (scope) => {
5
+ function scopedAnimate(elementOrSelector, keyframes, options) {
6
+ return new GroupPlaybackControls(animateElements(elementOrSelector, keyframes, options, scope));
7
+ }
8
+ return scopedAnimate;
9
+ };
10
+ const animateMini = /*@__PURE__*/ createScopedWaapiAnimate();
11
+
12
+ export { animateMini, createScopedWaapiAnimate };