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,14 @@
1
+ import { drag } from '../../motion/features/drag.mjs';
2
+ import { layout } from '../../motion/features/layout.mjs';
3
+ import { domAnimation } from './features-animation.mjs';
4
+
5
+ /**
6
+ * @public
7
+ */
8
+ const domMax = {
9
+ ...domAnimation,
10
+ ...drag,
11
+ ...layout,
12
+ };
13
+
14
+ export { domMax };
@@ -0,0 +1,12 @@
1
+ import { animations } from '../../motion/features/animations.mjs';
2
+ import { createDomVisualElement } from './create-visual-element.mjs';
3
+
4
+ /**
5
+ * @public
6
+ */
7
+ const domMin = {
8
+ renderer: createDomVisualElement,
9
+ ...animations,
10
+ };
11
+
12
+ export { domMin };
@@ -0,0 +1,64 @@
1
+ import { resolveElements } from '../utils/resolve-element.mjs';
2
+
3
+ const resizeHandlers = new WeakMap();
4
+ let observer;
5
+ function getElementSize(target, borderBoxSize) {
6
+ if (borderBoxSize) {
7
+ const { inlineSize, blockSize } = borderBoxSize[0];
8
+ return { width: inlineSize, height: blockSize };
9
+ }
10
+ else if (target instanceof SVGElement && "getBBox" in target) {
11
+ return target.getBBox();
12
+ }
13
+ else {
14
+ return {
15
+ width: target.offsetWidth,
16
+ height: target.offsetHeight,
17
+ };
18
+ }
19
+ }
20
+ function notifyTarget({ target, contentRect, borderBoxSize, }) {
21
+ var _a;
22
+ (_a = resizeHandlers.get(target)) === null || _a === void 0 ? void 0 : _a.forEach((handler) => {
23
+ handler({
24
+ target,
25
+ contentSize: contentRect,
26
+ get size() {
27
+ return getElementSize(target, borderBoxSize);
28
+ },
29
+ });
30
+ });
31
+ }
32
+ function notifyAll(entries) {
33
+ entries.forEach(notifyTarget);
34
+ }
35
+ function createResizeObserver() {
36
+ if (typeof ResizeObserver === "undefined")
37
+ return;
38
+ observer = new ResizeObserver(notifyAll);
39
+ }
40
+ function resizeElement(target, handler) {
41
+ if (!observer)
42
+ createResizeObserver();
43
+ const elements = resolveElements(target);
44
+ elements.forEach((element) => {
45
+ let elementHandlers = resizeHandlers.get(element);
46
+ if (!elementHandlers) {
47
+ elementHandlers = new Set();
48
+ resizeHandlers.set(element, elementHandlers);
49
+ }
50
+ elementHandlers.add(handler);
51
+ observer === null || observer === void 0 ? void 0 : observer.observe(element);
52
+ });
53
+ return () => {
54
+ elements.forEach((element) => {
55
+ const elementHandlers = resizeHandlers.get(element);
56
+ elementHandlers === null || elementHandlers === void 0 ? void 0 : elementHandlers.delete(handler);
57
+ if (!(elementHandlers === null || elementHandlers === void 0 ? void 0 : elementHandlers.size)) {
58
+ observer === null || observer === void 0 ? void 0 : observer.unobserve(element);
59
+ }
60
+ });
61
+ };
62
+ }
63
+
64
+ export { resizeElement };
@@ -0,0 +1,30 @@
1
+ const windowCallbacks = new Set();
2
+ let windowResizeHandler;
3
+ function createWindowResizeHandler() {
4
+ windowResizeHandler = () => {
5
+ const size = {
6
+ width: window.innerWidth,
7
+ height: window.innerHeight,
8
+ };
9
+ const info = {
10
+ target: window,
11
+ size,
12
+ contentSize: size,
13
+ };
14
+ windowCallbacks.forEach((callback) => callback(info));
15
+ };
16
+ window.addEventListener("resize", windowResizeHandler);
17
+ }
18
+ function resizeWindow(callback) {
19
+ windowCallbacks.add(callback);
20
+ if (!windowResizeHandler)
21
+ createWindowResizeHandler();
22
+ return () => {
23
+ windowCallbacks.delete(callback);
24
+ if (!windowCallbacks.size && windowResizeHandler) {
25
+ windowResizeHandler = undefined;
26
+ }
27
+ };
28
+ }
29
+
30
+ export { resizeWindow };
@@ -0,0 +1,8 @@
1
+ import { resizeElement } from './handle-element.mjs';
2
+ import { resizeWindow } from './handle-window.mjs';
3
+
4
+ function resize(a, b) {
5
+ return typeof a === "function" ? resizeWindow(a) : resizeElement(a, b);
6
+ }
7
+
8
+ export { resize };
@@ -0,0 +1,80 @@
1
+ import { scrollInfo } from './track.mjs';
2
+ import { observeTimeline } from './observe.mjs';
3
+ import { supportsScrollTimeline } from './supports.mjs';
4
+
5
+ function scrollTimelineFallback({ source, container, axis = "y", }) {
6
+ // Support legacy source argument. Deprecate later.
7
+ if (source)
8
+ container = source;
9
+ // ScrollTimeline records progress as a percentage CSSUnitValue
10
+ const currentTime = { value: 0 };
11
+ const cancel = scrollInfo((info) => {
12
+ currentTime.value = info[axis].progress * 100;
13
+ }, { container, axis });
14
+ return { currentTime, cancel };
15
+ }
16
+ const timelineCache = new Map();
17
+ function getTimeline({ source, container = document.documentElement, axis = "y", } = {}) {
18
+ // Support legacy source argument. Deprecate later.
19
+ if (source)
20
+ container = source;
21
+ if (!timelineCache.has(container)) {
22
+ timelineCache.set(container, {});
23
+ }
24
+ const elementCache = timelineCache.get(container);
25
+ if (!elementCache[axis]) {
26
+ elementCache[axis] = supportsScrollTimeline()
27
+ ? new ScrollTimeline({ source: container, axis })
28
+ : scrollTimelineFallback({ source: container, axis });
29
+ }
30
+ return elementCache[axis];
31
+ }
32
+ /**
33
+ * If the onScroll function has two arguments, it's expecting
34
+ * more specific information about the scroll from scrollInfo.
35
+ */
36
+ function isOnScrollWithInfo(onScroll) {
37
+ return onScroll.length === 2;
38
+ }
39
+ /**
40
+ * Currently, we only support element tracking with `scrollInfo`, though in
41
+ * the future we can also offer ViewTimeline support.
42
+ */
43
+ function needsElementTracking(options) {
44
+ return options && (options.target || options.offset);
45
+ }
46
+ function scrollFunction(onScroll, options) {
47
+ if (isOnScrollWithInfo(onScroll) || needsElementTracking(options)) {
48
+ return scrollInfo((info) => {
49
+ onScroll(info[options.axis].progress, info);
50
+ }, options);
51
+ }
52
+ else {
53
+ return observeTimeline(onScroll, getTimeline(options));
54
+ }
55
+ }
56
+ function scrollAnimation(animation, options) {
57
+ if (needsElementTracking(options)) {
58
+ animation.pause();
59
+ return scrollInfo((info) => {
60
+ animation.time = animation.duration * info[options.axis].progress;
61
+ }, options);
62
+ }
63
+ else {
64
+ const timeline = getTimeline(options);
65
+ return animation.attachTimeline(timeline, (valueAnimation) => {
66
+ valueAnimation.pause();
67
+ return observeTimeline((progress) => {
68
+ valueAnimation.time = valueAnimation.duration * progress;
69
+ }, timeline);
70
+ });
71
+ }
72
+ }
73
+ function scroll(onScroll, { axis = "y", ...options } = {}) {
74
+ const optionsWithDefaults = { axis, ...options };
75
+ return typeof onScroll === "function"
76
+ ? scrollFunction(onScroll, optionsWithDefaults)
77
+ : scrollAnimation(onScroll, optionsWithDefaults);
78
+ }
79
+
80
+ export { scroll };
@@ -0,0 +1,56 @@
1
+ import { progress } from '../../../utils/progress.mjs';
2
+ import { velocityPerSecond } from '../../../utils/velocity-per-second.mjs';
3
+
4
+ /**
5
+ * A time in milliseconds, beyond which we consider the scroll velocity to be 0.
6
+ */
7
+ const maxElapsed = 50;
8
+ const createAxisInfo = () => ({
9
+ current: 0,
10
+ offset: [],
11
+ progress: 0,
12
+ scrollLength: 0,
13
+ targetOffset: 0,
14
+ targetLength: 0,
15
+ containerLength: 0,
16
+ velocity: 0,
17
+ });
18
+ const createScrollInfo = () => ({
19
+ time: 0,
20
+ x: createAxisInfo(),
21
+ y: createAxisInfo(),
22
+ });
23
+ const keys = {
24
+ x: {
25
+ length: "Width",
26
+ position: "Left",
27
+ },
28
+ y: {
29
+ length: "Height",
30
+ position: "Top",
31
+ },
32
+ };
33
+ function updateAxisInfo(element, axisName, info, time) {
34
+ const axis = info[axisName];
35
+ const { length, position } = keys[axisName];
36
+ const prev = axis.current;
37
+ const prevTime = info.time;
38
+ axis.current = element[`scroll${position}`];
39
+ axis.scrollLength = element[`scroll${length}`] - element[`client${length}`];
40
+ axis.offset.length = 0;
41
+ axis.offset[0] = 0;
42
+ axis.offset[1] = axis.scrollLength;
43
+ axis.progress = progress(0, axis.scrollLength, axis.current);
44
+ const elapsed = time - prevTime;
45
+ axis.velocity =
46
+ elapsed > maxElapsed
47
+ ? 0
48
+ : velocityPerSecond(axis.current - prev, elapsed);
49
+ }
50
+ function updateScrollInfo(element, info, time) {
51
+ updateAxisInfo(element, "x", info, time);
52
+ updateAxisInfo(element, "y", info, time);
53
+ info.time = time;
54
+ }
55
+
56
+ export { createScrollInfo, updateScrollInfo };
@@ -0,0 +1,18 @@
1
+ import { frame, cancelFrame } from '../../../frameloop/frame.mjs';
2
+
3
+ function observeTimeline(update, timeline) {
4
+ let prevProgress;
5
+ const onFrame = () => {
6
+ const { currentTime } = timeline;
7
+ const percentage = currentTime === null ? 0 : currentTime.value;
8
+ const progress = percentage / 100;
9
+ if (prevProgress !== progress) {
10
+ update(progress);
11
+ }
12
+ prevProgress = progress;
13
+ };
14
+ frame.update(onFrame, true);
15
+ return () => cancelFrame(onFrame);
16
+ }
17
+
18
+ export { observeTimeline };
@@ -0,0 +1,45 @@
1
+ const namedEdges = {
2
+ start: 0,
3
+ center: 0.5,
4
+ end: 1,
5
+ };
6
+ function resolveEdge(edge, length, inset = 0) {
7
+ let delta = 0;
8
+ /**
9
+ * If we have this edge defined as a preset, replace the definition
10
+ * with the numerical value.
11
+ */
12
+ if (edge in namedEdges) {
13
+ edge = namedEdges[edge];
14
+ }
15
+ /**
16
+ * Handle unit values
17
+ */
18
+ if (typeof edge === "string") {
19
+ const asNumber = parseFloat(edge);
20
+ if (edge.endsWith("px")) {
21
+ delta = asNumber;
22
+ }
23
+ else if (edge.endsWith("%")) {
24
+ edge = asNumber / 100;
25
+ }
26
+ else if (edge.endsWith("vw")) {
27
+ delta = (asNumber / 100) * document.documentElement.clientWidth;
28
+ }
29
+ else if (edge.endsWith("vh")) {
30
+ delta = (asNumber / 100) * document.documentElement.clientHeight;
31
+ }
32
+ else {
33
+ edge = asNumber;
34
+ }
35
+ }
36
+ /**
37
+ * If the edge is defined as a number, handle as a progress value.
38
+ */
39
+ if (typeof edge === "number") {
40
+ delta = length * edge;
41
+ }
42
+ return inset + delta;
43
+ }
44
+
45
+ export { namedEdges, resolveEdge };
@@ -0,0 +1,59 @@
1
+ import { calcInset } from './inset.mjs';
2
+ import { ScrollOffset } from './presets.mjs';
3
+ import { resolveOffset } from './offset.mjs';
4
+ import { interpolate } from '../../../../utils/interpolate.mjs';
5
+ import { defaultOffset } from '../../../../utils/offsets/default.mjs';
6
+
7
+ const point = { x: 0, y: 0 };
8
+ function getTargetSize(target) {
9
+ return "getBBox" in target && target.tagName !== "svg"
10
+ ? target.getBBox()
11
+ : { width: target.clientWidth, height: target.clientHeight };
12
+ }
13
+ function resolveOffsets(container, info, options) {
14
+ const { offset: offsetDefinition = ScrollOffset.All } = options;
15
+ const { target = container, axis = "y" } = options;
16
+ const lengthLabel = axis === "y" ? "height" : "width";
17
+ const inset = target !== container ? calcInset(target, container) : point;
18
+ /**
19
+ * Measure the target and container. If they're the same thing then we
20
+ * use the container's scrollWidth/Height as the target, from there
21
+ * all other calculations can remain the same.
22
+ */
23
+ const targetSize = target === container
24
+ ? { width: container.scrollWidth, height: container.scrollHeight }
25
+ : getTargetSize(target);
26
+ const containerSize = {
27
+ width: container.clientWidth,
28
+ height: container.clientHeight,
29
+ };
30
+ /**
31
+ * Reset the length of the resolved offset array rather than creating a new one.
32
+ * TODO: More reusable data structures for targetSize/containerSize would also be good.
33
+ */
34
+ info[axis].offset.length = 0;
35
+ /**
36
+ * Populate the offset array by resolving the user's offset definition into
37
+ * a list of pixel scroll offets.
38
+ */
39
+ let hasChanged = !info[axis].interpolate;
40
+ const numOffsets = offsetDefinition.length;
41
+ for (let i = 0; i < numOffsets; i++) {
42
+ const offset = resolveOffset(offsetDefinition[i], containerSize[lengthLabel], targetSize[lengthLabel], inset[axis]);
43
+ if (!hasChanged && offset !== info[axis].interpolatorOffsets[i]) {
44
+ hasChanged = true;
45
+ }
46
+ info[axis].offset[i] = offset;
47
+ }
48
+ /**
49
+ * If the pixel scroll offsets have changed, create a new interpolator function
50
+ * to map scroll value into a progress.
51
+ */
52
+ if (hasChanged) {
53
+ info[axis].interpolate = interpolate(info[axis].offset, defaultOffset(offsetDefinition));
54
+ info[axis].interpolatorOffsets = [...info[axis].offset];
55
+ }
56
+ info[axis].progress = info[axis].interpolate(info[axis].current);
57
+ }
58
+
59
+ export { resolveOffsets };
@@ -0,0 +1,45 @@
1
+ function calcInset(element, container) {
2
+ const inset = { x: 0, y: 0 };
3
+ let current = element;
4
+ while (current && current !== container) {
5
+ if (current instanceof HTMLElement) {
6
+ inset.x += current.offsetLeft;
7
+ inset.y += current.offsetTop;
8
+ current = current.offsetParent;
9
+ }
10
+ else if (current.tagName === "svg") {
11
+ /**
12
+ * This isn't an ideal approach to measuring the offset of <svg /> tags.
13
+ * It would be preferable, given they behave like HTMLElements in most ways
14
+ * to use offsetLeft/Top. But these don't exist on <svg />. Likewise we
15
+ * can't use .getBBox() like most SVG elements as these provide the offset
16
+ * relative to the SVG itself, which for <svg /> is usually 0x0.
17
+ */
18
+ const svgBoundingBox = current.getBoundingClientRect();
19
+ current = current.parentElement;
20
+ const parentBoundingBox = current.getBoundingClientRect();
21
+ inset.x += svgBoundingBox.left - parentBoundingBox.left;
22
+ inset.y += svgBoundingBox.top - parentBoundingBox.top;
23
+ }
24
+ else if (current instanceof SVGGraphicsElement) {
25
+ const { x, y } = current.getBBox();
26
+ inset.x += x;
27
+ inset.y += y;
28
+ let svg = null;
29
+ let parent = current.parentNode;
30
+ while (!svg) {
31
+ if (parent.tagName === "svg") {
32
+ svg = parent;
33
+ }
34
+ parent = current.parentNode;
35
+ }
36
+ current = svg;
37
+ }
38
+ else {
39
+ break;
40
+ }
41
+ }
42
+ return inset;
43
+ }
44
+
45
+ export { calcInset };
@@ -0,0 +1,35 @@
1
+ import { resolveEdge, namedEdges } from './edge.mjs';
2
+
3
+ const defaultOffset = [0, 0];
4
+ function resolveOffset(offset, containerLength, targetLength, targetInset) {
5
+ let offsetDefinition = Array.isArray(offset) ? offset : defaultOffset;
6
+ let targetPoint = 0;
7
+ let containerPoint = 0;
8
+ if (typeof offset === "number") {
9
+ /**
10
+ * If we're provided offset: [0, 0.5, 1] then each number x should become
11
+ * [x, x], so we default to the behaviour of mapping 0 => 0 of both target
12
+ * and container etc.
13
+ */
14
+ offsetDefinition = [offset, offset];
15
+ }
16
+ else if (typeof offset === "string") {
17
+ offset = offset.trim();
18
+ if (offset.includes(" ")) {
19
+ offsetDefinition = offset.split(" ");
20
+ }
21
+ else {
22
+ /**
23
+ * If we're provided a definition like "100px" then we want to apply
24
+ * that only to the top of the target point, leaving the container at 0.
25
+ * Whereas a named offset like "end" should be applied to both.
26
+ */
27
+ offsetDefinition = [offset, namedEdges[offset] ? offset : `0`];
28
+ }
29
+ }
30
+ targetPoint = resolveEdge(offsetDefinition[0], targetLength, targetInset);
31
+ containerPoint = resolveEdge(offsetDefinition[1], containerLength);
32
+ return targetPoint - containerPoint;
33
+ }
34
+
35
+ export { resolveOffset };
@@ -0,0 +1,20 @@
1
+ const ScrollOffset = {
2
+ Enter: [
3
+ [0, 1],
4
+ [1, 1],
5
+ ],
6
+ Exit: [
7
+ [0, 0],
8
+ [1, 0],
9
+ ],
10
+ Any: [
11
+ [1, 0],
12
+ [0, 1],
13
+ ],
14
+ All: [
15
+ [0, 0],
16
+ [1, 1],
17
+ ],
18
+ };
19
+
20
+ export { ScrollOffset };
@@ -0,0 +1,48 @@
1
+ import { warnOnce } from '../../../utils/warn-once.mjs';
2
+ import { updateScrollInfo } from './info.mjs';
3
+ import { resolveOffsets } from './offsets/index.mjs';
4
+
5
+ function measure(container, target = container, info) {
6
+ /**
7
+ * Find inset of target within scrollable container
8
+ */
9
+ info.x.targetOffset = 0;
10
+ info.y.targetOffset = 0;
11
+ if (target !== container) {
12
+ let node = target;
13
+ while (node && node !== container) {
14
+ info.x.targetOffset += node.offsetLeft;
15
+ info.y.targetOffset += node.offsetTop;
16
+ node = node.offsetParent;
17
+ }
18
+ }
19
+ info.x.targetLength =
20
+ target === container ? target.scrollWidth : target.clientWidth;
21
+ info.y.targetLength =
22
+ target === container ? target.scrollHeight : target.clientHeight;
23
+ info.x.containerLength = container.clientWidth;
24
+ info.y.containerLength = container.clientHeight;
25
+ /**
26
+ * In development mode ensure scroll containers aren't position: static as this makes
27
+ * it difficult to measure their relative positions.
28
+ */
29
+ if (process.env.NODE_ENV !== "production") {
30
+ if (container && target && target !== container) {
31
+ warnOnce(getComputedStyle(container).position !== "static", "Please ensure that the container has a non-static position, like 'relative', 'fixed', or 'absolute' to ensure scroll offset is calculated correctly.");
32
+ }
33
+ }
34
+ }
35
+ function createOnScrollHandler(element, onScroll, info, options = {}) {
36
+ return {
37
+ measure: () => measure(element, options.target, info),
38
+ update: (time) => {
39
+ updateScrollInfo(element, info, time);
40
+ if (options.offset || options.target) {
41
+ resolveOffsets(element, info, options);
42
+ }
43
+ },
44
+ notify: () => onScroll(info),
45
+ };
46
+ }
47
+
48
+ export { createOnScrollHandler };
@@ -0,0 +1,5 @@
1
+ import { memo } from '../../../utils/memo.mjs';
2
+
3
+ const supportsScrollTimeline = memo(() => window.ScrollTimeline !== undefined);
4
+
5
+ export { supportsScrollTimeline };
@@ -0,0 +1,84 @@
1
+ import { resize } from '../resize/index.mjs';
2
+ import { createScrollInfo } from './info.mjs';
3
+ import { createOnScrollHandler } from './on-scroll-handler.mjs';
4
+ import { frame, cancelFrame, frameData } from '../../../frameloop/frame.mjs';
5
+
6
+ const scrollListeners = new WeakMap();
7
+ const resizeListeners = new WeakMap();
8
+ const onScrollHandlers = new WeakMap();
9
+ const getEventTarget = (element) => element === document.documentElement ? window : element;
10
+ function scrollInfo(onScroll, { container = document.documentElement, ...options } = {}) {
11
+ let containerHandlers = onScrollHandlers.get(container);
12
+ /**
13
+ * Get the onScroll handlers for this container.
14
+ * If one isn't found, create a new one.
15
+ */
16
+ if (!containerHandlers) {
17
+ containerHandlers = new Set();
18
+ onScrollHandlers.set(container, containerHandlers);
19
+ }
20
+ /**
21
+ * Create a new onScroll handler for the provided callback.
22
+ */
23
+ const info = createScrollInfo();
24
+ const containerHandler = createOnScrollHandler(container, onScroll, info, options);
25
+ containerHandlers.add(containerHandler);
26
+ /**
27
+ * Check if there's a scroll event listener for this container.
28
+ * If not, create one.
29
+ */
30
+ if (!scrollListeners.has(container)) {
31
+ const measureAll = () => {
32
+ for (const handler of containerHandlers)
33
+ handler.measure();
34
+ };
35
+ const updateAll = () => {
36
+ for (const handler of containerHandlers) {
37
+ handler.update(frameData.timestamp);
38
+ }
39
+ };
40
+ const notifyAll = () => {
41
+ for (const handler of containerHandlers)
42
+ handler.notify();
43
+ };
44
+ const listener = () => {
45
+ frame.read(measureAll, false, true);
46
+ frame.read(updateAll, false, true);
47
+ frame.update(notifyAll, false, true);
48
+ };
49
+ scrollListeners.set(container, listener);
50
+ const target = getEventTarget(container);
51
+ window.addEventListener("resize", listener, { passive: true });
52
+ if (container !== document.documentElement) {
53
+ resizeListeners.set(container, resize(container, listener));
54
+ }
55
+ target.addEventListener("scroll", listener, { passive: true });
56
+ }
57
+ const listener = scrollListeners.get(container);
58
+ frame.read(listener, false, true);
59
+ return () => {
60
+ var _a;
61
+ cancelFrame(listener);
62
+ /**
63
+ * Check if we even have any handlers for this container.
64
+ */
65
+ const currentHandlers = onScrollHandlers.get(container);
66
+ if (!currentHandlers)
67
+ return;
68
+ currentHandlers.delete(containerHandler);
69
+ if (currentHandlers.size)
70
+ return;
71
+ /**
72
+ * If no more handlers, remove the scroll listener too.
73
+ */
74
+ const scrollListener = scrollListeners.get(container);
75
+ scrollListeners.delete(container);
76
+ if (scrollListener) {
77
+ getEventTarget(container).removeEventListener("scroll", scrollListener);
78
+ (_a = resizeListeners.get(container)) === null || _a === void 0 ? void 0 : _a();
79
+ window.removeEventListener("resize", scrollListener);
80
+ }
81
+ };
82
+ }
83
+
84
+ export { scrollInfo };
@@ -0,0 +1,33 @@
1
+ import { Fragment, useMemo, createElement } from 'react';
2
+ import { useHTMLProps } from '../html/use-props.mjs';
3
+ import { filterProps } from './utils/filter-props.mjs';
4
+ import { isSVGComponent } from './utils/is-svg-component.mjs';
5
+ import { useSVGProps } from '../svg/use-props.mjs';
6
+ import { isMotionValue } from '../../value/utils/is-motion-value.mjs';
7
+
8
+ function createUseRender(forwardMotionProps = false) {
9
+ const useRender = (Component, props, ref, { latestValues }, isStatic) => {
10
+ const useVisualProps = isSVGComponent(Component)
11
+ ? useSVGProps
12
+ : useHTMLProps;
13
+ const visualProps = useVisualProps(props, latestValues, isStatic, Component);
14
+ const filteredProps = filterProps(props, typeof Component === "string", forwardMotionProps);
15
+ const elementProps = Component !== Fragment
16
+ ? { ...filteredProps, ...visualProps, ref }
17
+ : {};
18
+ /**
19
+ * If component has been handed a motion value as its child,
20
+ * memoise its initial value and render that. Subsequent updates
21
+ * will be handled by the onChange handler
22
+ */
23
+ const { children } = props;
24
+ const renderedChildren = useMemo(() => (isMotionValue(children) ? children.get() : children), [children]);
25
+ return createElement(Component, {
26
+ ...elementProps,
27
+ children: renderedChildren,
28
+ });
29
+ };
30
+ return useRender;
31
+ }
32
+
33
+ export { createUseRender };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Convert camelCase to dash-case properties.
3
+ */
4
+ const camelToDash = (str) => str.replace(/([a-z])([A-Z])/gu, "$1-$2").toLowerCase();
5
+
6
+ export { camelToDash };