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,44 @@
1
+ import { isBezierDefinition } from '../../../easing/utils/is-bezier-definition.mjs';
2
+ import { generateLinearEasing } from './utils/linear.mjs';
3
+ import { supportsLinearEasing } from './utils/supports-linear-easing.mjs';
4
+
5
+ function isWaapiSupportedEasing(easing) {
6
+ return Boolean((typeof easing === "function" && supportsLinearEasing()) ||
7
+ !easing ||
8
+ (typeof easing === "string" &&
9
+ (easing in supportedWaapiEasing || supportsLinearEasing())) ||
10
+ isBezierDefinition(easing) ||
11
+ (Array.isArray(easing) && easing.every(isWaapiSupportedEasing)));
12
+ }
13
+ const cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;
14
+ const supportedWaapiEasing = {
15
+ linear: "linear",
16
+ ease: "ease",
17
+ easeIn: "ease-in",
18
+ easeOut: "ease-out",
19
+ easeInOut: "ease-in-out",
20
+ circIn: /*@__PURE__*/ cubicBezierAsString([0, 0.65, 0.55, 1]),
21
+ circOut: /*@__PURE__*/ cubicBezierAsString([0.55, 0, 1, 0.45]),
22
+ backIn: /*@__PURE__*/ cubicBezierAsString([0.31, 0.01, 0.66, -0.59]),
23
+ backOut: /*@__PURE__*/ cubicBezierAsString([0.33, 1.53, 0.69, 0.99]),
24
+ };
25
+ function mapEasingToNativeEasing(easing, duration) {
26
+ if (!easing) {
27
+ return undefined;
28
+ }
29
+ else if (typeof easing === "function" && supportsLinearEasing()) {
30
+ return generateLinearEasing(easing, duration);
31
+ }
32
+ else if (isBezierDefinition(easing)) {
33
+ return cubicBezierAsString(easing);
34
+ }
35
+ else if (Array.isArray(easing)) {
36
+ return easing.map((segmentEasing) => mapEasingToNativeEasing(segmentEasing, duration) ||
37
+ supportedWaapiEasing.easeOut);
38
+ }
39
+ else {
40
+ return supportedWaapiEasing[easing];
41
+ }
42
+ }
43
+
44
+ export { cubicBezierAsString, isWaapiSupportedEasing, mapEasingToNativeEasing, supportedWaapiEasing };
@@ -0,0 +1,23 @@
1
+ import { mapEasingToNativeEasing } from './easing.mjs';
2
+
3
+ function startWaapiAnimation(element, valueName, keyframes, { delay = 0, duration = 300, repeat = 0, repeatType = "loop", ease = "easeInOut", times, } = {}) {
4
+ const keyframeOptions = { [valueName]: keyframes };
5
+ if (times)
6
+ keyframeOptions.offset = times;
7
+ const easing = mapEasingToNativeEasing(ease, duration);
8
+ /**
9
+ * If this is an easing array, apply to keyframes, not animation as a whole
10
+ */
11
+ if (Array.isArray(easing))
12
+ keyframeOptions.easing = easing;
13
+ return element.animate(keyframeOptions, {
14
+ delay,
15
+ duration,
16
+ easing: !Array.isArray(easing) ? easing : "linear",
17
+ fill: "both",
18
+ iterations: repeat + 1,
19
+ direction: repeatType === "reverse" ? "alternate" : "normal",
20
+ });
21
+ }
22
+
23
+ export { startWaapiAnimation };
@@ -0,0 +1,6 @@
1
+ function attachTimeline(animation, timeline) {
2
+ animation.timeline = timeline;
3
+ animation.onfinish = null;
4
+ }
5
+
6
+ export { attachTimeline };
@@ -0,0 +1,12 @@
1
+ const isNotNull = (value) => value !== null;
2
+ function getFinalKeyframe(keyframes, { repeat, repeatType = "loop" }, finalKeyframe) {
3
+ const resolvedKeyframes = keyframes.filter(isNotNull);
4
+ const index = repeat && repeatType !== "loop" && repeat % 2 === 1
5
+ ? 0
6
+ : resolvedKeyframes.length - 1;
7
+ return !index || finalKeyframe === undefined
8
+ ? resolvedKeyframes[index]
9
+ : finalKeyframe;
10
+ }
11
+
12
+ export { getFinalKeyframe };
@@ -0,0 +1,15 @@
1
+ import { progress } from '../../../../utils/progress.mjs';
2
+
3
+ // Create a linear easing point for every 10 ms
4
+ const resolution = 10;
5
+ const generateLinearEasing = (easing, duration // as milliseconds
6
+ ) => {
7
+ let points = "";
8
+ const numPoints = Math.max(Math.round(duration / resolution), 2);
9
+ for (let i = 0; i < numPoints; i++) {
10
+ points += easing(progress(0, numPoints - 1, i)) + ", ";
11
+ }
12
+ return `linear(${points.substring(0, points.length - 2)})`;
13
+ };
14
+
15
+ export { generateLinearEasing };
@@ -0,0 +1,9 @@
1
+ import { memo } from '../../../../utils/memo.mjs';
2
+ import { supportsFlags } from './supports-flags.mjs';
3
+
4
+ function memoSupports(callback, supportsFlag) {
5
+ const memoized = memo(callback);
6
+ return () => { var _a; return (_a = supportsFlags[supportsFlag]) !== null && _a !== void 0 ? _a : memoized(); };
7
+ }
8
+
9
+ export { memoSupports };
@@ -0,0 +1,8 @@
1
+ function setCSSVar(element, name, value) {
2
+ element.style.setProperty(`--${name}`, value);
3
+ }
4
+ function setStyle(element, name, value) {
5
+ element.style[name] = value;
6
+ }
7
+
8
+ export { setCSSVar, setStyle };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Add the ability for test suites to manually set support flags
3
+ * to better test more environments.
4
+ */
5
+ const supportsFlags = {
6
+ linearEasing: undefined,
7
+ };
8
+
9
+ export { supportsFlags };
@@ -0,0 +1,15 @@
1
+ import { memoSupports } from './memo-supports.mjs';
2
+
3
+ const supportsLinearEasing = /*@__PURE__*/ memoSupports(() => {
4
+ try {
5
+ document
6
+ .createElement("div")
7
+ .animate({ opacity: 0 }, { easing: "linear(0, 1)" });
8
+ }
9
+ catch (e) {
10
+ return false;
11
+ }
12
+ return true;
13
+ }, "linearEasing");
14
+
15
+ export { supportsLinearEasing };
@@ -0,0 +1,13 @@
1
+ import { memo } from '../../../../utils/memo.mjs';
2
+
3
+ const supportsPartialKeyframes = /*@__PURE__*/ memo(() => {
4
+ try {
5
+ document.createElement("div").animate({ opacity: [1] });
6
+ }
7
+ catch (e) {
8
+ return false;
9
+ }
10
+ return true;
11
+ });
12
+
13
+ export { supportsPartialKeyframes };
@@ -0,0 +1,5 @@
1
+ import { memo } from '../../../../utils/memo.mjs';
2
+
3
+ const supportsWaapi = /*@__PURE__*/ memo(() => Object.hasOwnProperty.call(Element.prototype, "animate"));
4
+
5
+ export { supportsWaapi };
@@ -0,0 +1,87 @@
1
+ import { spring } from './spring/index.mjs';
2
+ import { calcGeneratorVelocity } from './utils/velocity.mjs';
3
+
4
+ function inertia({ keyframes, velocity = 0.0, power = 0.8, timeConstant = 325, bounceDamping = 10, bounceStiffness = 500, modifyTarget, min, max, restDelta = 0.5, restSpeed, }) {
5
+ const origin = keyframes[0];
6
+ const state = {
7
+ done: false,
8
+ value: origin,
9
+ };
10
+ const isOutOfBounds = (v) => (min !== undefined && v < min) || (max !== undefined && v > max);
11
+ const nearestBoundary = (v) => {
12
+ if (min === undefined)
13
+ return max;
14
+ if (max === undefined)
15
+ return min;
16
+ return Math.abs(min - v) < Math.abs(max - v) ? min : max;
17
+ };
18
+ let amplitude = power * velocity;
19
+ const ideal = origin + amplitude;
20
+ const target = modifyTarget === undefined ? ideal : modifyTarget(ideal);
21
+ /**
22
+ * If the target has changed we need to re-calculate the amplitude, otherwise
23
+ * the animation will start from the wrong position.
24
+ */
25
+ if (target !== ideal)
26
+ amplitude = target - origin;
27
+ const calcDelta = (t) => -amplitude * Math.exp(-t / timeConstant);
28
+ const calcLatest = (t) => target + calcDelta(t);
29
+ const applyFriction = (t) => {
30
+ const delta = calcDelta(t);
31
+ const latest = calcLatest(t);
32
+ state.done = Math.abs(delta) <= restDelta;
33
+ state.value = state.done ? target : latest;
34
+ };
35
+ /**
36
+ * Ideally this would resolve for t in a stateless way, we could
37
+ * do that by always precalculating the animation but as we know
38
+ * this will be done anyway we can assume that spring will
39
+ * be discovered during that.
40
+ */
41
+ let timeReachedBoundary;
42
+ let spring$1;
43
+ const checkCatchBoundary = (t) => {
44
+ if (!isOutOfBounds(state.value))
45
+ return;
46
+ timeReachedBoundary = t;
47
+ spring$1 = spring({
48
+ keyframes: [state.value, nearestBoundary(state.value)],
49
+ velocity: calcGeneratorVelocity(calcLatest, t, state.value), // TODO: This should be passing * 1000
50
+ damping: bounceDamping,
51
+ stiffness: bounceStiffness,
52
+ restDelta,
53
+ restSpeed,
54
+ });
55
+ };
56
+ checkCatchBoundary(0);
57
+ return {
58
+ calculatedDuration: null,
59
+ next: (t) => {
60
+ /**
61
+ * We need to resolve the friction to figure out if we need a
62
+ * spring but we don't want to do this twice per frame. So here
63
+ * we flag if we updated for this frame and later if we did
64
+ * we can skip doing it again.
65
+ */
66
+ let hasUpdatedFrame = false;
67
+ if (!spring$1 && timeReachedBoundary === undefined) {
68
+ hasUpdatedFrame = true;
69
+ applyFriction(t);
70
+ checkCatchBoundary(t);
71
+ }
72
+ /**
73
+ * If we have a spring and the provided t is beyond the moment the friction
74
+ * animation crossed the min/max boundary, use the spring.
75
+ */
76
+ if (timeReachedBoundary !== undefined && t >= timeReachedBoundary) {
77
+ return spring$1.next(t - timeReachedBoundary);
78
+ }
79
+ else {
80
+ !hasUpdatedFrame && applyFriction(t);
81
+ return state;
82
+ }
83
+ },
84
+ };
85
+ }
86
+
87
+ export { inertia };
@@ -0,0 +1,51 @@
1
+ import { easeInOut } from '../../easing/ease.mjs';
2
+ import { isEasingArray } from '../../easing/utils/is-easing-array.mjs';
3
+ import { easingDefinitionToFunction } from '../../easing/utils/map.mjs';
4
+ import { interpolate } from '../../utils/interpolate.mjs';
5
+ import { defaultOffset } from '../../utils/offsets/default.mjs';
6
+ import { convertOffsetToTimes } from '../../utils/offsets/time.mjs';
7
+
8
+ function defaultEasing(values, easing) {
9
+ return values.map(() => easing || easeInOut).splice(0, values.length - 1);
10
+ }
11
+ function keyframes({ duration = 300, keyframes: keyframeValues, times, ease = "easeInOut", }) {
12
+ /**
13
+ * Easing functions can be externally defined as strings. Here we convert them
14
+ * into actual functions.
15
+ */
16
+ const easingFunctions = isEasingArray(ease)
17
+ ? ease.map(easingDefinitionToFunction)
18
+ : easingDefinitionToFunction(ease);
19
+ /**
20
+ * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator
21
+ * to reduce GC during animation.
22
+ */
23
+ const state = {
24
+ done: false,
25
+ value: keyframeValues[0],
26
+ };
27
+ /**
28
+ * Create a times array based on the provided 0-1 offsets
29
+ */
30
+ const absoluteTimes = convertOffsetToTimes(
31
+ // Only use the provided offsets if they're the correct length
32
+ // TODO Maybe we should warn here if there's a length mismatch
33
+ times && times.length === keyframeValues.length
34
+ ? times
35
+ : defaultOffset(keyframeValues), duration);
36
+ const mapTimeToKeyframe = interpolate(absoluteTimes, keyframeValues, {
37
+ ease: Array.isArray(easingFunctions)
38
+ ? easingFunctions
39
+ : defaultEasing(keyframeValues, easingFunctions),
40
+ });
41
+ return {
42
+ calculatedDuration: duration,
43
+ next: (t) => {
44
+ state.value = mapTimeToKeyframe(t);
45
+ state.done = t >= duration;
46
+ return state;
47
+ },
48
+ };
49
+ }
50
+
51
+ export { defaultEasing, keyframes };
@@ -0,0 +1,89 @@
1
+ import { warning } from '../../../utils/errors.mjs';
2
+ import { clamp } from '../../../utils/clamp.mjs';
3
+ import { secondsToMilliseconds, millisecondsToSeconds } from '../../../utils/time-conversion.mjs';
4
+
5
+ const safeMin = 0.001;
6
+ const minDuration = 0.01;
7
+ const maxDuration = 10.0;
8
+ const minDamping = 0.05;
9
+ const maxDamping = 1;
10
+ function findSpring({ duration = 800, bounce = 0.25, velocity = 0, mass = 1, }) {
11
+ let envelope;
12
+ let derivative;
13
+ warning(duration <= secondsToMilliseconds(maxDuration), "Spring duration must be 10 seconds or less");
14
+ let dampingRatio = 1 - bounce;
15
+ /**
16
+ * Restrict dampingRatio and duration to within acceptable ranges.
17
+ */
18
+ dampingRatio = clamp(minDamping, maxDamping, dampingRatio);
19
+ duration = clamp(minDuration, maxDuration, millisecondsToSeconds(duration));
20
+ if (dampingRatio < 1) {
21
+ /**
22
+ * Underdamped spring
23
+ */
24
+ envelope = (undampedFreq) => {
25
+ const exponentialDecay = undampedFreq * dampingRatio;
26
+ const delta = exponentialDecay * duration;
27
+ const a = exponentialDecay - velocity;
28
+ const b = calcAngularFreq(undampedFreq, dampingRatio);
29
+ const c = Math.exp(-delta);
30
+ return safeMin - (a / b) * c;
31
+ };
32
+ derivative = (undampedFreq) => {
33
+ const exponentialDecay = undampedFreq * dampingRatio;
34
+ const delta = exponentialDecay * duration;
35
+ const d = delta * velocity + velocity;
36
+ const e = Math.pow(dampingRatio, 2) * Math.pow(undampedFreq, 2) * duration;
37
+ const f = Math.exp(-delta);
38
+ const g = calcAngularFreq(Math.pow(undampedFreq, 2), dampingRatio);
39
+ const factor = -envelope(undampedFreq) + safeMin > 0 ? -1 : 1;
40
+ return (factor * ((d - e) * f)) / g;
41
+ };
42
+ }
43
+ else {
44
+ /**
45
+ * Critically-damped spring
46
+ */
47
+ envelope = (undampedFreq) => {
48
+ const a = Math.exp(-undampedFreq * duration);
49
+ const b = (undampedFreq - velocity) * duration + 1;
50
+ return -safeMin + a * b;
51
+ };
52
+ derivative = (undampedFreq) => {
53
+ const a = Math.exp(-undampedFreq * duration);
54
+ const b = (velocity - undampedFreq) * (duration * duration);
55
+ return a * b;
56
+ };
57
+ }
58
+ const initialGuess = 5 / duration;
59
+ const undampedFreq = approximateRoot(envelope, derivative, initialGuess);
60
+ duration = secondsToMilliseconds(duration);
61
+ if (isNaN(undampedFreq)) {
62
+ return {
63
+ stiffness: 100,
64
+ damping: 10,
65
+ duration,
66
+ };
67
+ }
68
+ else {
69
+ const stiffness = Math.pow(undampedFreq, 2) * mass;
70
+ return {
71
+ stiffness,
72
+ damping: dampingRatio * 2 * Math.sqrt(mass * stiffness),
73
+ duration,
74
+ };
75
+ }
76
+ }
77
+ const rootIterations = 12;
78
+ function approximateRoot(envelope, derivative, initialGuess) {
79
+ let result = initialGuess;
80
+ for (let i = 1; i < rootIterations; i++) {
81
+ result = result - envelope(result) / derivative(result);
82
+ }
83
+ return result;
84
+ }
85
+ function calcAngularFreq(undampedFreq, dampingRatio) {
86
+ return undampedFreq * Math.sqrt(1 - dampingRatio * dampingRatio);
87
+ }
88
+
89
+ export { calcAngularFreq, findSpring, maxDamping, maxDuration, minDamping, minDuration };
@@ -0,0 +1,129 @@
1
+ import { millisecondsToSeconds, secondsToMilliseconds } from '../../../utils/time-conversion.mjs';
2
+ import { calcGeneratorVelocity } from '../utils/velocity.mjs';
3
+ import { findSpring, calcAngularFreq } from './find.mjs';
4
+
5
+ const durationKeys = ["duration", "bounce"];
6
+ const physicsKeys = ["stiffness", "damping", "mass"];
7
+ function isSpringType(options, keys) {
8
+ return keys.some((key) => options[key] !== undefined);
9
+ }
10
+ function getSpringOptions(options) {
11
+ let springOptions = {
12
+ velocity: 0.0,
13
+ stiffness: 100,
14
+ damping: 10,
15
+ mass: 1.0,
16
+ isResolvedFromDuration: false,
17
+ ...options,
18
+ };
19
+ // stiffness/damping/mass overrides duration/bounce
20
+ if (!isSpringType(options, physicsKeys) &&
21
+ isSpringType(options, durationKeys)) {
22
+ const derived = findSpring(options);
23
+ springOptions = {
24
+ ...springOptions,
25
+ ...derived,
26
+ mass: 1.0,
27
+ };
28
+ springOptions.isResolvedFromDuration = true;
29
+ }
30
+ return springOptions;
31
+ }
32
+ function spring({ keyframes, restDelta, restSpeed, ...options }) {
33
+ const origin = keyframes[0];
34
+ const target = keyframes[keyframes.length - 1];
35
+ /**
36
+ * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator
37
+ * to reduce GC during animation.
38
+ */
39
+ const state = { done: false, value: origin };
40
+ const { stiffness, damping, mass, duration, velocity, isResolvedFromDuration, } = getSpringOptions({
41
+ ...options,
42
+ velocity: -millisecondsToSeconds(options.velocity || 0),
43
+ });
44
+ const initialVelocity = velocity || 0.0;
45
+ const dampingRatio = damping / (2 * Math.sqrt(stiffness * mass));
46
+ const initialDelta = target - origin;
47
+ const undampedAngularFreq = millisecondsToSeconds(Math.sqrt(stiffness / mass));
48
+ /**
49
+ * If we're working on a granular scale, use smaller defaults for determining
50
+ * when the spring is finished.
51
+ *
52
+ * These defaults have been selected emprically based on what strikes a good
53
+ * ratio between feeling good and finishing as soon as changes are imperceptible.
54
+ */
55
+ const isGranularScale = Math.abs(initialDelta) < 5;
56
+ restSpeed || (restSpeed = isGranularScale ? 0.01 : 2);
57
+ restDelta || (restDelta = isGranularScale ? 0.005 : 0.5);
58
+ let resolveSpring;
59
+ if (dampingRatio < 1) {
60
+ const angularFreq = calcAngularFreq(undampedAngularFreq, dampingRatio);
61
+ // Underdamped spring
62
+ resolveSpring = (t) => {
63
+ const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);
64
+ return (target -
65
+ envelope *
66
+ (((initialVelocity +
67
+ dampingRatio * undampedAngularFreq * initialDelta) /
68
+ angularFreq) *
69
+ Math.sin(angularFreq * t) +
70
+ initialDelta * Math.cos(angularFreq * t)));
71
+ };
72
+ }
73
+ else if (dampingRatio === 1) {
74
+ // Critically damped spring
75
+ resolveSpring = (t) => target -
76
+ Math.exp(-undampedAngularFreq * t) *
77
+ (initialDelta +
78
+ (initialVelocity + undampedAngularFreq * initialDelta) * t);
79
+ }
80
+ else {
81
+ // Overdamped spring
82
+ const dampedAngularFreq = undampedAngularFreq * Math.sqrt(dampingRatio * dampingRatio - 1);
83
+ resolveSpring = (t) => {
84
+ const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);
85
+ // When performing sinh or cosh values can hit Infinity so we cap them here
86
+ const freqForT = Math.min(dampedAngularFreq * t, 300);
87
+ return (target -
88
+ (envelope *
89
+ ((initialVelocity +
90
+ dampingRatio * undampedAngularFreq * initialDelta) *
91
+ Math.sinh(freqForT) +
92
+ dampedAngularFreq *
93
+ initialDelta *
94
+ Math.cosh(freqForT))) /
95
+ dampedAngularFreq);
96
+ };
97
+ }
98
+ return {
99
+ calculatedDuration: isResolvedFromDuration ? duration || null : null,
100
+ next: (t) => {
101
+ const current = resolveSpring(t);
102
+ if (!isResolvedFromDuration) {
103
+ let currentVelocity = 0.0;
104
+ /**
105
+ * We only need to calculate velocity for under-damped springs
106
+ * as over- and critically-damped springs can't overshoot, so
107
+ * checking only for displacement is enough.
108
+ */
109
+ if (dampingRatio < 1) {
110
+ currentVelocity =
111
+ t === 0
112
+ ? secondsToMilliseconds(initialVelocity)
113
+ : calcGeneratorVelocity(resolveSpring, t, current);
114
+ }
115
+ const isBelowVelocityThreshold = Math.abs(currentVelocity) <= restSpeed;
116
+ const isBelowDisplacementThreshold = Math.abs(target - current) <= restDelta;
117
+ state.done =
118
+ isBelowVelocityThreshold && isBelowDisplacementThreshold;
119
+ }
120
+ else {
121
+ state.done = t >= duration;
122
+ }
123
+ state.value = state.done ? target : current;
124
+ return state;
125
+ },
126
+ };
127
+ }
128
+
129
+ export { spring };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Implement a practical max duration for keyframe generation
3
+ * to prevent infinite loops
4
+ */
5
+ const maxGeneratorDuration = 20000;
6
+ function calcGeneratorDuration(generator) {
7
+ let duration = 0;
8
+ const timeStep = 50;
9
+ let state = generator.next(duration);
10
+ while (!state.done && duration < maxGeneratorDuration) {
11
+ duration += timeStep;
12
+ state = generator.next(duration);
13
+ }
14
+ return duration >= maxGeneratorDuration ? Infinity : duration;
15
+ }
16
+
17
+ export { calcGeneratorDuration, maxGeneratorDuration };
@@ -0,0 +1,5 @@
1
+ function isGenerator(type) {
2
+ return typeof type === "function";
3
+ }
4
+
5
+ export { isGenerator };
@@ -0,0 +1,9 @@
1
+ import { velocityPerSecond } from '../../../utils/velocity-per-second.mjs';
2
+
3
+ const velocitySampleDuration = 5; // ms
4
+ function calcGeneratorVelocity(resolveValue, t, current) {
5
+ const prevT = Math.max(t - velocitySampleDuration, 0);
6
+ return velocityPerSecond(current - resolveValue(prevT), t - prevT);
7
+ }
8
+
9
+ export { calcGeneratorVelocity };
@@ -0,0 +1,80 @@
1
+ import { invariant } from '../../utils/errors.mjs';
2
+ import { setTarget } from '../../render/utils/setters.mjs';
3
+ import { animateVisualElement } from '../interfaces/visual-element.mjs';
4
+
5
+ function stopAnimation(visualElement) {
6
+ visualElement.values.forEach((value) => value.stop());
7
+ }
8
+ function setVariants(visualElement, variantLabels) {
9
+ const reversedLabels = [...variantLabels].reverse();
10
+ reversedLabels.forEach((key) => {
11
+ const variant = visualElement.getVariant(key);
12
+ variant && setTarget(visualElement, variant);
13
+ if (visualElement.variantChildren) {
14
+ visualElement.variantChildren.forEach((child) => {
15
+ setVariants(child, variantLabels);
16
+ });
17
+ }
18
+ });
19
+ }
20
+ function setValues(visualElement, definition) {
21
+ if (Array.isArray(definition)) {
22
+ return setVariants(visualElement, definition);
23
+ }
24
+ else if (typeof definition === "string") {
25
+ return setVariants(visualElement, [definition]);
26
+ }
27
+ else {
28
+ setTarget(visualElement, definition);
29
+ }
30
+ }
31
+ /**
32
+ * @public
33
+ */
34
+ function animationControls() {
35
+ /**
36
+ * Track whether the host component has mounted.
37
+ */
38
+ let hasMounted = false;
39
+ /**
40
+ * A collection of linked component animation controls.
41
+ */
42
+ const subscribers = new Set();
43
+ const controls = {
44
+ subscribe(visualElement) {
45
+ subscribers.add(visualElement);
46
+ return () => void subscribers.delete(visualElement);
47
+ },
48
+ start(definition, transitionOverride) {
49
+ invariant(hasMounted, "controls.start() should only be called after a component has mounted. Consider calling within a useEffect hook.");
50
+ const animations = [];
51
+ subscribers.forEach((visualElement) => {
52
+ animations.push(animateVisualElement(visualElement, definition, {
53
+ transitionOverride,
54
+ }));
55
+ });
56
+ return Promise.all(animations);
57
+ },
58
+ set(definition) {
59
+ invariant(hasMounted, "controls.set() should only be called after a component has mounted. Consider calling within a useEffect hook.");
60
+ return subscribers.forEach((visualElement) => {
61
+ setValues(visualElement, definition);
62
+ });
63
+ },
64
+ stop() {
65
+ subscribers.forEach((visualElement) => {
66
+ stopAnimation(visualElement);
67
+ });
68
+ },
69
+ mount() {
70
+ hasMounted = true;
71
+ return () => {
72
+ hasMounted = false;
73
+ controls.stop();
74
+ };
75
+ },
76
+ };
77
+ return controls;
78
+ }
79
+
80
+ export { animationControls, setValues };
@@ -0,0 +1,17 @@
1
+ import { useConstant } from '../../utils/use-constant.mjs';
2
+ import { useUnmountEffect } from '../../utils/use-unmount-effect.mjs';
3
+ import { createScopedWaapiAnimate } from '../animators/waapi/animate-style.mjs';
4
+
5
+ function useAnimateMini() {
6
+ const scope = useConstant(() => ({
7
+ current: null, // Will be hydrated by React
8
+ animations: [],
9
+ }));
10
+ const animate = useConstant(() => createScopedWaapiAnimate(scope));
11
+ useUnmountEffect(() => {
12
+ scope.animations.forEach((animation) => animation.stop());
13
+ });
14
+ return [scope, animate];
15
+ }
16
+
17
+ export { useAnimateMini };