motion 10.18.0 → 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.
- package/.turbo/turbo-build.log +29 -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 +112 -0
- package/dist/es/framer-motion/dist/es/animation/animators/MainThreadAnimation.mjs +380 -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/interfaces/motion-value.mjs +105 -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/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/use-presence.mjs +40 -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/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/utils/is-primary-pointer.mjs +18 -0
- package/dist/es/framer-motion/dist/es/frameloop/batcher.mjs +71 -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/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/symbol.mjs +3 -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/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/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/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/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/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/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 +11 -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/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-constant.mjs +18 -0
- package/dist/es/framer-motion/dist/es/utils/use-isomorphic-effect.mjs +6 -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 +313 -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-will-change/add-will-change.mjs +14 -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/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/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 +174 -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,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A list of all valid MotionProps.
|
|
3
|
+
*
|
|
4
|
+
* @privateRemarks
|
|
5
|
+
* This doesn't throw if a `MotionProp` name is missing - it should.
|
|
6
|
+
*/
|
|
7
|
+
const validMotionProps = new Set([
|
|
8
|
+
"animate",
|
|
9
|
+
"exit",
|
|
10
|
+
"variants",
|
|
11
|
+
"initial",
|
|
12
|
+
"style",
|
|
13
|
+
"values",
|
|
14
|
+
"variants",
|
|
15
|
+
"transition",
|
|
16
|
+
"transformTemplate",
|
|
17
|
+
"custom",
|
|
18
|
+
"inherit",
|
|
19
|
+
"onBeforeLayoutMeasure",
|
|
20
|
+
"onAnimationStart",
|
|
21
|
+
"onAnimationComplete",
|
|
22
|
+
"onUpdate",
|
|
23
|
+
"onDragStart",
|
|
24
|
+
"onDrag",
|
|
25
|
+
"onDragEnd",
|
|
26
|
+
"onMeasureDragConstraints",
|
|
27
|
+
"onDirectionLock",
|
|
28
|
+
"onDragTransitionEnd",
|
|
29
|
+
"_dragX",
|
|
30
|
+
"_dragY",
|
|
31
|
+
"onHoverStart",
|
|
32
|
+
"onHoverEnd",
|
|
33
|
+
"onViewportEnter",
|
|
34
|
+
"onViewportLeave",
|
|
35
|
+
"globalTapTarget",
|
|
36
|
+
"ignoreStrict",
|
|
37
|
+
"viewport",
|
|
38
|
+
]);
|
|
39
|
+
/**
|
|
40
|
+
* Check whether a prop name is a valid `MotionProp` key.
|
|
41
|
+
*
|
|
42
|
+
* @param key - Name of the property to check
|
|
43
|
+
* @returns `true` is key is a valid `MotionProp`.
|
|
44
|
+
*
|
|
45
|
+
* @public
|
|
46
|
+
*/
|
|
47
|
+
function isValidMotionProp(key) {
|
|
48
|
+
return (key.startsWith("while") ||
|
|
49
|
+
(key.startsWith("drag") && key !== "draggable") ||
|
|
50
|
+
key.startsWith("layout") ||
|
|
51
|
+
key.startsWith("onTap") ||
|
|
52
|
+
key.startsWith("onPan") ||
|
|
53
|
+
key.startsWith("onLayout") ||
|
|
54
|
+
validMotionProps.has(key));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { isValidMotionProp };
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { circOut } from '../../easing/circ.mjs';
|
|
2
|
+
import { progress } from '../../utils/progress.mjs';
|
|
3
|
+
import { mixNumber } from '../../utils/mix/number.mjs';
|
|
4
|
+
import { noop } from '../../utils/noop.mjs';
|
|
5
|
+
import { percent, px } from '../../value/types/numbers/units.mjs';
|
|
6
|
+
|
|
7
|
+
const borders = ["TopLeft", "TopRight", "BottomLeft", "BottomRight"];
|
|
8
|
+
const numBorders = borders.length;
|
|
9
|
+
const asNumber = (value) => typeof value === "string" ? parseFloat(value) : value;
|
|
10
|
+
const isPx = (value) => typeof value === "number" || px.test(value);
|
|
11
|
+
function mixValues(target, follow, lead, progress, shouldCrossfadeOpacity, isOnlyMember) {
|
|
12
|
+
if (shouldCrossfadeOpacity) {
|
|
13
|
+
target.opacity = mixNumber(0,
|
|
14
|
+
// TODO Reinstate this if only child
|
|
15
|
+
lead.opacity !== undefined ? lead.opacity : 1, easeCrossfadeIn(progress));
|
|
16
|
+
target.opacityExit = mixNumber(follow.opacity !== undefined ? follow.opacity : 1, 0, easeCrossfadeOut(progress));
|
|
17
|
+
}
|
|
18
|
+
else if (isOnlyMember) {
|
|
19
|
+
target.opacity = mixNumber(follow.opacity !== undefined ? follow.opacity : 1, lead.opacity !== undefined ? lead.opacity : 1, progress);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Mix border radius
|
|
23
|
+
*/
|
|
24
|
+
for (let i = 0; i < numBorders; i++) {
|
|
25
|
+
const borderLabel = `border${borders[i]}Radius`;
|
|
26
|
+
let followRadius = getRadius(follow, borderLabel);
|
|
27
|
+
let leadRadius = getRadius(lead, borderLabel);
|
|
28
|
+
if (followRadius === undefined && leadRadius === undefined)
|
|
29
|
+
continue;
|
|
30
|
+
followRadius || (followRadius = 0);
|
|
31
|
+
leadRadius || (leadRadius = 0);
|
|
32
|
+
const canMix = followRadius === 0 ||
|
|
33
|
+
leadRadius === 0 ||
|
|
34
|
+
isPx(followRadius) === isPx(leadRadius);
|
|
35
|
+
if (canMix) {
|
|
36
|
+
target[borderLabel] = Math.max(mixNumber(asNumber(followRadius), asNumber(leadRadius), progress), 0);
|
|
37
|
+
if (percent.test(leadRadius) || percent.test(followRadius)) {
|
|
38
|
+
target[borderLabel] += "%";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
target[borderLabel] = leadRadius;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Mix rotation
|
|
47
|
+
*/
|
|
48
|
+
if (follow.rotate || lead.rotate) {
|
|
49
|
+
target.rotate = mixNumber(follow.rotate || 0, lead.rotate || 0, progress);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function getRadius(values, radiusName) {
|
|
53
|
+
return values[radiusName] !== undefined
|
|
54
|
+
? values[radiusName]
|
|
55
|
+
: values.borderRadius;
|
|
56
|
+
}
|
|
57
|
+
// /**
|
|
58
|
+
// * We only want to mix the background color if there's a follow element
|
|
59
|
+
// * that we're not crossfading opacity between. For instance with switch
|
|
60
|
+
// * AnimateSharedLayout animations, this helps the illusion of a continuous
|
|
61
|
+
// * element being animated but also cuts down on the number of paints triggered
|
|
62
|
+
// * for elements where opacity is doing that work for us.
|
|
63
|
+
// */
|
|
64
|
+
// if (
|
|
65
|
+
// !hasFollowElement &&
|
|
66
|
+
// latestLeadValues.backgroundColor &&
|
|
67
|
+
// latestFollowValues.backgroundColor
|
|
68
|
+
// ) {
|
|
69
|
+
// /**
|
|
70
|
+
// * This isn't ideal performance-wise as mixColor is creating a new function every frame.
|
|
71
|
+
// * We could probably create a mixer that runs at the start of the animation but
|
|
72
|
+
// * the idea behind the crossfader is that it runs dynamically between two potentially
|
|
73
|
+
// * changing targets (ie opacity or borderRadius may be animating independently via variants)
|
|
74
|
+
// */
|
|
75
|
+
// leadState.backgroundColor = followState.backgroundColor = mixColor(
|
|
76
|
+
// latestFollowValues.backgroundColor as string,
|
|
77
|
+
// latestLeadValues.backgroundColor as string
|
|
78
|
+
// )(p)
|
|
79
|
+
// }
|
|
80
|
+
const easeCrossfadeIn = /*@__PURE__*/ compress(0, 0.5, circOut);
|
|
81
|
+
const easeCrossfadeOut = /*@__PURE__*/ compress(0.5, 0.95, noop);
|
|
82
|
+
function compress(min, max, easing) {
|
|
83
|
+
return (p) => {
|
|
84
|
+
// Could replace ifs with clamp
|
|
85
|
+
if (p < min)
|
|
86
|
+
return 0;
|
|
87
|
+
if (p > max)
|
|
88
|
+
return 1;
|
|
89
|
+
return easing(progress(min, max, p));
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export { mixValues };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounding boxes tend to be defined as top, left, right, bottom. For various operations
|
|
3
|
+
* it's easier to consider each axis individually. This function returns a bounding box
|
|
4
|
+
* as a map of single-axis min/max values.
|
|
5
|
+
*/
|
|
6
|
+
function convertBoundingBoxToBox({ top, left, right, bottom, }) {
|
|
7
|
+
return {
|
|
8
|
+
x: { min: left, max: right },
|
|
9
|
+
y: { min: top, max: bottom },
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function convertBoxToBoundingBox({ x, y }) {
|
|
13
|
+
return { top: y.min, right: x.max, bottom: y.max, left: x.min };
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Applies a TransformPoint function to a bounding box. TransformPoint is usually a function
|
|
17
|
+
* provided by Framer to allow measured points to be corrected for device scaling. This is used
|
|
18
|
+
* when measuring DOM elements and DOM event points.
|
|
19
|
+
*/
|
|
20
|
+
function transformBoxPoints(point, transformPoint) {
|
|
21
|
+
if (!transformPoint)
|
|
22
|
+
return point;
|
|
23
|
+
const topLeft = transformPoint({ x: point.left, y: point.top });
|
|
24
|
+
const bottomRight = transformPoint({ x: point.right, y: point.bottom });
|
|
25
|
+
return {
|
|
26
|
+
top: topLeft.y,
|
|
27
|
+
left: topLeft.x,
|
|
28
|
+
bottom: bottomRight.y,
|
|
29
|
+
right: bottomRight.x,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { convertBoundingBoxToBox, convertBoxToBoundingBox, transformBoxPoints };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reset an axis to the provided origin box.
|
|
3
|
+
*
|
|
4
|
+
* This is a mutative operation.
|
|
5
|
+
*/
|
|
6
|
+
function copyAxisInto(axis, originAxis) {
|
|
7
|
+
axis.min = originAxis.min;
|
|
8
|
+
axis.max = originAxis.max;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Reset a box to the provided origin box.
|
|
12
|
+
*
|
|
13
|
+
* This is a mutative operation.
|
|
14
|
+
*/
|
|
15
|
+
function copyBoxInto(box, originBox) {
|
|
16
|
+
copyAxisInto(box.x, originBox.x);
|
|
17
|
+
copyAxisInto(box.y, originBox.y);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Reset a delta to the provided origin box.
|
|
21
|
+
*
|
|
22
|
+
* This is a mutative operation.
|
|
23
|
+
*/
|
|
24
|
+
function copyAxisDeltaInto(delta, originDelta) {
|
|
25
|
+
delta.translate = originDelta.translate;
|
|
26
|
+
delta.scale = originDelta.scale;
|
|
27
|
+
delta.originPoint = originDelta.originPoint;
|
|
28
|
+
delta.origin = originDelta.origin;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { copyAxisDeltaInto, copyAxisInto, copyBoxInto };
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { mixNumber } from '../../utils/mix/number.mjs';
|
|
2
|
+
import { hasTransform } from '../utils/has-transform.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Scales a point based on a factor and an originPoint
|
|
6
|
+
*/
|
|
7
|
+
function scalePoint(point, scale, originPoint) {
|
|
8
|
+
const distanceFromOrigin = point - originPoint;
|
|
9
|
+
const scaled = scale * distanceFromOrigin;
|
|
10
|
+
return originPoint + scaled;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Applies a translate/scale delta to a point
|
|
14
|
+
*/
|
|
15
|
+
function applyPointDelta(point, translate, scale, originPoint, boxScale) {
|
|
16
|
+
if (boxScale !== undefined) {
|
|
17
|
+
point = scalePoint(point, boxScale, originPoint);
|
|
18
|
+
}
|
|
19
|
+
return scalePoint(point, scale, originPoint) + translate;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Applies a translate/scale delta to an axis
|
|
23
|
+
*/
|
|
24
|
+
function applyAxisDelta(axis, translate = 0, scale = 1, originPoint, boxScale) {
|
|
25
|
+
axis.min = applyPointDelta(axis.min, translate, scale, originPoint, boxScale);
|
|
26
|
+
axis.max = applyPointDelta(axis.max, translate, scale, originPoint, boxScale);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Applies a translate/scale delta to a box
|
|
30
|
+
*/
|
|
31
|
+
function applyBoxDelta(box, { x, y }) {
|
|
32
|
+
applyAxisDelta(box.x, x.translate, x.scale, x.originPoint);
|
|
33
|
+
applyAxisDelta(box.y, y.translate, y.scale, y.originPoint);
|
|
34
|
+
}
|
|
35
|
+
const TREE_SCALE_SNAP_MIN = 0.999999999999;
|
|
36
|
+
const TREE_SCALE_SNAP_MAX = 1.0000000000001;
|
|
37
|
+
/**
|
|
38
|
+
* Apply a tree of deltas to a box. We do this to calculate the effect of all the transforms
|
|
39
|
+
* in a tree upon our box before then calculating how to project it into our desired viewport-relative box
|
|
40
|
+
*
|
|
41
|
+
* This is the final nested loop within updateLayoutDelta for future refactoring
|
|
42
|
+
*/
|
|
43
|
+
function applyTreeDeltas(box, treeScale, treePath, isSharedTransition = false) {
|
|
44
|
+
const treeLength = treePath.length;
|
|
45
|
+
if (!treeLength)
|
|
46
|
+
return;
|
|
47
|
+
// Reset the treeScale
|
|
48
|
+
treeScale.x = treeScale.y = 1;
|
|
49
|
+
let node;
|
|
50
|
+
let delta;
|
|
51
|
+
for (let i = 0; i < treeLength; i++) {
|
|
52
|
+
node = treePath[i];
|
|
53
|
+
delta = node.projectionDelta;
|
|
54
|
+
/**
|
|
55
|
+
* TODO: Prefer to remove this, but currently we have motion components with
|
|
56
|
+
* display: contents in Framer.
|
|
57
|
+
*/
|
|
58
|
+
const { visualElement } = node.options;
|
|
59
|
+
if (visualElement &&
|
|
60
|
+
visualElement.props.style &&
|
|
61
|
+
visualElement.props.style.display === "contents") {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (isSharedTransition &&
|
|
65
|
+
node.options.layoutScroll &&
|
|
66
|
+
node.scroll &&
|
|
67
|
+
node !== node.root) {
|
|
68
|
+
transformBox(box, {
|
|
69
|
+
x: -node.scroll.offset.x,
|
|
70
|
+
y: -node.scroll.offset.y,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (delta) {
|
|
74
|
+
// Incoporate each ancestor's scale into a culmulative treeScale for this component
|
|
75
|
+
treeScale.x *= delta.x.scale;
|
|
76
|
+
treeScale.y *= delta.y.scale;
|
|
77
|
+
// Apply each ancestor's calculated delta into this component's recorded layout box
|
|
78
|
+
applyBoxDelta(box, delta);
|
|
79
|
+
}
|
|
80
|
+
if (isSharedTransition && hasTransform(node.latestValues)) {
|
|
81
|
+
transformBox(box, node.latestValues);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Snap tree scale back to 1 if it's within a non-perceivable threshold.
|
|
86
|
+
* This will help reduce useless scales getting rendered.
|
|
87
|
+
*/
|
|
88
|
+
if (treeScale.x < TREE_SCALE_SNAP_MAX &&
|
|
89
|
+
treeScale.x > TREE_SCALE_SNAP_MIN) {
|
|
90
|
+
treeScale.x = 1.0;
|
|
91
|
+
}
|
|
92
|
+
if (treeScale.y < TREE_SCALE_SNAP_MAX &&
|
|
93
|
+
treeScale.y > TREE_SCALE_SNAP_MIN) {
|
|
94
|
+
treeScale.y = 1.0;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function translateAxis(axis, distance) {
|
|
98
|
+
axis.min = axis.min + distance;
|
|
99
|
+
axis.max = axis.max + distance;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Apply a transform to an axis from the latest resolved motion values.
|
|
103
|
+
* This function basically acts as a bridge between a flat motion value map
|
|
104
|
+
* and applyAxisDelta
|
|
105
|
+
*/
|
|
106
|
+
function transformAxis(axis, axisTranslate, axisScale, boxScale, axisOrigin = 0.5) {
|
|
107
|
+
const originPoint = mixNumber(axis.min, axis.max, axisOrigin);
|
|
108
|
+
// Apply the axis delta to the final axis
|
|
109
|
+
applyAxisDelta(axis, axisTranslate, axisScale, originPoint, boxScale);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Apply a transform to a box from the latest resolved motion values.
|
|
113
|
+
*/
|
|
114
|
+
function transformBox(box, transform) {
|
|
115
|
+
transformAxis(box.x, transform.x, transform.scaleX, transform.scale, transform.originX);
|
|
116
|
+
transformAxis(box.y, transform.y, transform.scaleY, transform.scale, transform.originY);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export { applyAxisDelta, applyBoxDelta, applyPointDelta, applyTreeDeltas, scalePoint, transformAxis, transformBox, translateAxis };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { mixNumber } from '../../utils/mix/number.mjs';
|
|
2
|
+
|
|
3
|
+
const SCALE_PRECISION = 0.0001;
|
|
4
|
+
const SCALE_MIN = 1 - SCALE_PRECISION;
|
|
5
|
+
const SCALE_MAX = 1 + SCALE_PRECISION;
|
|
6
|
+
const TRANSLATE_PRECISION = 0.01;
|
|
7
|
+
const TRANSLATE_MIN = 0 - TRANSLATE_PRECISION;
|
|
8
|
+
const TRANSLATE_MAX = 0 + TRANSLATE_PRECISION;
|
|
9
|
+
function calcLength(axis) {
|
|
10
|
+
return axis.max - axis.min;
|
|
11
|
+
}
|
|
12
|
+
function isNear(value, target, maxDistance) {
|
|
13
|
+
return Math.abs(value - target) <= maxDistance;
|
|
14
|
+
}
|
|
15
|
+
function calcAxisDelta(delta, source, target, origin = 0.5) {
|
|
16
|
+
delta.origin = origin;
|
|
17
|
+
delta.originPoint = mixNumber(source.min, source.max, delta.origin);
|
|
18
|
+
delta.scale = calcLength(target) / calcLength(source);
|
|
19
|
+
delta.translate =
|
|
20
|
+
mixNumber(target.min, target.max, delta.origin) - delta.originPoint;
|
|
21
|
+
if ((delta.scale >= SCALE_MIN && delta.scale <= SCALE_MAX) ||
|
|
22
|
+
isNaN(delta.scale)) {
|
|
23
|
+
delta.scale = 1.0;
|
|
24
|
+
}
|
|
25
|
+
if ((delta.translate >= TRANSLATE_MIN &&
|
|
26
|
+
delta.translate <= TRANSLATE_MAX) ||
|
|
27
|
+
isNaN(delta.translate)) {
|
|
28
|
+
delta.translate = 0.0;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function calcBoxDelta(delta, source, target, origin) {
|
|
32
|
+
calcAxisDelta(delta.x, source.x, target.x, origin ? origin.originX : undefined);
|
|
33
|
+
calcAxisDelta(delta.y, source.y, target.y, origin ? origin.originY : undefined);
|
|
34
|
+
}
|
|
35
|
+
function calcRelativeAxis(target, relative, parent) {
|
|
36
|
+
target.min = parent.min + relative.min;
|
|
37
|
+
target.max = target.min + calcLength(relative);
|
|
38
|
+
}
|
|
39
|
+
function calcRelativeBox(target, relative, parent) {
|
|
40
|
+
calcRelativeAxis(target.x, relative.x, parent.x);
|
|
41
|
+
calcRelativeAxis(target.y, relative.y, parent.y);
|
|
42
|
+
}
|
|
43
|
+
function calcRelativeAxisPosition(target, layout, parent) {
|
|
44
|
+
target.min = layout.min - parent.min;
|
|
45
|
+
target.max = target.min + calcLength(layout);
|
|
46
|
+
}
|
|
47
|
+
function calcRelativePosition(target, layout, parent) {
|
|
48
|
+
calcRelativeAxisPosition(target.x, layout.x, parent.x);
|
|
49
|
+
calcRelativeAxisPosition(target.y, layout.y, parent.y);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export { calcAxisDelta, calcBoxDelta, calcLength, calcRelativeAxis, calcRelativeAxisPosition, calcRelativeBox, calcRelativePosition, isNear };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { mixNumber } from '../../utils/mix/number.mjs';
|
|
2
|
+
import { percent } from '../../value/types/numbers/units.mjs';
|
|
3
|
+
import { scalePoint } from './delta-apply.mjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Remove a delta from a point. This is essentially the steps of applyPointDelta in reverse
|
|
7
|
+
*/
|
|
8
|
+
function removePointDelta(point, translate, scale, originPoint, boxScale) {
|
|
9
|
+
point -= translate;
|
|
10
|
+
point = scalePoint(point, 1 / scale, originPoint);
|
|
11
|
+
if (boxScale !== undefined) {
|
|
12
|
+
point = scalePoint(point, 1 / boxScale, originPoint);
|
|
13
|
+
}
|
|
14
|
+
return point;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Remove a delta from an axis. This is essentially the steps of applyAxisDelta in reverse
|
|
18
|
+
*/
|
|
19
|
+
function removeAxisDelta(axis, translate = 0, scale = 1, origin = 0.5, boxScale, originAxis = axis, sourceAxis = axis) {
|
|
20
|
+
if (percent.test(translate)) {
|
|
21
|
+
translate = parseFloat(translate);
|
|
22
|
+
const relativeProgress = mixNumber(sourceAxis.min, sourceAxis.max, translate / 100);
|
|
23
|
+
translate = relativeProgress - sourceAxis.min;
|
|
24
|
+
}
|
|
25
|
+
if (typeof translate !== "number")
|
|
26
|
+
return;
|
|
27
|
+
let originPoint = mixNumber(originAxis.min, originAxis.max, origin);
|
|
28
|
+
if (axis === originAxis)
|
|
29
|
+
originPoint -= translate;
|
|
30
|
+
axis.min = removePointDelta(axis.min, translate, scale, originPoint, boxScale);
|
|
31
|
+
axis.max = removePointDelta(axis.max, translate, scale, originPoint, boxScale);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Remove a transforms from an axis. This is essentially the steps of applyAxisTransforms in reverse
|
|
35
|
+
* and acts as a bridge between motion values and removeAxisDelta
|
|
36
|
+
*/
|
|
37
|
+
function removeAxisTransforms(axis, transforms, [key, scaleKey, originKey], origin, sourceAxis) {
|
|
38
|
+
removeAxisDelta(axis, transforms[key], transforms[scaleKey], transforms[originKey], transforms.scale, origin, sourceAxis);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The names of the motion values we want to apply as translation, scale and origin.
|
|
42
|
+
*/
|
|
43
|
+
const xKeys = ["x", "scaleX", "originX"];
|
|
44
|
+
const yKeys = ["y", "scaleY", "originY"];
|
|
45
|
+
/**
|
|
46
|
+
* Remove a transforms from an box. This is essentially the steps of applyAxisBox in reverse
|
|
47
|
+
* and acts as a bridge between motion values and removeAxisDelta
|
|
48
|
+
*/
|
|
49
|
+
function removeBoxTransforms(box, transforms, originBox, sourceBox) {
|
|
50
|
+
removeAxisTransforms(box.x, transforms, xKeys, originBox ? originBox.x : undefined, sourceBox ? sourceBox.x : undefined);
|
|
51
|
+
removeAxisTransforms(box.y, transforms, yKeys, originBox ? originBox.y : undefined, sourceBox ? sourceBox.y : undefined);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export { removeAxisDelta, removeAxisTransforms, removeBoxTransforms, removePointDelta };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const createAxisDelta = () => ({
|
|
2
|
+
translate: 0,
|
|
3
|
+
scale: 1,
|
|
4
|
+
origin: 0,
|
|
5
|
+
originPoint: 0,
|
|
6
|
+
});
|
|
7
|
+
const createDelta = () => ({
|
|
8
|
+
x: createAxisDelta(),
|
|
9
|
+
y: createAxisDelta(),
|
|
10
|
+
});
|
|
11
|
+
const createAxis = () => ({ min: 0, max: 0 });
|
|
12
|
+
const createBox = () => ({
|
|
13
|
+
x: createAxis(),
|
|
14
|
+
y: createAxis(),
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
export { createAxis, createAxisDelta, createBox, createDelta };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { calcLength } from './delta-calc.mjs';
|
|
2
|
+
|
|
3
|
+
function isAxisDeltaZero(delta) {
|
|
4
|
+
return delta.translate === 0 && delta.scale === 1;
|
|
5
|
+
}
|
|
6
|
+
function isDeltaZero(delta) {
|
|
7
|
+
return isAxisDeltaZero(delta.x) && isAxisDeltaZero(delta.y);
|
|
8
|
+
}
|
|
9
|
+
function axisEquals(a, b) {
|
|
10
|
+
return a.min === b.min && a.max === b.max;
|
|
11
|
+
}
|
|
12
|
+
function boxEquals(a, b) {
|
|
13
|
+
return axisEquals(a.x, b.x) && axisEquals(a.y, b.y);
|
|
14
|
+
}
|
|
15
|
+
function axisEqualsRounded(a, b) {
|
|
16
|
+
return (Math.round(a.min) === Math.round(b.min) &&
|
|
17
|
+
Math.round(a.max) === Math.round(b.max));
|
|
18
|
+
}
|
|
19
|
+
function boxEqualsRounded(a, b) {
|
|
20
|
+
return axisEqualsRounded(a.x, b.x) && axisEqualsRounded(a.y, b.y);
|
|
21
|
+
}
|
|
22
|
+
function aspectRatio(box) {
|
|
23
|
+
return calcLength(box.x) / calcLength(box.y);
|
|
24
|
+
}
|
|
25
|
+
function axisDeltaEquals(a, b) {
|
|
26
|
+
return (a.translate === b.translate &&
|
|
27
|
+
a.scale === b.scale &&
|
|
28
|
+
a.originPoint === b.originPoint);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { aspectRatio, axisDeltaEquals, axisEquals, axisEqualsRounded, boxEquals, boxEqualsRounded, isDeltaZero };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createProjectionNode } from './create-projection-node.mjs';
|
|
2
|
+
import { addDomEvent } from '../../events/add-dom-event.mjs';
|
|
3
|
+
|
|
4
|
+
const DocumentProjectionNode = createProjectionNode({
|
|
5
|
+
attachResizeListener: (ref, notify) => addDomEvent(ref, "resize", notify),
|
|
6
|
+
measureScroll: () => ({
|
|
7
|
+
x: document.documentElement.scrollLeft || document.body.scrollLeft,
|
|
8
|
+
y: document.documentElement.scrollTop || document.body.scrollTop,
|
|
9
|
+
}),
|
|
10
|
+
checkIsScrollRoot: () => true,
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export { DocumentProjectionNode };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createProjectionNode } from './create-projection-node.mjs';
|
|
2
|
+
import { DocumentProjectionNode } from './DocumentProjectionNode.mjs';
|
|
3
|
+
|
|
4
|
+
const rootProjectionNode = {
|
|
5
|
+
current: undefined,
|
|
6
|
+
};
|
|
7
|
+
const HTMLProjectionNode = createProjectionNode({
|
|
8
|
+
measureScroll: (instance) => ({
|
|
9
|
+
x: instance.scrollLeft,
|
|
10
|
+
y: instance.scrollTop,
|
|
11
|
+
}),
|
|
12
|
+
defaultParent: () => {
|
|
13
|
+
if (!rootProjectionNode.current) {
|
|
14
|
+
const documentNode = new DocumentProjectionNode({});
|
|
15
|
+
documentNode.mount(window);
|
|
16
|
+
documentNode.setOptions({ layoutScroll: true });
|
|
17
|
+
rootProjectionNode.current = documentNode;
|
|
18
|
+
}
|
|
19
|
+
return rootProjectionNode.current;
|
|
20
|
+
},
|
|
21
|
+
resetTransform: (instance, value) => {
|
|
22
|
+
instance.style.transform = value !== undefined ? value : "none";
|
|
23
|
+
},
|
|
24
|
+
checkIsScrollRoot: (instance) => Boolean(window.getComputedStyle(instance).position === "fixed"),
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export { HTMLProjectionNode, rootProjectionNode };
|