motion 10.17.1 → 11.11.12

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 (320) hide show
  1. package/.turbo/turbo-build.log +29 -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 +112 -0
  15. package/dist/es/framer-motion/dist/es/animation/animators/MainThreadAnimation.mjs +380 -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/interfaces/motion-value.mjs +105 -0
  41. package/dist/es/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs +75 -0
  42. package/dist/es/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs +66 -0
  43. package/dist/es/framer-motion/dist/es/animation/interfaces/visual-element.mjs +26 -0
  44. package/dist/es/framer-motion/dist/es/animation/optimized-appear/data-id.mjs +6 -0
  45. package/dist/es/framer-motion/dist/es/animation/optimized-appear/get-appear-id.mjs +7 -0
  46. package/dist/es/framer-motion/dist/es/animation/sequence/create.mjs +230 -0
  47. package/dist/es/framer-motion/dist/es/animation/sequence/utils/calc-time.mjs +21 -0
  48. package/dist/es/framer-motion/dist/es/animation/sequence/utils/edit.mjs +31 -0
  49. package/dist/es/framer-motion/dist/es/animation/sequence/utils/sort.mjs +14 -0
  50. package/dist/es/framer-motion/dist/es/animation/utils/create-visual-element.mjs +44 -0
  51. package/dist/es/framer-motion/dist/es/animation/utils/default-transitions.mjs +40 -0
  52. package/dist/es/framer-motion/dist/es/animation/utils/get-value-transition.mjs +9 -0
  53. package/dist/es/framer-motion/dist/es/animation/utils/is-animatable.mjs +30 -0
  54. package/dist/es/framer-motion/dist/es/animation/utils/is-animation-controls.mjs +7 -0
  55. package/dist/es/framer-motion/dist/es/animation/utils/is-dom-keyframes.mjs +5 -0
  56. package/dist/es/framer-motion/dist/es/animation/utils/is-keyframes-target.mjs +5 -0
  57. package/dist/es/framer-motion/dist/es/animation/utils/is-none.mjs +15 -0
  58. package/dist/es/framer-motion/dist/es/animation/utils/is-transition-defined.mjs +10 -0
  59. package/dist/es/framer-motion/dist/es/animation/utils/stagger.mjs +26 -0
  60. package/dist/es/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs +40 -0
  61. package/dist/es/framer-motion/dist/es/context/LayoutGroupContext.mjs +6 -0
  62. package/dist/es/framer-motion/dist/es/context/LazyContext.mjs +6 -0
  63. package/dist/es/framer-motion/dist/es/context/MotionConfigContext.mjs +13 -0
  64. package/dist/es/framer-motion/dist/es/context/MotionContext/create.mjs +13 -0
  65. package/dist/es/framer-motion/dist/es/context/MotionContext/index.mjs +6 -0
  66. package/dist/es/framer-motion/dist/es/context/MotionContext/utils.mjs +17 -0
  67. package/dist/es/framer-motion/dist/es/context/PresenceContext.mjs +9 -0
  68. package/dist/es/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs +9 -0
  69. package/dist/es/framer-motion/dist/es/easing/anticipate.mjs +5 -0
  70. package/dist/es/framer-motion/dist/es/easing/back.mjs +9 -0
  71. package/dist/es/framer-motion/dist/es/easing/circ.mjs +8 -0
  72. package/dist/es/framer-motion/dist/es/easing/cubic-bezier.mjs +51 -0
  73. package/dist/es/framer-motion/dist/es/easing/ease.mjs +7 -0
  74. package/dist/es/framer-motion/dist/es/easing/modifiers/mirror.mjs +5 -0
  75. package/dist/es/framer-motion/dist/es/easing/modifiers/reverse.mjs +5 -0
  76. package/dist/es/framer-motion/dist/es/easing/steps.mjs +15 -0
  77. package/dist/es/framer-motion/dist/es/easing/utils/create-generator-easing.mjs +17 -0
  78. package/dist/es/framer-motion/dist/es/easing/utils/get-easing-for-segment.mjs +8 -0
  79. package/dist/es/framer-motion/dist/es/easing/utils/is-bezier-definition.mjs +3 -0
  80. package/dist/es/framer-motion/dist/es/easing/utils/is-easing-array.mjs +5 -0
  81. package/dist/es/framer-motion/dist/es/easing/utils/map.mjs +38 -0
  82. package/dist/es/framer-motion/dist/es/events/add-dom-event.mjs +6 -0
  83. package/dist/es/framer-motion/dist/es/events/add-pointer-event.mjs +8 -0
  84. package/dist/es/framer-motion/dist/es/events/event-info.mjs +15 -0
  85. package/dist/es/framer-motion/dist/es/events/utils/is-primary-pointer.mjs +18 -0
  86. package/dist/es/framer-motion/dist/es/frameloop/batcher.mjs +71 -0
  87. package/dist/es/framer-motion/dist/es/frameloop/frame.mjs +6 -0
  88. package/dist/es/framer-motion/dist/es/frameloop/index-legacy.mjs +20 -0
  89. package/dist/es/framer-motion/dist/es/frameloop/microtask.mjs +5 -0
  90. package/dist/es/framer-motion/dist/es/frameloop/render-step.mjs +80 -0
  91. package/dist/es/framer-motion/dist/es/frameloop/sync-time.mjs +31 -0
  92. package/dist/es/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs +487 -0
  93. package/dist/es/framer-motion/dist/es/gestures/drag/index.mjs +27 -0
  94. package/dist/es/framer-motion/dist/es/gestures/drag/utils/constraints.mjs +129 -0
  95. package/dist/es/framer-motion/dist/es/gestures/drag/utils/lock.mjs +53 -0
  96. package/dist/es/framer-motion/dist/es/gestures/focus.mjs +41 -0
  97. package/dist/es/framer-motion/dist/es/gestures/hover.mjs +33 -0
  98. package/dist/es/framer-motion/dist/es/gestures/pan/PanSession.mjs +156 -0
  99. package/dist/es/framer-motion/dist/es/gestures/pan/index.mjs +50 -0
  100. package/dist/es/framer-motion/dist/es/gestures/press.mjs +130 -0
  101. package/dist/es/framer-motion/dist/es/gestures/utils/is-node-or-child.mjs +20 -0
  102. package/dist/es/framer-motion/dist/es/motion/features/Feature.mjs +9 -0
  103. package/dist/es/framer-motion/dist/es/motion/features/animation/exit.mjs +31 -0
  104. package/dist/es/framer-motion/dist/es/motion/features/animation/index.mjs +41 -0
  105. package/dist/es/framer-motion/dist/es/motion/features/animations.mjs +13 -0
  106. package/dist/es/framer-motion/dist/es/motion/features/definitions.mjs +28 -0
  107. package/dist/es/framer-motion/dist/es/motion/features/drag.mjs +17 -0
  108. package/dist/es/framer-motion/dist/es/motion/features/gestures.mjs +21 -0
  109. package/dist/es/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs +134 -0
  110. package/dist/es/framer-motion/dist/es/motion/features/layout.mjs +11 -0
  111. package/dist/es/framer-motion/dist/es/motion/features/load-features.mjs +12 -0
  112. package/dist/es/framer-motion/dist/es/motion/features/viewport/index.mjs +72 -0
  113. package/dist/es/framer-motion/dist/es/motion/features/viewport/observers.mjs +49 -0
  114. package/dist/es/framer-motion/dist/es/motion/index.mjs +98 -0
  115. package/dist/es/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs +11 -0
  116. package/dist/es/framer-motion/dist/es/motion/utils/symbol.mjs +3 -0
  117. package/dist/es/framer-motion/dist/es/motion/utils/use-motion-ref.mjs +36 -0
  118. package/dist/es/framer-motion/dist/es/motion/utils/use-visual-element.mjs +134 -0
  119. package/dist/es/framer-motion/dist/es/motion/utils/use-visual-state.mjs +82 -0
  120. package/dist/es/framer-motion/dist/es/motion/utils/valid-prop.mjs +57 -0
  121. package/dist/es/framer-motion/dist/es/projection/animation/mix-values.mjs +93 -0
  122. package/dist/es/framer-motion/dist/es/projection/geometry/conversion.mjs +33 -0
  123. package/dist/es/framer-motion/dist/es/projection/geometry/copy.mjs +31 -0
  124. package/dist/es/framer-motion/dist/es/projection/geometry/delta-apply.mjs +119 -0
  125. package/dist/es/framer-motion/dist/es/projection/geometry/delta-calc.mjs +52 -0
  126. package/dist/es/framer-motion/dist/es/projection/geometry/delta-remove.mjs +54 -0
  127. package/dist/es/framer-motion/dist/es/projection/geometry/models.mjs +17 -0
  128. package/dist/es/framer-motion/dist/es/projection/geometry/utils.mjs +31 -0
  129. package/dist/es/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs +13 -0
  130. package/dist/es/framer-motion/dist/es/projection/node/HTMLProjectionNode.mjs +27 -0
  131. package/dist/es/framer-motion/dist/es/projection/node/create-projection-node.mjs +1583 -0
  132. package/dist/es/framer-motion/dist/es/projection/node/state.mjs +19 -0
  133. package/dist/es/framer-motion/dist/es/projection/shared/stack.mjs +112 -0
  134. package/dist/es/framer-motion/dist/es/projection/styles/scale-border-radius.mjs +41 -0
  135. package/dist/es/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs +35 -0
  136. package/dist/es/framer-motion/dist/es/projection/styles/scale-correction.mjs +6 -0
  137. package/dist/es/framer-motion/dist/es/projection/styles/transform.mjs +49 -0
  138. package/dist/es/framer-motion/dist/es/projection/utils/each-axis.mjs +5 -0
  139. package/dist/es/framer-motion/dist/es/projection/utils/has-transform.mjs +26 -0
  140. package/dist/es/framer-motion/dist/es/projection/utils/measure.mjs +17 -0
  141. package/dist/es/framer-motion/dist/es/render/VisualElement.mjs +477 -0
  142. package/dist/es/framer-motion/dist/es/render/components/create-factory.mjs +23 -0
  143. package/dist/es/framer-motion/dist/es/render/components/m/create.mjs +6 -0
  144. package/dist/es/framer-motion/dist/es/render/components/m/elements.mjs +227 -0
  145. package/dist/es/framer-motion/dist/es/render/components/motion/create.mjs +15 -0
  146. package/dist/es/framer-motion/dist/es/render/components/motion/elements.mjs +194 -0
  147. package/dist/es/framer-motion/dist/es/render/dom/DOMKeyframesResolver.mjs +130 -0
  148. package/dist/es/framer-motion/dist/es/render/dom/DOMVisualElement.mjs +28 -0
  149. package/dist/es/framer-motion/dist/es/render/dom/create-visual-element.mjs +14 -0
  150. package/dist/es/framer-motion/dist/es/render/dom/resize/handle-element.mjs +64 -0
  151. package/dist/es/framer-motion/dist/es/render/dom/resize/handle-window.mjs +30 -0
  152. package/dist/es/framer-motion/dist/es/render/dom/resize/index.mjs +8 -0
  153. package/dist/es/framer-motion/dist/es/render/dom/scroll/index.mjs +80 -0
  154. package/dist/es/framer-motion/dist/es/render/dom/scroll/info.mjs +56 -0
  155. package/dist/es/framer-motion/dist/es/render/dom/scroll/observe.mjs +18 -0
  156. package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/edge.mjs +45 -0
  157. package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/index.mjs +59 -0
  158. package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/inset.mjs +45 -0
  159. package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/offset.mjs +35 -0
  160. package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/presets.mjs +20 -0
  161. package/dist/es/framer-motion/dist/es/render/dom/scroll/on-scroll-handler.mjs +48 -0
  162. package/dist/es/framer-motion/dist/es/render/dom/scroll/supports.mjs +5 -0
  163. package/dist/es/framer-motion/dist/es/render/dom/scroll/track.mjs +84 -0
  164. package/dist/es/framer-motion/dist/es/render/dom/use-render.mjs +33 -0
  165. package/dist/es/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs +6 -0
  166. package/dist/es/framer-motion/dist/es/render/dom/utils/css-variables-conversion.mjs +42 -0
  167. package/dist/es/framer-motion/dist/es/render/dom/utils/filter-props.mjs +59 -0
  168. package/dist/es/framer-motion/dist/es/render/dom/utils/is-css-variable.mjs +15 -0
  169. package/dist/es/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs +30 -0
  170. package/dist/es/framer-motion/dist/es/render/dom/utils/is-svg-element.mjs +5 -0
  171. package/dist/es/framer-motion/dist/es/render/dom/utils/resolve-element.mjs +28 -0
  172. package/dist/es/framer-motion/dist/es/render/dom/utils/unit-conversion.mjs +65 -0
  173. package/dist/es/framer-motion/dist/es/render/dom/value-types/animatable-none.mjs +15 -0
  174. package/dist/es/framer-motion/dist/es/render/dom/value-types/defaults.mjs +30 -0
  175. package/dist/es/framer-motion/dist/es/render/dom/value-types/dimensions.mjs +15 -0
  176. package/dist/es/framer-motion/dist/es/render/dom/value-types/find.mjs +15 -0
  177. package/dist/es/framer-motion/dist/es/render/dom/value-types/get-as-type.mjs +10 -0
  178. package/dist/es/framer-motion/dist/es/render/dom/value-types/number-browser.mjs +41 -0
  179. package/dist/es/framer-motion/dist/es/render/dom/value-types/number.mjs +18 -0
  180. package/dist/es/framer-motion/dist/es/render/dom/value-types/test.mjs +6 -0
  181. package/dist/es/framer-motion/dist/es/render/dom/value-types/transform.mjs +31 -0
  182. package/dist/es/framer-motion/dist/es/render/dom/value-types/type-auto.mjs +9 -0
  183. package/dist/es/framer-motion/dist/es/render/dom/value-types/type-int.mjs +8 -0
  184. package/dist/es/framer-motion/dist/es/render/dom/viewport/index.mjs +43 -0
  185. package/dist/es/framer-motion/dist/es/render/html/HTMLVisualElement.mjs +57 -0
  186. package/dist/es/framer-motion/dist/es/render/html/config-motion.mjs +12 -0
  187. package/dist/es/framer-motion/dist/es/render/html/use-props.mjs +57 -0
  188. package/dist/es/framer-motion/dist/es/render/html/utils/build-styles.mjs +65 -0
  189. package/dist/es/framer-motion/dist/es/render/html/utils/build-transform.mjs +62 -0
  190. package/dist/es/framer-motion/dist/es/render/html/utils/create-render-state.mjs +8 -0
  191. package/dist/es/framer-motion/dist/es/render/html/utils/make-none-animatable.mjs +30 -0
  192. package/dist/es/framer-motion/dist/es/render/html/utils/render.mjs +9 -0
  193. package/dist/es/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs +20 -0
  194. package/dist/es/framer-motion/dist/es/render/html/utils/transform.mjs +28 -0
  195. package/dist/es/framer-motion/dist/es/render/object/ObjectVisualElement.mjs +41 -0
  196. package/dist/es/framer-motion/dist/es/render/store.mjs +3 -0
  197. package/dist/es/framer-motion/dist/es/render/svg/SVGVisualElement.mjs +45 -0
  198. package/dist/es/framer-motion/dist/es/render/svg/config-motion.mjs +40 -0
  199. package/dist/es/framer-motion/dist/es/render/svg/lowercase-elements.mjs +33 -0
  200. package/dist/es/framer-motion/dist/es/render/svg/use-props.mjs +24 -0
  201. package/dist/es/framer-motion/dist/es/render/svg/utils/build-attrs.mjs +52 -0
  202. package/dist/es/framer-motion/dist/es/render/svg/utils/camel-case-attrs.mjs +30 -0
  203. package/dist/es/framer-motion/dist/es/render/svg/utils/create-render-state.mjs +8 -0
  204. package/dist/es/framer-motion/dist/es/render/svg/utils/is-svg-tag.mjs +3 -0
  205. package/dist/es/framer-motion/dist/es/render/svg/utils/path.mjs +32 -0
  206. package/dist/es/framer-motion/dist/es/render/svg/utils/render.mjs +12 -0
  207. package/dist/es/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs +19 -0
  208. package/dist/es/framer-motion/dist/es/render/svg/utils/transform-origin.mjs +18 -0
  209. package/dist/es/framer-motion/dist/es/render/utils/KeyframesResolver.mjs +164 -0
  210. package/dist/es/framer-motion/dist/es/render/utils/animation-state.mjs +332 -0
  211. package/dist/es/framer-motion/dist/es/render/utils/compare-by-depth.mjs +3 -0
  212. package/dist/es/framer-motion/dist/es/render/utils/flat-tree.mjs +24 -0
  213. package/dist/es/framer-motion/dist/es/render/utils/get-variant-context.mjs +28 -0
  214. package/dist/es/framer-motion/dist/es/render/utils/is-controlling-variants.mjs +13 -0
  215. package/dist/es/framer-motion/dist/es/render/utils/is-variant-label.mjs +8 -0
  216. package/dist/es/framer-motion/dist/es/render/utils/motion-values.mjs +59 -0
  217. package/dist/es/framer-motion/dist/es/render/utils/resolve-dynamic-variants.mjs +8 -0
  218. package/dist/es/framer-motion/dist/es/render/utils/resolve-variants.mjs +36 -0
  219. package/dist/es/framer-motion/dist/es/render/utils/setters.mjs +27 -0
  220. package/dist/es/framer-motion/dist/es/render/utils/variant-props.mjs +12 -0
  221. package/dist/es/framer-motion/dist/es/utils/GlobalConfig.mjs +6 -0
  222. package/dist/es/framer-motion/dist/es/utils/array.mjs +11 -0
  223. package/dist/es/framer-motion/dist/es/utils/clamp.mjs +9 -0
  224. package/dist/es/framer-motion/dist/es/utils/delay.mjs +24 -0
  225. package/dist/es/framer-motion/dist/es/utils/distance.mjs +9 -0
  226. package/dist/es/framer-motion/dist/es/utils/errors.mjs +18 -0
  227. package/dist/es/framer-motion/dist/es/utils/get-context-window.mjs +6 -0
  228. package/dist/es/framer-motion/dist/es/utils/hsla-to-rgba.mjs +42 -0
  229. package/dist/es/framer-motion/dist/es/utils/interpolate.mjs +75 -0
  230. package/dist/es/framer-motion/dist/es/utils/is-browser.mjs +3 -0
  231. package/dist/es/framer-motion/dist/es/utils/is-numerical-string.mjs +6 -0
  232. package/dist/es/framer-motion/dist/es/utils/is-ref-object.mjs +7 -0
  233. package/dist/es/framer-motion/dist/es/utils/is-zero-value-string.mjs +6 -0
  234. package/dist/es/framer-motion/dist/es/utils/memo.mjs +10 -0
  235. package/dist/es/framer-motion/dist/es/utils/mix/color.mjs +47 -0
  236. package/dist/es/framer-motion/dist/es/utils/mix/complex.mjs +94 -0
  237. package/dist/es/framer-motion/dist/es/utils/mix/immediate.mjs +5 -0
  238. package/dist/es/framer-motion/dist/es/utils/mix/index.mjs +14 -0
  239. package/dist/es/framer-motion/dist/es/utils/mix/number.mjs +26 -0
  240. package/dist/es/framer-motion/dist/es/utils/mix/visibility.mjs +16 -0
  241. package/dist/es/framer-motion/dist/es/utils/noop.mjs +3 -0
  242. package/dist/es/framer-motion/dist/es/utils/offsets/default.mjs +9 -0
  243. package/dist/es/framer-motion/dist/es/utils/offsets/fill.mjs +12 -0
  244. package/dist/es/framer-motion/dist/es/utils/offsets/time.mjs +5 -0
  245. package/dist/es/framer-motion/dist/es/utils/pipe.mjs +11 -0
  246. package/dist/es/framer-motion/dist/es/utils/progress.mjs +18 -0
  247. package/dist/es/framer-motion/dist/es/utils/reduced-motion/index.mjs +19 -0
  248. package/dist/es/framer-motion/dist/es/utils/reduced-motion/state.mjs +5 -0
  249. package/dist/es/framer-motion/dist/es/utils/resolve-value.mjs +11 -0
  250. package/dist/es/framer-motion/dist/es/utils/shallow-compare.mjs +14 -0
  251. package/dist/es/framer-motion/dist/es/utils/subscription-manager.mjs +40 -0
  252. package/dist/es/framer-motion/dist/es/utils/time-conversion.mjs +10 -0
  253. package/dist/es/framer-motion/dist/es/utils/transform.mjs +21 -0
  254. package/dist/es/framer-motion/dist/es/utils/use-constant.mjs +18 -0
  255. package/dist/es/framer-motion/dist/es/utils/use-isomorphic-effect.mjs +6 -0
  256. package/dist/es/framer-motion/dist/es/utils/velocity-per-second.mjs +11 -0
  257. package/dist/es/framer-motion/dist/es/utils/warn-once.mjs +11 -0
  258. package/dist/es/framer-motion/dist/es/utils/wrap.mjs +6 -0
  259. package/dist/es/framer-motion/dist/es/value/index.mjs +313 -0
  260. package/dist/es/framer-motion/dist/es/value/types/color/hex.mjs +40 -0
  261. package/dist/es/framer-motion/dist/es/value/types/color/hsla.mjs +22 -0
  262. package/dist/es/framer-motion/dist/es/value/types/color/index.mjs +27 -0
  263. package/dist/es/framer-motion/dist/es/value/types/color/rgba.mjs +25 -0
  264. package/dist/es/framer-motion/dist/es/value/types/color/utils.mjs +29 -0
  265. package/dist/es/framer-motion/dist/es/value/types/complex/filter.mjs +30 -0
  266. package/dist/es/framer-motion/dist/es/value/types/complex/index.mjs +92 -0
  267. package/dist/es/framer-motion/dist/es/value/types/numbers/index.mjs +17 -0
  268. package/dist/es/framer-motion/dist/es/value/types/numbers/units.mjs +17 -0
  269. package/dist/es/framer-motion/dist/es/value/types/utils/color-regex.mjs +3 -0
  270. package/dist/es/framer-motion/dist/es/value/types/utils/float-regex.mjs +3 -0
  271. package/dist/es/framer-motion/dist/es/value/types/utils/is-nullish.mjs +5 -0
  272. package/dist/es/framer-motion/dist/es/value/types/utils/sanitize.mjs +5 -0
  273. package/dist/es/framer-motion/dist/es/value/types/utils/single-color-regex.mjs +3 -0
  274. package/dist/es/framer-motion/dist/es/value/use-will-change/add-will-change.mjs +14 -0
  275. package/dist/es/framer-motion/dist/es/value/use-will-change/is.mjs +7 -0
  276. package/dist/es/framer-motion/dist/es/value/utils/is-motion-value.mjs +3 -0
  277. package/dist/es/framer-motion/dist/es/value/utils/resolve-motion-value.mjs +16 -0
  278. package/dist/es/motion/lib/index.mjs +30 -0
  279. package/dist/es/motion/lib/react-client.mjs +3 -0
  280. package/dist/es/motion/lib/react-m.mjs +3 -0
  281. package/dist/index.d.ts +1 -0
  282. package/dist/motion.dev.js +6121 -0
  283. package/dist/motion.js +1 -0
  284. package/dist/react-client.d.ts +1 -0
  285. package/dist/react-m.d.ts +1 -0
  286. package/lib/index.js +1 -3
  287. package/lib/index.js.map +1 -1
  288. package/lib/react-client.js +3 -0
  289. package/lib/react-client.js.map +1 -0
  290. package/lib/react-m.js +3 -0
  291. package/lib/react-m.js.map +1 -0
  292. package/lib/react.js +3 -0
  293. package/lib/react.js.map +1 -0
  294. package/package.json +79 -29
  295. package/react/package.json +6 -0
  296. package/react-client/package.json +6 -0
  297. package/react-m/package.json +6 -0
  298. package/rollup.config.mjs +174 -0
  299. package/src/index.ts +1 -0
  300. package/src/react-client.ts +3 -0
  301. package/src/react-m.ts +3 -0
  302. package/src/react.ts +3 -0
  303. package/tsconfig.json +25 -0
  304. package/types/index.d.ts +1 -4
  305. package/types/react-client.d.ts +1 -0
  306. package/types/react-m.d.ts +1 -0
  307. package/types/react.d.ts +1 -0
  308. package/CHANGELOG.md +0 -372
  309. package/dist/animate.cjs.js +0 -22
  310. package/dist/animate.es.js +0 -19
  311. package/dist/main.cjs.js +0 -21
  312. package/dist/main.es.js +0 -3
  313. package/dist/motion.min.js +0 -1
  314. package/dist/motion.umd.js +0 -2359
  315. package/dist/size-index.js +0 -1
  316. package/lib/animate.js +0 -17
  317. package/lib/animate.js.map +0 -1
  318. package/types/animate.d.ts +0 -6
  319. package/types/animate.d.ts.map +0 -1
  320. package/types/index.d.ts.map +0 -1
