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.
- package/.turbo/turbo-build.log +32 -0
- package/{LICENSE → LICENSE.md} +2 -2
- package/README.md +99 -7
- package/dist/cjs/index.js +6117 -0
- package/dist/cjs/react-client.js +10003 -0
- package/dist/cjs/react-m.js +1852 -0
- package/dist/es/framer-motion/dist/es/animation/GroupPlaybackControls.mjs +78 -0
- package/dist/es/framer-motion/dist/es/animation/animate/index.mjs +34 -0
- package/dist/es/framer-motion/dist/es/animation/animate/resolve-subjects.mjs +19 -0
- package/dist/es/framer-motion/dist/es/animation/animate/sequence.mjs +14 -0
- package/dist/es/framer-motion/dist/es/animation/animate/single-value.mjs +11 -0
- package/dist/es/framer-motion/dist/es/animation/animate/subject.mjs +52 -0
- package/dist/es/framer-motion/dist/es/animation/animators/AcceleratedAnimation.mjs +318 -0
- package/dist/es/framer-motion/dist/es/animation/animators/BaseAnimation.mjs +113 -0
- package/dist/es/framer-motion/dist/es/animation/animators/MainThreadAnimation.mjs +384 -0
- package/dist/es/framer-motion/dist/es/animation/animators/drivers/driver-frameloop.mjs +17 -0
- package/dist/es/framer-motion/dist/es/animation/animators/utils/accelerated-values.mjs +14 -0
- package/dist/es/framer-motion/dist/es/animation/animators/utils/can-animate.mjs +42 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/NativeAnimation.mjs +169 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/animate-elements.mjs +36 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/animate-style.mjs +12 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/easing.mjs +44 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/index.mjs +23 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/attach-timeline.mjs +6 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs +12 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/linear.mjs +15 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/memo-supports.mjs +9 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/style.mjs +8 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/supports-flags.mjs +9 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/supports-linear-easing.mjs +15 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/supports-partial-keyframes.mjs +13 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/supports-waapi.mjs +5 -0
- package/dist/es/framer-motion/dist/es/animation/generators/inertia.mjs +87 -0
- package/dist/es/framer-motion/dist/es/animation/generators/keyframes.mjs +51 -0
- package/dist/es/framer-motion/dist/es/animation/generators/spring/find.mjs +89 -0
- package/dist/es/framer-motion/dist/es/animation/generators/spring/index.mjs +129 -0
- package/dist/es/framer-motion/dist/es/animation/generators/utils/calc-duration.mjs +17 -0
- package/dist/es/framer-motion/dist/es/animation/generators/utils/is-generator.mjs +5 -0
- package/dist/es/framer-motion/dist/es/animation/generators/utils/velocity.mjs +9 -0
- package/dist/es/framer-motion/dist/es/animation/hooks/animation-controls.mjs +80 -0
- package/dist/es/framer-motion/dist/es/animation/hooks/use-animate-style.mjs +17 -0
- package/dist/es/framer-motion/dist/es/animation/hooks/use-animate.mjs +17 -0
- package/dist/es/framer-motion/dist/es/animation/hooks/use-animated-state.mjs +64 -0
- package/dist/es/framer-motion/dist/es/animation/hooks/use-animation.mjs +41 -0
- package/dist/es/framer-motion/dist/es/animation/interfaces/motion-value.mjs +113 -0
- package/dist/es/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs +75 -0
- package/dist/es/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs +66 -0
- package/dist/es/framer-motion/dist/es/animation/interfaces/visual-element.mjs +26 -0
- package/dist/es/framer-motion/dist/es/animation/optimized-appear/data-id.mjs +6 -0
- package/dist/es/framer-motion/dist/es/animation/optimized-appear/get-appear-id.mjs +7 -0
- package/dist/es/framer-motion/dist/es/animation/optimized-appear/handoff.mjs +40 -0
- package/dist/es/framer-motion/dist/es/animation/optimized-appear/start.mjs +173 -0
- package/dist/es/framer-motion/dist/es/animation/optimized-appear/store-id.mjs +8 -0
- package/dist/es/framer-motion/dist/es/animation/optimized-appear/store.mjs +4 -0
- package/dist/es/framer-motion/dist/es/animation/sequence/create.mjs +230 -0
- package/dist/es/framer-motion/dist/es/animation/sequence/utils/calc-time.mjs +21 -0
- package/dist/es/framer-motion/dist/es/animation/sequence/utils/edit.mjs +31 -0
- package/dist/es/framer-motion/dist/es/animation/sequence/utils/sort.mjs +14 -0
- package/dist/es/framer-motion/dist/es/animation/utils/create-visual-element.mjs +44 -0
- package/dist/es/framer-motion/dist/es/animation/utils/default-transitions.mjs +40 -0
- package/dist/es/framer-motion/dist/es/animation/utils/get-value-transition.mjs +9 -0
- package/dist/es/framer-motion/dist/es/animation/utils/is-animatable.mjs +30 -0
- package/dist/es/framer-motion/dist/es/animation/utils/is-animation-controls.mjs +7 -0
- package/dist/es/framer-motion/dist/es/animation/utils/is-dom-keyframes.mjs +5 -0
- package/dist/es/framer-motion/dist/es/animation/utils/is-keyframes-target.mjs +5 -0
- package/dist/es/framer-motion/dist/es/animation/utils/is-none.mjs +15 -0
- package/dist/es/framer-motion/dist/es/animation/utils/is-transition-defined.mjs +10 -0
- package/dist/es/framer-motion/dist/es/animation/utils/stagger.mjs +26 -0
- package/dist/es/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs +77 -0
- package/dist/es/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs +61 -0
- package/dist/es/framer-motion/dist/es/components/AnimatePresence/index.mjs +163 -0
- package/dist/es/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs +66 -0
- package/dist/es/framer-motion/dist/es/components/AnimatePresence/utils.mjs +14 -0
- package/dist/es/framer-motion/dist/es/components/AnimateSharedLayout.mjs +15 -0
- package/dist/es/framer-motion/dist/es/components/LayoutGroup/index.mjs +32 -0
- package/dist/es/framer-motion/dist/es/components/LazyMotion/index.mjs +68 -0
- package/dist/es/framer-motion/dist/es/components/MotionConfig/index.mjs +48 -0
- package/dist/es/framer-motion/dist/es/components/Reorder/Group.mjs +53 -0
- package/dist/es/framer-motion/dist/es/components/Reorder/Item.mjs +34 -0
- package/dist/es/framer-motion/dist/es/components/Reorder/namespace.mjs +2 -0
- package/dist/es/framer-motion/dist/es/components/Reorder/utils/check-reorder.mjs +24 -0
- package/dist/es/framer-motion/dist/es/context/DeprecatedLayoutGroupContext.mjs +10 -0
- package/dist/es/framer-motion/dist/es/context/LayoutGroupContext.mjs +6 -0
- package/dist/es/framer-motion/dist/es/context/LazyContext.mjs +6 -0
- package/dist/es/framer-motion/dist/es/context/MotionConfigContext.mjs +13 -0
- package/dist/es/framer-motion/dist/es/context/MotionContext/create.mjs +13 -0
- package/dist/es/framer-motion/dist/es/context/MotionContext/index.mjs +6 -0
- package/dist/es/framer-motion/dist/es/context/MotionContext/utils.mjs +17 -0
- package/dist/es/framer-motion/dist/es/context/PresenceContext.mjs +9 -0
- package/dist/es/framer-motion/dist/es/context/ReorderContext.mjs +6 -0
- package/dist/es/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs +9 -0
- package/dist/es/framer-motion/dist/es/easing/anticipate.mjs +5 -0
- package/dist/es/framer-motion/dist/es/easing/back.mjs +9 -0
- package/dist/es/framer-motion/dist/es/easing/circ.mjs +8 -0
- package/dist/es/framer-motion/dist/es/easing/cubic-bezier.mjs +51 -0
- package/dist/es/framer-motion/dist/es/easing/ease.mjs +7 -0
- package/dist/es/framer-motion/dist/es/easing/modifiers/mirror.mjs +5 -0
- package/dist/es/framer-motion/dist/es/easing/modifiers/reverse.mjs +5 -0
- package/dist/es/framer-motion/dist/es/easing/steps.mjs +15 -0
- package/dist/es/framer-motion/dist/es/easing/utils/create-generator-easing.mjs +17 -0
- package/dist/es/framer-motion/dist/es/easing/utils/get-easing-for-segment.mjs +8 -0
- package/dist/es/framer-motion/dist/es/easing/utils/is-bezier-definition.mjs +3 -0
- package/dist/es/framer-motion/dist/es/easing/utils/is-easing-array.mjs +5 -0
- package/dist/es/framer-motion/dist/es/easing/utils/map.mjs +38 -0
- package/dist/es/framer-motion/dist/es/events/add-dom-event.mjs +6 -0
- package/dist/es/framer-motion/dist/es/events/add-pointer-event.mjs +8 -0
- package/dist/es/framer-motion/dist/es/events/event-info.mjs +15 -0
- package/dist/es/framer-motion/dist/es/events/use-dom-event.mjs +34 -0
- package/dist/es/framer-motion/dist/es/events/utils/is-primary-pointer.mjs +18 -0
- package/dist/es/framer-motion/dist/es/frameloop/batcher.mjs +74 -0
- package/dist/es/framer-motion/dist/es/frameloop/frame.mjs +6 -0
- package/dist/es/framer-motion/dist/es/frameloop/index-legacy.mjs +20 -0
- package/dist/es/framer-motion/dist/es/frameloop/microtask.mjs +5 -0
- package/dist/es/framer-motion/dist/es/frameloop/render-step.mjs +80 -0
- package/dist/es/framer-motion/dist/es/frameloop/sync-time.mjs +31 -0
- package/dist/es/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs +487 -0
- package/dist/es/framer-motion/dist/es/gestures/drag/index.mjs +27 -0
- package/dist/es/framer-motion/dist/es/gestures/drag/use-drag-controls.mjs +88 -0
- package/dist/es/framer-motion/dist/es/gestures/drag/utils/constraints.mjs +129 -0
- package/dist/es/framer-motion/dist/es/gestures/drag/utils/lock.mjs +53 -0
- package/dist/es/framer-motion/dist/es/gestures/focus.mjs +41 -0
- package/dist/es/framer-motion/dist/es/gestures/hover.mjs +33 -0
- package/dist/es/framer-motion/dist/es/gestures/pan/PanSession.mjs +156 -0
- package/dist/es/framer-motion/dist/es/gestures/pan/index.mjs +50 -0
- package/dist/es/framer-motion/dist/es/gestures/press.mjs +130 -0
- package/dist/es/framer-motion/dist/es/gestures/utils/is-node-or-child.mjs +20 -0
- package/dist/es/framer-motion/dist/es/motion/features/Feature.mjs +9 -0
- package/dist/es/framer-motion/dist/es/motion/features/animation/exit.mjs +31 -0
- package/dist/es/framer-motion/dist/es/motion/features/animation/index.mjs +41 -0
- package/dist/es/framer-motion/dist/es/motion/features/animations.mjs +13 -0
- package/dist/es/framer-motion/dist/es/motion/features/definitions.mjs +28 -0
- package/dist/es/framer-motion/dist/es/motion/features/drag.mjs +17 -0
- package/dist/es/framer-motion/dist/es/motion/features/gestures.mjs +21 -0
- package/dist/es/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs +134 -0
- package/dist/es/framer-motion/dist/es/motion/features/layout.mjs +11 -0
- package/dist/es/framer-motion/dist/es/motion/features/load-features.mjs +12 -0
- package/dist/es/framer-motion/dist/es/motion/features/viewport/index.mjs +72 -0
- package/dist/es/framer-motion/dist/es/motion/features/viewport/observers.mjs +49 -0
- package/dist/es/framer-motion/dist/es/motion/index.mjs +98 -0
- package/dist/es/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs +11 -0
- package/dist/es/framer-motion/dist/es/motion/utils/is-motion-component.mjs +12 -0
- package/dist/es/framer-motion/dist/es/motion/utils/symbol.mjs +3 -0
- package/dist/es/framer-motion/dist/es/motion/utils/unwrap-motion-component.mjs +17 -0
- package/dist/es/framer-motion/dist/es/motion/utils/use-motion-ref.mjs +36 -0
- package/dist/es/framer-motion/dist/es/motion/utils/use-visual-element.mjs +134 -0
- package/dist/es/framer-motion/dist/es/motion/utils/use-visual-state.mjs +82 -0
- package/dist/es/framer-motion/dist/es/motion/utils/valid-prop.mjs +57 -0
- package/dist/es/framer-motion/dist/es/projection/animation/mix-values.mjs +93 -0
- package/dist/es/framer-motion/dist/es/projection/geometry/conversion.mjs +33 -0
- package/dist/es/framer-motion/dist/es/projection/geometry/copy.mjs +31 -0
- package/dist/es/framer-motion/dist/es/projection/geometry/delta-apply.mjs +119 -0
- package/dist/es/framer-motion/dist/es/projection/geometry/delta-calc.mjs +52 -0
- package/dist/es/framer-motion/dist/es/projection/geometry/delta-remove.mjs +54 -0
- package/dist/es/framer-motion/dist/es/projection/geometry/models.mjs +17 -0
- package/dist/es/framer-motion/dist/es/projection/geometry/utils.mjs +31 -0
- package/dist/es/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs +13 -0
- package/dist/es/framer-motion/dist/es/projection/node/HTMLProjectionNode.mjs +27 -0
- package/dist/es/framer-motion/dist/es/projection/node/create-projection-node.mjs +1583 -0
- package/dist/es/framer-motion/dist/es/projection/node/group.mjs +24 -0
- package/dist/es/framer-motion/dist/es/projection/node/state.mjs +19 -0
- package/dist/es/framer-motion/dist/es/projection/shared/stack.mjs +112 -0
- package/dist/es/framer-motion/dist/es/projection/styles/scale-border-radius.mjs +41 -0
- package/dist/es/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs +35 -0
- package/dist/es/framer-motion/dist/es/projection/styles/scale-correction.mjs +6 -0
- package/dist/es/framer-motion/dist/es/projection/styles/transform.mjs +49 -0
- package/dist/es/framer-motion/dist/es/projection/use-instant-layout-transition.mjs +14 -0
- package/dist/es/framer-motion/dist/es/projection/use-reset-projection.mjs +14 -0
- package/dist/es/framer-motion/dist/es/projection/utils/each-axis.mjs +5 -0
- package/dist/es/framer-motion/dist/es/projection/utils/has-transform.mjs +26 -0
- package/dist/es/framer-motion/dist/es/projection/utils/measure.mjs +17 -0
- package/dist/es/framer-motion/dist/es/render/VisualElement.mjs +477 -0
- package/dist/es/framer-motion/dist/es/render/components/create-factory.mjs +23 -0
- package/dist/es/framer-motion/dist/es/render/components/create-proxy.mjs +38 -0
- package/dist/es/framer-motion/dist/es/render/components/m/create.mjs +6 -0
- package/dist/es/framer-motion/dist/es/render/components/m/elements.mjs +227 -0
- package/dist/es/framer-motion/dist/es/render/components/m/proxy.mjs +6 -0
- package/dist/es/framer-motion/dist/es/render/components/motion/create.mjs +15 -0
- package/dist/es/framer-motion/dist/es/render/components/motion/elements.mjs +194 -0
- package/dist/es/framer-motion/dist/es/render/components/motion/proxy.mjs +6 -0
- package/dist/es/framer-motion/dist/es/render/dom/DOMKeyframesResolver.mjs +130 -0
- package/dist/es/framer-motion/dist/es/render/dom/DOMVisualElement.mjs +28 -0
- package/dist/es/framer-motion/dist/es/render/dom/create-visual-element.mjs +14 -0
- package/dist/es/framer-motion/dist/es/render/dom/features-animation.mjs +14 -0
- package/dist/es/framer-motion/dist/es/render/dom/features-max.mjs +14 -0
- package/dist/es/framer-motion/dist/es/render/dom/features-min.mjs +12 -0
- package/dist/es/framer-motion/dist/es/render/dom/resize/handle-element.mjs +64 -0
- package/dist/es/framer-motion/dist/es/render/dom/resize/handle-window.mjs +30 -0
- package/dist/es/framer-motion/dist/es/render/dom/resize/index.mjs +8 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/index.mjs +80 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/info.mjs +56 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/observe.mjs +18 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/edge.mjs +45 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/index.mjs +59 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/inset.mjs +45 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/offset.mjs +35 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/presets.mjs +20 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/on-scroll-handler.mjs +48 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/supports.mjs +5 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/track.mjs +84 -0
- package/dist/es/framer-motion/dist/es/render/dom/use-render.mjs +33 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs +6 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/css-variables-conversion.mjs +42 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/filter-props.mjs +59 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/is-css-variable.mjs +15 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs +30 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/is-svg-element.mjs +5 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/resolve-element.mjs +28 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/unit-conversion.mjs +65 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/animatable-none.mjs +15 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/defaults.mjs +30 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/dimensions.mjs +15 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/find.mjs +15 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/get-as-type.mjs +10 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/number-browser.mjs +41 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/number.mjs +18 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/test.mjs +6 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/transform.mjs +31 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/type-auto.mjs +9 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/type-int.mjs +8 -0
- package/dist/es/framer-motion/dist/es/render/dom/viewport/index.mjs +43 -0
- package/dist/es/framer-motion/dist/es/render/html/HTMLVisualElement.mjs +57 -0
- package/dist/es/framer-motion/dist/es/render/html/config-motion.mjs +12 -0
- package/dist/es/framer-motion/dist/es/render/html/use-props.mjs +57 -0
- package/dist/es/framer-motion/dist/es/render/html/utils/build-styles.mjs +65 -0
- package/dist/es/framer-motion/dist/es/render/html/utils/build-transform.mjs +62 -0
- package/dist/es/framer-motion/dist/es/render/html/utils/create-render-state.mjs +8 -0
- package/dist/es/framer-motion/dist/es/render/html/utils/make-none-animatable.mjs +30 -0
- package/dist/es/framer-motion/dist/es/render/html/utils/render.mjs +9 -0
- package/dist/es/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs +20 -0
- package/dist/es/framer-motion/dist/es/render/html/utils/transform.mjs +28 -0
- package/dist/es/framer-motion/dist/es/render/object/ObjectVisualElement.mjs +41 -0
- package/dist/es/framer-motion/dist/es/render/store.mjs +3 -0
- package/dist/es/framer-motion/dist/es/render/svg/SVGVisualElement.mjs +45 -0
- package/dist/es/framer-motion/dist/es/render/svg/config-motion.mjs +40 -0
- package/dist/es/framer-motion/dist/es/render/svg/lowercase-elements.mjs +33 -0
- package/dist/es/framer-motion/dist/es/render/svg/use-props.mjs +24 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/build-attrs.mjs +52 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/camel-case-attrs.mjs +30 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/create-render-state.mjs +8 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/is-svg-tag.mjs +3 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/path.mjs +32 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/render.mjs +12 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs +19 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/transform-origin.mjs +18 -0
- package/dist/es/framer-motion/dist/es/render/utils/KeyframesResolver.mjs +164 -0
- package/dist/es/framer-motion/dist/es/render/utils/animation-state.mjs +332 -0
- package/dist/es/framer-motion/dist/es/render/utils/compare-by-depth.mjs +3 -0
- package/dist/es/framer-motion/dist/es/render/utils/flat-tree.mjs +24 -0
- package/dist/es/framer-motion/dist/es/render/utils/get-variant-context.mjs +28 -0
- package/dist/es/framer-motion/dist/es/render/utils/is-controlling-variants.mjs +13 -0
- package/dist/es/framer-motion/dist/es/render/utils/is-variant-label.mjs +8 -0
- package/dist/es/framer-motion/dist/es/render/utils/motion-values.mjs +59 -0
- package/dist/es/framer-motion/dist/es/render/utils/resolve-dynamic-variants.mjs +8 -0
- package/dist/es/framer-motion/dist/es/render/utils/resolve-variants.mjs +36 -0
- package/dist/es/framer-motion/dist/es/render/utils/setters.mjs +27 -0
- package/dist/es/framer-motion/dist/es/render/utils/variant-props.mjs +12 -0
- package/dist/es/framer-motion/dist/es/utils/GlobalConfig.mjs +6 -0
- package/dist/es/framer-motion/dist/es/utils/array.mjs +21 -0
- package/dist/es/framer-motion/dist/es/utils/clamp.mjs +9 -0
- package/dist/es/framer-motion/dist/es/utils/delay.mjs +24 -0
- package/dist/es/framer-motion/dist/es/utils/distance.mjs +9 -0
- package/dist/es/framer-motion/dist/es/utils/errors.mjs +18 -0
- package/dist/es/framer-motion/dist/es/utils/get-context-window.mjs +6 -0
- package/dist/es/framer-motion/dist/es/utils/hsla-to-rgba.mjs +42 -0
- package/dist/es/framer-motion/dist/es/utils/interpolate.mjs +75 -0
- package/dist/es/framer-motion/dist/es/utils/is-browser.mjs +3 -0
- package/dist/es/framer-motion/dist/es/utils/is-numerical-string.mjs +6 -0
- package/dist/es/framer-motion/dist/es/utils/is-ref-object.mjs +7 -0
- package/dist/es/framer-motion/dist/es/utils/is-zero-value-string.mjs +6 -0
- package/dist/es/framer-motion/dist/es/utils/memo.mjs +10 -0
- package/dist/es/framer-motion/dist/es/utils/mix/color.mjs +47 -0
- package/dist/es/framer-motion/dist/es/utils/mix/complex.mjs +94 -0
- package/dist/es/framer-motion/dist/es/utils/mix/immediate.mjs +5 -0
- package/dist/es/framer-motion/dist/es/utils/mix/index.mjs +14 -0
- package/dist/es/framer-motion/dist/es/utils/mix/number.mjs +26 -0
- package/dist/es/framer-motion/dist/es/utils/mix/visibility.mjs +16 -0
- package/dist/es/framer-motion/dist/es/utils/noop.mjs +3 -0
- package/dist/es/framer-motion/dist/es/utils/offsets/default.mjs +9 -0
- package/dist/es/framer-motion/dist/es/utils/offsets/fill.mjs +12 -0
- package/dist/es/framer-motion/dist/es/utils/offsets/time.mjs +5 -0
- package/dist/es/framer-motion/dist/es/utils/pipe.mjs +11 -0
- package/dist/es/framer-motion/dist/es/utils/progress.mjs +18 -0
- package/dist/es/framer-motion/dist/es/utils/reduced-motion/index.mjs +19 -0
- package/dist/es/framer-motion/dist/es/utils/reduced-motion/state.mjs +5 -0
- package/dist/es/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion-config.mjs +19 -0
- package/dist/es/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.mjs +47 -0
- package/dist/es/framer-motion/dist/es/utils/resolve-value.mjs +11 -0
- package/dist/es/framer-motion/dist/es/utils/shallow-compare.mjs +14 -0
- package/dist/es/framer-motion/dist/es/utils/subscription-manager.mjs +40 -0
- package/dist/es/framer-motion/dist/es/utils/time-conversion.mjs +10 -0
- package/dist/es/framer-motion/dist/es/utils/transform.mjs +21 -0
- package/dist/es/framer-motion/dist/es/utils/use-animation-frame.mjs +21 -0
- package/dist/es/framer-motion/dist/es/utils/use-constant.mjs +18 -0
- package/dist/es/framer-motion/dist/es/utils/use-cycle.mjs +47 -0
- package/dist/es/framer-motion/dist/es/utils/use-force-update.mjs +19 -0
- package/dist/es/framer-motion/dist/es/utils/use-in-view.mjs +23 -0
- package/dist/es/framer-motion/dist/es/utils/use-instant-transition-state.mjs +5 -0
- package/dist/es/framer-motion/dist/es/utils/use-instant-transition.mjs +41 -0
- package/dist/es/framer-motion/dist/es/utils/use-is-mounted.mjs +15 -0
- package/dist/es/framer-motion/dist/es/utils/use-isomorphic-effect.mjs +6 -0
- package/dist/es/framer-motion/dist/es/utils/use-motion-value-event.mjs +13 -0
- package/dist/es/framer-motion/dist/es/utils/use-unmount-effect.mjs +7 -0
- package/dist/es/framer-motion/dist/es/utils/velocity-per-second.mjs +11 -0
- package/dist/es/framer-motion/dist/es/utils/warn-once.mjs +11 -0
- package/dist/es/framer-motion/dist/es/utils/wrap.mjs +6 -0
- package/dist/es/framer-motion/dist/es/value/index.mjs +319 -0
- package/dist/es/framer-motion/dist/es/value/scroll/use-element-scroll.mjs +14 -0
- package/dist/es/framer-motion/dist/es/value/scroll/use-viewport-scroll.mjs +14 -0
- package/dist/es/framer-motion/dist/es/value/types/color/hex.mjs +40 -0
- package/dist/es/framer-motion/dist/es/value/types/color/hsla.mjs +22 -0
- package/dist/es/framer-motion/dist/es/value/types/color/index.mjs +27 -0
- package/dist/es/framer-motion/dist/es/value/types/color/rgba.mjs +25 -0
- package/dist/es/framer-motion/dist/es/value/types/color/utils.mjs +29 -0
- package/dist/es/framer-motion/dist/es/value/types/complex/filter.mjs +30 -0
- package/dist/es/framer-motion/dist/es/value/types/complex/index.mjs +92 -0
- package/dist/es/framer-motion/dist/es/value/types/numbers/index.mjs +17 -0
- package/dist/es/framer-motion/dist/es/value/types/numbers/units.mjs +17 -0
- package/dist/es/framer-motion/dist/es/value/types/utils/color-regex.mjs +3 -0
- package/dist/es/framer-motion/dist/es/value/types/utils/float-regex.mjs +3 -0
- package/dist/es/framer-motion/dist/es/value/types/utils/is-nullish.mjs +5 -0
- package/dist/es/framer-motion/dist/es/value/types/utils/sanitize.mjs +5 -0
- package/dist/es/framer-motion/dist/es/value/types/utils/single-color-regex.mjs +3 -0
- package/dist/es/framer-motion/dist/es/value/use-combine-values.mjs +37 -0
- package/dist/es/framer-motion/dist/es/value/use-computed.mjs +19 -0
- package/dist/es/framer-motion/dist/es/value/use-inverted-scale.mjs +52 -0
- package/dist/es/framer-motion/dist/es/value/use-motion-template.mjs +45 -0
- package/dist/es/framer-motion/dist/es/value/use-motion-value.mjs +38 -0
- package/dist/es/framer-motion/dist/es/value/use-scroll.mjs +39 -0
- package/dist/es/framer-motion/dist/es/value/use-spring.mjs +85 -0
- package/dist/es/framer-motion/dist/es/value/use-time.mjs +10 -0
- package/dist/es/framer-motion/dist/es/value/use-transform.mjs +29 -0
- package/dist/es/framer-motion/dist/es/value/use-velocity.mjs +35 -0
- package/dist/es/framer-motion/dist/es/value/use-will-change/WillChangeMotionValue.mjs +22 -0
- package/dist/es/framer-motion/dist/es/value/use-will-change/add-will-change.mjs +14 -0
- package/dist/es/framer-motion/dist/es/value/use-will-change/get-will-change-name.mjs +14 -0
- package/dist/es/framer-motion/dist/es/value/use-will-change/index.mjs +8 -0
- package/dist/es/framer-motion/dist/es/value/use-will-change/is.mjs +7 -0
- package/dist/es/framer-motion/dist/es/value/utils/is-motion-value.mjs +3 -0
- package/dist/es/framer-motion/dist/es/value/utils/resolve-motion-value.mjs +16 -0
- package/dist/es/motion/lib/index.mjs +30 -0
- package/dist/es/motion/lib/react-client.mjs +3 -0
- package/dist/es/motion/lib/react-m.mjs +3 -0
- package/dist/es/motion/lib/react.mjs +110 -0
- package/dist/index.d.ts +1 -0
- package/dist/motion.dev.js +6121 -0
- package/dist/motion.js +1 -0
- package/dist/react-client.d.ts +1 -0
- package/dist/react-m.d.ts +1 -0
- package/dist/react.d.ts +1 -0
- package/lib/index.js +1 -3
- package/lib/index.js.map +1 -1
- package/lib/react-client.js +3 -0
- package/lib/react-client.js.map +1 -0
- package/lib/react-m.js +3 -0
- package/lib/react-m.js.map +1 -0
- package/lib/react.js +3 -0
- package/lib/react.js.map +1 -0
- package/package.json +79 -29
- package/react/package.json +6 -0
- package/react-client/package.json +6 -0
- package/react-m/package.json +6 -0
- package/rollup.config.mjs +184 -0
- package/src/index.ts +1 -0
- package/src/react-client.ts +3 -0
- package/src/react-m.ts +3 -0
- package/src/react.ts +3 -0
- package/tsconfig.json +25 -0
- package/types/index.d.ts +1 -4
- package/types/react-client.d.ts +1 -0
- package/types/react-m.d.ts +1 -0
- package/types/react.d.ts +1 -0
- package/CHANGELOG.md +0 -378
- package/dist/animate.cjs.js +0 -22
- package/dist/animate.es.js +0 -19
- package/dist/main.cjs.js +0 -21
- package/dist/main.es.js +0 -3
- package/dist/motion.min.js +0 -1
- package/dist/motion.umd.js +0 -2364
- package/dist/size-index.js +0 -1
- package/lib/animate.js +0 -17
- package/lib/animate.js.map +0 -1
- package/types/animate.d.ts +0 -6
- package/types/animate.d.ts.map +0 -1
- 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,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,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,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 };
|