@@ -0,0 +1,27 @@
1
+ import { resolveFinalValueInKeyframes } from '../../utils/resolve-value.mjs';
2
+ import { motionValue } from '../../value/index.mjs';
3
+ import { resolveVariant } from './resolve-dynamic-variants.mjs';
4
+
5
+ /**
6
+ * Set VisualElement's MotionValue, creating a new MotionValue for it if
7
+ * it doesn't exist.
8
+ */
9
+ function setMotionValue(visualElement, key, value) {
10
+ if (visualElement.hasValue(key)) {
11
+ visualElement.getValue(key).set(value);
12
+ }
13
+ else {
14
+ visualElement.addValue(key, motionValue(value));
15
+ }
16
+ }
17
+ function setTarget(visualElement, definition) {
18
+ const resolved = resolveVariant(visualElement, definition);
19
+ let { transitionEnd = {}, transition = {}, ...target } = resolved || {};
20
+ target = { ...target, ...transitionEnd };
21
+ for (const key in target) {
22
+ const value = resolveFinalValueInKeyframes(target[key]);
23
+ setMotionValue(visualElement, key, value);
24
+ }
25
+ }
26
+
27
+ export { setTarget };
@@ -0,0 +1,12 @@
1
+ const variantPriorityOrder = [
2
+ "animate",
3
+ "whileInView",
4
+ "whileFocus",
5
+ "whileHover",
6
+ "whileTap",
7
+ "whileDrag",
8
+ "exit",
9
+ ];
10
+ const variantProps = ["initial", ...variantPriorityOrder];
11
+
12
+ export { variantPriorityOrder, variantProps };
@@ -0,0 +1,6 @@
1
+ const MotionGlobalConfig = {
2
+ skipAnimations: false,
3
+ useManualTiming: false,
4
+ };
5
+
6
+ export { MotionGlobalConfig };
@@ -0,0 +1,11 @@
1
+ function addUniqueItem(arr, item) {
2
+ if (arr.indexOf(item) === -1)
3
+ arr.push(item);
4
+ }
5
+ function removeItem(arr, item) {
6
+ const index = arr.indexOf(item);
7
+ if (index > -1)
8
+ arr.splice(index, 1);
9
+ }
10
+
11
+ export { addUniqueItem, removeItem };
@@ -0,0 +1,9 @@
1
+ const clamp = (min, max, v) => {
2
+ if (v > max)
3
+ return max;
4
+ if (v < min)
5
+ return min;
6
+ return v;
7
+ };
8
+
9
+ export { clamp };
@@ -0,0 +1,24 @@
1
+ import { time } from '../frameloop/sync-time.mjs';
2
+ import { secondsToMilliseconds } from './time-conversion.mjs';
3
+ import { frame, cancelFrame } from '../frameloop/frame.mjs';
4
+
5
+ /**
6
+ * Timeout defined in ms
7
+ */
8
+ function delay(callback, timeout) {
9
+ const start = time.now();
10
+ const checkElapsed = ({ timestamp }) => {
11
+ const elapsed = timestamp - start;
12
+ if (elapsed >= timeout) {
13
+ cancelFrame(checkElapsed);
14
+ callback(elapsed - timeout);
15
+ }
16
+ };
17
+ frame.read(checkElapsed, true);
18
+ return () => cancelFrame(checkElapsed);
19
+ }
20
+ function delayInSeconds(callback, timeout) {
21
+ return delay(callback, secondsToMilliseconds(timeout));
22
+ }
23
+
24
+ export { delay, delayInSeconds };
@@ -0,0 +1,9 @@
1
+ const distance = (a, b) => Math.abs(a - b);
2
+ function distance2D(a, b) {
3
+ // Multi-dimensional
4
+ const xDelta = distance(a.x, b.x);
5
+ const yDelta = distance(a.y, b.y);
6
+ return Math.sqrt(xDelta ** 2 + yDelta ** 2);
7
+ }
8
+
9
+ export { distance, distance2D };
@@ -0,0 +1,18 @@
1
+ import { noop } from './noop.mjs';
2
+
3
+ let warning = noop;
4
+ let invariant = noop;
5
+ if (process.env.NODE_ENV !== "production") {
6
+ warning = (check, message) => {
7
+ if (!check && typeof console !== "undefined") {
8
+ console.warn(message);
9
+ }
10
+ };
11
+ invariant = (check, message) => {
12
+ if (!check) {
13
+ throw new Error(message);
14
+ }
15
+ };
16
+ }
17
+
18
+ export { invariant, warning };
@@ -0,0 +1,6 @@
1
+ // Fixes https://github.com/framer/motion/issues/2270
2
+ const getContextWindow = ({ current }) => {
3
+ return current ? current.ownerDocument.defaultView : null;
4
+ };
5
+
6
+ export { getContextWindow };
@@ -0,0 +1,42 @@
1
+ // Adapted from https://gist.github.com/mjackson/5311256
2
+ function hueToRgb(p, q, t) {
3
+ if (t < 0)
4
+ t += 1;
5
+ if (t > 1)
6
+ t -= 1;
7
+ if (t < 1 / 6)
8
+ return p + (q - p) * 6 * t;
9
+ if (t < 1 / 2)
10
+ return q;
11
+ if (t < 2 / 3)
12
+ return p + (q - p) * (2 / 3 - t) * 6;
13
+ return p;
14
+ }
15
+ function hslaToRgba({ hue, saturation, lightness, alpha }) {
16
+ hue /= 360;
17
+ saturation /= 100;
18
+ lightness /= 100;
19
+ let red = 0;
20
+ let green = 0;
21
+ let blue = 0;
22
+ if (!saturation) {
23
+ red = green = blue = lightness;
24
+ }
25
+ else {
26
+ const q = lightness < 0.5
27
+ ? lightness * (1 + saturation)
28
+ : lightness + saturation - lightness * saturation;
29
+ const p = 2 * lightness - q;
30
+ red = hueToRgb(p, q, hue + 1 / 3);
31
+ green = hueToRgb(p, q, hue);
32
+ blue = hueToRgb(p, q, hue - 1 / 3);
33
+ }
34
+ return {
35
+ red: Math.round(red * 255),
36
+ green: Math.round(green * 255),
37
+ blue: Math.round(blue * 255),
38
+ alpha,
39
+ };
40
+ }
41
+
42
+ export { hslaToRgba };
@@ -0,0 +1,75 @@
1
+ import { invariant } from './errors.mjs';
2
+ import { clamp } from './clamp.mjs';
3
+ import { pipe } from './pipe.mjs';
4
+ import { progress } from './progress.mjs';
5
+ import { noop } from './noop.mjs';
6
+ import { mix } from './mix/index.mjs';
7
+
8
+ function createMixers(output, ease, customMixer) {
9
+ const mixers = [];
10
+ const mixerFactory = customMixer || mix;
11
+ const numMixers = output.length - 1;
12
+ for (let i = 0; i < numMixers; i++) {
13
+ let mixer = mixerFactory(output[i], output[i + 1]);
14
+ if (ease) {
15
+ const easingFunction = Array.isArray(ease) ? ease[i] || noop : ease;
16
+ mixer = pipe(easingFunction, mixer);
17
+ }
18
+ mixers.push(mixer);
19
+ }
20
+ return mixers;
21
+ }
22
+ /**
23
+ * Create a function that maps from a numerical input array to a generic output array.
24
+ *
25
+ * Accepts:
26
+ * - Numbers
27
+ * - Colors (hex, hsl, hsla, rgb, rgba)
28
+ * - Complex (combinations of one or more numbers or strings)
29
+ *
30
+ * ```jsx
31
+ * const mixColor = interpolate([0, 1], ['#fff', '#000'])
32
+ *
33
+ * mixColor(0.5) // 'rgba(128, 128, 128, 1)'
34
+ * ```
35
+ *
36
+ * TODO Revist this approach once we've moved to data models for values,
37
+ * probably not needed to pregenerate mixer functions.
38
+ *
39
+ * @public
40
+ */
41
+ function interpolate(input, output, { clamp: isClamp = true, ease, mixer } = {}) {
42
+ const inputLength = input.length;
43
+ invariant(inputLength === output.length, "Both input and output ranges must be the same length");
44
+ /**
45
+ * If we're only provided a single input, we can just make a function
46
+ * that returns the output.
47
+ */
48
+ if (inputLength === 1)
49
+ return () => output[0];
50
+ if (inputLength === 2 && input[0] === input[1])
51
+ return () => output[1];
52
+ // If input runs highest -> lowest, reverse both arrays
53
+ if (input[0] > input[inputLength - 1]) {
54
+ input = [...input].reverse();
55
+ output = [...output].reverse();
56
+ }
57
+ const mixers = createMixers(output, ease, mixer);
58
+ const numMixers = mixers.length;
59
+ const interpolator = (v) => {
60
+ let i = 0;
61
+ if (numMixers > 1) {
62
+ for (; i < input.length - 2; i++) {
63
+ if (v < input[i + 1])
64
+ break;
65
+ }
66
+ }
67
+ const progressInRange = progress(input[i], input[i + 1], v);
68
+ return mixers[i](progressInRange);
69
+ };
70
+ return isClamp
71
+ ? (v) => interpolator(clamp(input[0], input[inputLength - 1], v))
72
+ : interpolator;
73
+ }
74
+
75
+ export { interpolate };
@@ -0,0 +1,3 @@
1
+ const isBrowser = typeof window !== "undefined";
2
+
3
+ export { isBrowser };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Check if value is a numerical string, ie a string that is purely a number eg "100" or "-100.1"
3
+ */
4
+ const isNumericalString = (v) => /^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(v);
5
+
6
+ export { isNumericalString };
@@ -0,0 +1,7 @@
1
+ function isRefObject(ref) {
2
+ return (ref &&
3
+ typeof ref === "object" &&
4
+ Object.prototype.hasOwnProperty.call(ref, "current"));
5
+ }
6
+
7
+ export { isRefObject };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Check if the value is a zero value string like "0px" or "0%"
3
+ */
4
+ const isZeroValueString = (v) => /^0[^.\s]+$/u.test(v);
5
+
6
+ export { isZeroValueString };
@@ -0,0 +1,10 @@
1
+ function memo(callback) {
2
+ let result;
3
+ return () => {
4
+ if (result === undefined)
5
+ result = callback();
6
+ return result;
7
+ };
8
+ }
9
+
10
+ export { memo };
@@ -0,0 +1,47 @@
1
+ import { mixNumber } from './number.mjs';
2
+ import { warning } from '../errors.mjs';
3
+ import { hslaToRgba } from '../hsla-to-rgba.mjs';
4
+ import { hex } from '../../value/types/color/hex.mjs';
5
+ import { rgba } from '../../value/types/color/rgba.mjs';
6
+ import { hsla } from '../../value/types/color/hsla.mjs';
7
+ import { mixImmediate } from './immediate.mjs';
8
+
9
+ // Linear color space blending
10
+ // Explained https://www.youtube.com/watch?v=LKnqECcg6Gw
11
+ // Demonstrated http://codepen.io/osublake/pen/xGVVaN
12
+ const mixLinearColor = (from, to, v) => {
13
+ const fromExpo = from * from;
14
+ const expo = v * (to * to - fromExpo) + fromExpo;
15
+ return expo < 0 ? 0 : Math.sqrt(expo);
16
+ };
17
+ const colorTypes = [hex, rgba, hsla];
18
+ const getColorType = (v) => colorTypes.find((type) => type.test(v));
19
+ function asRGBA(color) {
20
+ const type = getColorType(color);
21
+ warning(Boolean(type), `'${color}' is not an animatable color. Use the equivalent color code instead.`);
22
+ if (!Boolean(type))
23
+ return false;
24
+ let model = type.parse(color);
25
+ if (type === hsla) {
26
+ // TODO Remove this cast - needed since Motion's stricter typing
27
+ model = hslaToRgba(model);
28
+ }
29
+ return model;
30
+ }
31
+ const mixColor = (from, to) => {
32
+ const fromRGBA = asRGBA(from);
33
+ const toRGBA = asRGBA(to);
34
+ if (!fromRGBA || !toRGBA) {
35
+ return mixImmediate(from, to);
36
+ }
37
+ const blended = { ...fromRGBA };
38
+ return (v) => {
39
+ blended.red = mixLinearColor(fromRGBA.red, toRGBA.red, v);
40
+ blended.green = mixLinearColor(fromRGBA.green, toRGBA.green, v);
41
+ blended.blue = mixLinearColor(fromRGBA.blue, toRGBA.blue, v);
42
+ blended.alpha = mixNumber(fromRGBA.alpha, toRGBA.alpha, v);
43
+ return rgba.transform(blended);
44
+ };
45
+ };
46
+
47
+ export { mixColor, mixLinearColor };
@@ -0,0 +1,94 @@
1
+ import { mixNumber as mixNumber$1 } from './number.mjs';
2
+ import { mixColor } from './color.mjs';
3
+ import { pipe } from '../pipe.mjs';
4
+ import { warning } from '../errors.mjs';
5
+ import { color } from '../../value/types/color/index.mjs';
6
+ import { complex, analyseComplexValue } from '../../value/types/complex/index.mjs';
7
+ import { isCSSVariableToken } from '../../render/dom/utils/is-css-variable.mjs';
8
+ import { invisibleValues, mixVisibility } from './visibility.mjs';
9
+ import { mixImmediate } from './immediate.mjs';
10
+
11
+ function mixNumber(a, b) {
12
+ return (p) => mixNumber$1(a, b, p);
13
+ }
14
+ function getMixer(a) {
15
+ if (typeof a === "number") {
16
+ return mixNumber;
17
+ }
18
+ else if (typeof a === "string") {
19
+ return isCSSVariableToken(a)
20
+ ? mixImmediate
21
+ : color.test(a)
22
+ ? mixColor
23
+ : mixComplex;
24
+ }
25
+ else if (Array.isArray(a)) {
26
+ return mixArray;
27
+ }
28
+ else if (typeof a === "object") {
29
+ return color.test(a) ? mixColor : mixObject;
30
+ }
31
+ return mixImmediate;
32
+ }
33
+ function mixArray(a, b) {
34
+ const output = [...a];
35
+ const numValues = output.length;
36
+ const blendValue = a.map((v, i) => getMixer(v)(v, b[i]));
37
+ return (p) => {
38
+ for (let i = 0; i < numValues; i++) {
39
+ output[i] = blendValue[i](p);
40
+ }
41
+ return output;
42
+ };
43
+ }
44
+ function mixObject(a, b) {
45
+ const output = { ...a, ...b };
46
+ const blendValue = {};
47
+ for (const key in output) {
48
+ if (a[key] !== undefined && b[key] !== undefined) {
49
+ blendValue[key] = getMixer(a[key])(a[key], b[key]);
50
+ }
51
+ }
52
+ return (v) => {
53
+ for (const key in blendValue) {
54
+ output[key] = blendValue[key](v);
55
+ }
56
+ return output;
57
+ };
58
+ }
59
+ function matchOrder(origin, target) {
60
+ var _a;
61
+ const orderedOrigin = [];
62
+ const pointers = { color: 0, var: 0, number: 0 };
63
+ for (let i = 0; i < target.values.length; i++) {
64
+ const type = target.types[i];
65
+ const originIndex = origin.indexes[type][pointers[type]];
66
+ const originValue = (_a = origin.values[originIndex]) !== null && _a !== void 0 ? _a : 0;
67
+ orderedOrigin[i] = originValue;
68
+ pointers[type]++;
69
+ }
70
+ return orderedOrigin;
71
+ }
72
+ const mixComplex = (origin, target) => {
73
+ const template = complex.createTransformer(target);
74
+ const originStats = analyseComplexValue(origin);
75
+ const targetStats = analyseComplexValue(target);
76
+ const canInterpolate = originStats.indexes.var.length === targetStats.indexes.var.length &&
77
+ originStats.indexes.color.length === targetStats.indexes.color.length &&
78
+ originStats.indexes.number.length >= targetStats.indexes.number.length;
79
+ if (canInterpolate) {
80
+ if ((invisibleValues.has(origin) &&
81
+ !targetStats.values.length) ||
82
+ (invisibleValues.has(target) &&
83
+ !originStats.values.length)) {
84
+ return mixVisibility(origin, target);
85
+ }
86
+ return pipe(mixArray(matchOrder(originStats, targetStats), targetStats.values), template);
87
+ }
88
+ else {
89
+ warning(true, `Complex values '${origin}' and '${target}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`);
90
+ return mixImmediate(origin, target);
91
+ }
92
+ };
93
+
94
+ export { getMixer, mixArray, mixComplex, mixObject };
@@ -0,0 +1,5 @@
1
+ function mixImmediate(a, b) {
2
+ return (p) => (p > 0 ? b : a);
3
+ }
4
+
5
+ export { mixImmediate };
@@ -0,0 +1,14 @@
1
+ import { getMixer } from './complex.mjs';
2
+ import { mixNumber } from './number.mjs';
3
+
4
+ function mix(from, to, p) {
5
+ if (typeof from === "number" &&
6
+ typeof to === "number" &&
7
+ typeof p === "number") {
8
+ return mixNumber(from, to, p);
9
+ }
10
+ const mixer = getMixer(from);
11
+ return mixer(from, to);
12
+ }
13
+
14
+ export { mix };
@@ -0,0 +1,26 @@
1
+ /*
2
+ Value in range from progress
3
+
4
+ Given a lower limit and an upper limit, we return the value within
5
+ that range as expressed by progress (usually a number from 0 to 1)
6
+
7
+ So progress = 0.5 would change
8
+
9
+ from -------- to
10
+
11
+ to
12
+
13
+ from ---- to
14
+
15
+ E.g. from = 10, to = 20, progress = 0.5 => 15
16
+
17
+ @param [number]: Lower limit of range
18
+ @param [number]: Upper limit of range
19
+ @param [number]: The progress between lower and upper limits expressed 0-1
20
+ @return [number]: Value as calculated from progress within range (not limited within range)
21
+ */
22
+ const mixNumber = (from, to, progress) => {
23
+ return from + (to - from) * progress;
24
+ };
25
+
26
+ export { mixNumber };
@@ -0,0 +1,16 @@
1
+ const invisibleValues = new Set(["none", "hidden"]);
2
+ /**
3
+ * Returns a function that, when provided a progress value between 0 and 1,
4
+ * will return the "none" or "hidden" string only when the progress is that of
5
+ * the origin or target.
6
+ */
7
+ function mixVisibility(origin, target) {
8
+ if (invisibleValues.has(origin)) {
9
+ return (p) => (p <= 0 ? origin : target);
10
+ }
11
+ else {
12
+ return (p) => (p >= 1 ? target : origin);
13
+ }
14
+ }
15
+
16
+ export { invisibleValues, mixVisibility };
@@ -0,0 +1,3 @@
1
+ const noop = (any) => any;
2
+
3
+ export { noop };
@@ -0,0 +1,9 @@
1
+ import { fillOffset } from './fill.mjs';
2
+
3
+ function defaultOffset(arr) {
4
+ const offset = [0];
5
+ fillOffset(offset, arr.length - 1);
6
+ return offset;
7
+ }
8
+
9
+ export { defaultOffset };
@@ -0,0 +1,12 @@
1
+ import { mixNumber } from '../mix/number.mjs';
2
+ import { progress } from '../progress.mjs';
3
+
4
+ function fillOffset(offset, remaining) {
5
+ const min = offset[offset.length - 1];
6
+ for (let i = 1; i <= remaining; i++) {
7
+ const offsetProgress = progress(0, remaining, i);
8
+ offset.push(mixNumber(min, 1, offsetProgress));
9
+ }
10
+ }
11
+
12
+ export { fillOffset };
@@ -0,0 +1,5 @@
1
+ function convertOffsetToTimes(offset, duration) {
2
+ return offset.map((o) => o * duration);
3
+ }
4
+
5
+ export { convertOffsetToTimes };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Pipe
3
+ * Compose other transformers to run linearily
4
+ * pipe(min(20), max(40))
5
+ * @param {...functions} transformers
6
+ * @return {function}
7
+ */
8
+ const combineFunctions = (a, b) => (v) => b(a(v));
9
+ const pipe = (...transformers) => transformers.reduce(combineFunctions);
10
+
11
+ export { pipe };
@@ -0,0 +1,18 @@
1
+ /*
2
+ Progress within given range
3
+
4
+ Given a lower limit and an upper limit, we return the progress
5
+ (expressed as a number 0-1) represented by the given value, and
6
+ limit that progress to within 0-1.
7
+
8
+ @param [number]: Lower limit
9
+ @param [number]: Upper limit
10
+ @param [number]: Value to find progress within given range
11
+ @return [number]: Progress of value within range as expressed 0-1
12
+ */
13
+ const progress = (from, to, value) => {
14
+ const toFromDifference = to - from;
15
+ return toFromDifference === 0 ? 1 : (value - from) / toFromDifference;
16
+ };
17
+
18
+ export { progress };
@@ -0,0 +1,19 @@
1
+ import { isBrowser } from '../is-browser.mjs';
2
+ import { hasReducedMotionListener, prefersReducedMotion } from './state.mjs';
3
+
4
+ function initPrefersReducedMotion() {
5
+ hasReducedMotionListener.current = true;
6
+ if (!isBrowser)
7
+ return;
8
+ if (window.matchMedia) {
9
+ const motionMediaQuery = window.matchMedia("(prefers-reduced-motion)");
10
+ const setReducedMotionPreferences = () => (prefersReducedMotion.current = motionMediaQuery.matches);
11
+ motionMediaQuery.addListener(setReducedMotionPreferences);
12
+ setReducedMotionPreferences();
13
+ }
14
+ else {
15
+ prefersReducedMotion.current = false;
16
+ }
17
+ }
18
+
19
+ export { initPrefersReducedMotion };
@@ -0,0 +1,5 @@
1
+ // Does this device prefer reduced motion? Returns `null` server-side.
2
+ const prefersReducedMotion = { current: null };
3
+ const hasReducedMotionListener = { current: false };
4
+
5
+ export { hasReducedMotionListener, prefersReducedMotion };
@@ -0,0 +1,11 @@
1
+ import { isKeyframesTarget } from '../animation/utils/is-keyframes-target.mjs';
2
+
3
+ const isCustomValue = (v) => {
4
+ return Boolean(v && typeof v === "object" && v.mix && v.toValue);
5
+ };
6
+ const resolveFinalValueInKeyframes = (v) => {
7
+ // TODO maybe throw if v.length - 1 is placeholder token?
8
+ return isKeyframesTarget(v) ? v[v.length - 1] || 0 : v;
9
+ };
10
+
11
+ export { isCustomValue, resolveFinalValueInKeyframes };
@@ -0,0 +1,14 @@
1
+ function shallowCompare(next, prev) {
2
+ if (!Array.isArray(prev))
3
+ return false;
4
+ const prevLength = prev.length;
5
+ if (prevLength !== next.length)
6
+ return false;
7
+ for (let i = 0; i < prevLength; i++) {
8
+ if (prev[i] !== next[i])
9
+ return false;
10
+ }
11
+ return true;
12
+ }
13
+
14
+ export { shallowCompare };
@@ -0,0 +1,40 @@
1
+ import { addUniqueItem, removeItem } from './array.mjs';
2
+
3
+ class SubscriptionManager {
4
+ constructor() {
5
+ this.subscriptions = [];
6
+ }
7
+ add(handler) {
8
+ addUniqueItem(this.subscriptions, handler);
9
+ return () => removeItem(this.subscriptions, handler);
10
+ }
11
+ notify(a, b, c) {
12
+ const numSubscriptions = this.subscriptions.length;
13
+ if (!numSubscriptions)
14
+ return;
15
+ if (numSubscriptions === 1) {
16
+ /**
17
+ * If there's only a single handler we can just call it without invoking a loop.
18
+ */
19
+ this.subscriptions[0](a, b, c);
20
+ }
21
+ else {
22
+ for (let i = 0; i < numSubscriptions; i++) {
23
+ /**
24
+ * Check whether the handler exists before firing as it's possible
25
+ * the subscriptions were modified during this loop running.
26
+ */
27
+ const handler = this.subscriptions[i];
28
+ handler && handler(a, b, c);
29
+ }
30
+ }
31
+ }
32
+ getSize() {
33
+ return this.subscriptions.length;
34
+ }
35
+ clear() {
36
+ this.subscriptions.length = 0;
37
+ }
38
+ }
39
+
40
+ export { SubscriptionManager };